1061da546Spatrickmessage(STATUS "LLDB.framework: build path is '${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}'") 2061da546Spatrickmessage(STATUS "LLDB.framework: install path is '${LLDB_FRAMEWORK_INSTALL_DIR}'") 3061da546Spatrickmessage(STATUS "LLDB.framework: resources subdirectory is 'Versions/${LLDB_FRAMEWORK_VERSION}/Resources'") 4061da546Spatrick 5061da546Spatrick# Configure liblldb as a framework bundle 6*be691f3bSpatrickif(NOT APPLE_EMBEDDED) 7061da546Spatrick set_target_properties(liblldb PROPERTIES 8061da546Spatrick FRAMEWORK ON 9061da546Spatrick FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION} 10061da546Spatrick 11061da546Spatrick OUTPUT_NAME LLDB 12061da546Spatrick VERSION ${LLDB_VERSION} 13061da546Spatrick LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 14061da546Spatrick 15061da546Spatrick # Compatibility version 16061da546Spatrick SOVERSION "1.0.0" 17061da546Spatrick 18061da546Spatrick MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework 19061da546Spatrick MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION} 20061da546Spatrick MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION} 21061da546Spatrick MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in 22061da546Spatrick ) 23*be691f3bSpatrickelse() 24*be691f3bSpatrick set_target_properties(liblldb PROPERTIES 25*be691f3bSpatrick FRAMEWORK ON 26*be691f3bSpatrick FRAMEWORK_VERSION ${LLDB_FRAMEWORK_VERSION} 27*be691f3bSpatrick 28*be691f3bSpatrick # Note: iOS doesn't specify version, as the framework layout is flat. 29*be691f3bSpatrick OUTPUT_NAME LLDB 30*be691f3bSpatrick LIBRARY_OUTPUT_DIRECTORY ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 31*be691f3bSpatrick 32*be691f3bSpatrick MACOSX_FRAMEWORK_IDENTIFIER com.apple.LLDB.framework 33*be691f3bSpatrick MACOSX_FRAMEWORK_BUNDLE_VERSION ${LLDB_VERSION} 34*be691f3bSpatrick MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${LLDB_VERSION} 35*be691f3bSpatrick MACOSX_FRAMEWORK_INFO_PLIST ${LLDB_SOURCE_DIR}/resources/LLDB-Info.plist.in 36*be691f3bSpatrick ) 37*be691f3bSpatrickendif() 38061da546Spatrick 39061da546Spatrick# Used in llvm_add_library() to set default output directories for multi-config 40061da546Spatrick# generators. Overwrite to account for special framework output directory. 41061da546Spatrickset_output_directory(liblldb 42061da546Spatrick BINARY_DIR ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 43061da546Spatrick LIBRARY_DIR ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR} 44061da546Spatrick) 45061da546Spatrick 46061da546Spatricklldb_add_post_install_steps_darwin(liblldb ${LLDB_FRAMEWORK_INSTALL_DIR}) 47061da546Spatrick 48061da546Spatrick# Affects the layout of the framework bundle (default is macOS layout). 49*be691f3bSpatrickif(APPLE_EMBEDDED) 50061da546Spatrick set_target_properties(liblldb PROPERTIES 51061da546Spatrick XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${IPHONEOS_DEPLOYMENT_TARGET}") 52061da546Spatrickelse() 53061da546Spatrick set_target_properties(liblldb PROPERTIES 54061da546Spatrick XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "${MACOSX_DEPLOYMENT_TARGET}") 55061da546Spatrickendif() 56061da546Spatrick 57061da546Spatrick# Add -Wdocumentation parameter 58061da546Spatrickset(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_DOCUMENTATION_COMMENTS "YES") 59061da546Spatrick 60*be691f3bSpatrick# On iOS, there is no versioned framework layout. Skip this symlink step. 61*be691f3bSpatrickif(NOT APPLE_EMBEDDED) 62061da546Spatrick # Apart from this one, CMake creates all required symlinks in the framework bundle. 63061da546Spatrick add_custom_command(TARGET liblldb POST_BUILD 64061da546Spatrick COMMAND ${CMAKE_COMMAND} -E create_symlink 65061da546Spatrick Versions/Current/Headers 66061da546Spatrick ${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Headers 67061da546Spatrick COMMENT "LLDB.framework: create Headers symlink" 68061da546Spatrick ) 69*be691f3bSpatrickendif() 70061da546Spatrick 71061da546Spatrick# At configuration time, collect headers for the framework bundle and copy them 72061da546Spatrick# into a staging directory. Later we can copy over the entire folder. 73061da546Spatrickfile(GLOB public_headers ${LLDB_SOURCE_DIR}/include/lldb/API/*.h) 74061da546Spatrickfile(GLOB root_public_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-*.h) 75061da546Spatrickfile(GLOB root_private_headers ${LLDB_SOURCE_DIR}/include/lldb/lldb-private*.h) 76061da546Spatricklist(REMOVE_ITEM root_public_headers ${root_private_headers}) 77061da546Spatrick 78061da546Spatrickset(lldb_header_staging ${CMAKE_CURRENT_BINARY_DIR}/FrameworkHeaders) 79061da546Spatrickforeach(header 80061da546Spatrick ${public_headers} 81dda28197Spatrick ${root_public_headers}) 82061da546Spatrick 83061da546Spatrick get_filename_component(basename ${header} NAME) 84061da546Spatrick set(staged_header ${lldb_header_staging}/${basename}) 85061da546Spatrick 86061da546Spatrick add_custom_command( 87061da546Spatrick DEPENDS ${header} OUTPUT ${staged_header} 88061da546Spatrick COMMAND ${CMAKE_COMMAND} -E copy ${header} ${staged_header} 89061da546Spatrick COMMENT "LLDB.framework: collect framework header") 90061da546Spatrick 91061da546Spatrick list(APPEND lldb_staged_headers ${staged_header}) 92061da546Spatrickendforeach() 93061da546Spatrick 94061da546Spatrick# Wrap output in a target, so lldb-framework can depend on it. 95061da546Spatrickadd_custom_target(liblldb-resource-headers DEPENDS ${lldb_staged_headers}) 96061da546Spatrickset_target_properties(liblldb-resource-headers PROPERTIES FOLDER "lldb misc") 97061da546Spatrickadd_dependencies(liblldb liblldb-resource-headers) 98061da546Spatrick 99061da546Spatrick# At build time, copy the staged headers into the framework bundle (and do 100061da546Spatrick# some post-processing in-place). 101061da546Spatrickadd_custom_command(TARGET liblldb POST_BUILD 102061da546Spatrick COMMAND ${CMAKE_COMMAND} -E copy_directory ${lldb_header_staging} $<TARGET_FILE_DIR:liblldb>/Headers 103061da546Spatrick COMMAND ${LLDB_SOURCE_DIR}/scripts/framework-header-fix.sh $<TARGET_FILE_DIR:liblldb>/Headers ${LLDB_VERSION} 104061da546Spatrick COMMENT "LLDB.framework: copy framework headers" 105061da546Spatrick) 106061da546Spatrick 107061da546Spatrick# Copy vendor-specific headers from clang (without staging). 108*be691f3bSpatrickif(NOT APPLE_EMBEDDED) 109061da546Spatrick if (TARGET clang-resource-headers) 110061da546Spatrick add_dependencies(liblldb clang-resource-headers) 111061da546Spatrick set(clang_resource_headers_dir $<TARGET_PROPERTY:clang-resource-headers,RUNTIME_OUTPUT_DIRECTORY>) 112061da546Spatrick else() 113*be691f3bSpatrick set(clang_resource_headers_dir ${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}/include) 114061da546Spatrick if(NOT EXISTS ${clang_resource_headers_dir}) 115061da546Spatrick message(WARNING "Expected directory for clang-resource headers not found: ${clang_resource_headers_dir}") 116061da546Spatrick endif() 117061da546Spatrick endif() 118061da546Spatrick 119061da546Spatrick add_custom_command(TARGET liblldb POST_BUILD 120061da546Spatrick COMMAND ${CMAKE_COMMAND} -E copy_directory 121061da546Spatrick ${clang_resource_headers_dir} 122061da546Spatrick $<TARGET_FILE_DIR:liblldb>/Resources/Clang/include 123061da546Spatrick COMMENT "LLDB.framework: copy clang vendor-specific headers" 124061da546Spatrick ) 125061da546Spatrickendif() 126061da546Spatrick 127061da546Spatrick# Add an rpath pointing to the directory where LLDB.framework is installed. 128061da546Spatrick# This allows frameworks (relying on @rpath) to be installed in the same folder and found at runtime. 129061da546Spatrickset_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH 130061da546Spatrick "@loader_path/../../../") 131