560 lines
18 KiB
CMake
560 lines
18 KiB
CMake
add_library(crashpad_util STATIC
|
|
file/delimited_file_reader.cc
|
|
file/delimited_file_reader.h
|
|
file/directory_reader.h
|
|
file/file_helper.cc
|
|
file/file_helper.h
|
|
file/file_io.cc
|
|
file/file_io.h
|
|
file/file_reader.cc
|
|
file/file_reader.h
|
|
file/file_seeker.cc
|
|
file/file_seeker.h
|
|
file/file_writer.cc
|
|
file/file_writer.h
|
|
file/filesystem.h
|
|
file/output_stream_file_writer.cc
|
|
file/output_stream_file_writer.h
|
|
file/scoped_remove_file.cc
|
|
file/scoped_remove_file.h
|
|
file/string_file.cc
|
|
file/string_file.h
|
|
misc/address_sanitizer.h
|
|
misc/address_types.h
|
|
misc/arraysize.h
|
|
misc/as_underlying_type.h
|
|
misc/capture_context.h
|
|
misc/clock.h
|
|
misc/elf_note_types.h
|
|
misc/from_pointer_cast.h
|
|
misc/implicit_cast.h
|
|
misc/initialization_state.h
|
|
misc/initialization_state_dcheck.cc
|
|
misc/initialization_state_dcheck.h
|
|
misc/lexing.cc
|
|
misc/lexing.h
|
|
misc/memory_sanitizer.h
|
|
misc/metrics.cc
|
|
misc/metrics.h
|
|
misc/no_cfi_icall.h
|
|
misc/paths.h
|
|
misc/pdb_structures.cc
|
|
misc/pdb_structures.h
|
|
misc/random_string.cc
|
|
misc/random_string.h
|
|
misc/range_set.cc
|
|
misc/range_set.h
|
|
misc/reinterpret_bytes.cc
|
|
misc/reinterpret_bytes.h
|
|
misc/scoped_forbid_return.cc
|
|
misc/scoped_forbid_return.h
|
|
misc/symbolic_constants_common.h
|
|
misc/time.cc
|
|
misc/time.h
|
|
misc/tri_state.h
|
|
misc/uuid.cc
|
|
misc/uuid.h
|
|
misc/zlib.cc
|
|
misc/zlib.h
|
|
net/http_body.cc
|
|
net/http_body.h
|
|
net/http_body_gzip.cc
|
|
net/http_body_gzip.h
|
|
net/http_headers.h
|
|
net/http_multipart_builder.cc
|
|
net/http_multipart_builder.h
|
|
net/http_transport.cc
|
|
net/http_transport.h
|
|
net/url.cc
|
|
net/url.h
|
|
numeric/checked_address_range.cc
|
|
numeric/checked_address_range.h
|
|
numeric/checked_range.h
|
|
numeric/checked_vm_address_range.h
|
|
numeric/in_range_cast.h
|
|
numeric/int128.h
|
|
numeric/safe_assignment.h
|
|
process/process_id.h
|
|
process/process_memory.cc
|
|
process/process_memory.h
|
|
process/process_memory_native.h
|
|
process/process_memory_range.cc
|
|
process/process_memory_range.h
|
|
stdlib/aligned_allocator.cc
|
|
stdlib/aligned_allocator.h
|
|
stdlib/map_insert.h
|
|
stdlib/objc.h
|
|
stdlib/string_number_conversion.cc
|
|
stdlib/string_number_conversion.h
|
|
stdlib/strlcpy.cc
|
|
stdlib/strlcpy.h
|
|
stdlib/strnlen.cc
|
|
stdlib/strnlen.h
|
|
stdlib/thread_safe_vector.h
|
|
stream/base94_output_stream.cc
|
|
stream/base94_output_stream.h
|
|
stream/file_encoder.cc
|
|
stream/file_encoder.h
|
|
stream/file_output_stream.cc
|
|
stream/file_output_stream.h
|
|
stream/log_output_stream.cc
|
|
stream/log_output_stream.h
|
|
stream/output_stream_interface.h
|
|
stream/zlib_output_stream.cc
|
|
stream/zlib_output_stream.h
|
|
string/split_string.cc
|
|
string/split_string.h
|
|
synchronization/scoped_spin_guard.h
|
|
synchronization/semaphore.h
|
|
thread/stoppable.h
|
|
thread/thread.cc
|
|
thread/thread.h
|
|
thread/thread_log_messages.cc
|
|
thread/thread_log_messages.h
|
|
thread/worker_thread.cc
|
|
thread/worker_thread.h
|
|
)
|
|
|
|
if(NOT WIN32)
|
|
target_sources(crashpad_util PRIVATE
|
|
file/directory_reader_posix.cc
|
|
file/file_io_posix.cc
|
|
file/filesystem_posix.cc
|
|
misc/clock_posix.cc
|
|
posix/close_stdio.cc
|
|
posix/close_stdio.h
|
|
posix/scoped_dir.cc
|
|
posix/scoped_dir.h
|
|
posix/scoped_mmap.cc
|
|
posix/scoped_mmap.h
|
|
posix/signals.cc
|
|
posix/signals.h
|
|
synchronization/semaphore_posix.cc
|
|
thread/thread_posix.cc
|
|
posix/close_multiple.cc
|
|
posix/close_multiple.h
|
|
posix/drop_privileges.cc
|
|
posix/drop_privileges.h
|
|
posix/process_info.h
|
|
posix/spawn_subprocess.cc
|
|
posix/spawn_subprocess.h
|
|
posix/symbolic_constants_posix.cc
|
|
posix/symbolic_constants_posix.h
|
|
)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
target_sources(crashpad_util PRIVATE
|
|
mac/xattr.cc
|
|
mac/xattr.h
|
|
mach/composite_mach_message_server.cc
|
|
mach/composite_mach_message_server.h
|
|
mach/exc_client_variants.cc
|
|
mach/exc_client_variants.h
|
|
mach/exc_server_variants.cc
|
|
mach/exc_server_variants.h
|
|
mach/exception_behaviors.cc
|
|
mach/exception_behaviors.h
|
|
mach/exception_ports.cc
|
|
mach/exception_ports.h
|
|
mach/mach_extensions.cc
|
|
mach/mach_extensions.h
|
|
mach/mach_message.cc
|
|
mach/mach_message.h
|
|
mach/mach_message_server.cc
|
|
mach/mach_message_server.h
|
|
mach/symbolic_constants_mach.cc
|
|
mach/symbolic_constants_mach.h
|
|
misc/capture_context_mac.S
|
|
misc/clock_mac.cc
|
|
misc/paths_mac.cc
|
|
net/http_transport_mac.mm
|
|
synchronization/semaphore_mac.cc
|
|
)
|
|
if(NOT IOS)
|
|
target_sources(crashpad_util PRIVATE
|
|
mac/checked_mach_address_range.h
|
|
mac/launchd.h
|
|
mac/launchd.mm
|
|
mac/mac_util.cc
|
|
mac/mac_util.h
|
|
mac/service_management.cc
|
|
mac/service_management.h
|
|
mac/sysctl.cc
|
|
mac/sysctl.h
|
|
mach/bootstrap.cc
|
|
mach/bootstrap.h
|
|
mach/child_port_handshake.cc
|
|
mach/child_port_handshake.h
|
|
mach/child_port_server.cc
|
|
mach/child_port_server.h
|
|
mach/child_port_types.h
|
|
mach/exception_types.cc
|
|
mach/exception_types.h
|
|
mach/notify_server.cc
|
|
mach/notify_server.h
|
|
mach/scoped_task_suspend.cc
|
|
mach/scoped_task_suspend.h
|
|
mach/task_for_pid.cc
|
|
mach/task_for_pid.h
|
|
posix/process_info_mac.cc
|
|
process/process_memory_mac.cc
|
|
process/process_memory_mac.h
|
|
)
|
|
else()
|
|
target_sources(crashpad_util PRIVATE
|
|
ios/ios_intermediate_dump_data.cc
|
|
ios/ios_intermediate_dump_data.h
|
|
ios/ios_intermediate_dump_format.h
|
|
ios/ios_intermediate_dump_interface.cc
|
|
ios/ios_intermediate_dump_interface.h
|
|
ios/ios_intermediate_dump_list.cc
|
|
ios/ios_intermediate_dump_list.h
|
|
ios/ios_intermediate_dump_map.cc
|
|
ios/ios_intermediate_dump_map.h
|
|
ios/ios_intermediate_dump_object.cc
|
|
ios/ios_intermediate_dump_object.h
|
|
ios/ios_intermediate_dump_reader.cc
|
|
ios/ios_intermediate_dump_reader.h
|
|
ios/ios_intermediate_dump_writer.cc
|
|
ios/ios_intermediate_dump_writer.h
|
|
ios/ios_system_data_collector.h
|
|
ios/ios_system_data_collector.mm
|
|
ios/raw_logging.cc
|
|
ios/raw_logging.h
|
|
ios/scoped_background_task.h
|
|
ios/scoped_background_task.mm
|
|
ios/scoped_vm_read.cc
|
|
ios/scoped_vm_read.h
|
|
ios/scoped_vm_map.cc
|
|
ios/scoped_vm_map.h
|
|
)
|
|
# This specific file requires ARC support, while other parts do not
|
|
# build when ARC is enabled.
|
|
set_source_files_properties(
|
|
ios/scoped_background_task.mm
|
|
PROPERTIES
|
|
COMPILE_FLAGS
|
|
"-fobjc-arc"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
target_sources(crashpad_util PRIVATE
|
|
linux/initial_signal_dispositions.cc
|
|
linux/initial_signal_dispositions.h
|
|
)
|
|
endif()
|
|
|
|
if(LINUX OR ANDROID)
|
|
if (LINUX)
|
|
if(NOT CURL_FOUND) # Some other lib might bring libcurl already
|
|
find_package(CURL REQUIRED)
|
|
endif()
|
|
|
|
if(TARGET CURL::libcurl) # Only available in cmake 3.12+
|
|
target_link_libraries(crashpad_util PRIVATE CURL::libcurl)
|
|
else()
|
|
# Needed for cmake < 3.12 support (cmake 3.12 introduced the target CURL::libcurl)
|
|
target_include_directories(crashpad_util PRIVATE ${CURL_INCLUDE_DIR})
|
|
# The exported sentry target must not contain any path of the build machine, therefore use generator expressions
|
|
string(REPLACE ";" "$<SEMICOLON>" GENEX_CURL_LIBRARIES "${CURL_LIBRARIES}")
|
|
string(REPLACE ";" "$<SEMICOLON>" GENEX_CURL_COMPILE_DEFINITIONS "${CURL_COMPILE_DEFINITIONS}")
|
|
target_link_libraries(crashpad_util PRIVATE $<BUILD_INTERFACE:${GENEX_CURL_LIBRARIES}>)
|
|
target_compile_definitions(crashpad_util PRIVATE $<BUILD_INTERFACE:${GENEX_CURL_COMPILE_DEFINITIONS}>)
|
|
endif()
|
|
|
|
SET(HTTP_TRANSPORT_IMPL net/http_transport_libcurl.cc)
|
|
else()
|
|
SET(HTTP_TRANSPORT_IMPL net/http_transport_socket.cc)
|
|
endif()
|
|
|
|
target_sources(crashpad_util PRIVATE
|
|
${HTTP_TRANSPORT_IMPL}
|
|
linux/address_types.h
|
|
linux/auxiliary_vector.cc
|
|
linux/auxiliary_vector.h
|
|
linux/checked_linux_address_range.h
|
|
linux/direct_ptrace_connection.cc
|
|
linux/direct_ptrace_connection.h
|
|
linux/exception_handler_client.cc
|
|
linux/exception_handler_client.h
|
|
linux/exception_handler_protocol.cc
|
|
linux/exception_handler_protocol.h
|
|
linux/exception_information.h
|
|
linux/memory_map.cc
|
|
linux/memory_map.h
|
|
linux/proc_stat_reader.cc
|
|
linux/proc_stat_reader.h
|
|
linux/proc_task_reader.cc
|
|
linux/proc_task_reader.h
|
|
linux/ptrace_broker.cc
|
|
linux/ptrace_broker.h
|
|
linux/ptrace_client.cc
|
|
linux/ptrace_client.h
|
|
linux/ptrace_connection.h
|
|
linux/ptracer.cc
|
|
linux/ptracer.h
|
|
linux/scoped_pr_set_dumpable.cc
|
|
linux/scoped_pr_set_dumpable.h
|
|
linux/scoped_pr_set_ptracer.cc
|
|
linux/scoped_pr_set_ptracer.h
|
|
linux/scoped_ptrace_attach.cc
|
|
linux/scoped_ptrace_attach.h
|
|
linux/socket.cc
|
|
linux/socket.h
|
|
linux/thread_info.cc
|
|
linux/thread_info.h
|
|
linux/traits.h
|
|
misc/capture_context_linux.S
|
|
misc/paths_linux.cc
|
|
misc/time_linux.cc
|
|
posix/process_info_linux.cc
|
|
process/process_memory_linux.cc
|
|
process/process_memory_linux.h
|
|
process/process_memory_sanitized.cc
|
|
process/process_memory_sanitized.h
|
|
)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
target_sources(crashpad_util PRIVATE
|
|
file/directory_reader_win.cc
|
|
file/file_io_win.cc
|
|
file/filesystem_win.cc
|
|
misc/clock_win.cc
|
|
misc/paths_win.cc
|
|
misc/time_win.cc
|
|
net/http_transport_win.cc
|
|
process/process_memory_win.cc
|
|
process/process_memory_win.h
|
|
synchronization/semaphore_win.cc
|
|
thread/thread_win.cc
|
|
win/address_types.h
|
|
win/checked_win_address_range.h
|
|
win/command_line.cc
|
|
win/command_line.h
|
|
win/context_wrappers.h
|
|
win/critical_section_with_debug_info.cc
|
|
win/critical_section_with_debug_info.h
|
|
win/exception_codes.h
|
|
win/exception_handler_server.cc
|
|
win/exception_handler_server.h
|
|
win/get_function.cc
|
|
win/get_function.h
|
|
win/get_module_information.cc
|
|
win/get_module_information.h
|
|
win/handle.cc
|
|
win/handle.h
|
|
win/initial_client_data.cc
|
|
win/initial_client_data.h
|
|
win/loader_lock.cc
|
|
win/loader_lock.h
|
|
win/module_version.cc
|
|
win/module_version.h
|
|
win/nt_internals.cc
|
|
win/nt_internals.h
|
|
win/ntstatus_logging.cc
|
|
win/ntstatus_logging.h
|
|
win/process_info.cc
|
|
win/process_info.h
|
|
win/process_structs.h
|
|
win/registration_protocol_win.cc
|
|
win/registration_protocol_win.h
|
|
win/registration_protocol_win_structs.h
|
|
win/safe_terminate_process.h
|
|
win/scoped_handle.cc
|
|
win/scoped_handle.h
|
|
win/scoped_local_alloc.cc
|
|
win/scoped_local_alloc.h
|
|
win/scoped_process_suspend.cc
|
|
win/scoped_process_suspend.h
|
|
win/scoped_registry_key.h
|
|
win/scoped_set_event.cc
|
|
win/scoped_set_event.h
|
|
win/session_end_watcher.cc
|
|
win/session_end_watcher.h
|
|
win/termination_codes.h
|
|
win/traits.h
|
|
win/xp_compat.h
|
|
)
|
|
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
|
|
target_sources(crashpad_util PRIVATE
|
|
misc/capture_context_win_arm64.asm
|
|
)
|
|
else()
|
|
target_sources(crashpad_util PRIVATE
|
|
misc/capture_context_win.asm
|
|
win/safe_terminate_process.asm
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# Copied from: https://github.com/qedsoftware/crashpad/blob/3583c50a6575857abcf140f6ea3b8d11390205b3/util/CMakeLists.txt#L196-L233
|
|
if(APPLE)
|
|
if(NOT IOS)
|
|
set(def_relative_files "exc.defs" "mach_exc.defs" "notify.defs")
|
|
set(input_files "${CMAKE_CURRENT_LIST_DIR}/mach/child_port.defs")
|
|
else()
|
|
set(def_relative_files "")
|
|
set(input_files
|
|
"${CMAKE_CURRENT_LIST_DIR}/../third_party/xnu/osfmk/mach/exc.defs"
|
|
"${CMAKE_CURRENT_LIST_DIR}/../third_party/xnu/osfmk/mach/mach_exc.defs"
|
|
)
|
|
endif()
|
|
foreach(x ${def_relative_files})
|
|
# CMAKE_OSX_SYSROOT may be empty (e.g. for Makefile generators),
|
|
# in this case files will be taken from root.
|
|
set(full_path "${CMAKE_OSX_SYSROOT}/usr/include/mach/${x}")
|
|
if(NOT EXISTS "${full_path}")
|
|
message(FATAL_ERROR "File not found: ${full_path}")
|
|
endif()
|
|
list(APPEND input_files "${full_path}")
|
|
endforeach()
|
|
|
|
find_package(Python COMPONENTS Interpreter REQUIRED)
|
|
|
|
set(output_dir "${CMAKE_CURRENT_BINARY_DIR}/util/mach")
|
|
file(MAKE_DIRECTORY "${output_dir}")
|
|
|
|
get_property(archs TARGET crashpad_util PROPERTY OSX_ARCHITECTURES)
|
|
if(NOT archs)
|
|
if(IOS)
|
|
set(archs "arm64")
|
|
else()
|
|
set(archs "x86_64")
|
|
endif()
|
|
endif()
|
|
list(TRANSFORM archs PREPEND "--arch=")
|
|
|
|
set(includes
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/.."
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/../compat/mac"
|
|
)
|
|
if(IOS)
|
|
list(APPEND includes "${CMAKE_CURRENT_SOURCE_DIR}/../compat/ios")
|
|
endif()
|
|
list(TRANSFORM includes PREPEND "--include=")
|
|
|
|
if(CMAKE_OSX_SYSROOT)
|
|
set(sdk --sdk ${CMAKE_OSX_SYSROOT})
|
|
endif()
|
|
|
|
# When building for Xcode, the `CMAKE_OSX_SYSROOT` is not set to a proper
|
|
# directory, but rather is `iphoneos`, which confuses `mig`.
|
|
# Also, Xcode uses a different `SDKROOT` depending on the `-sdk` flag
|
|
# provided to `xcodebuild`.
|
|
# Similarly, we don't know the arch at configure-time, because it changes
|
|
# at build time depending on the `-sdk` flag as well.
|
|
# We hack around this by consuming the arch list from the env.
|
|
if(XCODE)
|
|
set(archs --arch "FROM_ENV")
|
|
set(sdk --sdk "$SDKROOT")
|
|
endif()
|
|
|
|
# Create generate rule for each input file. Add each generated output
|
|
# as a source to the target.
|
|
foreach(input ${input_files})
|
|
get_filename_component(name_we "${input}" NAME_WE)
|
|
set(output_files "")
|
|
foreach(suffix "User.c" "Server.c" ".h" "Server.h")
|
|
list(APPEND output_files "${output_dir}/${name_we}${suffix}")
|
|
endforeach()
|
|
add_custom_command(
|
|
OUTPUT
|
|
${output_files}
|
|
COMMAND
|
|
"${Python_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mach/mig.py" ${archs} ${sdk} ${includes} "${input}" ${output_files}
|
|
DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/mach/mig.py" "${input}"
|
|
)
|
|
target_sources(crashpad_util PRIVATE ${output_files})
|
|
endforeach()
|
|
|
|
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
|
|
endif()
|
|
|
|
target_include_directories(crashpad_util PRIVATE
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
|
|
)
|
|
target_link_libraries(crashpad_util
|
|
PRIVATE
|
|
$<BUILD_INTERFACE:crashpad_interface>
|
|
PUBLIC
|
|
crashpad_compat
|
|
crashpad_zlib
|
|
mini_chromium
|
|
)
|
|
|
|
if(APPLE)
|
|
get_property(archs TARGET crashpad_util PROPERTY OSX_ARCHITECTURES)
|
|
if (archs)
|
|
list(TRANSFORM archs PREPEND "-arch ")
|
|
list(JOIN archs " " archs_str)
|
|
set(CMAKE_ASM_FLAGS "${CFLAGS} ${archs_str}")
|
|
endif()
|
|
|
|
target_link_libraries(crashpad_util PRIVATE
|
|
bsm
|
|
"-framework CoreFoundation"
|
|
"-framework Foundation"
|
|
"-framework IOKit"
|
|
)
|
|
if(IOS)
|
|
target_link_libraries(crashpad_util PRIVATE
|
|
"-framework UIKit"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(LINUX)
|
|
target_link_libraries(crashpad_util PRIVATE pthread)
|
|
endif()
|
|
|
|
if(CRASHPAD_USE_BORINGSSL)
|
|
target_compile_definitions(crashpad_util PRIVATE CRASHPAD_USE_BORINGSSL)
|
|
target_link_libraries(crashpad_util PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
target_link_libraries(crashpad_util PRIVATE user32 version winhttp)
|
|
if(MSVC)
|
|
target_compile_options(crashpad_util PRIVATE "/wd4201")
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /safeseh")
|
|
endif()
|
|
elseif(MINGW)
|
|
target_compile_options(crashpad_util PRIVATE
|
|
$<$<COMPILE_LANGUAGE:CXX>:-municode>
|
|
)
|
|
target_compile_definitions(crashpad_util PRIVATE
|
|
"__STDC_VERSION__=199901L"
|
|
$<$<COMPILE_LANGUAGE:ASM_MASM>:__MINGW32__>
|
|
)
|
|
#exception_handler_server.cc missing <memory> header ?
|
|
set_source_files_properties(
|
|
win/exception_handler_server.cc
|
|
PROPERTIES
|
|
COMPILE_FLAGS
|
|
"-include memory"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
target_compile_options(crashpad_util PRIVATE
|
|
$<$<COMPILE_LANGUAGE:CXX>:-Wno-multichar>
|
|
)
|
|
endif()
|
|
|
|
|
|
set_property(TARGET crashpad_util PROPERTY EXPORT_NAME util)
|
|
add_library(crashpad::util ALIAS crashpad_util)
|
|
|
|
crashpad_install_target(crashpad_util)
|
|
crashpad_install_dev(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
|
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/crashpad/util"
|
|
FILES_MATCHING PATTERN "*.h"
|
|
)
|