summaryrefslogtreecommitdiff
path: root/lldb/tools
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2018-11-27 00:25:49 +0000
committerDavide Italiano <davide@freebsd.org>2018-11-27 00:25:49 +0000
commit56d76e22fdeb6671e814afc263741c42b77e56d3 (patch)
treeff84e65b50d0d9180c7b5cc661b4477c431010e7 /lldb/tools
parent34d364bd764c93041b22f52d8e77218216e65e2a (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.txt8
-rw-r--r--lldb/tools/debugserver/source/CMakeLists.txt172
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()
+
+
+
+