kicad/thirdparty/sentry-native/external/crashpad/CMakeLists.txt

176 lines
6.1 KiB
CMake

cmake_minimum_required(VERSION 3.12)
project(crashpad LANGUAGES C CXX)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(LINUX TRUE)
endif()
set(CRASHPAD_MAIN_PROJECT OFF)
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
set(CRASHPAD_MAIN_PROJECT ON)
endif()
option(CRASHPAD_ENABLE_INSTALL "Enable crashpad installation" "${CRASHPAD_MAIN_PROJECT}")
option(CRASHPAD_ENABLE_INSTALL_DEV "Enable crashpad development installation" "${CRASHPAD_MAIN_PROJECT}")
option(CRASHPAD_ENABLE_STACKTRACE "Enable client-side stack trace recording" OFF)
if(MSVC)
set(CRASHPAD_ZLIB_SYSTEM_DEFAULT OFF)
else()
set(CRASHPAD_ZLIB_SYSTEM_DEFAULT ON)
endif()
option(CRASHPAD_ZLIB_SYSTEM "Use system zlib library" "${CRASHPAD_ZLIB_SYSTEM_DEFAULT}")
if(CRASHPAD_ZLIB_SYSTEM)
find_package(ZLIB REQUIRED)
endif()
if(LINUX OR ANDROID)
find_package(OpenSSL)
if(OPENSSL_FOUND)
set(CRASHPAD_USE_BORINGSSL ON)
endif()
endif()
if (NOT (ANDROID OR FUCHSIA))
add_compile_definitions(CRASHPAD_FLOCK_ALWAYS_SUPPORTED=1)
else()
add_compile_definitions(CRASHPAD_FLOCK_ALWAYS_SUPPORTED=0)
endif()
include(GNUInstallDirs)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/crashpad")
function(crashpad_install_target)
if(CRASHPAD_ENABLE_INSTALL)
install(TARGETS ${ARGN} EXPORT crashpad_export
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
endif()
endfunction()
function(crashpad_install_dev)
if(CRASHPAD_ENABLE_INSTALL_DEV)
install(${ARGN})
endif()
endfunction()
if(WIN32)
enable_language(ASM_MASM)
if(MINGW)
find_program(JWASM_FOUND jwasm)
if (JWASM_FOUND)
set(CMAKE_ASM_MASM_COMPILER ${JWASM_FOUND})
execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VERSION_OUTPUT)
if (COMPILER_VERSION_OUTPUT)
if (COMPILER_VERSION_OUTPUT MATCHES "x86_64")
set(JWASM_FLAGS -win64)
else()
set(JWASM_FLAGS -coff)
endif()
endif()
set(CMAKE_ASM_MASM_FLAGS ${CMAKE_ASM_MASM_FLAGS} ${JWASM_FLAGS})
endif(JWASM_FOUND)
if(NOT CMAKE_ASM_MASM_COMPILER OR CMAKE_ASM_MASM_COMPILER STREQUAL "ml" OR CMAKE_ASM_MASM_COMPILER STREQUAL "ml64")
message(WARNING "No custom ASM_MASM compiler defined via 'CMAKE_ASM_MASM_COMPILER'. Trying to use UASM...")
set(CMAKE_ASM_MASM_COMPILER "uasm")
endif()
if(NOT CMAKE_ASM_MASM_FLAGS)
set(CMAKE_ASM_MASM_FLAGS "-win64 -10") #use default compatibility flags
endif()
endif(MINGW)
else()
enable_language(ASM)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_library(crashpad_interface INTERFACE)
target_include_directories(crashpad_interface INTERFACE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/third_party/mini_chromium/mini_chromium>
)
target_compile_definitions(crashpad_interface INTERFACE
CRASHPAD_LSS_SOURCE_EMBEDDED
)
if(WIN32)
target_compile_definitions(crashpad_interface INTERFACE
NOMINMAX
UNICODE
WIN32_LEAN_AND_MEAN
_CRT_SECURE_NO_WARNINGS
_HAS_EXCEPTIONS=0
_UNICODE
)
endif()
if(MSVC)
string(REGEX REPLACE "/[Ww][0123]" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REGEX REPLACE "/[Ww][0123]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
target_compile_options(crashpad_interface INTERFACE
$<$<COMPILE_LANGUAGE:C,CXX>:/FS>
$<$<COMPILE_LANGUAGE:C,CXX>:/W4>
$<$<COMPILE_LANGUAGE:C,CXX>:/WX>
$<$<COMPILE_LANGUAGE:C,CXX>:/bigobj> # Support larger number of sections in obj file.
$<$<COMPILE_LANGUAGE:C,CXX>:/wd4100> # Unreferenced formal parameter.
$<$<COMPILE_LANGUAGE:C,CXX>:/wd4127> # Conditional expression is constant.
$<$<COMPILE_LANGUAGE:C,CXX>:/wd4324> # Structure was padded due to alignment specifier.
$<$<COMPILE_LANGUAGE:C,CXX>:/wd4351> # New behavior: elements of array will be default initialized.
$<$<COMPILE_LANGUAGE:C,CXX>:/wd4577> # 'noexcept' used with no exception handling mode specified.
$<$<COMPILE_LANGUAGE:C,CXX>:/wd4996> # 'X' was declared deprecated.
)
# WER support is only available starting from Win10 build 10941
if("${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}" VERSION_LESS 10.0.19041)
message(STATUS "WER support disabled. Needs target platform >= 10.0.19041 (actual: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION})")
else()
SET(CRASHPAD_WER_ENABLED TRUE)
SET(CRASHPAD_WER_ENABLED TRUE PARENT_SCOPE)
message(STATUS "WER support enabled")
endif()
elseif(MINGW)
# redirect to wmain
# FIXME: cmake 3.13 added target_link_options
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -municode")
if(CRASHPAD_WER_ENABLED)
message(STATUS "WER support enabled")
else()
message(STATUS "WER support disabled. Define CRASHPAD_WER_ENABLED = TRUE to enable.")
endif()
endif()
add_library(crashpad::interface ALIAS crashpad_interface)
add_subdirectory(compat)
add_subdirectory(minidump)
add_subdirectory(snapshot)
add_subdirectory(util)
add_subdirectory(third_party/mini_chromium)
add_subdirectory(client)
add_subdirectory(third_party/zlib)
add_subdirectory(third_party/getopt)
add_subdirectory(tools)
add_subdirectory(handler)
if(CRASHPAD_ENABLE_STACKTRACE AND APPLE AND NOT IOS)
set(LIBUNWIND_ENABLE_SHARED OFF)
add_subdirectory(libunwind)
crashpad_install_target(unwind_static)
endif()
if(CRASHPAD_ENABLE_INSTALL_DEV)
install(EXPORT crashpad_export NAMESPACE crashpad:: FILE crashpad-targets.cmake
DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")
include(CMakePackageConfigHelpers)
configure_package_config_file(crashpad-config.cmake.in crashpad-config.cmake
INSTALL_DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/crashpad-config.cmake" DESTINATION "${CMAKE_INSTALL_CMAKEDIR}")
endif()