diff options
| author | Gyusun Yeom <omniavinco@gmail.com> | 2020-12-17 17:16:41 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-17 00:16:41 -0800 |
| commit | 1c33981078fdd7baef4c6a201bff9f7a27233871 (patch) | |
| tree | 634dbdd791c280d2fd3e65e040e31294911ceeef | |
| parent | 4177474d9716cd7e04c6a2489800923903a50eef (diff) | |
| download | vcpkg-1c33981078fdd7baef4c6a201bff9f7a27233871.tar.gz vcpkg-1c33981078fdd7baef4c6a201bff9f7a27233871.zip | |
[breakpad] Support breakpad_client on Linux & macOS (#15092)
| -rw-r--r-- | ports/breakpad/CMakeLists.txt | 83 | ||||
| -rw-r--r-- | ports/breakpad/CONTROL | 1 | ||||
| -rw-r--r-- | ports/breakpad/check_getcontext.cc | 9 | ||||
| -rw-r--r-- | ports/breakpad/portfile.cmake | 17 |
4 files changed, 81 insertions, 29 deletions
diff --git a/ports/breakpad/CMakeLists.txt b/ports/breakpad/CMakeLists.txt index 113002943..352cefde6 100644 --- a/ports/breakpad/CMakeLists.txt +++ b/ports/breakpad/CMakeLists.txt @@ -21,8 +21,16 @@ option(INSTALL_HEADERS "Install header files" ${DEFAULT_INSTALL_HEADERS}) # libbreakpad target file(GLOB_RECURSE LIBBREAKPAD_SOURCES src/processor/*.cc) -list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX - "_unittest|synth_minidump|/tests|/testdata|/linux|/mac|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk") +if(WIN32) + list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX + "_unittest|synth_minidump|/tests|/testdata|/linux|/mac|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk") +elseif(APPLE) + list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX + "_unittest|synth_minidump|/tests|/testdata|/linux|/windows|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk") +else() + list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX + "_unittest|synth_minidump|/tests|/testdata|/mac|/windows|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk") +endif() find_library(LIBDISASM_LIB NAMES libdisasmd libdisasm) @@ -37,35 +45,50 @@ target_include_directories(libbreakpad set(TARGETS libbreakpad) if(WIN32) - # libbreakpad_client target does not currently work on non-windows - if(WIN32) - file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/windows/*.cc src/common/windows/*.cc) - include_directories("$ENV{VSINSTALLDIR}/DIA SDK/include") - elseif(APPLE) - add_definitions(-DHAVE_MACH_O_NLIST_H) - file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/mac/*.cc src/common/mac/*.cc) - else() - add_definitions(-DHAVE_A_OUT_H) - file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/linux/*.cc src/common/linux/*.cc) - endif() - file(GLOB LIBBREAKPAD_COMMON_SOURCES src/common/*.cc src/common/*.c src/client/*.cc) - list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${LIBBREAKPAD_COMMON_SOURCES}) - list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "/tests|/unittests|_unittest") - if(WIN32) - list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "language.cc|path_helper.cc|stabs_to_module.cc|stabs_reader.cc|minidump_file_writer.cc") + file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/windows/*.cc src/common/windows/*.cc) + include_directories("$ENV{VSINSTALLDIR}/DIA SDK/include") +elseif(APPLE) + add_definitions(-DHAVE_MACH_O_NLIST_H) + file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/mac/*.cc src/common/mac/*.cc) + list(APPEND LIBBREAKPAD_CLIENT_SOURCES src/common/mac/MachIPC.mm) +else() + add_definitions(-DHAVE_A_OUT_H) + file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/linux/*.cc src/common/linux/*.cc) +endif() +file(GLOB LIBBREAKPAD_COMMON_SOURCES src/common/*.cc src/common/*.c src/client/*.cc) +list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${LIBBREAKPAD_COMMON_SOURCES}) +list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "/sender|/tests|/unittests|/testcases|_unittest|_test") +if(WIN32) + list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "language.cc|path_helper.cc|stabs_to_module.cc|stabs_reader.cc|minidump_file_writer.cc") +elseif(NOT APPLE) + try_compile(HAVE_GETCONTEXT ${CMAKE_BINARY_DIR}/check_getcontext ${CMAKE_CURRENT_LIST_DIR}/check_getcontext.cc OUTPUT_VARIABLE BUILD_OUT) + if (NOT HAVE_GETCONTEXT) + enable_language(ASM) + list(APPEND LIBBREAKPAD_CLIENT_SOURCES src/common/linux/breakpad_getcontext.S) endif() +endif() - add_library(libbreakpad_client ${LIBBREAKPAD_CLIENT_SOURCES}) +add_library(libbreakpad_client ${LIBBREAKPAD_CLIENT_SOURCES}) +if(WIN32) target_link_libraries(libbreakpad_client PRIVATE wininet.lib) - - target_include_directories(libbreakpad_client - PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> - $<INSTALL_INTERFACE:include> - ) - list(APPEND TARGETS libbreakpad_client) +elseif(APPLE) + find_library(CoreFoundation_FRAMEWORK CoreFoundation) + target_link_libraries(libbreakpad_client PRIVATE ${CoreFoundation_FRAMEWORK}) +else() + find_library(PTHREAD_LIBRARIES pthread) + target_link_libraries(libbreakpad_client PRIVATE ${PTHREAD_LIBRARIES}) + if (HAVE_GETCONTEXT) + target_compile_definitions(libbreakpad_client PRIVATE HAVE_GETCONTEXT=1) + endif() endif() +target_include_directories(libbreakpad_client + PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> + $<INSTALL_INTERFACE:include> +) +list(APPEND TARGETS libbreakpad_client) + # installation install(TARGETS ${TARGETS} EXPORT unofficial-breakpad-targets RUNTIME DESTINATION bin @@ -77,9 +100,15 @@ if(INSTALL_HEADERS) if(WIN32) set(HEADER_EXCLUDE_REGEX "/apple|/ios|/linux|/mac|/solaris|/android|/dwarf|/tests|/testdata|/unittests") elseif(APPLE) - set(HEADER_EXCLUDE_REGEX "/apple|/ios|/linux|/windows|/solaris|/android|/dwarf|/tests|/testdata|/unittests|/*proj|/gcov") + set(HEADER_EXCLUDE_REGEX "/apple|/ios|/linux|/windows|/solaris|/android|/dwarf|/tests|/testdata|/unittests|/sender|/testapp|/*proj|/gcov") else() set(HEADER_EXCLUDE_REGEX "/apple|/ios|/client/linux/data|/client/linux/sender|/windows|/mac|/solaris|/android|/dwarf|/tests|/testdata|/unittests") + install( + DIRECTORY src/third_party/lss + DESTINATION include/third_party + FILES_MATCHING PATTERN "*.h" + REGEX "${HEADER_EXCLUDE_REGEX}" EXCLUDE + ) endif() install( DIRECTORY src/client src/common src/google_breakpad diff --git a/ports/breakpad/CONTROL b/ports/breakpad/CONTROL index ccafe9918..110b225b0 100644 --- a/ports/breakpad/CONTROL +++ b/ports/breakpad/CONTROL @@ -1,5 +1,6 @@ Source: breakpad
Version: 2020-09-14 +Port-Version: 1 Build-Depends: libdisasm
Homepage: https://github.com/google/breakpad
Description: a set of client and server components which implement a crash-reporting system.
diff --git a/ports/breakpad/check_getcontext.cc b/ports/breakpad/check_getcontext.cc new file mode 100644 index 000000000..762147479 --- /dev/null +++ b/ports/breakpad/check_getcontext.cc @@ -0,0 +1,9 @@ +#include <ucontext.h> +#include <cstddef> + +int main() { + ucontext_t context; + getcontext(&context); + + return 0; +} diff --git a/ports/breakpad/portfile.cmake b/ports/breakpad/portfile.cmake index 27761bc21..aafbb4bc9 100644 --- a/ports/breakpad/portfile.cmake +++ b/ports/breakpad/portfile.cmake @@ -3,14 +3,27 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY) vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO google/breakpad
- REF 9c4671f2e3a63c0f155d9b2511192d0b5fa7f760 # accessed on 2020-09-14 + REF 9c4671f2e3a63c0f155d9b2511192d0b5fa7f760 # accessed on 2020-09-14
SHA512 4c9ed9b675a772f9a6a84692865381130901820cb395b725511e7a9e2cbf4aaa5212a9ef5f87086baf58bb9d729082232b564bd827a205f87b5c1ffc1c53892a
HEAD_REF master
PATCHES
fix-unique_ptr.patch
)
-file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+if(VCPKG_HOST_IS_LINUX)
+ vcpkg_from_git(
+ OUT_SOURCE_PATH LSS_SOURCE_PATH
+ URL https://chromium.googlesource.com/linux-syscall-support
+ REF 7bde79cc274d06451bf65ae82c012a5d3e476b5a
+ )
+
+ file(RENAME ${LSS_SOURCE_PATH} ${SOURCE_PATH}/src/third_party/lss)
+endif()
+
+file(
+ COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt ${CMAKE_CURRENT_LIST_DIR}/check_getcontext.cc
+ DESTINATION ${SOURCE_PATH}
+)
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
|
