159 lines · plain
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 STRING8 "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 STRING13 "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 configuration22 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 target32foreach(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 versions39if (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_DIRS60 ${POLLY_SOURCE_DIR}/include61 ${ISL_INCLUDE_DIRS}62 ${POLLY_BINARY_DIR}/include63 )64set(POLLY_CONFIG_LIBRARY_DIRS "${POLLY_BINARY_DIR}/lib")65 66# set locations for imported targets67foreach(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_EXPORTS71 "set_target_properties(${tgt} PROPERTIES72 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, PollyExports78# the imported locations79configure_file(80 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in81 ${polly_cmake_builddir}/PollyConfig.cmake82 @ONLY)83configure_file(84 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in85 ${polly_cmake_builddir}/PollyConfigVersion.cmake86 @ONLY)87 88file(GENERATE89 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_DIRS102 "${base_includedir}"103 "${base_includedir}/polly"104 )105else()106 set(POLLY_CONFIG_INCLUDE_DIRS107 "${base_includedir}"108 ${ISL_INCLUDE_DIRS}109 )110endif()111 112# Set locations for imported targets. The path is constructed to be relative to113# the config file.114#115# Include the config code of PollyConfig.cmake to define POLLY_INSTALL_PREFIX116# anew in case the export file is included alone rather than from that file.117set(POLLY_EXPORTS118"${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_EXPORTS133"set_target_properties(${tgt} PROPERTIES134 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.in141 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake142 @ONLY)143configure_file(144 ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in145 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake146 @ONLY)147file(GENERATE OUTPUT148 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME}149 CONTENT "${POLLY_EXPORTS}")150 151if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)152 install(153 FILES154 "${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