forked from qt-creator/qt-creator
Find Crashpad via CMake configuration
Makes it possible to point CMake to crashpad via CMAKE_PREFIX_PATH if it was built to <crashpad>/out/Default, or by setting individual CRASHPAD_* variables to the sources and build results. Change-Id: I9634fe7ab8c1e14b7e0f3ccf3415396c8dc1e71a Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -55,6 +55,17 @@ find_package(Threads)
|
|||||||
find_package(Clang QUIET)
|
find_package(Clang QUIET)
|
||||||
find_package(KF5SyntaxHighlighting QUIET)
|
find_package(KF5SyntaxHighlighting QUIET)
|
||||||
|
|
||||||
|
# Crashpad
|
||||||
|
set(CRASHPAD_BACKEND_URL "" CACHE STRING "Crashpad backend URL")
|
||||||
|
set(BUILD_WITH_CRASHPAD OFF)
|
||||||
|
if(CRASHPAD_BACKEND_URL AND (WIN32 OR APPLE)) # Linux is not supported for now
|
||||||
|
find_package(Crashpad QUIET)
|
||||||
|
if(TARGET Crashpad::Crashpad)
|
||||||
|
set(BUILD_WITH_CRASHPAD ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
add_feature_info("Build with Crashpad" ${BUILD_WITH_CRASHPAD} "")
|
||||||
|
|
||||||
function (set_if_target var target)
|
function (set_if_target var target)
|
||||||
if (TARGET "${target}")
|
if (TARGET "${target}")
|
||||||
set(_result ON)
|
set(_result ON)
|
||||||
|
119
cmake/FindCrashpad.cmake
Normal file
119
cmake/FindCrashpad.cmake
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
#.rst:
|
||||||
|
# FindCrashpad
|
||||||
|
# ------------
|
||||||
|
# Locate Crashpad sources and build
|
||||||
|
#
|
||||||
|
# The ``CRASHPAD_BUILD_DIR``, ``CRASHPAD_SOURCE_DIR``, and ``CRASHPAD_OBJECT_DIR``
|
||||||
|
# (APPLE-only) variables can be used as additional hints.
|
||||||
|
#
|
||||||
|
# If you built crashpad with the default setup in "out/Default" within the
|
||||||
|
# source directory, you can set the ``Crashpad_ROOT`` variable to the source
|
||||||
|
# directory, or add it to ``CMAKE_PREFIX_PATH``.
|
||||||
|
#
|
||||||
|
# If found, this will define the following variables:
|
||||||
|
#
|
||||||
|
# ``Crashpad_FOUND``
|
||||||
|
# True if the necessary Crashpad files have been found
|
||||||
|
#
|
||||||
|
# ``Crashpad::Crashpad``
|
||||||
|
# Imported target to build against
|
||||||
|
#
|
||||||
|
# ``CRASHPAD_BIN_DIR``
|
||||||
|
# Directory where the crashpad_handler executable is found
|
||||||
|
|
||||||
|
if(TARGET Crashpad::Crashpad)
|
||||||
|
set(Crashpad_FOUND TRUE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(CRASHPAD_BIN_DIR
|
||||||
|
NAMES crashpad_handler crashpad_handler.exe
|
||||||
|
PATH_SUFFIXES out/Default
|
||||||
|
HINTS
|
||||||
|
"${CRASHPAD_BUILD_DIR}"
|
||||||
|
"${CMAKE_PREFIX_PATH}"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_path(CRASHPAD_INCLUDE_DIR
|
||||||
|
NAMES client/crashpad_client.h
|
||||||
|
HINTS
|
||||||
|
"${CRASHPAD_SOURCE_DIR}"
|
||||||
|
"${CMAKE_PREFIX_PATH}"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_path(CRASHPAD_LIB_DIR
|
||||||
|
NAMES util/libutil.a util/util.lib
|
||||||
|
PATH_SUFFIXES out/Default/obj
|
||||||
|
HINTS
|
||||||
|
"${CRASHPAD_BIN_DIR}/obj"
|
||||||
|
"${CMAKE_PREFIX_PATH}"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
find_path(CRASHPAD_OBJ_DIR
|
||||||
|
NAMES mig_output.child_portServer.o
|
||||||
|
PATH_SUFFIXES gen/util/mach
|
||||||
|
HINTS
|
||||||
|
"${CRASHPAD_OBJECT_DIR}"
|
||||||
|
"${CRASHPAD_LIB_DIR}/out/Default"
|
||||||
|
"${CMAKE_PREFIX_PATH}"
|
||||||
|
)
|
||||||
|
find_path(CRASHPAD_GEN_DIR
|
||||||
|
NAMES build/chromeos_buildflags.h
|
||||||
|
PATH_SUFFIXES gen
|
||||||
|
HINTS
|
||||||
|
"${CRASHPAD_BIN_DIR}"
|
||||||
|
"${CMAKE_PREFIX_PATH}"
|
||||||
|
)
|
||||||
|
set(CRASHPAD_APPLE_VARS CRASHPAD_OBJ_DIR CRASHPAD_GEN_DIR)
|
||||||
|
find_library(FWbsm bsm)
|
||||||
|
find_library(FWAppKit AppKit)
|
||||||
|
find_library(FWIOKit IOKit)
|
||||||
|
find_library(FWSecurity Security)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Crashpad DEFAULT_MSG
|
||||||
|
CRASHPAD_BIN_DIR CRASHPAD_INCLUDE_DIR CRASHPAD_LIB_DIR ${CRASHPAD_APPLE_VARS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(Crashpad_FOUND)
|
||||||
|
add_library(Crashpad::Crashpad UNKNOWN IMPORTED)
|
||||||
|
target_include_directories(Crashpad::Crashpad INTERFACE
|
||||||
|
"${CRASHPAD_INCLUDE_DIR}"
|
||||||
|
"${CRASHPAD_INCLUDE_DIR}/third_party/mini_chromium/mini_chromium")
|
||||||
|
if(WIN32)
|
||||||
|
target_link_libraries(Crashpad::Crashpad INTERFACE
|
||||||
|
"${CRASHPAD_LIB_DIR}/third_party/mini_chromium/mini_chromium/base/base.lib"
|
||||||
|
"${CRASHPAD_LIB_DIR}/util/util.lib"
|
||||||
|
"${CRASHPAD_LIB_DIR}/client/client.lib"
|
||||||
|
advapi32)
|
||||||
|
set_target_properties(Crashpad::Crashpad PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CRASHPAD_LIB_DIR}/client/client.lib")
|
||||||
|
elseif(APPLE)
|
||||||
|
target_link_libraries(Crashpad::Crashpad INTERFACE
|
||||||
|
"${CRASHPAD_LIB_DIR}/third_party/mini_chromium/mini_chromium/base/libbase.a"
|
||||||
|
"${CRASHPAD_LIB_DIR}/util/libutil.a"
|
||||||
|
"${CRASHPAD_LIB_DIR}/client/libclient.a"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.child_portServer.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.child_portUser.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.excServer.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.excUser.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.mach_excServer.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.mach_excUser.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.notifyServer.o"
|
||||||
|
"${CRASHPAD_OBJ_DIR}/mig_output.notifyUser.o"
|
||||||
|
${FWbsm} ${FWAppKit} ${FWIOKit} ${FWSecurity})
|
||||||
|
set_target_properties(Crashpad::Crashpad PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CRASHPAD_LIB_DIR}/client/libclient.a")
|
||||||
|
target_include_directories(Crashpad::Crashpad INTERFACE "${CRASHPAD_GEN_DIR}")
|
||||||
|
elseif(UNIX)
|
||||||
|
# TODO: Crashpad is not well supported on linux currently
|
||||||
|
target_link_libraries(Crashpad::Crashpad INTERFACE
|
||||||
|
"${CRASHPAD_LIB_DIR}/third_party/mini_chromium/mini_chromium/base/libbase.a"
|
||||||
|
"${CRASHPAD_LIB_DIR}/util/libutil.a"
|
||||||
|
"${CRASHPAD_LIB_DIR}/client/libclient.a")
|
||||||
|
set_target_properties(Crashpad::Crashpad PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${CRASHPAD_LIB_DIR}/client/libclient.a")
|
||||||
|
endif()
|
||||||
|
endif()
|
@@ -80,53 +80,14 @@ if (APPLE)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Crashpad
|
extend_qtc_executable(qtcreator
|
||||||
set(CRASHPAD_BACKEND_URL "" CACHE STRING "Crashpad backend URL")
|
CONDITION BUILD_WITH_CRASHPAD
|
||||||
set(CRASHPAD_SRC "" CACHE STRING "Path to Crashpad source code")
|
DEFINES
|
||||||
set(CRASHPAD_BUILD "" CACHE STRING "Path to Crashpad build folder")
|
CRASHPAD_BACKEND_URL="${CRASHPAD_BACKEND_URL}"
|
||||||
|
ENABLE_CRASHPAD
|
||||||
if (CRASHPAD_BACKEND_URL
|
WIN32_LEAN_AND_MEAN # It comes usually with precompiled header, but at the installer they are disabled
|
||||||
AND CRASHPAD_SRC
|
DEPENDS Crashpad::Crashpad
|
||||||
AND EXISTS "${CRASHPAD_SRC}"
|
)
|
||||||
AND CRASHPAD_BUILD
|
if(BUILD_WITH_CRASHPAD)
|
||||||
AND EXISTS "${CRASHPAD_BUILD}"
|
install(FILES ${CRASHPAD_BIN_DIR}/crashpad_handler${CMAKE_EXECUTABLE_SUFFIX} DESTINATION "${IDE_LIBEXEC_PATH}")
|
||||||
AND (WIN32 OR APPLE)) # LINUX isn't supported for now
|
|
||||||
target_compile_definitions(qtcreator PRIVATE
|
|
||||||
CRASHPAD_BACKEND_URL="${CRASHPAD_BACKEND_URL}"
|
|
||||||
ENABLE_CRASHPAD
|
|
||||||
WIN32_LEAN_AND_MEAN) # It comes usually with precompiled header, but at the installer they are disabled
|
|
||||||
target_include_directories(qtcreator PRIVATE
|
|
||||||
"${CRASHPAD_SRC}"
|
|
||||||
"${CRASHPAD_SRC}/third_party/mini_chromium/mini_chromium")
|
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
target_link_libraries(qtcreator PUBLIC ${CRASHPAD_BUILD}/obj/third_party/mini_chromium/mini_chromium/base/base.lib
|
|
||||||
${CRASHPAD_BUILD}/obj/util/util.lib
|
|
||||||
${CRASHPAD_BUILD}/obj/client/client.lib
|
|
||||||
advapi32)
|
|
||||||
install(FILES ${CRASHPAD_BUILD}/crashpad_handler.exe DESTINATION "${IDE_LIBEXEC_PATH}")
|
|
||||||
|
|
||||||
elseif(APPLE)
|
|
||||||
find_library(FWbsm bsm)
|
|
||||||
target_link_libraries(qtcreator PUBLIC ${CRASHPAD_BUILD}/obj/third_party/mini_chromium/mini_chromium/base/libbase.a
|
|
||||||
${CRASHPAD_BUILD}/obj/util/libutil.a
|
|
||||||
${CRASHPAD_BUILD}/obj/client/libclient.a
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.child_portServer.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.child_portUser.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.excServer.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.excUser.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.mach_excServer.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.mach_excUser.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.notifyServer.o
|
|
||||||
${CRASHPAD_BUILD}/obj/out/Default/gen/util/mach/mig_output.notifyUser.o
|
|
||||||
${FWbsm} ${FWAppKit} ${FWIOKit} ${FWSecurity})
|
|
||||||
install(FILES ${CRASHPAD_BUILD}/crashpad_handler DESTINATION "${IDE_LIBEXEC_PATH}")
|
|
||||||
|
|
||||||
elseif(UNIX)
|
|
||||||
# TODO: Crashpad is not well supported on linux currently
|
|
||||||
target_link_libraries(qtcreator PUBLIC ${CRASHPAD_BUILD}/obj/third_party/mini_chromium/mini_chromium/base/libbase.a
|
|
||||||
${CRASHPAD_BUILD}/obj/util/libutil.a
|
|
||||||
${CRASHPAD_BUILD}/obj/client/libclient.a)
|
|
||||||
install(FILES ${CRASHPAD_BUILD}/crashpad_handler DESTINATION "${IDE_LIBEXEC_PATH}")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
@@ -211,21 +211,10 @@ extend_qtc_executable(qml2puppet
|
|||||||
# Crashpad
|
# Crashpad
|
||||||
# only windows requires separate crashpad client per process until client->SetHandlerIPCPipe()
|
# only windows requires separate crashpad client per process until client->SetHandlerIPCPipe()
|
||||||
# is implemented (check the TODO inside startCrashpad())
|
# is implemented (check the TODO inside startCrashpad())
|
||||||
if (CRASHPAD_BACKEND_URL
|
extend_qtc_executable(qml2puppet
|
||||||
AND CRASHPAD_SRC
|
CONDITION BUILD_WITH_CRASHPAD AND WIN32
|
||||||
AND EXISTS "${CRASHPAD_SRC}"
|
DEFINES
|
||||||
AND CRASHPAD_BUILD
|
CRASHPAD_BACKEND_URL="${CRASHPAD_BACKEND_URL}"
|
||||||
AND EXISTS "${CRASHPAD_BUILD}"
|
ENABLE_CRASHPAD
|
||||||
AND WIN32)
|
DEPENDS Crashpad::Crashpad
|
||||||
target_compile_definitions(qml2puppet PRIVATE
|
)
|
||||||
CRASHPAD_BACKEND_URL="${CRASHPAD_BACKEND_URL}"
|
|
||||||
ENABLE_CRASHPAD)
|
|
||||||
target_include_directories(qml2puppet PRIVATE
|
|
||||||
"${CRASHPAD_SRC}"
|
|
||||||
"${CRASHPAD_SRC}/third_party/mini_chromium/mini_chromium")
|
|
||||||
|
|
||||||
target_link_libraries(qml2puppet PUBLIC ${CRASHPAD_BUILD}/obj/third_party/mini_chromium/mini_chromium/base/base.lib
|
|
||||||
${CRASHPAD_BUILD}/obj/util/util.lib
|
|
||||||
${CRASHPAD_BUILD}/obj/client/client.lib
|
|
||||||
advapi32)
|
|
||||||
endif()
|
|
||||||
|
Reference in New Issue
Block a user