Home | History | Annotate | Download | only in modules
      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 
     51 if (LLVM_LINK_LLVM_DYLIB)
     52   set(LLVM_CONFIG_LINK_LLVM_DYLIB
     53       "set(LLVM_LINK_LLVM_DYLIB ${LLVM_LINK_LLVM_DYLIB})")
     54 endif()
     55 
     56 # We need to use the full path to the LLVM Exports file to make sure we get the
     57 # one from the build tree. This is due to our cmake files being split between
     58 # this source dir and the binary dir in the build tree configuration and the
     59 # LLVM_CONFIG_CMAKE_DIR being the source directory. In contrast in the install
     60 # tree, both the generated LLVMExports.cmake file and the rest of the cmake
     61 # source files are put in the same cmake directory.
     62 set(LLVM_CONFIG_EXPORTS_FILE "${LLVM_EXPORTS_FILE}")
     63 set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS};${LLVM_EXPORTS_BUILDTREE_ONLY}")
     64 set(llvm_config_include_buildtree_only_exports
     65 "include(\"${LLVM_BUILDTREEONLY_EXPORTS_FILE}\")")
     66 configure_file(
     67   LLVMConfig.cmake.in
     68   ${llvm_cmake_builddir}/LLVMConfig.cmake
     69   @ONLY)
     70 set(llvm_config_include_buildtree_only_exports)
     71 
     72 # For compatibility with projects that include(LLVMConfig)
     73 # via CMAKE_MODULE_PATH, place API modules next to it.
     74 # This should be removed in the future.
     75 file(COPY .
     76   DESTINATION ${llvm_cmake_builddir}
     77   FILES_MATCHING PATTERN *.cmake
     78   PATTERN .svn EXCLUDE
     79   PATTERN CMakeFiles EXCLUDE
     80   )
     81 
     82 # Generate LLVMConfig.cmake for the install tree.
     83 set(LLVM_CONFIG_CODE "
     84 # Compute the installation prefix from this LLVMConfig.cmake file location.
     85 get_filename_component(LLVM_INSTALL_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)")
     86 # Construct the proper number of get_filename_component(... PATH)
     87 # calls to compute the installation prefix.
     88 string(REGEX REPLACE "/" ";" _count "${LLVM_INSTALL_PACKAGE_DIR}")
     89 foreach(p ${_count})
     90   set(LLVM_CONFIG_CODE "${LLVM_CONFIG_CODE}
     91 get_filename_component(LLVM_INSTALL_PREFIX \"\${LLVM_INSTALL_PREFIX}\" PATH)")
     92 endforeach(p)
     93 set(LLVM_CONFIG_INCLUDE_DIRS "\${LLVM_INSTALL_PREFIX}/include")
     94 set(LLVM_CONFIG_LIBRARY_DIRS "\${LLVM_INSTALL_PREFIX}/lib\${LLVM_LIBDIR_SUFFIX}")
     95 set(LLVM_CONFIG_CMAKE_DIR "\${LLVM_INSTALL_PREFIX}/${LLVM_INSTALL_PACKAGE_DIR}")
     96 set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}")
     97 set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin")
     98 set(LLVM_CONFIG_EXPORTS_FILE "\${LLVM_CMAKE_DIR}/LLVMExports.cmake")
     99 set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}")
    100 configure_file(
    101   LLVMConfig.cmake.in
    102   ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake
    103   @ONLY)
    104 
    105 # Generate LLVMConfigVersion.cmake for build and install tree.
    106 configure_file(
    107   LLVMConfigVersion.cmake.in
    108   ${llvm_cmake_builddir}/LLVMConfigVersion.cmake
    109   @ONLY)
    110 
    111 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
    112   get_property(llvm_has_exports GLOBAL PROPERTY LLVM_HAS_EXPORTS)
    113   if(llvm_has_exports)
    114     install(EXPORT LLVMExports DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
    115             COMPONENT cmake-exports)
    116   endif()
    117 
    118   install(FILES
    119     ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake
    120     ${llvm_cmake_builddir}/LLVMConfigVersion.cmake
    121     LLVM-Config.cmake
    122     DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
    123     COMPONENT cmake-exports)
    124 
    125   install(DIRECTORY .
    126     DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
    127     COMPONENT cmake-exports
    128     FILES_MATCHING PATTERN *.cmake
    129     PATTERN .svn EXCLUDE
    130     PATTERN LLVMConfig.cmake EXCLUDE
    131     PATTERN LLVMConfigVersion.cmake EXCLUDE
    132     PATTERN LLVM-Config.cmake EXCLUDE
    133     PATTERN GetHostTriple.cmake EXCLUDE)
    134 
    135   if (NOT CMAKE_CONFIGURATION_TYPES)
    136     # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS
    137     add_custom_target(cmake-exports)
    138     add_llvm_install_targets(install-cmake-exports
    139                              COMPONENT cmake-exports)
    140   endif()
    141 endif()
    142