|
| 1 | +set(SKIA_VERSION "m132-a00c390e98-1" CACHE STRING "Skia version") |
| 2 | +set(SKIA_OS "linux") |
| 3 | +set(SKIA_ARCH "x64") |
| 4 | +set(SKIA_VARIANT "Debug") |
| 5 | + |
| 6 | +if (CMAKE_BUILD_TYPE STREQUAL "Debug") |
| 7 | + set(SKIA_VARIANT "Debug") |
| 8 | +endif () |
| 9 | + |
| 10 | +if (CMAKE_BUILD_TYPE STREQUAL "Release") |
| 11 | + set(SKIA_VARIANT "Release") |
| 12 | +endif () |
| 13 | + |
| 14 | +if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") |
| 15 | + set(SKIA_VARIANT "Debug") |
| 16 | +endif () |
| 17 | + |
| 18 | +if (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") |
| 19 | + set(SKIA_VARIANT "Release") |
| 20 | +endif () |
| 21 | + |
| 22 | +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") |
| 23 | + set(SKIA_OS "windows") |
| 24 | +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| 25 | + set(SKIA_OS "linux") |
| 26 | +elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
| 27 | + set(SKIA_OS "macos") |
| 28 | +endif () |
| 29 | + |
| 30 | +string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" PROCESSOR) |
| 31 | + |
| 32 | +if (PROCESSOR MATCHES "arm" OR PROCESSOR MATCHES "aarch64") |
| 33 | + set(SKIA_ARCH "arm64") |
| 34 | +elseif (PROCESSOR MATCHES "x86_64" OR PROCESSOR MATCHES "amd64") |
| 35 | + set(SKIA_ARCH "x64") |
| 36 | +endif () |
| 37 | + |
| 38 | +file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/download") |
| 39 | + |
| 40 | +file(DOWNLOAD "https://api.github.com/repos/JetBrains/skia-pack/releases/tags/${SKIA_VERSION}" "${CMAKE_BINARY_DIR}/download/skia_assets.json" STATUS GH_RELEASE_STATUS SHOW_PROGRESS) |
| 41 | +list(GET GH_RELEASE_STATUS 0 GH_RELEASE_STATUS_CODE) |
| 42 | +if (GH_RELEASE_STATUS_CODE) |
| 43 | + message(FATAL_ERROR "Failed to download GitHub release: ${GH_RELEASE_STATUS_CODE}") |
| 44 | + return() |
| 45 | +endif () |
| 46 | + |
| 47 | +file(READ "${CMAKE_BINARY_DIR}/download/skia_assets.json" GH_RELEASE_JSON) |
| 48 | + |
| 49 | +string(JSON ASSETS_COUNT LENGTH ${GH_RELEASE_JSON} "assets") |
| 50 | +math(EXPR ASSETS_COUNT "${ASSETS_COUNT} - 1") |
| 51 | + |
| 52 | +foreach (assetIdx RANGE 0 ${ASSETS_COUNT} 1) |
| 53 | + string(JSON assetName GET ${GH_RELEASE_JSON} "assets" "${assetIdx}" "name") |
| 54 | + if (assetName MATCHES "Skia-${SKIA_VERSION}-${SKIA_OS}-${SKIA_VARIANT}-${SKIA_ARCH}.zip") |
| 55 | + message(STATUS "Found asset ${assetIdx} of ${ASSETS_COUNT}: ${assetName}") |
| 56 | + set(ASSET_IDX ${assetIdx}) |
| 57 | + set(ASSET_NAME ${assetName}) |
| 58 | + string(JSON ASSET_URL GET ${GH_RELEASE_JSON} "assets" "${assetIdx}" "browser_download_url") |
| 59 | + string(JSON ASSET_HASH GET ${GH_RELEASE_JSON} "assets" "${assetIdx}" "digest") |
| 60 | + break() |
| 61 | + endif () |
| 62 | +endforeach () |
| 63 | + |
| 64 | +message(STATUS "Downloading Skia from ${ASSET_URL} with hash ${ASSET_HASH}") |
| 65 | + |
| 66 | +set(SKIA_URL "${ASSET_URL}") |
| 67 | +string(REPLACE ":" "=" ASSET_HASH "${ASSET_HASH}") |
| 68 | + |
| 69 | +if (NOT ASSET_HASH) |
| 70 | + message(WARNING "Failed to find Skia hash, just checking for the files existence to determine if we need to download Skia again.") |
| 71 | + if (NOT EXISTS "${CMAKE_BINARY_DIR}/download/${ASSET_NAME}") |
| 72 | + file(DOWNLOAD ${SKIA_URL} "${CMAKE_BINARY_DIR}/download/${ASSET_NAME}" STATUS SKIA_DOWNLOAD_STATUS SHOW_PROGRESS) |
| 73 | + endif () |
| 74 | +else () |
| 75 | + file(DOWNLOAD ${SKIA_URL} "${CMAKE_BINARY_DIR}/download/${ASSET_NAME}" STATUS SKIA_DOWNLOAD_STATUS EXPECTED_HASH "${ASSET_HASH}" SHOW_PROGRESS) |
| 76 | +endif () |
| 77 | + |
| 78 | +list(GET SKIA_DOWNLOAD_STATUS 0 SKIA_DOWNLOAD_STATUS_CODE) |
| 79 | +if (SKIA_DOWNLOAD_STATUS_CODE) |
| 80 | + message(FATAL_ERROR "Failed to download Skia: ${SKIA_DOWNLOAD_STATUS_CODE}") |
| 81 | + return() |
| 82 | +endif () |
| 83 | + |
| 84 | +file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/third_party/skia") |
| 85 | +message(STATUS "Unpacking Skia to ${CMAKE_BINARY_DIR}/third_party/skia") |
| 86 | +file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/third_party/skia") |
| 87 | +file(ARCHIVE_EXTRACT INPUT "${CMAKE_BINARY_DIR}/download/${ASSET_NAME}" DESTINATION "${CMAKE_BINARY_DIR}/third_party/skia") |
| 88 | + |
| 89 | +add_library(Skia INTERFACE) |
| 90 | +target_include_directories(Skia INTERFACE |
| 91 | + "${CMAKE_BINARY_DIR}/third_party/skia/include" |
| 92 | + "${CMAKE_BINARY_DIR}/third_party/skia/modules/svg/include" |
| 93 | + "${CMAKE_BINARY_DIR}/third_party/skia/src" |
| 94 | + "${CMAKE_BINARY_DIR}/third_party/skia" |
| 95 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/angle2/include" |
| 96 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/freetype/include" |
| 97 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/harfbuzz/src" |
| 98 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/icu/source/common" |
| 99 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/libpng" |
| 100 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/libwebp/src" |
| 101 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/swiftshader/include" |
| 102 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/externals/zlib" |
| 103 | + "${CMAKE_BINARY_DIR}/third_party/skia/third_party/icu" |
| 104 | +) |
| 105 | +target_link_directories(Skia INTERFACE "${CMAKE_BINARY_DIR}/third_party/skia/out/${SKIA_VARIANT}-${SKIA_OS}-${SKIA_ARCH}") |
| 106 | +target_link_libraries(Skia INTERFACE |
| 107 | + bentleyottmann.lib libwebp.lib skottie.lib skshaper.lib svg.lib |
| 108 | + d3d12allocator.lib icu.lib libwebp_sse41.lib skparagraph.lib skunicode_core.lib wuffs.lib |
| 109 | + expat.lib libjpeg.lib skcms.lib skresources.lib skunicode_icu.lib zlib.lib |
| 110 | + harfbuzz.lib libpng.lib skia.lib sksg.lib spirv_cross.lib |
| 111 | +) |
0 commit comments