diff options
Diffstat (limited to 'vcpkg/ports/crashpad')
| -rw-r--r-- | vcpkg/ports/crashpad/crashpadConfig.cmake.in | 47 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/fix-lib-name-conflict-1.patch | 12 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/fix-lib-name-conflict.patch | 44 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/fix-linux.patch | 14 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/fix-std-20.patch | 18 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/ndk-toolchain.diff | 22 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/portfile.cmake | 203 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/vcpkg.json | 36 | ||||
| -rw-r--r-- | vcpkg/ports/crashpad/zlib.gn | 15 |
9 files changed, 411 insertions, 0 deletions
diff --git a/vcpkg/ports/crashpad/crashpadConfig.cmake.in b/vcpkg/ports/crashpad/crashpadConfig.cmake.in new file mode 100644 index 0000000..e524884 --- /dev/null +++ b/vcpkg/ports/crashpad/crashpadConfig.cmake.in @@ -0,0 +1,47 @@ +# 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() + +include(CMakeFindDependencyMacro) +find_dependency(ZLIB) + +if(NOT TARGET crashpad::crashpad) + add_library(crashpad::crashpad INTERFACE IMPORTED) + target_include_directories(crashpad::crashpad INTERFACE "${_IMPORT_PREFIX}/include/crashpad" "${_IMPORT_PREFIX}/include") + + set(_libs vcpkg_crashpad_client vcpkg_crashpad_client_common vcpkg_crashpad_util vcpkg_crashpad_base) + if(APPLE) + list(APPEND _libs mig_output) + endif() + include(SelectLibraryConfigurations) + foreach(_lib IN LISTS _libs) + find_library(CRASHPAD_${_lib}_LIBRARY_RELEASE NAMES ${_lib} PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH) + find_library(CRASHPAD_${_lib}_LIBRARY_DEBUG NAMES ${_lib} PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH) + select_library_configurations(CRASHPAD_${_lib}) + target_link_libraries(crashpad::crashpad INTERFACE ${CRASHPAD_${_lib}_LIBRARIES}) + endforeach() + + if(WIN32) + target_compile_definitions(crashpad::crashpad INTERFACE NOMINMAX) + elseif(APPLE) + foreach(_lib IN ITEMS ApplicationServices CoreFoundation Foundation IOKit Security bsm) + find_library(CRASHPAD_${_lib}_LIBRARY NAMES ${_lib}) + target_link_libraries(crashpad::crashpad INTERFACE ${CRASHPAD_${_lib}_LIBRARY}) + endforeach() + elseif(ANDROID) + target_link_libraries(crashpad::crashpad INTERFACE log) + endif() + + target_link_libraries(crashpad::crashpad INTERFACE ZLIB::ZLIB) + + if(NOT TARGET crashpad) + add_library(crashpad ALIAS crashpad::crashpad) + endif() + + unset(_lib) + unset(_libs) +endif() diff --git a/vcpkg/ports/crashpad/fix-lib-name-conflict-1.patch b/vcpkg/ports/crashpad/fix-lib-name-conflict-1.patch new file mode 100644 index 0000000..0eaec93 --- /dev/null +++ b/vcpkg/ports/crashpad/fix-lib-name-conflict-1.patch @@ -0,0 +1,12 @@ +diff --git a/base/BUILD.gn b/base/BUILD.gn
+index 0bcf519..c637f2b 100644
+--- a/base/BUILD.gn
++++ b/base/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("../build/platform.gni")
+
+ static_library("base") {
++ output_name = "vcpkg_crashpad_base"
+ sources = [
+ "atomicops.h",
+ "atomicops_internals_atomicword_compat.h",
diff --git a/vcpkg/ports/crashpad/fix-lib-name-conflict.patch b/vcpkg/ports/crashpad/fix-lib-name-conflict.patch new file mode 100644 index 0000000..033ff73 --- /dev/null +++ b/vcpkg/ports/crashpad/fix-lib-name-conflict.patch @@ -0,0 +1,44 @@ +diff --git a/client/BUILD.gn b/client/BUILD.gn +index bd150ab..5cbf469 100644 +--- a/client/BUILD.gn ++++ b/client/BUILD.gn +@@ -15,6 +15,7 @@ + import("../build/crashpad_buildconfig.gni") + + crashpad_static_library("client") { ++ output_name = "vcpkg_crashpad_client" + sources = [ + "crashpad_client.h", + "prune_crash_reports.cc", +@@ -114,6 +115,7 @@ crashpad_static_library("client") { + } + + static_library("common") { ++ output_name = "vcpkg_crashpad_client_common" + sources = [ + "annotation.cc", + "annotation.h", +diff --git a/handler/BUILD.gn b/handler/BUILD.gn +index a2d6f7f..70a997e 100644 +--- a/handler/BUILD.gn ++++ b/handler/BUILD.gn +@@ -94,6 +94,7 @@ if (crashpad_is_android) { + } + + static_library("common") { ++ output_name = "vcpkg_crashpad_handler_common" + sources = [ + "crash_report_upload_thread.cc", + "crash_report_upload_thread.h", +diff --git a/util/BUILD.gn b/util/BUILD.gn +index e7ff4a8..9efcb41 100644 +--- a/util/BUILD.gn ++++ b/util/BUILD.gn +@@ -167,6 +167,7 @@ if (crashpad_is_win) { + } + + crashpad_static_library("util") { ++ output_name = "vcpkg_crashpad_util" + sources = [ + "file/delimited_file_reader.cc", + "file/delimited_file_reader.h", diff --git a/vcpkg/ports/crashpad/fix-linux.patch b/vcpkg/ports/crashpad/fix-linux.patch new file mode 100644 index 0000000..a249686 --- /dev/null +++ b/vcpkg/ports/crashpad/fix-linux.patch @@ -0,0 +1,14 @@ +diff --git a/util/misc/uuid.cc b/util/misc/uuid.cc +index 3013d7b..4cc135f 100644 +--- a/util/misc/uuid.cc ++++ b/util/misc/uuid.cc +@@ -41,7 +41,8 @@ + namespace crashpad { + + static_assert(sizeof(UUID) == 16, "UUID must be 16 bytes"); +-static_assert(std::is_pod<UUID>::value, "UUID must be POD"); ++static_assert(std::is_standard_layout<UUID>::value, "UUID must be a standard-layout type"); ++static_assert(std::is_trivial<UUID>::value, "UUID must be a trivial type"); + + bool UUID::operator==(const UUID& that) const { + return memcmp(this, &that, sizeof(*this)) == 0; diff --git a/vcpkg/ports/crashpad/fix-std-20.patch b/vcpkg/ports/crashpad/fix-std-20.patch new file mode 100644 index 0000000..45e2964 --- /dev/null +++ b/vcpkg/ports/crashpad/fix-std-20.patch @@ -0,0 +1,18 @@ +diff --git a/base/atomicops_internals_portable.h b/base/atomicops_internals_portable.h +index 2486fb7..88e2d2d 100644 +--- a/base/atomicops_internals_portable.h ++++ b/base/atomicops_internals_portable.h +@@ -51,13 +51,7 @@ static_assert(sizeof(*(AtomicLocation32) nullptr) == sizeof(Atomic32), + "incompatible 32-bit atomic layout"); + + inline void MemoryBarrier() { +-#if defined(__GLIBCXX__) +- // Work around libstdc++ bug 51038 where atomic_thread_fence was declared but +- // not defined, leading to the linker complaining about undefined references. +- __atomic_thread_fence(std::memory_order_seq_cst); +-#else + std::atomic_thread_fence(std::memory_order_seq_cst); +-#endif + } + + inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, diff --git a/vcpkg/ports/crashpad/ndk-toolchain.diff b/vcpkg/ports/crashpad/ndk-toolchain.diff new file mode 100644 index 0000000..1b16dfa --- /dev/null +++ b/vcpkg/ports/crashpad/ndk-toolchain.diff @@ -0,0 +1,22 @@ +diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn +index 0802be8..dd77285 100644 +--- a/build/config/BUILD.gn ++++ b/build/config/BUILD.gn +@@ -425,7 +425,7 @@ toolchain("gcc_like_toolchain") { + ]) + + if (target_cpu == "arm") { +- tool_prefix = "arm-linux-androideabi" ++ # unused + } else if (target_cpu == "arm64") { + tool_prefix = "aarch64-linux-android" + } else if (target_cpu == "x86") { +@@ -446,7 +446,7 @@ toolchain("gcc_like_toolchain") { + cxx = ndk_bin_dir + clang_prefix + "-clang++" + asm = cxx + ld = cxx +- ar = ndk_bin_dir + tool_prefix + "-ar" ++ ar = ndk_bin_dir + "llvm-ar" + } else { + cc = "clang" + cxx = "clang++" diff --git a/vcpkg/ports/crashpad/portfile.cmake b/vcpkg/ports/crashpad/portfile.cmake new file mode 100644 index 0000000..c209bd4 --- /dev/null +++ b/vcpkg/ports/crashpad/portfile.cmake @@ -0,0 +1,203 @@ +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +vcpkg_from_git( + OUT_SOURCE_PATH SOURCE_PATH + URL https://chromium.googlesource.com/crashpad/crashpad + REF 7e0af1d4d45b526f01677e74a56f4a951b70517d + PATCHES + fix-linux.patch + fix-lib-name-conflict.patch +) + +vcpkg_find_acquire_program(PYTHON3) +x_vcpkg_get_python_packages(OUT_PYTHON_VAR PYTHON3 + PYTHON_EXECUTABLE "${PYTHON3}" + PYTHON_VERSION "3" + PACKAGES setuptools +) +vcpkg_replace_string("${SOURCE_PATH}/.gn" "script_executable = \"python3\"" "script_executable = \"${PYTHON3}\"") + +# mini_chromium contains the toolchains and build configuration +if(NOT EXISTS "${SOURCE_PATH}/third_party/mini_chromium/mini_chromium/BUILD.gn") + vcpkg_from_git(OUT_SOURCE_PATH mini_chromium + URL "https://chromium.googlesource.com/chromium/mini_chromium" + REF dce72d97d1c2e9beb5e206c6a05a702269794ca3 + PATCHES + fix-std-20.patch + ndk-toolchain.diff + fix-lib-name-conflict-1.patch + ) + file(REMOVE_RECURSE "${SOURCE_PATH}/third_party/mini_chromium/mini_chromium") + file(RENAME "${mini_chromium}" "${SOURCE_PATH}/third_party/mini_chromium/mini_chromium") +endif() + +if(NOT EXISTS "${SOURCE_PATH}/third_party/lss/lss/BUILD.gn" AND (VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_LINUX)) + vcpkg_from_git(OUT_SOURCE_PATH lss + URL https://chromium.googlesource.com/linux-syscall-support + REF 9719c1e1e676814c456b55f5f070eabad6709d31 + ) + file(REMOVE_RECURSE "${SOURCE_PATH}/third_party/lss/lss") + file(RENAME "${lss}" "${SOURCE_PATH}/third_party/lss/lss") +endif() + +function(replace_gn_dependency INPUT_FILE OUTPUT_FILE LIBRARY_NAMES) + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + 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() + 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() + + if(VCPKG_BUILD_TYPE STREQUAL "release") + set(_LIBRARY_DEB ${_LIBRARY_REL}) + 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 "target_cpu=\"${VCPKG_TARGET_ARCHITECTURE}\"") +set(OPTIONS_DBG "is_debug=true") +set(OPTIONS_REL "") + +if(VCPKG_TARGET_IS_ANDROID) + vcpkg_cmake_get_vars(cmake_vars_file) + include("${cmake_vars_file}") + string(APPEND OPTIONS " target_os=\"android\" android_ndk_root=\"${VCPKG_DETECTED_CMAKE_ANDROID_NDK}\"") + +elseif(VCPKG_TARGET_IS_LINUX) + string(APPEND OPTIONS " target_os=\"linux\"") + +elseif(VCPKG_TARGET_IS_OSX) + string(APPEND OPTIONS " target_os=\"mac\"") + +elseif(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + string(APPEND OPTIONS " target_os=\"win\"") + + # Load toolchains + vcpkg_cmake_get_vars(cmake_vars_file) + include("${cmake_vars_file}") + + set(OPTIONS_DBG "${OPTIONS_DBG} \ + extra_cflags_c=\"${VCPKG_COMBINED_C_FLAGS_DEBUG}\" \ + extra_cflags_cc=\"${VCPKG_COMBINED_CXX_FLAGS_DEBUG}\" \ + extra_ldflags=\"${VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG}\" \ + extra_arflags=\"${VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG}\"") + + set(OPTIONS_REL "${OPTIONS_REL} \ + extra_cflags_c=\"${VCPKG_COMBINED_C_FLAGS_RELEASE}\" \ + extra_cflags_cc=\"${VCPKG_COMBINED_CXX_FLAGS_RELEASE}\" \ + extra_ldflags=\"${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE}\" \ + extra_arflags=\"${VCPKG_COMBINED_STATIC_LINKER_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_gn_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS "${OPTIONS}" + OPTIONS_DEBUG "${OPTIONS_DBG}" + OPTIONS_RELEASE "${OPTIONS_REL}" +) + +vcpkg_gn_install( + SOURCE_PATH "${SOURCE_PATH}" + TARGETS client client:common 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") + +file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/gen/build/chromeos_buildflags.h" DESTINATION "${CURRENT_PACKAGES_DIR}/include/${PORT}/build") +file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/gen/build/chromeos_buildflags.h.flags" DESTINATION "${CURRENT_PACKAGES_DIR}/include/${PORT}/build") + +# On Windows/MSVC, mirror headers into the root include directory so MSBuild integration +# (which adds only <installed>/include) can resolve un-namespaced includes like +# "client/..." and "base/...". +if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + message(STATUS "Mirroring headers into include root for MSBuild consumption...") + file(COPY "${SOURCE_PATH}/client" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN "*.h") + file(COPY "${SOURCE_PATH}/util" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN "*.h") + file(COPY "${SOURCE_PATH}/third_party/mini_chromium/mini_chromium/base" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN "*.h") + file(COPY "${SOURCE_PATH}/third_party/mini_chromium/mini_chromium/build" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN "*.h") + file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/gen/build/chromeos_buildflags.h" DESTINATION "${CURRENT_PACKAGES_DIR}/include/build") + file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/gen/build/chromeos_buildflags.h.flags" DESTINATION "${CURRENT_PACKAGES_DIR}/include/build") +endif() + +if(VCPKG_TARGET_IS_OSX) + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/obj/util/libmig_output.a" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib") + endif() + file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/obj/util/libmig_output.a" DESTINATION "${CURRENT_PACKAGES_DIR}/lib") +endif() + +vcpkg_copy_tools( + TOOL_NAMES crashpad_handler + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/tools") + +if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_MINGW) + file(CHMOD "${CURRENT_PACKAGES_DIR}/tools/crashpad_handler" FILE_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + ) +endif() + +# remove empty directories +file(REMOVE_RECURSE + "${PACKAGES_INCLUDE_DIR}/util/net/testdata" + "${PACKAGES_INCLUDE_DIR}/build/ios") + +if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + file(REMOVE_RECURSE + "${CURRENT_PACKAGES_DIR}/include/util/net/testdata" + "${CURRENT_PACKAGES_DIR}/include/build/ios") +endif() + +configure_file("${CMAKE_CURRENT_LIST_DIR}/crashpadConfig.cmake.in" + "${CURRENT_PACKAGES_DIR}/share/${PORT}/crashpadConfig.cmake" @ONLY) + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/${PORT}/build/config") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/${PORT}/util/mach/__pycache__") + +if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + # Remove empty directory created under the mirrored root include + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/build/config") +endif() + +vcpkg_copy_pdbs() +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/vcpkg/ports/crashpad/vcpkg.json b/vcpkg/ports/crashpad/vcpkg.json new file mode 100644 index 0000000..9961892 --- /dev/null +++ b/vcpkg/ports/crashpad/vcpkg.json @@ -0,0 +1,36 @@ +{ + "name": "crashpad", + "version-date": "2024-04-11", + "port-version": 9, + "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." + ], + "homepage": "https://chromium.googlesource.com/crashpad/crashpad/+/master/README.md", + "license": "Apache-2.0", + "supports": "android | linux | osx | (windows & !uwp)", + "dependencies": [ + { + "name": "curl", + "default-features": false, + "platform": "linux" + }, + { + "name": "vcpkg-cmake-get-vars", + "host": true + }, + { + "name": "vcpkg-get-python-packages", + "host": true + }, + { + "name": "vcpkg-gn", + "host": true + }, + { + "name": "vcpkg-tool-gn", + "host": true + }, + "zlib" + ] +} diff --git a/vcpkg/ports/crashpad/zlib.gn b/vcpkg/ports/crashpad/zlib.gn new file mode 100644 index 0000000..5b551a3 --- /dev/null +++ b/vcpkg/ports/crashpad/zlib.gn @@ -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@" ]
+ }
+}
\ No newline at end of file |