xref: /aosp_15_r20/external/clang/cmake/modules/CMakeLists.txt (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li# Generate a list of CMake library targets so that other CMake projects can
2*67e74705SXin Li# link against them. LLVM calls its version of this file LLVMExports.cmake, but
3*67e74705SXin Li# the usual CMake convention seems to be ${Project}Targets.cmake.
4*67e74705SXin Liset(CLANG_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/clang)
5*67e74705SXin Liset(clang_cmake_builddir "${CMAKE_BINARY_DIR}/${CLANG_INSTALL_PACKAGE_DIR}")
6*67e74705SXin Li
7*67e74705SXin Liget_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS)
8*67e74705SXin Liexport(TARGETS ${CLANG_EXPORTS} FILE ${clang_cmake_builddir}/ClangTargets.cmake)
9*67e74705SXin Li
10*67e74705SXin Li# Generate ClangConfig.cmake for the build tree.
11*67e74705SXin Liset(CLANG_CONFIG_CMAKE_DIR "${clang_cmake_builddir}")
12*67e74705SXin Liset(CLANG_CONFIG_EXPORTS_FILE "${clang_cmake_builddir}/ClangTargets.cmake")
13*67e74705SXin Liconfigure_file(
14*67e74705SXin Li  ${CMAKE_CURRENT_SOURCE_DIR}/ClangConfig.cmake.in
15*67e74705SXin Li  ${clang_cmake_builddir}/ClangConfig.cmake
16*67e74705SXin Li  @ONLY)
17*67e74705SXin Liset(CLANG_CONFIG_CMAKE_DIR)
18*67e74705SXin Liset(CLANG_CONFIG_EXPORTS_FILE)
19*67e74705SXin Li
20*67e74705SXin Li# Generate ClangConfig.cmake for the install tree.
21*67e74705SXin Liset(CLANG_CONFIG_CODE "
22*67e74705SXin Li# Compute the installation prefix from this LLVMConfig.cmake file location.
23*67e74705SXin Liget_filename_component(CLANG_INSTALL_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)")
24*67e74705SXin Li# Construct the proper number of get_filename_component(... PATH)
25*67e74705SXin Li# calls to compute the installation prefix.
26*67e74705SXin Listring(REGEX REPLACE "/" ";" _count "${CLANG_INSTALL_PACKAGE_DIR}")
27*67e74705SXin Liforeach(p ${_count})
28*67e74705SXin Li  set(CLANG_CONFIG_CODE "${CLANG_CONFIG_CODE}
29*67e74705SXin Liget_filename_component(CLANG_INSTALL_PREFIX \"\${CLANG_INSTALL_PREFIX}\" PATH)")
30*67e74705SXin Liendforeach(p)
31*67e74705SXin Liset(CLANG_CONFIG_CMAKE_DIR "\${CLANG_INSTALL_PREFIX}/${CLANG_INSTALL_PACKAGE_DIR}")
32*67e74705SXin Liset(CLANG_CONFIG_EXPORTS_FILE "\${CLANG_CMAKE_DIR}/ClangTargets.cmake")
33*67e74705SXin Liconfigure_file(
34*67e74705SXin Li  ${CMAKE_CURRENT_SOURCE_DIR}/ClangConfig.cmake.in
35*67e74705SXin Li  ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ClangConfig.cmake
36*67e74705SXin Li  @ONLY)
37*67e74705SXin Liset(CLANG_CONFIG_CODE)
38*67e74705SXin Liset(CLANG_CONFIG_CMAKE_DIR)
39*67e74705SXin Liset(CLANG_CONFIG_EXPORTS_FILE)
40*67e74705SXin Li
41*67e74705SXin Liif (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
42*67e74705SXin Li  install(EXPORT ClangTargets DESTINATION ${CLANG_INSTALL_PACKAGE_DIR})
43*67e74705SXin Li
44*67e74705SXin Li  install(FILES
45*67e74705SXin Li    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ClangConfig.cmake
46*67e74705SXin Li    DESTINATION ${CLANG_INSTALL_PACKAGE_DIR})
47*67e74705SXin Liendif()
48