]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - cmake/modules/CMakeLists.txt
Vendor import of llvm trunk r321017:
[FreeBSD/FreeBSD.git] / cmake / modules / CMakeLists.txt
1 set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
2 set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
3
4 # First for users who use an installed LLVM, create the LLVMExports.cmake file.
5 set(LLVM_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMExports.cmake)
6 get_property(LLVM_EXPORTS GLOBAL PROPERTY LLVM_EXPORTS)
7 export(TARGETS ${LLVM_EXPORTS} FILE ${LLVM_EXPORTS_FILE})
8
9 # Then for users who want to link against the LLVM build tree, provide the
10 # normal targets and the build tree only targets.
11 set(LLVM_BUILDTREEONLY_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMBuildTreeOnlyTargets.cmake)
12 get_property(LLVM_EXPORTS_BUILDTREE_ONLY GLOBAL PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY)
13 export(TARGETS ${LLVM_EXPORTS_BUILDTREE_ONLY} FILE ${LLVM_BUILDTREEONLY_EXPORTS_FILE})
14
15 get_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS)
16
17 foreach(lib ${LLVM_AVAILABLE_LIBS})
18   get_property(llvm_lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib})
19   set(all_llvm_lib_deps
20     "${all_llvm_lib_deps}\nset_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib} ${llvm_lib_deps})")
21 endforeach(lib)
22
23 # CMake requires that all targets expressed as dependencies exist, so we can't
24 # have intrinsics_gen in LLVM_COMMON_DEPENDS when it is written out, otherwise
25 # projects building out of tree will have CMake errors. This only gets hit when
26 # LLVM_ENABLE_MODULES=On. Eventually we should come up with a better solution to
27 # this, but there is no easy solution.
28 if(intrinsics_gen IN_LIST LLVM_COMMON_DEPENDS)
29   list(REMOVE_ITEM LLVM_COMMON_DEPENDS intrinsics_gen)
30 endif()
31
32 # Generate LLVMConfig.cmake for the build tree.
33 set(LLVM_CONFIG_CODE "
34 # LLVM_BUILD_* values available only from LLVM build tree.
35 set(LLVM_BUILD_BINARY_DIR \"${LLVM_BINARY_DIR}\")
36 set(LLVM_BUILD_LIBRARY_DIR \"${LLVM_LIBRARY_DIR}\")
37 set(LLVM_BUILD_MAIN_INCLUDE_DIR \"${LLVM_MAIN_INCLUDE_DIR}\")
38 set(LLVM_BUILD_MAIN_SRC_DIR \"${LLVM_MAIN_SRC_DIR}\")
39 ")
40 set(LLVM_CONFIG_INCLUDE_DIRS
41   "${LLVM_MAIN_INCLUDE_DIR}"
42   "${LLVM_INCLUDE_DIR}"
43   )
44 set(LLVM_CONFIG_LIBRARY_DIRS
45   "${LLVM_LIBRARY_DIR}"
46   )
47 set(LLVM_CONFIG_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
48 set(LLVM_CONFIG_BINARY_DIR "${LLVM_BINARY_DIR}")
49 set(LLVM_CONFIG_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}")
50 # We need to use the full path to the LLVM Exports file to make sure we get the
51 # one from the build tree. This is due to our cmake files being split between
52 # this source dir and the binary dir in the build tree configuration and the
53 # LLVM_CONFIG_CMAKE_DIR being the source directory. In contrast in the install
54 # tree, both the generated LLVMExports.cmake file and the rest of the cmake
55 # source files are put in the same cmake directory.
56 set(LLVM_CONFIG_EXPORTS_FILE "${LLVM_EXPORTS_FILE}")
57 set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS};${LLVM_EXPORTS_BUILDTREE_ONLY}")
58 set(llvm_config_include_buildtree_only_exports
59 "include(\"${LLVM_BUILDTREEONLY_EXPORTS_FILE}\")")
60 configure_file(
61   LLVMConfig.cmake.in
62   ${llvm_cmake_builddir}/LLVMConfig.cmake
63   @ONLY)
64 set(llvm_config_include_buildtree_only_exports)
65
66 # For compatibility with projects that include(LLVMConfig)
67 # via CMAKE_MODULE_PATH, place API modules next to it.
68 # This should be removed in the future.
69 file(COPY .
70   DESTINATION ${llvm_cmake_builddir}
71   FILES_MATCHING PATTERN *.cmake
72   PATTERN .svn EXCLUDE
73   PATTERN CMakeFiles EXCLUDE
74   )
75
76 # Generate LLVMConfig.cmake for the install tree.
77 set(LLVM_CONFIG_CODE "
78 # Compute the installation prefix from this LLVMConfig.cmake file location.
79 get_filename_component(LLVM_INSTALL_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)")
80 # Construct the proper number of get_filename_component(... PATH)
81 # calls to compute the installation prefix.
82 string(REGEX REPLACE "/" ";" _count "${LLVM_INSTALL_PACKAGE_DIR}")
83 foreach(p ${_count})
84   set(LLVM_CONFIG_CODE "${LLVM_CONFIG_CODE}
85 get_filename_component(LLVM_INSTALL_PREFIX \"\${LLVM_INSTALL_PREFIX}\" PATH)")
86 endforeach(p)
87 set(LLVM_CONFIG_INCLUDE_DIRS "\${LLVM_INSTALL_PREFIX}/include")
88 set(LLVM_CONFIG_LIBRARY_DIRS "\${LLVM_INSTALL_PREFIX}/lib\${LLVM_LIBDIR_SUFFIX}")
89 set(LLVM_CONFIG_CMAKE_DIR "\${LLVM_INSTALL_PREFIX}/${LLVM_INSTALL_PACKAGE_DIR}")
90 set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}")
91 set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin")
92 set(LLVM_CONFIG_EXPORTS_FILE "\${LLVM_CMAKE_DIR}/LLVMExports.cmake")
93 set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}")
94 configure_file(
95   LLVMConfig.cmake.in
96   ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake
97   @ONLY)
98
99 # Generate LLVMConfigVersion.cmake for build and install tree.
100 configure_file(
101   LLVMConfigVersion.cmake.in
102   ${llvm_cmake_builddir}/LLVMConfigVersion.cmake
103   @ONLY)
104
105 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
106   get_property(llvm_has_exports GLOBAL PROPERTY LLVM_HAS_EXPORTS)
107   if(llvm_has_exports)
108     install(EXPORT LLVMExports DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
109             COMPONENT cmake-exports)
110   endif()
111
112   install(FILES
113     ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake
114     ${llvm_cmake_builddir}/LLVMConfigVersion.cmake
115     LLVM-Config.cmake
116     DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
117     COMPONENT cmake-exports)
118
119   install(DIRECTORY .
120     DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
121     COMPONENT cmake-exports
122     FILES_MATCHING PATTERN *.cmake
123     PATTERN .svn EXCLUDE
124     PATTERN LLVMConfig.cmake EXCLUDE
125     PATTERN LLVMConfigVersion.cmake EXCLUDE
126     PATTERN LLVM-Config.cmake EXCLUDE
127     PATTERN GetHostTriple.cmake EXCLUDE)
128
129   if (NOT CMAKE_CONFIGURATION_TYPES)
130     # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS
131     add_custom_target(cmake-exports)
132     add_llvm_install_targets(install-cmake-exports
133                              COMPONENT cmake-exports)
134   endif()
135 endif()