summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-11-05 23:14:59 +0000
committerReid Kleckner <reid@kleckner.net>2014-11-05 23:14:59 +0000
commit732ef3c0f52159b91a8147005478b32551e516d7 (patch)
treeaefdf325d7e37115b360753349c7f38941eba1e2 /CMakeLists.txt
parent362e509a74d8b7bf4bca6344f8d838da2df98bf2 (diff)
Make it easier to build against a pre-built Clang package with CMake
Installing <prefix>/share/clang/cmake/ClangConfig.cmake makes CMake's builtin find_package() utility work with Clang. This also allows downstream consumers of Clang to statically link against libraries like clangAST and have that pull in dependencies like clangBasic and LLVMSupport. See the CMake docs on packages: http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221411 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt23
1 files changed, 23 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 02374e20f4..ba3db6c141 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -337,6 +337,7 @@ macro(add_clang_library name)
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
RUNTIME DESTINATION bin)
endif()
+ set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
else()
# Add empty "phony" target
add_custom_target(${name})
@@ -478,3 +479,25 @@ endif()
set(CLANG_ORDER_FILE "" CACHE FILEPATH
"Order file to use when compiling clang in order to improve startup time.")
+
+# Generate a list of CMake library targets so that other CMake projects can
+# link against them. LLVM calls its version of this file LLVMExports.cmake, but
+# the usual CMake convention seems to be ${Project}Targets.cmake.
+set(CLANG_INSTALL_PACKAGE_DIR share/clang/cmake)
+set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/${CLANG_INSTALL_PACKAGE_DIR}")
+get_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS)
+export(TARGETS ${CLANG_EXPORTS} FILE ${clang_cmake_builddir}/ClangTargets.cmake)
+
+# Install a <prefix>/share/clang/cmake/ClangConfig.cmake file so that
+# find_package(Clang) works. Install the target list with it.
+install(FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/ClangConfig.cmake
+ ${CLANG_BINARY_DIR}/share/clang/cmake/ClangTargets.cmake
+ DESTINATION share/clang/cmake)
+
+# Also copy ClangConfig.cmake to the build directory so that dependent projects
+# can build against a build directory of Clang more easily.
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/ClangConfig.cmake
+ ${CLANG_BINARY_DIR}/share/clang/cmake/ClangConfig.cmake
+ COPYONLY)