Turns out WITH_LOCKDOWN define changes the struct layout and constructor implementation for RNBSocket which is used in debugserver.cpp, so we need to make sure this is consistent. In the future we should change WITH_LOCKDOWN to be configured in a generated header, but for now we can just set it correctly. <rdar://problem/33900552> llvm-svn: 312666
230 lines
7.5 KiB
CMake
230 lines
7.5 KiB
CMake
include(CheckCXXCompilerFlag)
|
|
include(CheckLibraryExists)
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
|
|
include_directories(${LLDB_SOURCE_DIR}/source)
|
|
include_directories(MacOSX/DarwinLog)
|
|
|
|
include_directories(MacOSX)
|
|
#include_directories(${CMAKE_CURRENT_BINARY_DIR}/MacOSX)
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -Wl,-sectcreate,__TEXT,__info_plist,${CMAKE_CURRENT_SOURCE_DIR}/../resources/lldb-debugserver-Info.plist")
|
|
|
|
check_cxx_compiler_flag("-Wno-gnu-zero-variadic-macro-arguments"
|
|
CXX_SUPPORTS_NO_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS)
|
|
if (CXX_SUPPORTS_NO_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
|
|
endif ()
|
|
|
|
check_cxx_compiler_flag("-Wno-zero-length-array"
|
|
CXX_SUPPORTS_NO_ZERO_LENGTH_ARRAY)
|
|
if (CXX_SUPPORTS_NO_ZERO_LENGTH_ARRAY)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-zero-length-array")
|
|
endif ()
|
|
|
|
check_cxx_compiler_flag("-Wno-extended-offsetof"
|
|
CXX_SUPPORTS_NO_EXTENDED_OFFSETOF)
|
|
if (CXX_SUPPORTS_NO_EXTENDED_OFFSETOF)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-extended-offsetof")
|
|
endif ()
|
|
|
|
check_library_exists(compression compression_encode_buffer "" HAVE_LIBCOMPRESSION)
|
|
|
|
add_subdirectory(MacOSX)
|
|
|
|
set(generated_mach_interfaces
|
|
${CMAKE_CURRENT_BINARY_DIR}/mach_exc.h
|
|
${CMAKE_CURRENT_BINARY_DIR}/mach_excServer.c
|
|
${CMAKE_CURRENT_BINARY_DIR}/mach_excUser.c
|
|
)
|
|
add_custom_command(OUTPUT ${generated_mach_interfaces}
|
|
COMMAND mig ${CMAKE_CURRENT_SOURCE_DIR}/MacOSX/dbgnub-mig.defs
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/MacOSX/dbgnub-mig.defs
|
|
)
|
|
|
|
set(DEBUGSERVER_VERS_GENERATED_FILE ${CMAKE_CURRENT_BINARY_DIR}/debugserver_vers.c)
|
|
set_source_files_properties(${DEBUGSERVER_VERS_GENERATED_FILE} PROPERTIES GENERATED 1)
|
|
|
|
add_custom_command(OUTPUT ${DEBUGSERVER_VERS_GENERATED_FILE}
|
|
COMMAND ${LLDB_SOURCE_DIR}/scripts/generate-vers.pl
|
|
${LLDB_SOURCE_DIR}/lldb.xcodeproj/project.pbxproj debugserver
|
|
> ${DEBUGSERVER_VERS_GENERATED_FILE}
|
|
DEPENDS ${LLDB_SOURCE_DIR}/scripts/generate-vers.pl
|
|
${LLDB_SOURCE_DIR}/lldb.xcodeproj/project.pbxproj
|
|
)
|
|
|
|
set(lldbDebugserverCommonSources
|
|
DNBArch.cpp
|
|
DNBBreakpoint.cpp
|
|
DNB.cpp
|
|
DNBDataRef.cpp
|
|
DNBError.cpp
|
|
DNBLog.cpp
|
|
DNBRegisterInfo.cpp
|
|
DNBThreadResumeActions.cpp
|
|
JSON.cpp
|
|
StdStringExtractor.cpp
|
|
# JSON reader depends on the following LLDB-common files
|
|
${LLDB_SOURCE_DIR}/source/Host/common/StringConvert.cpp
|
|
${LLDB_SOURCE_DIR}/source/Host/common/SocketAddress.cpp
|
|
# end JSON reader dependencies
|
|
libdebugserver.cpp
|
|
PseudoTerminal.cpp
|
|
PThreadEvent.cpp
|
|
PThreadMutex.cpp
|
|
RNBContext.cpp
|
|
RNBRemote.cpp
|
|
RNBServices.cpp
|
|
RNBSocket.cpp
|
|
SysSignal.cpp
|
|
TTYState.cpp
|
|
|
|
MacOSX/CFBundle.cpp
|
|
MacOSX/CFString.cpp
|
|
MacOSX/Genealogy.cpp
|
|
MacOSX/MachException.cpp
|
|
MacOSX/MachProcess.mm
|
|
MacOSX/MachTask.mm
|
|
MacOSX/MachThread.cpp
|
|
MacOSX/MachThreadList.cpp
|
|
MacOSX/MachVMMemory.cpp
|
|
MacOSX/MachVMRegion.cpp
|
|
MacOSX/OsLogger.cpp
|
|
${generated_mach_interfaces}
|
|
${DEBUGSERVER_VERS_GENERATED_FILE})
|
|
|
|
add_library(lldbDebugserverCommon ${lldbDebugserverCommonSources})
|
|
|
|
|
|
if (APPLE)
|
|
if(IOS)
|
|
find_library(BACKBOARD_LIBRARY BackBoardServices
|
|
PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks)
|
|
find_library(FRONTBOARD_LIBRARY FrontBoardServices
|
|
PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks)
|
|
find_library(SPRINGBOARD_LIBRARY SpringBoardServices
|
|
PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks)
|
|
find_library(MOBILESERVICES_LIBRARY MobileCoreServices
|
|
PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks)
|
|
find_library(LOCKDOWN_LIBRARY lockdown)
|
|
|
|
if(NOT BACKBOARD_LIBRARY)
|
|
set(SKIP_DEBUGSERVER True)
|
|
endif()
|
|
else()
|
|
find_library(COCOA_LIBRARY Cocoa)
|
|
endif()
|
|
endif()
|
|
|
|
if(HAVE_LIBCOMPRESSION)
|
|
set(LIBCOMPRESSION compression)
|
|
endif()
|
|
|
|
if(NOT SKIP_DEBUGSERVER)
|
|
target_link_libraries(lldbDebugserverCommon
|
|
INTERFACE ${COCOA_LIBRARY}
|
|
${CORE_FOUNDATION_LIBRARY}
|
|
${FOUNDATION_LIBRARY}
|
|
${BACKBOARD_LIBRARY}
|
|
${FRONTBOARD_LIBRARY}
|
|
${SPRINGBOARD_LIBRARY}
|
|
${MOBILESERVICES_LIBRARY}
|
|
${LOCKDOWN_LIBRARY}
|
|
lldbDebugserverArchSupport
|
|
lldbDebugserverDarwin_DarwinLog
|
|
${LIBCOMPRESSION})
|
|
if(HAVE_LIBCOMPRESSION)
|
|
set_property(TARGET lldbDebugserverCommon APPEND PROPERTY
|
|
COMPILE_DEFINITIONS HAVE_LIBCOMPRESSION)
|
|
endif()
|
|
set(LLVM_OPTIONAL_SOURCES ${lldbDebugserverCommonSources})
|
|
add_lldb_tool(debugserver INCLUDE_IN_FRAMEWORK
|
|
debugserver.cpp
|
|
|
|
LINK_LIBS
|
|
lldbDebugserverCommon
|
|
)
|
|
if(IOS)
|
|
set_property(TARGET lldbDebugserverCommon APPEND PROPERTY COMPILE_DEFINITIONS
|
|
WITH_LOCKDOWN
|
|
WITH_FBS
|
|
WITH_BKS
|
|
)
|
|
set_property(TARGET debugserver APPEND PROPERTY COMPILE_DEFINITIONS
|
|
WITH_LOCKDOWN
|
|
WITH_FBS
|
|
WITH_BKS
|
|
)
|
|
set_property(TARGET lldbDebugserverCommon APPEND PROPERTY COMPILE_FLAGS
|
|
-F${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(IOS)
|
|
add_library(lldbDebugserverCommon_NonUI ${lldbDebugserverCommonSources})
|
|
target_link_libraries(lldbDebugserverCommon_NonUI
|
|
INTERFACE ${COCOA_LIBRARY}
|
|
${CORE_FOUNDATION_LIBRARY}
|
|
${FOUNDATION_LIBRARY}
|
|
lldbDebugserverArchSupport
|
|
lldbDebugserverDarwin_DarwinLog
|
|
${LIBCOMPRESSION})
|
|
if(HAVE_LIBCOMPRESSION)
|
|
set_property(TARGET lldbDebugserverCommon_NonUI APPEND PROPERTY
|
|
COMPILE_DEFINITIONS HAVE_LIBCOMPRESSION)
|
|
endif()
|
|
|
|
add_lldb_tool(debugserver-nonui
|
|
debugserver.cpp
|
|
|
|
LINK_LIBS
|
|
lldbDebugserverCommon_NonUI
|
|
)
|
|
endif()
|
|
|
|
set(entitlements_xml ${CMAKE_CURRENT_SOURCE_DIR}/debugserver-macosx-entitlements.plist)
|
|
if(IOS)
|
|
set(entitlements_xml ${CMAKE_CURRENT_SOURCE_DIR}/debugserver-entitlements.plist)
|
|
endif()
|
|
|
|
set(LLDB_CODESIGN_IDENTITY "lldb_codesign"
|
|
CACHE STRING "Identity used for code signing. Set to empty string to skip the signing step.")
|
|
set(LLDB_USE_ENTITLEMENTS_Default On)
|
|
if("${LLDB_CODESIGN_IDENTITY}" STREQUAL "lldb_codesign")
|
|
set(LLDB_USE_ENTITLEMENTS_Default Off)
|
|
endif()
|
|
option(LLDB_USE_ENTITLEMENTS "Use entitlements when codesigning (Defaults Off when using lldb_codesign identity, otherwise On)" ${LLDB_USE_ENTITLEMENTS_Default})
|
|
|
|
if (NOT ("${LLDB_CODESIGN_IDENTITY}" STREQUAL ""))
|
|
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>
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
|
)
|
|
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>
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
|
|
|