aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/crashpad/portfile.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/crashpad/portfile.cmake')
-rw-r--r--vcpkg/ports/crashpad/portfile.cmake203
1 files changed, 203 insertions, 0 deletions
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")