Skip to content

Commit

Permalink
[gn, crashpad] Add GN build support and crashpad port (#10505)
Browse files Browse the repository at this point in the history
* [vcpkg_find_acquire_program] Add gn

* [GN] Add build system support

* [crashpad] Add new port
  • Loading branch information
vejmartin authored May 11, 2020
1 parent 06c647e commit 6d5a1a8
Show file tree
Hide file tree
Showing 17 changed files with 514 additions and 3 deletions.
10 changes: 7 additions & 3 deletions docs/maintainers/portfile-functions.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
<!-- Run regenerate.ps1 to extract documentation from scripts\cmake\*.cmake -->

<!-- Run regenerate.ps1 to extract documentation from scripts\cmake\*.cmake -->

# Portfile helper functions
- [execute\_process](execute_process.md)
- [vcpkg\_acquire\_msys](vcpkg_acquire_msys.md)
- [vcpkg\_add\_to\_path](vcpkg_add_to_path.md)
- [vcpkg\_apply\_patches](vcpkg_apply_patches.md)
- [vcpkg\_build\_cmake](vcpkg_build_cmake.md)
- [vcpkg\_build\_gn](vcpkg_build_gn.md)
- [vcpkg\_build\_make](vcpkg_build_make.md)
- [vcpkg\_build\_msbuild](vcpkg_build_msbuild.md)
- [vcpkg\_build\_ninja](vcpkg_build_ninja.md)
- [vcpkg\_build\_nmake](vcpkg_build_nmake.md)
- [vcpkg\_check\_features](vcpkg_check_features.md)
- [vcpkg\_check\_linkage](vcpkg_check_linkage.md)
- [vcpkg\_clean\_executables\_in\_bin](vcpkg_clean_executables_in_bin.md)
- [vcpkg\_clean\_msbuild](vcpkg_clean_msbuild.md)
- [vcpkg\_common\_definitions](vcpkg_common_definitions.md)
- [vcpkg\_configure\_cmake](vcpkg_configure_cmake.md)
- [vcpkg\_configure\_gn](vcpkg_configure_gn.md)
- [vcpkg\_configure\_make](vcpkg_configure_make.md)
- [vcpkg\_configure\_meson](vcpkg_configure_meson.md)
- [vcpkg\_copy\_pdbs](vcpkg_copy_pdbs.md)
- [vcpkg\_copy\_tools](vcpkg_copy_tools.md)
- [vcpkg\_copy\_tool\_dependencies](vcpkg_copy_tool_dependencies.md)
- [vcpkg\_copy\_tools](vcpkg_copy_tools.md)
- [vcpkg\_download\_distfile](vcpkg_download_distfile.md)
- [vcpkg\_execute\_build\_process](vcpkg_execute_build_process.md)
- [vcpkg\_execute\_required\_process](vcpkg_execute_required_process.md)
Expand All @@ -33,6 +36,7 @@
- [vcpkg\_from\_github](vcpkg_from_github.md)
- [vcpkg\_from\_gitlab](vcpkg_from_gitlab.md)
- [vcpkg\_install\_cmake](vcpkg_install_cmake.md)
- [vcpkg\_install\_gn](vcpkg_install_gn.md)
- [vcpkg\_install\_make](vcpkg_install_make.md)
- [vcpkg\_install\_meson](vcpkg_install_meson.md)
- [vcpkg\_install\_msbuild](vcpkg_install_msbuild.md)
Expand Down
17 changes: 17 additions & 0 deletions docs/maintainers/vcpkg_build_gn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# vcpkg_build_gn

Build a GN project

## Usage:
```cmake
vcpkg_build_gn(
[TARGETS <target>...]
)
```

## Parameters:
### TARGETS
Only build the specified targets.

## Source
[scripts/cmake/vcpkg_build_gn.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_build_gn.cmake)
17 changes: 17 additions & 0 deletions docs/maintainers/vcpkg_build_ninja.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# vcpkg_build_ninja

Build a ninja project

## Usage:
```cmake
vcpkg_build_ninja(
[TARGETS <target>...]
)
```

## Parameters:
### TARGETS
Only build the specified targets.

## Source
[scripts/cmake/vcpkg_build_ninja.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_build_ninja.cmake)
30 changes: 30 additions & 0 deletions docs/maintainers/vcpkg_configure_gn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 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.

## Source
[scripts/cmake/vcpkg_configure_gn.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_configure_gn.cmake)
1 change: 1 addition & 0 deletions docs/maintainers/vcpkg_find_acquire_program.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ The current list of programs includes:
- PYTHON2
- PYTHON3
- GIT
- GN
- GO
- JOM
- MESON
Expand Down
23 changes: 23 additions & 0 deletions docs/maintainers/vcpkg_install_gn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 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

## Source
[scripts/cmake/vcpkg_install_gn.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_install_gn.cmake)
7 changes: 7 additions & 0 deletions ports/crashpad/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Source: crashpad
Version: 2020-03-18
Homepage: https://chromium.googlesource.com/crashpad/crashpad/+/master/README.md
Description: Crashpad is a crash-reporting system.
Crashpad is a library for capturing, storing and transmitting postmortem crash reports from a client to an upstream collection server. Crashpad aims to make it possible for clients to capture process state at the time of crash with the best possible fidelity and coverage, with the minimum of fuss.
Build-Depends: zlib
Supports: x64 & (osx|windows)
31 changes: 31 additions & 0 deletions ports/crashpad/crashpadConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()

add_library(crashpad INTERFACE)
add_library(crashpad::crashpad ALIAS crashpad)

set(CRASHPAD_LIBRARIES client util base)

if(WIN32)
target_compile_definitions(crashpad INTERFACE NOMINMAX)
elseif(APPLE)
list(APPEND CRASHPAD_LIBRARIES ApplicationServices
CoreFoundation Foundation IOKit Security bsm)
endif()

foreach(LIB_NAME ${CRASHPAD_LIBRARIES})
find_library(_LIB ${LIB_NAME})
target_link_libraries(crashpad INTERFACE ${_LIB})
unset(_LIB CACHE)
endforeach()

find_package(ZLIB REQUIRED)
target_link_libraries(crashpad INTERFACE ZLIB::ZLIB)

target_include_directories(crashpad
INTERFACE ${_IMPORT_PREFIX}/include/crashpad)
129 changes: 129 additions & 0 deletions ports/crashpad/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
vcpkg_fail_port_install(
ON_ARCH "x86" "arm" "arm64"
ON_TARGET "UWP" "LINUX")

vcpkg_check_linkage(ONLY_STATIC_LIBRARY)

vcpkg_from_git(
OUT_SOURCE_PATH SOURCE_PATH
URL https://chromium.googlesource.com/crashpad/crashpad
REF 9a31d3f8e9815774026a753a1ff6155347cd549f
)

function(checkout_in_path PATH URL REF)
if(EXISTS "${PATH}")
return()
endif()

vcpkg_from_git(
OUT_SOURCE_PATH DEP_SOURCE_PATH
URL "${URL}"
REF "${REF}"
)
file(RENAME "${DEP_SOURCE_PATH}" "${PATH}")
file(REMOVE_RECURSE "${DEP_SOURCE_PATH}")
endfunction()

# mini_chromium contains the toolchains and build configuration
checkout_in_path(
"${SOURCE_PATH}/third_party/mini_chromium/mini_chromium"
"https://chromium.googlesource.com/chromium/mini_chromium"
"c426ff98e1d9e9d59777fe8b883a5c0ceeca9ca3"
)

function(replace_gn_dependency INPUT_FILE OUTPUT_FILE LIBRARY_NAMES)
unset(_LIBRARY_DEB CACHE)
find_library(_LIBRARY_DEB NAMES ${LIBRARY_NAMES}
PATHS "${CURRENT_INSTALLED_DIR}/debug/lib"
NO_DEFAULT_PATH)

if(_LIBRARY_DEB MATCHES "-NOTFOUND")
message(FATAL_ERROR "Could not find debug library with names: ${LIBRARY_NAMES}")
endif()

unset(_LIBRARY_REL CACHE)
find_library(_LIBRARY_REL NAMES ${LIBRARY_NAMES}
PATHS "${CURRENT_INSTALLED_DIR}/lib"
NO_DEFAULT_PATH)

if(_LIBRARY_REL MATCHES "-NOTFOUND")
message(FATAL_ERROR "Could not find library with names: ${LIBRARY_NAMES}")
endif()

set(_INCLUDE_DIR "${CURRENT_INSTALLED_DIR}/include")

file(REMOVE "${OUTPUT_FILE}")
configure_file("${INPUT_FILE}" "${OUTPUT_FILE}" @ONLY)
endfunction()

replace_gn_dependency(
"${CMAKE_CURRENT_LIST_DIR}/zlib.gn"
"${SOURCE_PATH}/third_party/zlib/BUILD.gn"
"z;zlib;zlibd"
)

set(OPTIONS_DBG "is_debug=true")
set(OPTIONS_REL "")

if(CMAKE_HOST_WIN32)
# Load toolchains
if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
endif()
include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")

foreach(_VAR CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS
CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE)
string(STRIP "${${_VAR}}" ${_VAR})
endforeach()

set(OPTIONS_DBG "${OPTIONS_DBG} \
extra_cflags_c=\"${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}\" \
extra_cflags_cc=\"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}\"")

set(OPTIONS_REL "${OPTIONS_REL} \
extra_cflags_c=\"${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}\" \
extra_cflags_cc=\"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}\"")

set(DISABLE_WHOLE_PROGRAM_OPTIMIZATION "\
extra_cflags=\"/GL-\" \
extra_ldflags=\"/LTCG:OFF\" \
extra_arflags=\"/LTCG:OFF\"")

set(OPTIONS_DBG "${OPTIONS_DBG} ${DISABLE_WHOLE_PROGRAM_OPTIMIZATION}")
set(OPTIONS_REL "${OPTIONS_REL} ${DISABLE_WHOLE_PROGRAM_OPTIMIZATION}")
endif()

vcpkg_configure_gn(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS_DEBUG "${OPTIONS_DBG}"
OPTIONS_RELEASE "${OPTIONS_REL}"
)

vcpkg_install_gn(
SOURCE_PATH "${SOURCE_PATH}"
TARGETS client util third_party/mini_chromium/mini_chromium/base handler:crashpad_handler
)

message(STATUS "Installing headers...")
set(PACKAGES_INCLUDE_DIR "${CURRENT_PACKAGES_DIR}/include/${PORT}")
function(install_headers DIR)
file(COPY "${DIR}" DESTINATION "${PACKAGES_INCLUDE_DIR}" FILES_MATCHING PATTERN "*.h")
endfunction()
install_headers("${SOURCE_PATH}/client")
install_headers("${SOURCE_PATH}/util")
install_headers("${SOURCE_PATH}/third_party/mini_chromium/mini_chromium/base")
install_headers("${SOURCE_PATH}/third_party/mini_chromium/mini_chromium/build")

# remove empty directories
file(REMOVE_RECURSE
"${PACKAGES_INCLUDE_DIR}/util/net/testdata"
"${PACKAGES_INCLUDE_DIR}/build/ios")

configure_file("${CMAKE_CURRENT_LIST_DIR}/crashpadConfig.cmake.in"
"${CURRENT_PACKAGES_DIR}/share/${PORT}/crashpadConfig.cmake" @ONLY)

vcpkg_copy_pdbs()
file(INSTALL "${SOURCE_PATH}/LICENSE"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}"
RENAME copyright)
15 changes: 15 additions & 0 deletions ports/crashpad/zlib.gn
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import("../../build/crashpad_buildconfig.gni")

config("zlib_config") {
defines = [ "CRASHPAD_ZLIB_SOURCE_EXTERNAL" ]
include_dirs = [ "@_INCLUDE_DIR@" ]
}

source_set("zlib") {
public_configs = [ ":zlib_config" ]
if(is_debug) {
libs = [ "@_LIBRARY_DEB@" ]
} else {
libs = [ "@_LIBRARY_REL@" ]
}
}
5 changes: 5 additions & 0 deletions scripts/ci.baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 18 additions & 0 deletions scripts/cmake/vcpkg_build_gn.cmake
Original file line number Diff line number Diff line change
@@ -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()
37 changes: 37 additions & 0 deletions scripts/cmake/vcpkg_build_ninja.cmake
Original file line number Diff line number Diff line change
@@ -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()
Loading

0 comments on commit 6d5a1a8

Please sign in to comment.