diff options
| author | Martin Vejdarski <extrulm@gmail.com> | 2020-05-12 04:58:12 +0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-11 14:58:12 -0700 |
| commit | 6d5a1a897eca21b956d7b1de71af9a1f25c08e33 (patch) | |
| tree | 1e0a84af5b291e56e0d50c85567833581ecba609 /scripts | |
| parent | 06c647e11a21dd4c193e63968e1d3f9024e05996 (diff) | |
| download | vcpkg-6d5a1a897eca21b956d7b1de71af9a1f25c08e33.tar.gz vcpkg-6d5a1a897eca21b956d7b1de71af9a1f25c08e33.zip | |
[gn, crashpad] Add GN build support and crashpad port (#10505)
* [vcpkg_find_acquire_program] Add gn
* [GN] Add build system support
* [crashpad] Add new port
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/ci.baseline.txt | 5 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_build_gn.cmake | 18 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_build_ninja.cmake | 37 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_common_functions.cmake | 4 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_configure_gn.cmake | 58 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_find_acquire_program.cmake | 24 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_install_gn.cmake | 91 |
7 files changed, 237 insertions, 0 deletions
diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index c2f1680ca..77f023e26 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -294,6 +294,11 @@ cppunit:x64-osx=fail cppunit:x64-uwp=fail
cpr:x64-linux=ignore
cpuinfo:arm64-windows=ignore
+crashpad:arm64-windows=fail
+crashpad:arm-uwp=fail
+crashpad:x64-linux=fail
+crashpad:x64-uwp=fail
+crashpad:x86-windows=fail
crfsuite:arm-uwp=fail
crfsuite:x64-uwp=fail
crossguid:x64-osx=fail
diff --git a/scripts/cmake/vcpkg_build_gn.cmake b/scripts/cmake/vcpkg_build_gn.cmake new file mode 100644 index 000000000..cf0ea89cf --- /dev/null +++ b/scripts/cmake/vcpkg_build_gn.cmake @@ -0,0 +1,18 @@ +## # vcpkg_build_gn +## +## Build a GN project +## +## ## Usage: +## ```cmake +## vcpkg_build_gn( +## [TARGETS <target>...] +## ) +## ``` +## +## ## Parameters: +## ### TARGETS +## Only build the specified targets. + +function(vcpkg_build_gn) + vcpkg_build_ninja(${ARGN}) +endfunction()
\ No newline at end of file diff --git a/scripts/cmake/vcpkg_build_ninja.cmake b/scripts/cmake/vcpkg_build_ninja.cmake new file mode 100644 index 000000000..3eb05c98b --- /dev/null +++ b/scripts/cmake/vcpkg_build_ninja.cmake @@ -0,0 +1,37 @@ +## # vcpkg_build_ninja +## +## Build a ninja project +## +## ## Usage: +## ```cmake +## vcpkg_build_ninja( +## [TARGETS <target>...] +## ) +## ``` +## +## ## Parameters: +## ### TARGETS +## Only build the specified targets. + +function(vcpkg_build_ninja) + cmake_parse_arguments(_vbn "" "" "TARGETS" ${ARGN}) + + vcpkg_find_acquire_program(NINJA) + + function(build CONFIG) + message(STATUS "Building (${CONFIG})...") + vcpkg_execute_build_process( + COMMAND "${NINJA}" -C "${CURRENT_BUILDTREES_DIR}/${CONFIG}" ${_vbn_TARGETS} + WORKING_DIRECTORY "${SOURCE_PATH}" + LOGNAME build-${CONFIG} + ) + endfunction() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + build(${TARGET_TRIPLET}-dbg) + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + build(${TARGET_TRIPLET}-rel) + endif() +endfunction()
\ No newline at end of file diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake index 0475a5e31..7724a3f7f 100644 --- a/scripts/cmake/vcpkg_common_functions.cmake +++ b/scripts/cmake/vcpkg_common_functions.cmake @@ -19,17 +19,21 @@ include(vcpkg_from_github) include(vcpkg_from_gitlab) include(vcpkg_from_bitbucket) include(vcpkg_build_cmake) +include(vcpkg_build_gn) include(vcpkg_build_msbuild) include(vcpkg_build_qmake) include(vcpkg_build_make) +include(vcpkg_build_ninja) include(vcpkg_build_nmake) include(vcpkg_install_cmake) +include(vcpkg_install_gn) include(vcpkg_install_meson) include(vcpkg_install_msbuild) include(vcpkg_install_make) include(vcpkg_install_nmake) include(vcpkg_install_qmake) include(vcpkg_configure_cmake) +include(vcpkg_configure_gn) include(vcpkg_configure_meson) include(vcpkg_configure_qmake) include(vcpkg_configure_make) diff --git a/scripts/cmake/vcpkg_configure_gn.cmake b/scripts/cmake/vcpkg_configure_gn.cmake new file mode 100644 index 000000000..3ae14b8be --- /dev/null +++ b/scripts/cmake/vcpkg_configure_gn.cmake @@ -0,0 +1,58 @@ +## # vcpkg_configure_gn +## +## Generate Ninja (GN) targets +## +## ## Usage: +## ```cmake +## vcpkg_configure_gn( +## SOURCE_PATH <SOURCE_PATH> +## [OPTIONS <OPTIONS>] +## [OPTIONS_DEBUG <OPTIONS_DEBUG>] +## [OPTIONS_RELEASE <OPTIONS_RELEASE>] +## ) +## ``` +## +## ## Parameters: +## ### SOURCE_PATH (required) +## The path to the GN project. +## +## ### OPTIONS +## Options to be passed to both the debug and release targets. +## Note: Must be provided as a space-separated string. +## +## ### OPTIONS_DEBUG (space-separated string) +## Options to be passed to the debug target. +## +## ### OPTIONS_RELEASE (space-separated string) +## Options to be passed to the release target. + +function(vcpkg_configure_gn) + cmake_parse_arguments(_vcg "" "SOURCE_PATH;OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" "" ${ARGN}) + + if(NOT DEFINED _vcg_SOURCE_PATH) + message(FATAL_ERROR "SOURCE_PATH must be specified.") + endif() + + vcpkg_find_acquire_program(PYTHON2) + get_filename_component(PYTHON2_DIR "${PYTHON2}" DIRECTORY) + vcpkg_add_to_path(PREPEND "${PYTHON2_DIR}") + + vcpkg_find_acquire_program(GN) + + function(generate CONFIG ARGS) + message(STATUS "Generating build (${CONFIG})...") + vcpkg_execute_required_process( + COMMAND "${GN}" gen "${CURRENT_BUILDTREES_DIR}/${CONFIG}" "${ARGS}" + WORKING_DIRECTORY "${SOURCE_PATH}" + LOGNAME generate-${CONFIG} + ) + endfunction() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + generate(${TARGET_TRIPLET}-dbg "--args=${_vcg_OPTIONS} ${_vcg_OPTIONS_DEBUG}") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + generate(${TARGET_TRIPLET}-rel "--args=${_vcg_OPTIONS} ${_vcg_OPTIONS_RELEASE}") + endif() +endfunction()
\ No newline at end of file diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake index 5aa1cf440..cd5277be9 100644 --- a/scripts/cmake/vcpkg_find_acquire_program.cmake +++ b/scripts/cmake/vcpkg_find_acquire_program.cmake @@ -25,6 +25,7 @@ ## - PYTHON2 ## - PYTHON3 ## - GIT +## - GN ## - GO ## - JOM ## - MESON @@ -101,6 +102,29 @@ function(vcpkg_find_acquire_program VAR) set(BREW_PACKAGE_NAME "git") set(APT_PACKAGE_NAME "git") endif() + elseif(VAR MATCHES "GN") + set(PROGNAME gn) + set(_vfa_RENAME "gn") + set(CIPD_DOWNLOAD_GN "https://chrome-infra-packages.appspot.com/dl/gn/gn") + if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(_vfa_SUPPORTED ON) + set(GN_VERSION "xus7xtaPhpv5vCmKFOnsBVoB-PKmhZvRsSTjbQAuF0MC") + set(GN_PLATFORM "linux-amd64") + set(HASH "871e75d7f3597b74fb99e36bb41fe5a9f8ce8a4d9f167f4729fc6e444807a59f35ec8aca70c2274a99c79d70a1108272be1ad991678a8ceb39e30f77abb13135") + elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + set(_vfa_SUPPORTED ON) + set(GN_VERSION "qhxILDNcJ2H44HfHmfiU-XIY3E_SIXvFqLd2wvbIgOoC") + set(GN_PLATFORM "mac-amd64") + set(HASH "03ee64cb15bae7fceb412900d470601090bce147cfd45eb9b46683ac1a5dca848465a5d74c55a47df7f0e334d708151249a6d37bb021de74dd48b97ed4a07937") + else() + set(GN_VERSION "qUkAhy9J0P7c5racy-9wB6AHNK_btS18im8S06_ehhwC") + set(GN_PLATFORM "windows-amd64") + set(HASH "263e02bd79eee0cb7b664831b7898565c5656a046328d8f187ef7ae2a4d766991d477b190c9b425fcc960ab76f381cd3e396afb85cba7408ca9e74eb32c175db") + endif() + set(SUBDIR "${GN_VERSION}") + set(PATHS "${DOWNLOADS}/tools/gn/${SUBDIR}") + set(URL "${CIPD_DOWNLOAD_GN}/${GN_PLATFORM}/+/${GN_VERSION}") + set(ARCHIVE "gn-${GN_PLATFORM}.zip") elseif(VAR MATCHES "GO") set(PROGNAME go) set(PATHS ${DOWNLOADS}/tools/go/go/bin) diff --git a/scripts/cmake/vcpkg_install_gn.cmake b/scripts/cmake/vcpkg_install_gn.cmake new file mode 100644 index 000000000..33c2b7301 --- /dev/null +++ b/scripts/cmake/vcpkg_install_gn.cmake @@ -0,0 +1,91 @@ +## # vcpkg_install_gn +## +## Installs a GN project +## +## ## Usage: +## ```cmake +## vcpkg_install_gn( +## SOURCE_PATH <SOURCE_PATH> +## [TARGETS <target>...] +## ) +## ``` +## +## ## Parameters: +## ### SOURCE_PATH +## The path to the source directory +## +## ### TARGETS +## Only install the specified targets. +## +## Note: includes must be handled separately + +function(vcpkg_install_gn) + cmake_parse_arguments(_vig "" "SOURCE_PATH" "TARGETS" ${ARGN}) + + if(NOT DEFINED _vig_SOURCE_PATH) + message(FATAL_ERROR "SOURCE_PATH must be specified.") + endif() + + vcpkg_build_ninja(TARGETS ${_vig_TARGETS}) + + vcpkg_find_acquire_program(GN) + + function(gn_get_target_type OUT_VAR BUILD_DIR TARGET) + execute_process( + COMMAND ${GN} desc "${BUILD_DIR}" "${TARGET}" + WORKING_DIRECTORY "${_vig_SOURCE_PATH}" + OUTPUT_VARIABLE OUTPUT_ + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REGEX MATCH "type: ([A-Za-z0-9_]+)" OUTPUT_ "${OUTPUT_}") + set(${OUT_VAR} ${CMAKE_MATCH_1} PARENT_SCOPE) + endfunction() + + function(gn_desc OUT_VAR BUILD_DIR TARGET WHAT_TO_DISPLAY) + execute_process( + COMMAND ${GN} desc "${BUILD_DIR}" "${TARGET}" "${WHAT_TO_DISPLAY}" + WORKING_DIRECTORY "${_vig_SOURCE_PATH}" + OUTPUT_VARIABLE OUTPUT_ + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REGEX REPLACE "\n|(\r\n)" ";" OUTPUT_ "${OUTPUT_}") + set(${OUT_VAR} ${OUTPUT_} PARENT_SCOPE) + endfunction() + + function(install_ BUILD_DIR INSTALL_DIR) + if(_vig_TARGETS) + foreach(TARGET ${_vig_TARGETS}) + # GN targets must start with a // + gn_desc(OUTPUTS "${BUILD_DIR}" "//${TARGET}" outputs) + gn_get_target_type(TARGET_TYPE "${BUILD_DIR}" "//${TARGET}") + foreach(OUTPUT ${OUTPUTS}) + if(NOT EXISTS "${OUTPUT}") + if(OUTPUT MATCHES "^//") + # relative path (e.g. //out/Release/target.lib) + string(REGEX REPLACE "^//" "${_vig_SOURCE_PATH}/" OUTPUT "${OUTPUT}") + elseif(OUTPUT MATCHES "^/" AND CMAKE_HOST_WIN32) + # absolute path (e.g. /C:/path/to/target.lib) + string(REGEX REPLACE "^/" "" OUTPUT "${OUTPUT}") + endif() + endif() + if(TARGET_TYPE STREQUAL "executable") + file(INSTALL "${OUTPUT}" DESTINATION "${INSTALL_DIR}/tools") + elseif("${OUTPUT}" MATCHES "(\\.dll|\\.pdb)$") + file(INSTALL "${OUTPUT}" DESTINATION "${INSTALL_DIR}/bin") + else() + file(INSTALL "${OUTPUT}" DESTINATION "${INSTALL_DIR}/lib") + endif() + endforeach() + endforeach() + endif() + endfunction() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + install_("${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" "${CURRENT_PACKAGES_DIR}/debug") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + install_("${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" "${CURRENT_PACKAGES_DIR}") + endif() + +endfunction()
\ No newline at end of file |
