xref: /openbsd-src/gnu/llvm/lldb/cmake/modules/LLDBFramework.cmake (revision be691f3bb6417f04a68938fadbcaee2d5795e764)
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