aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMartin Vejdarski <extrulm@gmail.com>2020-05-12 04:58:12 +0700
committerGitHub <noreply@github.com>2020-05-11 14:58:12 -0700
commit6d5a1a897eca21b956d7b1de71af9a1f25c08e33 (patch)
tree1e0a84af5b291e56e0d50c85567833581ecba609 /scripts
parent06c647e11a21dd4c193e63968e1d3f9024e05996 (diff)
downloadvcpkg-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.txt5
-rw-r--r--scripts/cmake/vcpkg_build_gn.cmake18
-rw-r--r--scripts/cmake/vcpkg_build_ninja.cmake37
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake4
-rw-r--r--scripts/cmake/vcpkg_configure_gn.cmake58
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake24
-rw-r--r--scripts/cmake/vcpkg_install_gn.cmake91
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