diff options
author | Davide Italiano <davide@freebsd.org> | 2018-11-27 00:25:49 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2018-11-27 00:25:49 +0000 |
commit | 56d76e22fdeb6671e814afc263741c42b77e56d3 (patch) | |
tree | ff84e65b50d0d9180c7b5cc661b4477c431010e7 /lldb/tools | |
parent | 34d364bd764c93041b22f52d8e77218216e65e2a (diff) |
Revert "[CMake] Streamline code signing for debugserver and pass entitlements to extended llvm_codesign"
It breaks the lldb cmake bots.
Diffstat (limited to 'lldb/tools')
-rw-r--r-- | lldb/tools/debugserver/CMakeLists.txt | 8 | ||||
-rw-r--r-- | lldb/tools/debugserver/source/CMakeLists.txt | 172 |
2 files changed, 69 insertions, 111 deletions
diff --git a/lldb/tools/debugserver/CMakeLists.txt b/lldb/tools/debugserver/CMakeLists.txt index 9901165a084..ae436b8f07c 100644 --- a/lldb/tools/debugserver/CMakeLists.txt +++ b/lldb/tools/debugserver/CMakeLists.txt @@ -8,18 +8,12 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) "${CMAKE_SOURCE_DIR}/../../cmake" "${CMAKE_SOURCE_DIR}/../../cmake/modules" ) - + include(LLDBStandalone) include(AddLLDB) set(LLDB_SOURCE_DIR "${CMAKE_SOURCE_DIR}/../../") include_directories(${LLDB_SOURCE_DIR}/include) - - option(LLDB_USE_ENTITLEMENTS "When codesigning, use entitlements if available" ON) - if(LLDB_CODESIGN_IDENTITY) - # In the future we may use LLVM_CODESIGNING_IDENTITY directly. - set(LLVM_CODESIGNING_IDENTITY ${LLDB_CODESIGN_IDENTITY}) - endif() endif() add_subdirectory(source) diff --git a/lldb/tools/debugserver/source/CMakeLists.txt b/lldb/tools/debugserver/source/CMakeLists.txt index 2b16f1c4390..16369e46e54 100644 --- a/lldb/tools/debugserver/source/CMakeLists.txt +++ b/lldb/tools/debugserver/source/CMakeLists.txt @@ -94,102 +94,32 @@ set(lldbDebugserverCommonSources add_library(lldbDebugserverCommon ${lldbDebugserverCommonSources}) -option(LLDB_NO_DEBUGSERVER "Disable the debugserver target" OFF) -option(LLDB_USE_SYSTEM_DEBUGSERVER "Use the system's debugserver instead of building it from source (Darwin only)." OFF) -# Incompatible options -if(LLDB_NO_DEBUGSERVER AND LLDB_USE_SYSTEM_DEBUGSERVER) - message(FATAL_ERROR "Inconsistent options: LLDB_NO_DEBUGSERVER and LLDB_USE_SYSTEM_DEBUGSERVER") -endif() +set(LLDB_CODESIGN_IDENTITY "lldb_codesign" + CACHE STRING "Identity used for code signing. Set to empty string to skip the signing step.") -# Try to locate the system debugserver. -# Subsequent feasibility checks depend on it. -if(APPLE AND CMAKE_HOST_APPLE) +if(NOT LLDB_CODESIGN_IDENTITY STREQUAL "") + set(DEBUGSERVER_PATH ${LLVM_RUNTIME_OUTPUT_INTDIR}/debugserver${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "Path to debugserver.") + set(SKIP_DEBUGSERVER OFF CACHE BOOL "Skip building the in-tree debug server") +else() execute_process( COMMAND xcode-select -p - OUTPUT_VARIABLE xcode_dev_dir) - string(STRIP ${xcode_dev_dir} xcode_dev_dir) - - set(debugserver_rel_path "LLDB.framework/Resources/debugserver") - set(debugserver_shared "${xcode_dev_dir}/../SharedFrameworks/${debugserver_rel_path}") - set(debugserver_private "${xcode_dev_dir}/Library/PrivateFrameworks/${debugserver_rel_path}") - - if(EXISTS ${debugserver_shared}) - set(system_debugserver ${debugserver_shared}) - elseif(EXISTS ${debugserver_private}) - set(system_debugserver ${debugserver_private}) - endif() -endif() - -# Handle unavailability -if(LLDB_USE_SYSTEM_DEBUGSERVER) - if(system_debugserver) - set(use_system_debugserver ON) - elseif(APPLE AND CMAKE_HOST_APPLE) - # Binary not found on system. Keep cached variable, to try again on reconfigure. - message(SEND_ERROR - "LLDB_USE_SYSTEM_DEBUGSERVER option set, but no debugserver found in:\ - ${debugserver_shared}\ - ${debugserver_private}") + OUTPUT_VARIABLE XCODE_DEV_DIR) + string(STRIP ${XCODE_DEV_DIR} XCODE_DEV_DIR) + if(EXISTS "${XCODE_DEV_DIR}/../SharedFrameworks/LLDB.framework/") + set(DEBUGSERVER_PATH + "${XCODE_DEV_DIR}/../SharedFrameworks/LLDB.framework/Resources/debugserver" CACHE PATH "Path to debugserver.") + elseif(EXISTS "${XCODE_DEV_DIR}/Library/PrivateFrameworks/LLDB.framework/") + set(DEBUGSERVER_PATH + "${XCODE_DEV_DIR}/Library/PrivateFrameworks/LLDB.framework/Resources/debugserver" CACHE PATH "Path to debugserver.") else() - # Non-Apple target platform or non-Darwin host. Reset invalid cached variable. - message(WARNING "Reverting invalid option LLDB_USE_SYSTEM_DEBUGSERVER (Darwin only)") - set(LLDB_USE_SYSTEM_DEBUGSERVER OFF CACHE BOOL "" FORCE) + message(SEND_ERROR "Cannot find debugserver on system.") endif() -elseif(NOT LLDB_NO_DEBUGSERVER) - # Default case: on Darwin we need the right code signing ID. - # See lldb/docs/code-signing.txt for details. - if(CMAKE_HOST_APPLE AND NOT LLVM_CODESIGNING_IDENTITY STREQUAL "lldb_codesign") - set(msg "Cannot code sign debugserver with identity '${LLVM_CODESIGNING_IDENTITY}'.") - if(system_debugserver) - message(WARNING "${msg} Will fall back to system's debugserver.") - set(use_system_debugserver ON) - else() - message(WARNING "${msg} debugserver will not be available.") - endif() - else() - set(build_and_sign_debugserver ON) - endif() -endif() - -# TODO: We don't use the $<TARGET_FILE:debugserver> generator expression here, -# because the value of DEBUGSERVER_PATH is used to build LLDB_DOTEST_ARGS, -# which is used for configuring lldb-dotest.in, which does not have a generator -# step at the moment. -set(default_debugserver_path "${LLVM_TOOLS_BINARY_DIR}/debugserver${CMAKE_EXECUTABLE_SUFFIX}") - -# Remember where debugserver binary goes and whether or not we have to test it. -set(DEBUGSERVER_PATH "" CACHE FILEPATH "Path to debugserver") -set(SKIP_TEST_DEBUGSERVER OFF CACHE BOOL "Building the in-tree debugserver was skipped") - -# Reset values in all cases in order to correctly support reconfigurations. -if(use_system_debugserver) - add_custom_target(debugserver - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${system_debugserver} ${LLVM_TOOLS_BINARY_DIR} - COMMENT "Copying the system debugserver to LLDB's binaries directory.") - - # Don't test debugserver itself. - # Tests that require debugserver will use the copy. - set(DEBUGSERVER_PATH ${default_debugserver_path} CACHE FILEPATH "" FORCE) - set(SKIP_TEST_DEBUGSERVER ON CACHE BOOL "" FORCE) - - message(STATUS "Copy system debugserver from: ${system_debugserver}") -elseif(build_and_sign_debugserver) - # Build, sign and test debugserver (below) - set(DEBUGSERVER_PATH ${default_debugserver_path} CACHE FILEPATH "" FORCE) - set(SKIP_TEST_DEBUGSERVER OFF CACHE BOOL "" FORCE) - - message(STATUS "lldb debugserver: ${DEBUGSERVER_PATH}") -else() - # No tests for debugserver, no tests that require it. - set(DEBUGSERVER_PATH "" CACHE FILEPATH "" FORCE) - set(SKIP_TEST_DEBUGSERVER ON CACHE BOOL "" FORCE) - - message(STATUS "lldb debugserver will not be available.") + set(SKIP_DEBUGSERVER ON CACHE BOOL "Skip building the in-tree debug server") endif() +message(STATUS "Path to the lldb debugserver: ${DEBUGSERVER_PATH}") -if(APPLE) +if (APPLE) if(IOS) find_library(BACKBOARD_LIBRARY BackBoardServices PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks) @@ -202,7 +132,7 @@ if(APPLE) find_library(LOCKDOWN_LIBRARY lockdown) if(NOT BACKBOARD_LIBRARY) - set(SKIP_TEST_DEBUGSERVER ON CACHE BOOL "" FORCE) + set(SKIP_DEBUGSERVER ON CACHE BOOL "Skip building the in-tree debug server" FORCE) endif() else() find_library(COCOA_LIBRARY Cocoa) @@ -213,16 +143,7 @@ if(HAVE_LIBCOMPRESSION) set(LIBCOMPRESSION compression) endif() -if(LLDB_USE_ENTITLEMENTS) - if(IOS) - set(entitlements ${CMAKE_CURRENT_SOURCE_DIR}/debugserver-entitlements.plist) - else() - # Same entitlements file as used for lldb-server - set(entitlements ${LLDB_SOURCE_DIR}/resources/debugserver-macosx-entitlements.plist) - endif() -endif() - -if(build_and_sign_debugserver) +if(NOT SKIP_DEBUGSERVER) target_link_libraries(lldbDebugserverCommon INTERFACE ${COCOA_LIBRARY} ${CORE_FOUNDATION_LIBRARY} @@ -245,9 +166,6 @@ if(build_and_sign_debugserver) LINK_LIBS lldbDebugserverCommon - - ENTITLEMENTS - ${entitlements} ) if(IOS) set_property(TARGET lldbDebugserverCommon APPEND PROPERTY COMPILE_DEFINITIONS @@ -285,8 +203,54 @@ if(IOS) LINK_LIBS lldbDebugserverCommon_NonUI + ) +endif() - ENTITLEMENTS - ${entitlements} +set(entitlements_xml ${CMAKE_CURRENT_SOURCE_DIR}/debugserver-macosx-entitlements.plist) +if(IOS) + set(entitlements_xml ${CMAKE_CURRENT_SOURCE_DIR}/debugserver-entitlements.plist) +else() + set(entitlements_xml ${CMAKE_CURRENT_SOURCE_DIR}/../../../resources/debugserver-macosx-entitlements.plist) +endif() + +set(LLDB_USE_ENTITLEMENTS_Default On) +option(LLDB_USE_ENTITLEMENTS "Use entitlements when codesigning (Defaults Off when using lldb_codesign identity, otherwise On)" ${LLDB_USE_ENTITLEMENTS_Default}) + +if (SKIP_DEBUGSERVER) + if (CMAKE_HOST_APPLE) + # If we haven't built a signed debugserver, copy the one from the system. + add_custom_target(debugserver + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEBUGSERVER_PATH} ${CMAKE_BINARY_DIR}/bin + VERBATIM + COMMENT "Copying the system debugserver to LLDB's binaries directory.") + endif() +else() + if(LLDB_USE_ENTITLEMENTS) + set(entitlements_flags --entitlements ${entitlements_xml}) + endif() + execute_process( + COMMAND xcrun -f codesign_allocate + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE CODESIGN_ALLOCATE + ) + add_custom_command(TARGET debugserver + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E env CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} + codesign --force --sign ${LLDB_CODESIGN_IDENTITY} + ${entitlements_flags} + $<TARGET_FILE:debugserver> + ) + if(IOS) + add_custom_command(TARGET debugserver-nonui + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E env CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} + codesign --force --sign ${LLDB_CODESIGN_IDENTITY} + ${entitlements_flags} + $<TARGET_FILE:debugserver> ) + endif() endif() + + + + |