1# Keep this in sync with llvm/cmake/CMakeLists.txt! 2 3include(GNUInstallPackageDir) 4include(ExtendPath) 5include(FindPrefixFromConfig) 6 7set(POLLY_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/polly" CACHE STRING 8 "Path for CMake subdirectory for Polly (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/polly')") 9# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below. 10set(polly_cmake_builddir "${POLLY_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/polly") 11 12set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING 13 "Path for CMake subdirectory for LLVM (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/llvm')") 14# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below. 15string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_cmake_builddir "${LLVM_LIBRARY_DIR}") 16set(llvm_cmake_builddir "${llvm_cmake_builddir}/cmake/llvm") 17 18if (CMAKE_CONFIGURATION_TYPES) 19 set(POLLY_EXPORTS_FILE_NAME "PollyExports-$<LOWER_CASE:$<CONFIG>>.cmake") 20else() 21 # avoid conflicts in the build-tree when changing configuration 22 set(POLLY_EXPORTS_FILE_NAME "PollyExports-all.cmake") 23endif() 24 25set(POLLY_CONFIG_EXPORTED_TARGETS Polly ${ISL_TARGET}) 26if (NOT (WIN32 OR CYGWIN) AND LLVM_ENABLE_PIC) 27 # LLVMPolly is a dummy target on Win or if PIC code is disabled. 28 list(APPEND POLLY_CONFIG_EXPORTED_TARGETS LLVMPolly) 29endif() 30 31# Get the target type for every exported target 32foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS) 33 get_target_property(tgt_type ${tgt} TYPE) 34 string(REPLACE "_LIBRARY" "" tgt_type ${tgt_type}) 35 set(POLLY_CONFIG_TARGET_${tgt}_TYPE ${tgt_type}) 36endforeach() 37 38# generate the import code for bundled/undbundled libisl versions 39if (NOT POLLY_BUNDLED_ISL) 40 get_property(incl TARGET ISL PROPERTY INTERFACE_INCLUDE_DIRECTORIES) 41 get_property(lib TARGET ISL PROPERTY INTERFACE_LINK_LIBRARIES) 42 get_property(opt TARGET ISL PROPERTY INTERFACE_COMPILE_OPTIONS) 43 set(ISL_CONFIG_CODE " 44add_library(ISL INTERFACE IMPORTED) 45set_property(TARGET ISL APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${incl}) 46set_property(TARGET ISL APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${lib}) 47set_property(TARGET ISL APPEND PROPERTY INTERFACE_COMPILE_OPTIONS ${opt})") 48else() 49 set(ISL_CONFIG_CODE " 50if (NOT TARGET PollyISL) 51 add_library(PollyISL ${POLLY_CONFIG_TARGET_PollyISL_TYPE} IMPORTED) 52endif()") 53endif() 54 55# Generate PollyConfig.cmake for the build tree. 56set(POLLY_CONFIG_CODE "") 57set(POLLY_CONFIG_LLVM_CMAKE_DIR "${llvm_cmake_builddir}") 58set(POLLY_CONFIG_CMAKE_DIR "${polly_cmake_builddir}") 59set(POLLY_CONFIG_INCLUDE_DIRS 60 ${POLLY_SOURCE_DIR}/include 61 ${ISL_INCLUDE_DIRS} 62 ${POLLY_BINARY_DIR}/include 63 ) 64set(POLLY_CONFIG_LIBRARY_DIRS "${POLLY_BINARY_DIR}/lib") 65 66# set locations for imported targets 67foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS) 68 get_target_property(tgt_type ${tgt} TYPE) 69 if (NOT tgt_type STREQUAL "INTERFACE_LIBRARY") 70 set(POLLY_EXPORTS 71 "set_target_properties(${tgt} PROPERTIES 72 IMPORTED_LOCATION$<$<NOT:$<CONFIG:>>:_$<UPPER_CASE:$<CONFIG>>> $<TARGET_FILE:${tgt}>) 73${POLLY_EXPORTS}") 74 endif() 75endforeach(tgt) 76 77# PollyConfig holds the target definitions and general settings, PollyExports 78# the imported locations 79configure_file( 80 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in 81 ${polly_cmake_builddir}/PollyConfig.cmake 82 @ONLY) 83configure_file( 84 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in 85 ${polly_cmake_builddir}/PollyConfigVersion.cmake 86 @ONLY) 87 88file(GENERATE 89 OUTPUT ${polly_cmake_builddir}/${POLLY_EXPORTS_FILE_NAME} 90 CONTENT "${POLLY_EXPORTS}") 91 92 93# Generate PollyConfig.cmake for the install tree. 94unset(POLLY_EXPORTS) 95find_prefix_from_config(POLLY_CONFIG_CODE POLLY_INSTALL_PREFIX "${POLLY_INSTALL_PACKAGE_DIR}") 96extend_path(POLLY_CONFIG_LLVM_CMAKE_DIR "\${POLLY_INSTALL_PREFIX}" "${LLVM_INSTALL_PACKAGE_DIR}") 97extend_path(POLLY_CONFIG_CMAKE_DIR "\${POLLY_INSTALL_PREFIX}" "${POLLY_INSTALL_PACKAGE_DIR}") 98extend_path(POLLY_CONFIG_LIBRARY_DIRS "\${POLLY_INSTALL_PREFIX}" "lib${LLVM_LIBDIR_SUFFIX}") 99extend_path(base_includedir "\${POLLY_INSTALL_PREFIX}" "${CMAKE_INSTALL_INCLUDEDIR}") 100if (POLLY_BUNDLED_ISL) 101 set(POLLY_CONFIG_INCLUDE_DIRS 102 "${base_includedir}" 103 "${base_includedir}/polly" 104 ) 105else() 106 set(POLLY_CONFIG_INCLUDE_DIRS 107 "${base_includedir}" 108 ${ISL_INCLUDE_DIRS} 109 ) 110endif() 111 112# Set locations for imported targets. The path is constructed to be relative to 113# the config file. 114# 115# Include the config code of PollyConfig.cmake to define POLLY_INSTALL_PREFIX 116# anew in case the export file is included alone rather than from that file. 117set(POLLY_EXPORTS 118"${POLLY_CONFIG_CODE} 119 120") 121foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS) 122 get_target_property(tgt_type ${tgt} TYPE) 123 if (tgt_type STREQUAL "EXECUTABLE") 124 set(tgt_prefix "${CMAKE_INSTALL_BINDIR}") 125 else() 126 set(tgt_prefix "${CMAKE_INSTALL_LIBDIR}") 127 endif() 128 129 extend_path(tgt_path "\${POLLY_INSTALL_PREFIX}" "${tgt_prefix}/$<TARGET_FILE_NAME:${tgt}>") 130 131 if (NOT tgt_type STREQUAL "INTERFACE_LIBRARY") 132 set(POLLY_EXPORTS 133"set_target_properties(${tgt} PROPERTIES 134 IMPORTED_LOCATION$<$<NOT:$<CONFIG:>>:_$<UPPER_CASE:$<CONFIG>>> \"${tgt_path}\") 135${POLLY_EXPORTS}") 136 endif() 137endforeach(tgt) 138 139configure_file( 140 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in 141 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake 142 @ONLY) 143configure_file( 144 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in 145 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake 146 @ONLY) 147file(GENERATE OUTPUT 148 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME} 149 CONTENT "${POLLY_EXPORTS}") 150 151if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) 152 install( 153 FILES 154 "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake" 155 "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake" 156 "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME}" 157 DESTINATION "${POLLY_INSTALL_PACKAGE_DIR}") 158endif () 159