vsk created this revision.
vsk added reviewers: JDevlieghere, davide, friss.
Herald added a subscriber: mgorny.
Herald added a project: LLDB.
vsk requested review of this revision.
This patch configures LLDB.framework to build as a flat unversioned
framework on non-macOS Darwin targets, which have never supported the
macOS framework layout.
This patch also renames the 'IOS' cmake variable to 'APPLE_EMBEDDED' to
reflect the fact that lldb is built for several different kinds of embedded
Darwin targets, not just iOS.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D85770
Files:
lldb/cmake/modules/LLDBConfig.cmake
lldb/cmake/modules/LLDBFramework.cmake
lldb/source/Host/CMakeLists.txt
lldb/tools/debugserver/source/CMakeLists.txt
lldb/tools/lldb-server/CMakeLists.txt
lldb/unittests/debugserver/CMakeLists.txt
Index: lldb/unittests/debugserver/CMakeLists.txt
===================================================================
--- lldb/unittests/debugserver/CMakeLists.txt
+++ lldb/unittests/debugserver/CMakeLists.txt
@@ -20,7 +20,7 @@
Support
)
-if(IOS)
+if(APPLE_EMBEDDED)
set_property(TARGET debugserverTests APPEND PROPERTY COMPILE_DEFINITIONS
WITH_LOCKDOWN
WITH_FBS
Index: lldb/tools/lldb-server/CMakeLists.txt
===================================================================
--- lldb/tools/lldb-server/CMakeLists.txt
+++ lldb/tools/lldb-server/CMakeLists.txt
@@ -16,7 +16,7 @@
list(APPEND LLDB_PLUGINS lldbPluginObjectFileELF)
endif()
-if(IOS)
+if(APPLE_EMBEDDED)
if(LLDB_CODESIGN_IDENTITY)
# Use explicit LLDB identity
set(LLVM_CODESIGNING_IDENTITY ${LLDB_CODESIGN_IDENTITY})
Index: lldb/tools/debugserver/source/CMakeLists.txt
===================================================================
--- lldb/tools/debugserver/source/CMakeLists.txt
+++ lldb/tools/debugserver/source/CMakeLists.txt
@@ -99,7 +99,7 @@
LLDB_DEBUGSERVER_CODESIGN_IDENTITY ${debugserver_codesign_identity})
if(APPLE)
- if(IOS)
+ if(APPLE_EMBEDDED)
find_library(BACKBOARD_LIBRARY BackBoardServices
PATHS ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks)
find_library(FRONTBOARD_LIBRARY FrontBoardServices
@@ -121,7 +121,7 @@
endif()
if(LLDB_USE_ENTITLEMENTS)
- if(IOS)
+ if(APPLE_EMBEDDED)
set(entitlements ${CMAKE_CURRENT_SOURCE_DIR}/debugserver-entitlements.plist)
else()
# Same entitlements file as used for lldb-server
@@ -258,7 +258,7 @@
set_target_properties(debugserver PROPERTIES FOLDER "lldb libraries/debugserver")
-if(IOS)
+if(APPLE_EMBEDDED)
set_property(TARGET lldbDebugserverCommon APPEND PROPERTY COMPILE_DEFINITIONS
WITH_LOCKDOWN
WITH_FBS
Index: lldb/source/Host/CMakeLists.txt
===================================================================
--- lldb/source/Host/CMakeLists.txt
+++ lldb/source/Host/CMakeLists.txt
@@ -93,7 +93,7 @@
macosx/cfcpp/CFCMutableSet.cpp
macosx/cfcpp/CFCString.cpp
)
- if(IOS)
+ if(APPLE_EMBEDDED)
set_property(SOURCE macosx/Host.mm APPEND PROPERTY
COMPILE_DEFINITIONS "NO_XPC_SERVICES=1")
endif()
Index: lldb/cmake/modules/LLDBFramework.cmake
===================================================================
--- lldb/cmake/modules/LLDBFramework.cmake
+++ lldb/cmake/modules/LLDBFramework.cmake
@@ -3,22 +3,38 @@
message(STATUS "LLDB.framework: resources subdirectory is 'Versions/${LLDB_FRAMEWORK_VERSION}/Resources'")
# Configure liblldb as a framework bundle
-set_target_properties(liblldb PROPERTIES
- FRAMEWORK ON
- FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION}
+if(NOT APPLE_EMBEDDED)
+ set_target_properties(liblldb PROPERTIES
+ FRAMEWORK ON
+ FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION}
- OUTPUT_NAME LLDB
- VERSION ${LLDB_VERSION}
- LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}
+ OUTPUT_NAME LLDB
+ VERSION ${LLDB_VERSION}
+ LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}
- # Compatibility version
- SOVERSION "1.0.0"
+ # Compatibility version
+ SOVERSION "1.0.0"
- MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework
- MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION}
- MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION}
- MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in
-)
+ MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework
+ MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION}
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION}
+ MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in
+ )
+else()
+ set_target_properties(liblldb PROPERTIES
+ FRAMEWORK ON
+ FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION}
+
+ # Note: iOS doesn't specify version, as the framework layout is flat.
+ OUTPUT_NAME LLDB
+ LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}
+
+ MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework
+ MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION}
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION}
+ MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in
+ )
+endif()
# Used in llvm_add_library() to set default output directories for multi-config
# generators. Overwrite to account for special framework output directory.
@@ -30,7 +46,7 @@
lldb_add_post_install_steps_darwin(liblldb ${LLDB_FRAMEWORK_INSTALL_DIR})
# Affects the layout of the framework bundle (default is macOS layout).
-if(IOS)
+if(APPLE_EMBEDDED)
set_target_properties(liblldb PROPERTIES
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${IPHONEOS_DEPLOYMENT_TARGET}")
else()
@@ -41,13 +57,16 @@
# Add -Wdocumentation parameter
set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_DOCUMENTATION_COMMENTS "YES")
-# Apart from this one, CMake creates all required symlinks in the framework bundle.
-add_custom_command(TARGET liblldb POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E create_symlink
- Versions/Current/Headers
- ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Headers
- COMMENT "LLDB.framework: create Headers symlink"
-)
+# On iOS, there is no versioned framework layout. Skip this symlink step.
+if(NOT APPLE_EMBEDDED)
+ # Apart from this one, CMake creates all required symlinks in the framework bundle.
+ add_custom_command(TARGET liblldb POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ Versions/Current/Headers
+ ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Headers
+ COMMENT "LLDB.framework: create Headers symlink"
+ )
+endif()
# At configuration time, collect headers for the framework bundle and copy them
# into a staging directory. Later we can copy over the entire folder.
@@ -79,16 +98,14 @@
# At build time, copy the staged headers into the framework bundle (and do
# some post-processing in-place).
-if (NOT IOS)
add_custom_command(TARGET liblldb POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${lldb_header_staging} $<TARGET_FILE_DIR:liblldb>/Headers
COMMAND ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.sh $<TARGET_FILE_DIR:liblldb>/Headers ${LLDB_VERSION}
COMMENT "LLDB.framework: copy framework headers"
)
-endif()
# Copy vendor-specific headers from clang (without staging).
-if(NOT IOS)
+if(NOT APPLE_EMBEDDED)
if (TARGET clang-resource-headers)
add_dependencies(liblldb clang-resource-headers)
set(clang_resource_headers_dir $<TARGET_PROPERTY:clang-resource-headers,RUNTIME_OUTPUT_DIRECTORY>)
@@ -120,6 +137,16 @@
)
endif()
+# IOS framework bundles are flat
+if(NOT APPLE_EMBEDDED)
+ add_custom_command(TARGET liblldb POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ Versions/Current/XPCServices
+ ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/XPCServices
+ COMMENT "LLDB.framework: create symlink XPCServices"
+ )
+endif()
+
# Add an rpath pointing to the directory where LLDB.framework is installed.
# This allows frameworks (relying on @rpath) to be installed in the same folder and found at runtime.
set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH
Index: lldb/cmake/modules/LLDBConfig.cmake
===================================================================
--- lldb/cmake/modules/LLDBConfig.cmake
+++ lldb/cmake/modules/LLDBConfig.cmake
@@ -267,7 +267,7 @@
# Find Apple-specific libraries or frameworks that may be needed.
if (APPLE)
- if(NOT IOS)
+ if(NOT APPLE_EMBEDDED)
find_library(CARBON_LIBRARY Carbon)
find_library(CORE_SERVICES_LIBRARY CoreServices)
endif()
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits