brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · ef4cfa3 Raw
194 lines · plain
1include(ExtendPath)2include(LLVMDistributionSupport)3include(FindPrefixFromConfig)4 5# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.6string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_cmake_builddir "${LLVM_LIBRARY_DIR}")7set(llvm_cmake_builddir "${llvm_cmake_builddir}/cmake/llvm")8 9# First for users who use an installed LLVM, create the LLVMExports.cmake file.10set(LLVM_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMExports.cmake)11get_property(LLVM_EXPORTS GLOBAL PROPERTY LLVM_EXPORTS)12export(TARGETS ${LLVM_EXPORTS} FILE ${LLVM_EXPORTS_FILE})13 14# Then for users who want to link against the LLVM build tree, provide the15# normal targets and the build tree only targets.16set(LLVM_BUILDTREEONLY_EXPORTS_FILE ${llvm_cmake_builddir}/LLVMBuildTreeOnlyTargets.cmake)17get_property(LLVM_EXPORTS_BUILDTREE_ONLY GLOBAL PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY)18export(TARGETS ${LLVM_EXPORTS_BUILDTREE_ONLY} FILE ${LLVM_BUILDTREEONLY_EXPORTS_FILE})19 20get_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS)21 22foreach(lib ${LLVM_AVAILABLE_LIBS})23  get_property(llvm_lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib})24  set(all_llvm_lib_deps25    "${all_llvm_lib_deps}\nset_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${lib} ${llvm_lib_deps})")26endforeach(lib)27 28# CMake requires that all targets expressed as dependencies exist, so we can't29# have intrinsics_gen in LLVM_COMMON_DEPENDS when it is written out, otherwise30# projects building out of tree will have CMake errors. This only gets hit when31# LLVM_ENABLE_MODULES=On. Eventually we should come up with a better solution to32# this, but there is no easy solution.33if(intrinsics_gen IN_LIST LLVM_COMMON_DEPENDS)34  list(REMOVE_ITEM LLVM_COMMON_DEPENDS intrinsics_gen)35endif()36if(omp_gen IN_LIST LLVM_COMMON_DEPENDS)37  list(REMOVE_ITEM LLVM_COMMON_DEPENDS omp_gen)38endif()39if(vt_gen IN_LIST LLVM_COMMON_DEPENDS)40  list(REMOVE_ITEM LLVM_COMMON_DEPENDS vt_gen)41endif()42 43#44# Generate LLVMConfig.cmake for the build tree.45#46 47set(LLVM_CONFIG_CODE "48# LLVM_BUILD_* values available only from LLVM build tree.49set(LLVM_BUILD_BINARY_DIR \"${LLVM_BINARY_DIR}\")50set(LLVM_BUILD_LIBRARY_DIR \"${LLVM_LIBRARY_DIR}\")51set(LLVM_BUILD_MAIN_INCLUDE_DIR \"${LLVM_MAIN_INCLUDE_DIR}\")52set(LLVM_BUILD_MAIN_SRC_DIR \"${LLVM_MAIN_SRC_DIR}\")53")54 55set(LLVM_CONFIG_MAIN_INCLUDE_DIR "${LLVM_MAIN_INCLUDE_DIR}")56set(LLVM_CONFIG_INCLUDE_DIR "${LLVM_INCLUDE_DIR}")57set(LLVM_CONFIG_INCLUDE_DIRS58  "${LLVM_CONFIG_MAIN_INCLUDE_DIR}"59  "${LLVM_CONFIG_INCLUDE_DIR}"60  )61list(REMOVE_DUPLICATES LLVM_CONFIG_INCLUDE_DIRS)62 63set(LLVM_CONFIG_LIBRARY_DIR "${LLVM_LIBRARY_DIR}")64set(LLVM_CONFIG_LIBRARY_DIRS65  "${LLVM_CONFIG_LIBRARY_DIR}"66  # FIXME: Should there be other entries here?67  )68list(REMOVE_DUPLICATES LLVM_CONFIG_LIBRARY_DIRS)69 70set(LLVM_CONFIG_BINARY_DIR "${LLVM_BINARY_DIR}")71set(LLVM_CONFIG_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")72set(LLVM_CONFIG_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}")73 74# Generate a default location for lit75if (LLVM_BUILD_UTILS)76  if (CMAKE_HOST_WIN32 AND NOT CYGWIN)77    set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit.py")78  else()79    set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit")80  endif()81endif()82 83if (LLVM_LINK_LLVM_DYLIB)84  set(LLVM_CONFIG_LINK_LLVM_DYLIB85      "set(LLVM_LINK_LLVM_DYLIB ${LLVM_LINK_LLVM_DYLIB})")86endif()87 88# We need to use the full path to the LLVM Exports file to make sure we get the89# one from the build tree. This is due to our cmake files being split between90# this source dir and the binary dir in the build tree configuration and the91# LLVM_CONFIG_CMAKE_DIR being the source directory. In contrast in the install92# tree, both the generated LLVMExports.cmake file and the rest of the cmake93# source files are put in the same cmake directory.94set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS};${LLVM_EXPORTS_BUILDTREE_ONLY}")95set(LLVM_CONFIG_INCLUDE_EXPORTS "include(\"${LLVM_EXPORTS_FILE}\")")96set(llvm_config_include_buildtree_only_exports97"include(\"${LLVM_BUILDTREEONLY_EXPORTS_FILE}\")")98configure_file(99  LLVMConfig.cmake.in100  ${llvm_cmake_builddir}/LLVMConfig.cmake101  @ONLY)102set(llvm_config_include_buildtree_only_exports)103 104# For compatibility with projects that include(LLVMConfig)105# via CMAKE_MODULE_PATH, place API modules next to it.106# Copy without source permissions because the source could be read-only,107# but we need to write into the copied folder.108# This should be removed in the future.109file(COPY .110  DESTINATION ${llvm_cmake_builddir}111  NO_SOURCE_PERMISSIONS112  FILES_MATCHING PATTERN *.cmake113  PATTERN CMakeFiles EXCLUDE114  PATTERN llvm-driver-template.cpp.in115  )116 117#118# Generate LLVMConfig.cmake for the install tree.119#120 121find_prefix_from_config(LLVM_CONFIG_CODE LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PACKAGE_DIR}")122 123extend_path(LLVM_CONFIG_MAIN_INCLUDE_DIR "\${LLVM_INSTALL_PREFIX}" "${CMAKE_INSTALL_INCLUDEDIR}")124# This is the same as the above because the handwritten and generated headers125# are combined in one directory at install time.126set(LLVM_CONFIG_INCLUDE_DIR "${LLVM_CONFIG_MAIN_INCLUDE_DIR}")127set(LLVM_CONFIG_INCLUDE_DIRS128  "${LLVM_CONFIG_MAIN_INCLUDE_DIR}"129  "${LLVM_CONFIG_INCLUDE_DIR}"130  )131list(REMOVE_DUPLICATES LLVM_CONFIG_INCLUDE_DIRS)132 133extend_path(LLVM_CONFIG_LIBRARY_DIR "\${LLVM_INSTALL_PREFIX}" "lib\${LLVM_LIBDIR_SUFFIX}")134set(LLVM_CONFIG_LIBRARY_DIRS135  "${LLVM_CONFIG_LIBRARY_DIR}"136  # FIXME: Should there be other entries here?137  )138list(REMOVE_DUPLICATES LLVM_CONFIG_LIBRARY_DIRS)139 140set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}")141extend_path(LLVM_CONFIG_CMAKE_DIR "\${LLVM_INSTALL_PREFIX}" "${LLVM_INSTALL_PACKAGE_DIR}")142extend_path(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}" "${LLVM_TOOLS_INSTALL_DIR}")143 144# Generate a default location for lit145if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS)146  if (CMAKE_HOST_WIN32 AND NOT CYGWIN)147    set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit.py")148  else()149    set(LLVM_CONFIG_DEFAULT_EXTERNAL_LIT "${LLVM_CONFIG_TOOLS_BINARY_DIR}/llvm-lit")150  endif()151endif()152 153get_config_exports_includes(LLVM LLVM_CONFIG_INCLUDE_EXPORTS)154set(LLVM_CONFIG_EXPORTS "${LLVM_EXPORTS}")155configure_file(156  LLVMConfig.cmake.in157  ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake158  @ONLY)159 160# Generate LLVMConfigVersion.cmake for build and install tree.161configure_file(162  LLVMConfigVersion.cmake.in163  ${llvm_cmake_builddir}/LLVMConfigVersion.cmake164  @ONLY)165 166if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)167  install_distribution_exports(LLVM)168 169  install(FILES170    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLVMConfig.cmake171    ${llvm_cmake_builddir}/LLVMConfigVersion.cmake172    LLVM-Config.cmake173    DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}174    COMPONENT cmake-exports)175 176  install(DIRECTORY .177    DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}178    COMPONENT cmake-exports179    FILES_MATCHING PATTERN *.cmake180    PATTERN LLVMConfig.cmake EXCLUDE181    PATTERN LLVMConfigExtensions.cmake EXCLUDE182    PATTERN LLVMConfigVersion.cmake EXCLUDE183    PATTERN LLVM-Config.cmake EXCLUDE184    PATTERN GetHostTriple.cmake EXCLUDE185    PATTERN llvm-driver-template.cpp.in)186 187  if (NOT LLVM_ENABLE_IDE)188    # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS189    add_custom_target(cmake-exports)190    add_llvm_install_targets(install-cmake-exports191                             COMPONENT cmake-exports)192  endif()193endif()194