1*da58b97aSjoerginclude(LLVMDistributionSupport) 2*da58b97aSjoerg 306f32e7eSjoergset(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm) 406f32e7eSjoergset(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}") 506f32e7eSjoerg 606f32e7eSjoerg# First for users who use an installed LLVM, create the LLVMExports.cmake file. 706f32e7eSjoergset(LLVM_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMExports.cmake) 806f32e7eSjoergget_property(LLVM_EXPORTS GLOBAL PROPERTY LLVM_EXPORTS) 906f32e7eSjoergexport(TARGETS ${LLVM_EXPORTS} FILE ${LLVM_EXPORTS_FILE}) 1006f32e7eSjoerg 1106f32e7eSjoerg# Then for users who want to link against the LLVM build tree, provide the 1206f32e7eSjoerg# normal targets and the build tree only targets. 1306f32e7eSjoergset(LLVM_BUILDTREEONLY_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMBuildTreeOnlyTargets.cmake) 1406f32e7eSjoergget_property(LLVM_EXPORTS_BUILDTREE_ONLY GLOBAL PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY) 1506f32e7eSjoergexport(TARGETS ${LLVM_EXPORTS_BUILDTREE_ONLY} FILE ${LLVM_BUILDTREEONLY_EXPORTS_FILE}) 1606f32e7eSjoerg 1706f32e7eSjoergget_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS) 1806f32e7eSjoerg 1906f32e7eSjoergforeach(lib ${LLVM_AVAILABLE_LIBS}) 2006f32e7eSjoerg get_property(llvm_lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib}) 2106f32e7eSjoerg set(all_llvm_lib_deps 2206f32e7eSjoerg "${all_llvm_lib_deps}\nset_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib} ${llvm_lib_deps})") 2306f32e7eSjoergendforeach(lib) 2406f32e7eSjoerg 2506f32e7eSjoerg# CMake requires that all targets expressed as dependencies exist, so we can't 2606f32e7eSjoerg# have intrinsics_gen in LLVM_COMMON_DEPENDS when it is written out, otherwise 2706f32e7eSjoerg# projects building out of tree will have CMake errors. This only gets hit when 2806f32e7eSjoerg# LLVM_ENABLE_MODULES=On. Eventually we should come up with a better solution to 2906f32e7eSjoerg# this, but there is no easy solution. 3006f32e7eSjoergif(intrinsics_gen IN_LIST LLVM_COMMON_DEPENDS) 3106f32e7eSjoerg list(REMOVE_ITEM LLVM_COMMON_DEPENDS intrinsics_gen) 3206f32e7eSjoergendif() 33*da58b97aSjoergif(omp_gen IN_LIST LLVM_COMMON_DEPENDS) 34*da58b97aSjoerg list(REMOVE_ITEM LLVM_COMMON_DEPENDS omp_gen) 35*da58b97aSjoergendif() 3606f32e7eSjoerg 3706f32e7eSjoerg# Generate LLVMConfig.cmake for the build tree. 3806f32e7eSjoergset(LLVM_CONFIG_CODE " 3906f32e7eSjoerg# LLVM_BUILD_* values available only from LLVM build tree. 4006f32e7eSjoergset(LLVM_BUILD_BINARY_DIR \"${LLVM_BINARY_DIR}\") 4106f32e7eSjoergset(LLVM_BUILD_LIBRARY_DIR \"${LLVM_LIBRARY_DIR}\") 4206f32e7eSjoergset(LLVM_BUILD_MAIN_INCLUDE_DIR \"${LLVM_MAIN_INCLUDE_DIR}\") 4306f32e7eSjoergset(LLVM_BUILD_MAIN_SRC_DIR \"${LLVM_MAIN_SRC_DIR}\") 4406f32e7eSjoerg") 4506f32e7eSjoergset(LLVM_CONFIG_INCLUDE_DIRS 4606f32e7eSjoerg "${LLVM_MAIN_INCLUDE_DIR}" 4706f32e7eSjoerg "${LLVM_INCLUDE_DIR}" 4806f32e7eSjoerg ) 4906f32e7eSjoergset(LLVM_CONFIG_INCLUDE_DIR 5006f32e7eSjoerg "${LLVM_INCLUDE_DIR}" 5106f32e7eSjoerg ) 5206f32e7eSjoergset(LLVM_CONFIG_MAIN_INCLUDE_DIR 5306f32e7eSjoerg "${LLVM_MAIN_INCLUDE_DIR}" 5406f32e7eSjoerg ) 5506f32e7eSjoergset(LLVM_CONFIG_LIBRARY_DIRS 5606f32e7eSjoerg "${LLVM_LIBRARY_DIR}" 5706f32e7eSjoerg ) 5806f32e7eSjoergset(LLVM_CONFIG_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 5906f32e7eSjoergset(LLVM_CONFIG_BINARY_DIR "${LLVM_BINARY_DIR}") 6006f32e7eSjoergset(LLVM_CONFIG_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}") 6106f32e7eSjoerg 62*da58b97aSjoerg# Generate a default location for lit 63*da58b97aSjoergif (LLVM_BUILD_UTILS) 64*da58b97aSjoerg if (CMAKE_HOST_WIN32 AND NOT CYGWIN) 65*da58b97aSjoerg set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit.py") 66*da58b97aSjoerg else() 67*da58b97aSjoerg set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit") 68*da58b97aSjoerg endif() 69*da58b97aSjoergendif() 70*da58b97aSjoerg 7106f32e7eSjoergif (LLVM_LINK_LLVM_DYLIB) 7206f32e7eSjoerg set(LLVM_CONFIG_LINK_LLVM_DYLIB 7306f32e7eSjoerg "set(LLVM_LINK_LLVM_DYLIB ${LLVM_LINK_LLVM_DYLIB})") 7406f32e7eSjoergendif() 7506f32e7eSjoerg 7606f32e7eSjoerg# We need to use the full path to the LLVM Exports file to make sure we get the 7706f32e7eSjoerg# one from the build tree. This is due to our cmake files being split between 7806f32e7eSjoerg# this source dir and the binary dir in the build tree configuration and the 7906f32e7eSjoerg# LLVM_CONFIG_CMAKE_DIR being the source directory. In contrast in the install 8006f32e7eSjoerg# tree, both the generated LLVMExports.cmake file and the rest of the cmake 8106f32e7eSjoerg# source files are put in the same cmake directory. 8206f32e7eSjoergset(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS};${LLVM_EXPORTS_BUILDTREE_ONLY}") 83*da58b97aSjoergset(LLVM_CONFIG_INCLUDE_EXPORTS "include(\"${LLVM_EXPORTS_FILE}\")") 8406f32e7eSjoergset(llvm_config_include_buildtree_only_exports 8506f32e7eSjoerg"include(\"${LLVM_BUILDTREEONLY_EXPORTS_FILE}\")") 8606f32e7eSjoergconfigure_file( 8706f32e7eSjoerg LLVMConfig.cmake.in 8806f32e7eSjoerg ${llvm_cmake_builddir}/LLVMConfig.cmake 8906f32e7eSjoerg @ONLY) 9006f32e7eSjoergset(llvm_config_include_buildtree_only_exports) 9106f32e7eSjoerg 9206f32e7eSjoerg# For compatibility with projects that include(LLVMConfig) 9306f32e7eSjoerg# via CMAKE_MODULE_PATH, place API modules next to it. 9406f32e7eSjoerg# This should be removed in the future. 9506f32e7eSjoergfile(COPY . 9606f32e7eSjoerg DESTINATION ${llvm_cmake_builddir} 9706f32e7eSjoerg FILES_MATCHING PATTERN *.cmake 9806f32e7eSjoerg PATTERN CMakeFiles EXCLUDE 9906f32e7eSjoerg ) 10006f32e7eSjoerg 10106f32e7eSjoerg# Generate LLVMConfig.cmake for the install tree. 10206f32e7eSjoergset(LLVM_CONFIG_CODE " 10306f32e7eSjoerg# Compute the installation prefix from this LLVMConfig.cmake file location. 10406f32e7eSjoergget_filename_component(LLVM_INSTALL_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)") 10506f32e7eSjoerg# Construct the proper number of get_filename_component(... PATH) 10606f32e7eSjoerg# calls to compute the installation prefix. 10706f32e7eSjoergstring(REGEX REPLACE "/" ";" _count "${LLVM_INSTALL_PACKAGE_DIR}") 10806f32e7eSjoergforeach(p ${_count}) 10906f32e7eSjoerg set(LLVM_CONFIG_CODE "${LLVM_CONFIG_CODE} 11006f32e7eSjoergget_filename_component(LLVM_INSTALL_PREFIX \"\${LLVM_INSTALL_PREFIX}\" PATH)") 11106f32e7eSjoergendforeach(p) 11206f32e7eSjoergset(LLVM_CONFIG_INCLUDE_DIRS "\${LLVM_INSTALL_PREFIX}/include") 11306f32e7eSjoergset(LLVM_CONFIG_INCLUDE_DIR "${LLVM_CONFIG_INCLUDE_DIRS}") 11406f32e7eSjoergset(LLVM_CONFIG_MAIN_INCLUDE_DIR "${LLVM_CONFIG_INCLUDE_DIRS}") 11506f32e7eSjoergset(LLVM_CONFIG_LIBRARY_DIRS "\${LLVM_INSTALL_PREFIX}/lib\${LLVM_LIBDIR_SUFFIX}") 11606f32e7eSjoergset(LLVM_CONFIG_CMAKE_DIR "\${LLVM_INSTALL_PREFIX}/${LLVM_INSTALL_PACKAGE_DIR}") 11706f32e7eSjoergset(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}") 11806f32e7eSjoergset(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin") 119*da58b97aSjoerg 120*da58b97aSjoerg# Generate a default location for lit 121*da58b97aSjoergif (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS) 122*da58b97aSjoerg set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit") 123*da58b97aSjoergendif() 124*da58b97aSjoerg 125*da58b97aSjoergget_config_exports_includes(LLVM LLVM_CONFIG_INCLUDE_EXPORTS) 12606f32e7eSjoergset(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}") 12706f32e7eSjoergconfigure_file( 12806f32e7eSjoerg LLVMConfig.cmake.in 12906f32e7eSjoerg ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake 13006f32e7eSjoerg @ONLY) 13106f32e7eSjoerg 13206f32e7eSjoerg# Generate LLVMConfigVersion.cmake for build and install tree. 13306f32e7eSjoergconfigure_file( 13406f32e7eSjoerg LLVMConfigVersion.cmake.in 13506f32e7eSjoerg ${llvm_cmake_builddir}/LLVMConfigVersion.cmake 13606f32e7eSjoerg @ONLY) 13706f32e7eSjoerg 13806f32e7eSjoergif (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) 139*da58b97aSjoerg install_distribution_exports(LLVM) 14006f32e7eSjoerg 14106f32e7eSjoerg install(FILES 14206f32e7eSjoerg ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake 14306f32e7eSjoerg ${llvm_cmake_builddir}/LLVMConfigVersion.cmake 14406f32e7eSjoerg LLVM-Config.cmake 14506f32e7eSjoerg DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} 14606f32e7eSjoerg COMPONENT cmake-exports) 14706f32e7eSjoerg 14806f32e7eSjoerg install(DIRECTORY . 14906f32e7eSjoerg DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} 15006f32e7eSjoerg COMPONENT cmake-exports 15106f32e7eSjoerg FILES_MATCHING PATTERN *.cmake 15206f32e7eSjoerg PATTERN LLVMConfig.cmake EXCLUDE 153*da58b97aSjoerg PATTERN LLVMConfigExtensions.cmake EXCLUDE 15406f32e7eSjoerg PATTERN LLVMConfigVersion.cmake EXCLUDE 15506f32e7eSjoerg PATTERN LLVM-Config.cmake EXCLUDE 15606f32e7eSjoerg PATTERN GetHostTriple.cmake EXCLUDE) 15706f32e7eSjoerg 15806f32e7eSjoerg if (NOT LLVM_ENABLE_IDE) 15906f32e7eSjoerg # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS 16006f32e7eSjoerg add_custom_target(cmake-exports) 16106f32e7eSjoerg add_llvm_install_targets(install-cmake-exports 16206f32e7eSjoerg COMPONENT cmake-exports) 16306f32e7eSjoerg endif() 16406f32e7eSjoergendif() 165