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