mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-19 00:07:55 +08:00
873263a7c0
* [skia] Fix vulkan * Use vulkan-memory-allocator
343 lines
12 KiB
CMake
343 lines
12 KiB
CMake
include("${CMAKE_CURRENT_LIST_DIR}/skia-functions.cmake")
|
|
|
|
vcpkg_from_git(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
URL https://github.com/google/skia
|
|
REF f86f242886692a18f5adc1cf9cbd6740cd0870fd
|
|
PATCHES
|
|
disable-msvc-env-setup.patch
|
|
uwp.patch
|
|
core-opengl32.patch
|
|
)
|
|
|
|
# these following aren't available in vcpkg
|
|
# to update, visit the DEPS file in Skia's root directory
|
|
declare_external_from_git(abseil-cpp
|
|
URL "https://skia.googlesource.com/external/github.com/abseil/abseil-cpp.git"
|
|
REF "c5a424a2a21005660b182516eb7a079cd8021699"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(d3d12allocator
|
|
URL "https://skia.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/D3D12MemoryAllocator.git"
|
|
REF "169895d529dfce00390a20e69c2f516066fe7a3b"
|
|
LICENSE_FILE LICENSE.txt
|
|
)
|
|
declare_external_from_git(dawn
|
|
URL "https://dawn.googlesource.com/dawn.git"
|
|
REF "30fa0d8d2ced43e44baa522dd4bd4684b14a3099"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(dng_sdk
|
|
URL "https://android.googlesource.com/platform/external/dng_sdk.git"
|
|
REF "c8d0c9b1d16bfda56f15165d39e0ffa360a11123"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(jinja2
|
|
URL "https://chromium.googlesource.com/chromium/src/third_party/jinja2"
|
|
REF "ee69aa00ee8536f61db6a451f3858745cf587de6"
|
|
LICENSE_FILE LICENSE.rst
|
|
)
|
|
declare_external_from_git(libgifcodec
|
|
URL "https://skia.googlesource.com/libgifcodec"
|
|
REF "fd59fa92a0c86788dcdd84d091e1ce81eda06a77"
|
|
LICENSE_FILE LICENSE.md
|
|
)
|
|
declare_external_from_git(markupsafe
|
|
URL "https://chromium.googlesource.com/chromium/src/third_party/markupsafe"
|
|
REF "0944e71f4b2cb9a871bcbe353f95e889b64a611a"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(piex
|
|
URL "https://android.googlesource.com/platform/external/piex.git"
|
|
REF "bb217acdca1cc0c16b704669dd6f91a1b509c406"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(sfntly
|
|
URL "https://github.com/googlefonts/sfntly.git"
|
|
REF "b55ff303ea2f9e26702b514cf6a3196a2e3e2974"
|
|
LICENSE_FILE README.md
|
|
)
|
|
declare_external_from_git(spirv-cross
|
|
URL "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross"
|
|
REF "61c603f3baa5270e04bcfb6acf83c654e3c57679"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(spirv-headers
|
|
URL "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers.git"
|
|
REF "0bcc624926a25a2a273d07877fd25a6ff5ba1cfb"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(spirv-tools
|
|
URL "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git"
|
|
REF "0073a1fa36f7c52ad3d58059cb5d5de8efa825ad"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(tint
|
|
URL "https://dawn.googlesource.com/tint"
|
|
REF "200492e32b94f042d9942154fb4fa7f93bb8289a"
|
|
LICENSE_FILE LICENSE
|
|
)
|
|
declare_external_from_git(vulkan-headers
|
|
URL "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers"
|
|
REF "c896e2f920273bfee852da9cca2a356bc1c2031e"
|
|
LICENSE_FILE LICENSE.txt
|
|
)
|
|
declare_external_from_git(vulkan-tools
|
|
URL "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools"
|
|
REF "d55c7aaf041af331bee8c22fb448a6ff4c797f73"
|
|
LICENSE_FILE LICENSE.txt
|
|
)
|
|
|
|
declare_external_from_pkgconfig(expat)
|
|
declare_external_from_pkgconfig(fontconfig PATH "third_party")
|
|
declare_external_from_pkgconfig(freetype2)
|
|
declare_external_from_pkgconfig(harfbuzz MODULES harfbuzz harfbuzz-subset)
|
|
declare_external_from_pkgconfig(icu MODULES icu-uc DEFINES "U_USING_ICU_NAMESPACE=0")
|
|
declare_external_from_pkgconfig(libjpeg PATH "third_party/libjpeg-turbo" MODULES libturbojpeg libjpeg)
|
|
declare_external_from_pkgconfig(libpng)
|
|
declare_external_from_pkgconfig(libwebp MODULES libwebpdecoder libwebpdemux libwebpmux libwebp)
|
|
declare_external_from_pkgconfig(zlib)
|
|
|
|
set(known_cpus x86 x64 arm arm64 wasm)
|
|
if(NOT VCPKG_TARGET_ARCHITECTURE IN_LIST known_cpus)
|
|
message(WARNING "Unknown target cpu '${VCPKG_TARGET_ARCHITECTURE}'.")
|
|
endif()
|
|
|
|
set(OPTIONS "target_cpu=\"${VCPKG_TARGET_ARCHITECTURE}\"")
|
|
set(OPTIONS_DBG "is_debug=true")
|
|
set(OPTIONS_REL "is_official_build=true")
|
|
vcpkg_list(SET SKIA_TARGETS ":skia")
|
|
|
|
if(VCPKG_TARGET_IS_ANDROID)
|
|
string(APPEND OPTIONS " target_os=\"android\"")
|
|
elseif(VCPKG_TARGET_IS_IOS)
|
|
string(APPEND OPTIONS " target_os=\"ios\"")
|
|
elseif(VCPKG_TARGET_IS_EMSCRIPTEN)
|
|
string(APPEND OPTIONS " target_os=\"wasm\"")
|
|
elseif(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
|
|
string(APPEND OPTIONS " target_os=\"win\"")
|
|
if(VCPKG_TARGET_IS_UWP)
|
|
string(APPEND OPTIONS " skia_enable_winuwp=true skia_enable_fontmgr_win=false skia_use_xps=false")
|
|
endif()
|
|
endif()
|
|
|
|
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
|
string(APPEND OPTIONS " is_component_build=true")
|
|
else()
|
|
string(APPEND OPTIONS " is_component_build=false")
|
|
endif()
|
|
|
|
set(required_externals
|
|
dng_sdk
|
|
expat
|
|
libgifcodec
|
|
libjpeg
|
|
libpng
|
|
libwebp
|
|
piex
|
|
sfntly
|
|
zlib
|
|
)
|
|
|
|
if("fontconfig" IN_LIST FEATURES)
|
|
list(APPEND required_externals fontconfig)
|
|
string(APPEND OPTIONS " skia_use_fontconfig=true")
|
|
else()
|
|
string(APPEND OPTIONS " skia_use_fontconfig=false")
|
|
endif()
|
|
|
|
if("freetype" IN_LIST FEATURES)
|
|
list(APPEND required_externals freetype2)
|
|
string(APPEND OPTIONS " skia_use_freetype=true")
|
|
else()
|
|
string(APPEND OPTIONS " skia_use_freetype=false")
|
|
endif()
|
|
|
|
if("harfbuzz" IN_LIST FEATURES)
|
|
list(APPEND required_externals harfbuzz)
|
|
string(APPEND OPTIONS " skia_use_harfbuzz=true")
|
|
else()
|
|
string(APPEND OPTIONS " skia_use_harfbuzz=false")
|
|
endif()
|
|
|
|
if("icu" IN_LIST FEATURES)
|
|
list(APPEND required_externals icu)
|
|
string(APPEND OPTIONS " skia_use_icu=true")
|
|
else()
|
|
string(APPEND OPTIONS " skia_use_icu=false")
|
|
endif()
|
|
|
|
if("gl" IN_LIST FEATURES)
|
|
string(APPEND OPTIONS " skia_use_gl=true")
|
|
else()
|
|
string(APPEND OPTIONS " skia_use_gl=false")
|
|
endif()
|
|
|
|
if("metal" IN_LIST FEATURES)
|
|
string(APPEND OPTIONS " skia_use_metal=true")
|
|
endif()
|
|
|
|
if("vulkan" IN_LIST FEATURES)
|
|
string(APPEND OPTIONS " skia_use_vulkan=true")
|
|
file(COPY "${CURRENT_INSTALLED_DIR}/include/vk_mem_alloc.h" DESTINATION "${SOURCE_PATH}/third_party/vulkanmemoryallocator")
|
|
endif()
|
|
|
|
if("direct3d" IN_LIST FEATURES)
|
|
list(APPEND required_externals
|
|
spirv-cross
|
|
spirv-headers
|
|
spirv-tools
|
|
d3d12allocator
|
|
)
|
|
string(APPEND OPTIONS " skia_use_direct3d=true")
|
|
endif()
|
|
|
|
if("dawn" IN_LIST FEATURES)
|
|
if (VCPKG_TARGET_IS_LINUX)
|
|
message(WARNING
|
|
[[
|
|
dawn support requires the following libraries from the system package manager:
|
|
|
|
libx11-xcb-dev mesa-common-dev
|
|
|
|
They can be installed on Debian based systems via
|
|
|
|
apt-get install libx11-xcb-dev mesa-common-dev
|
|
]]
|
|
)
|
|
endif()
|
|
|
|
list(APPEND required_externals
|
|
spirv-cross
|
|
spirv-headers
|
|
spirv-tools
|
|
tint
|
|
jinja2
|
|
markupsafe
|
|
## Remove
|
|
vulkan-headers
|
|
vulkan-tools
|
|
abseil-cpp
|
|
## REMOVE ^
|
|
dawn
|
|
)
|
|
string(APPEND OPTIONS " skia_use_dawn=true")
|
|
string(REPLACE "dynamic" "shared" DAWN_LINKAGE "${VCPKG_LIBRARY_LINKAGE}")
|
|
vcpkg_list(APPEND SKIA_TARGETS
|
|
"third_party/externals/dawn/src/dawn:proc_${DAWN_LINKAGE}"
|
|
"third_party/externals/dawn/src/dawn/native:${DAWN_LINKAGE}"
|
|
"third_party/externals/dawn/src/dawn/platform:${DAWN_LINKAGE}"
|
|
)
|
|
endif()
|
|
|
|
get_externals(${required_externals})
|
|
if(EXISTS "${SOURCE_PATH}/third_party/externals/dawn/generator/dawn_version_generator.py")
|
|
vcpkg_find_acquire_program(GIT)
|
|
vcpkg_replace_string("${SOURCE_PATH}/third_party/externals/dawn/generator/dawn_version_generator.py"
|
|
"get_git(),"
|
|
"\"${GIT}\","
|
|
)
|
|
endif()
|
|
|
|
vcpkg_find_acquire_program(PYTHON3)
|
|
vcpkg_replace_string("${SOURCE_PATH}/.gn" "script_executable = \"python3\"" "script_executable = \"${PYTHON3}\"")
|
|
vcpkg_replace_string("${SOURCE_PATH}/gn/toolchain/BUILD.gn" "python3 " "\\\"${PYTHON3}\\\" ")
|
|
|
|
vcpkg_cmake_get_vars(cmake_vars_file)
|
|
include("${cmake_vars_file}")
|
|
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
|
|
string(REGEX REPLACE "[\\]\$" "" WIN_VC "$ENV{VCINSTALLDIR}")
|
|
string(APPEND OPTIONS " win_vc=\"${WIN_VC}\"")
|
|
else()
|
|
string(APPEND OPTIONS " \
|
|
cc=\"${VCPKG_DETECTED_CMAKE_C_COMPILER}\" \
|
|
cxx=\"${VCPKG_DETECTED_CMAKE_CXX_COMPILER}\"")
|
|
endif()
|
|
|
|
string_to_gn_list(SKIA_C_FLAGS_DBG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
|
|
string_to_gn_list(SKIA_CXX_FLAGS_DBG "${VCPKG_COMBINED_CXX_FLAGS_DEBUG}")
|
|
string(APPEND OPTIONS_DBG " \
|
|
extra_cflags_c=${SKIA_C_FLAGS_DBG} \
|
|
extra_cflags_cc=${SKIA_CXX_FLAGS_DBG}")
|
|
string_to_gn_list(SKIA_C_FLAGS_REL "${VCPKG_COMBINED_C_FLAGS_RELEASE}")
|
|
string_to_gn_list(SKIA_CXX_FLAGS_REL "${VCPKG_COMBINED_CXX_FLAGS_RELEASE}")
|
|
string(APPEND OPTIONS_REL " \
|
|
extra_cflags_c=${SKIA_C_FLAGS_REL} \
|
|
extra_cflags_cc=${SKIA_CXX_FLAGS_REL}")
|
|
if(VCPKG_TARGET_IS_UWP)
|
|
string_to_gn_list(SKIA_LD_FLAGS "-APPCONTAINER WindowsApp.lib")
|
|
string(APPEND OPTIONS " extra_ldflags=${SKIA_LD_FLAGS}")
|
|
endif()
|
|
|
|
vcpkg_gn_configure(
|
|
SOURCE_PATH "${SOURCE_PATH}"
|
|
OPTIONS "${OPTIONS} skia_use_lua=false skia_enable_tools=false skia_enable_spirv_validation=false"
|
|
OPTIONS_DEBUG "${OPTIONS_DBG}"
|
|
OPTIONS_RELEASE "${OPTIONS_REL}"
|
|
)
|
|
|
|
# desc json output is dual-use: logging and further processing
|
|
vcpkg_find_acquire_program(GN)
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${GN}" desc --format=json --all --testonly=false "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" "*"
|
|
WORKING_DIRECTORY "${SOURCE_PATH}"
|
|
LOGNAME "desc-${TARGET_TRIPLET}-rel"
|
|
OUTPUT_VARIABLE desc_release
|
|
)
|
|
file(READ "${CURRENT_BUILDTREES_DIR}/desc-${TARGET_TRIPLET}-rel-out.log" desc_release)
|
|
if(NOT VCPKG_BUILD_TYPE)
|
|
vcpkg_execute_required_process(
|
|
COMMAND "${GN}" desc --format=json --all --testonly=false "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" "*"
|
|
WORKING_DIRECTORY "${SOURCE_PATH}"
|
|
LOGNAME "desc-${TARGET_TRIPLET}-dbg"
|
|
OUTPUT_VARIABLE desc_debug
|
|
)
|
|
file(READ "${CURRENT_BUILDTREES_DIR}/desc-${TARGET_TRIPLET}-dbg-out.log" desc_debug)
|
|
endif()
|
|
|
|
vcpkg_gn_install(
|
|
SOURCE_PATH "${SOURCE_PATH}"
|
|
TARGETS ${SKIA_TARGETS}
|
|
)
|
|
|
|
# Use skia repository layout in ${CURRENT_PACKAGES_DIR}/include/skia
|
|
file(COPY "${SOURCE_PATH}/include"
|
|
"${SOURCE_PATH}/modules"
|
|
"${SOURCE_PATH}/src"
|
|
DESTINATION "${CURRENT_PACKAGES_DIR}/include/skia"
|
|
FILES_MATCHING PATTERN "*.h"
|
|
)
|
|
auto_clean("${CURRENT_PACKAGES_DIR}/include/skia")
|
|
set(skia_dll_static "0")
|
|
set(skia_dll_dynamic "1")
|
|
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/skia/include/core/SkTypes.h" "defined(SKIA_DLL)" "${skia_dll_${VCPKG_LIBRARY_LINKAGE}}")
|
|
|
|
# vcpkg legacy layout omits "include/" component. Just duplicate.
|
|
file(COPY "${CURRENT_PACKAGES_DIR}/include/skia/include/" DESTINATION "${CURRENT_PACKAGES_DIR}/include/skia")
|
|
|
|
get_definitions(SKIA_DEFINITIONS_REL "${desc_release}" "//:skia")
|
|
get_link_libs(SKIA_DEP_REL "${desc_release}" "//:skia")
|
|
if(NOT VCPKG_BUILD_TYPE)
|
|
get_definitions(SKIA_DEFINITIONS_DBG "${desc_debug}" "//:skia")
|
|
get_link_libs(SKIA_DEP_DBG "${desc_debug}" "//:skia")
|
|
endif()
|
|
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share/unofficial-skia")
|
|
configure_file("${CMAKE_CURRENT_LIST_DIR}/unofficial-skia-config.cmake" "${CURRENT_PACKAGES_DIR}/share/unofficial-skia/unofficial-skia-config.cmake" @ONLY)
|
|
# vcpkg legacy
|
|
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/skiaConfig.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/skia")
|
|
|
|
file(INSTALL
|
|
"${CMAKE_CURRENT_LIST_DIR}/example/CMakeLists.txt"
|
|
"${SOURCE_PATH}/tools/convert-to-nia.cpp"
|
|
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/example"
|
|
)
|
|
file(APPEND "${CURRENT_PACKAGES_DIR}/share/${PORT}/example/convert-to-nia.cpp" [[
|
|
// Test for https://github.com/microsoft/vcpkg/issues/27219
|
|
#include "include/core/SkColorSpace.h"
|
|
]])
|
|
|
|
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
|
|
|
file(GLOB third_party_licenses "${SOURCE_PATH}/third_party_licenses/*")
|
|
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE" ${third_party_licenses})
|