1message(STATUS "LLDB.framework: build path is '${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}'") 2message(STATUS "LLDB.framework: install path is '${LLDB_FRAMEWORK_INSTALL_DIR}'") 3message(STATUS "LLDB.framework: resources subdirectory is 'Versions/${LLDB_FRAMEWORK_VERSION}/Resources'") 4 5# Configure liblldb as a framework bundle 6if(NOT APPLE_EMBEDDED) 7 set_target_properties(liblldb PROPERTIES 8 FRAMEWORK ON 9 FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION} 10 11 OUTPUT_NAME LLDB 12 VERSION ${LLDB_VERSION} 13 LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 14 15 # Compatibility version 16 SOVERSION "1.0.0" 17 18 MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework 19 MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION} 20 MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION} 21 MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in 22 ) 23else() 24 set_target_properties(liblldb PROPERTIES 25 FRAMEWORK ON 26 FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION} 27 28 # Note: iOS doesn't specify version, as the framework layout is flat. 29 OUTPUT_NAME LLDB 30 LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 31 32 MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework 33 MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION} 34 MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION} 35 MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in 36 ) 37endif() 38 39# Used in llvm_add_library() to set default output directories for multi-config 40# generators. Overwrite to account for special framework output directory. 41set_output_directory(liblldb 42 BINARY_DIR ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 43 LIBRARY_DIR ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 44) 45 46lldb_add_post_install_steps_darwin(liblldb ${LLDB_FRAMEWORK_INSTALL_DIR}) 47 48# Affects the layout of the framework bundle (default is macOS layout). 49if(APPLE_EMBEDDED) 50 set_target_properties(liblldb PROPERTIES 51 XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${IPHONEOS_DEPLOYMENT_TARGET}") 52else() 53 set_target_properties(liblldb PROPERTIES 54 XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "${MACOSX_DEPLOYMENT_TARGET}") 55endif() 56 57# Add -Wdocumentation parameter 58set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_DOCUMENTATION_COMMENTS "YES") 59 60# On iOS, there is no versioned framework layout. Skip this symlink step. 61if(NOT APPLE_EMBEDDED) 62 # Apart from this one, CMake creates all required symlinks in the framework bundle. 63 add_custom_command(TARGET liblldb POST_BUILD 64 COMMAND ${CMAKE_COMMAND} -E create_symlink 65 Versions/Current/Headers 66 ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Headers 67 COMMENT "LLDB.framework: create Headers symlink" 68 ) 69endif() 70 71# At configuration time, collect headers for the framework bundle and copy them 72# into a staging directory. Later we can copy over the entire folder. 73file(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h) 74file(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h) 75file(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h) 76list(REMOVE_ITEM root_public_headers ${root_private_headers}) 77 78set(lldb_header_staging ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders) 79foreach(header 80 ${public_headers} 81 ${root_public_headers}) 82 83 get_filename_component(basename ${header} NAME) 84 set(staged_header ${lldb_header_staging}/${basename}) 85 86 add_custom_command( 87 DEPENDS ${header} OUTPUT ${staged_header} 88 COMMAND ${CMAKE_COMMAND} -E copy ${header} ${staged_header} 89 COMMENT "LLDB.framework: collect framework header") 90 91 list(APPEND lldb_staged_headers ${staged_header}) 92endforeach() 93 94# Wrap output in a target, so lldb-framework can depend on it. 95add_custom_target(liblldb-resource-headers DEPENDS ${lldb_staged_headers}) 96set_target_properties(liblldb-resource-headers PROPERTIES FOLDER "lldb misc") 97add_dependencies(liblldb liblldb-resource-headers) 98 99# At build time, copy the staged headers into the framework bundle (and do 100# some post-processing in-place). 101add_custom_command(TARGET liblldb POST_BUILD 102 COMMAND ${CMAKE_COMMAND} -E copy_directory ${lldb_header_staging} $<TARGET_FILE_DIR:liblldb>/Headers 103 COMMAND ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.sh $<TARGET_FILE_DIR:liblldb>/Headers ${LLDB_VERSION} 104 COMMENT "LLDB.framework: copy framework headers" 105) 106 107# Copy vendor-specific headers from clang (without staging). 108if(NOT APPLE_EMBEDDED) 109 if (TARGET clang-resource-headers) 110 add_dependencies(liblldb clang-resource-headers) 111 set(clang_resource_headers_dir $<TARGET_PROPERTY:clang-resource-headers,RUNTIME_OUTPUT_DIRECTORY>) 112 else() 113 set(clang_resource_headers_dir ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}/include) 114 if(NOT EXISTS ${clang_resource_headers_dir}) 115 message(WARNING "Expected directory for clang-resource headers not found: ${clang_resource_headers_dir}") 116 endif() 117 endif() 118 119 add_custom_command(TARGET liblldb POST_BUILD 120 COMMAND ${CMAKE_COMMAND} -E copy_directory 121 ${clang_resource_headers_dir} 122 $<TARGET_FILE_DIR:liblldb>/Resources/Clang/include 123 COMMENT "LLDB.framework: copy clang vendor-specific headers" 124 ) 125endif() 126 127# Add an rpath pointing to the directory where LLDB.framework is installed. 128# This allows frameworks (relying on @rpath) to be installed in the same folder and found at runtime. 129set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH 130 "@loader_path/../../../") 131