# Keep this in sync with llvm/cmake/CMakeLists.txt! include(GNUInstallPackageDir) include(ExtendPath) include(FindPrefixFromConfig) set(POLLY_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/polly" CACHE STRING "Path for CMake subdirectory for Polly (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/polly')") # CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below. set(polly_cmake_builddir "${POLLY_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/polly") set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING "Path for CMake subdirectory for LLVM (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/llvm')") # CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below. string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_cmake_builddir "${LLVM_LIBRARY_DIR}") set(llvm_cmake_builddir "${llvm_cmake_builddir}/cmake/llvm") if (CMAKE_CONFIGURATION_TYPES) set(POLLY_EXPORTS_FILE_NAME "PollyExports-$>.cmake") else() # avoid conflicts in the build-tree when changing configuration set(POLLY_EXPORTS_FILE_NAME "PollyExports-all.cmake") endif() set(POLLY_CONFIG_EXPORTED_TARGETS Polly ${ISL_TARGET}) if (NOT (WIN32 OR CYGWIN) AND LLVM_ENABLE_PIC) # LLVMPolly is a dummy target on Win or if PIC code is disabled. list(APPEND POLLY_CONFIG_EXPORTED_TARGETS LLVMPolly) endif() # Get the target type for every exported target foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS) get_target_property(tgt_type ${tgt} TYPE) string(REPLACE "_LIBRARY" "" tgt_type ${tgt_type}) set(POLLY_CONFIG_TARGET_${tgt}_TYPE ${tgt_type}) endforeach() # generate the import code for bundled/undbundled libisl versions if (NOT POLLY_BUNDLED_ISL) get_property(incl TARGET ISL PROPERTY INTERFACE_INCLUDE_DIRECTORIES) get_property(lib TARGET ISL PROPERTY INTERFACE_LINK_LIBRARIES) get_property(opt TARGET ISL PROPERTY INTERFACE_COMPILE_OPTIONS) set(ISL_CONFIG_CODE " add_library(ISL INTERFACE IMPORTED) set_property(TARGET ISL APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${incl}) set_property(TARGET ISL APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${lib}) set_property(TARGET ISL APPEND PROPERTY INTERFACE_COMPILE_OPTIONS ${opt})") else() set(ISL_CONFIG_CODE " if (NOT TARGET PollyISL) add_library(PollyISL ${POLLY_CONFIG_TARGET_PollyISL_TYPE} IMPORTED) endif()") endif() # Generate PollyConfig.cmake for the build tree. set(POLLY_CONFIG_CODE "") set(POLLY_CONFIG_LLVM_CMAKE_DIR "${llvm_cmake_builddir}") set(POLLY_CONFIG_CMAKE_DIR "${polly_cmake_builddir}") set(POLLY_CONFIG_INCLUDE_DIRS ${POLLY_SOURCE_DIR}/include ${ISL_INCLUDE_DIRS} ${POLLY_BINARY_DIR}/include ) set(POLLY_CONFIG_LIBRARY_DIRS "${POLLY_BINARY_DIR}/lib") # set locations for imported targets foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS) get_target_property(tgt_type ${tgt} TYPE) if (NOT tgt_type STREQUAL "INTERFACE_LIBRARY") set(POLLY_EXPORTS "set_target_properties(${tgt} PROPERTIES IMPORTED_LOCATION$<$>:_$>> $) ${POLLY_EXPORTS}") endif() endforeach(tgt) # PollyConfig holds the target definitions and general settings, PollyExports # the imported locations configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in ${polly_cmake_builddir}/PollyConfig.cmake @ONLY) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in ${polly_cmake_builddir}/PollyConfigVersion.cmake @ONLY) file(GENERATE OUTPUT ${polly_cmake_builddir}/${POLLY_EXPORTS_FILE_NAME} CONTENT "${POLLY_EXPORTS}") # Generate PollyConfig.cmake for the install tree. unset(POLLY_EXPORTS) find_prefix_from_config(POLLY_CONFIG_CODE POLLY_INSTALL_PREFIX "${POLLY_INSTALL_PACKAGE_DIR}") extend_path(POLLY_CONFIG_LLVM_CMAKE_DIR "\${POLLY_INSTALL_PREFIX}" "${LLVM_INSTALL_PACKAGE_DIR}") extend_path(POLLY_CONFIG_CMAKE_DIR "\${POLLY_INSTALL_PREFIX}" "${POLLY_INSTALL_PACKAGE_DIR}") extend_path(POLLY_CONFIG_LIBRARY_DIRS "\${POLLY_INSTALL_PREFIX}" "lib${LLVM_LIBDIR_SUFFIX}") extend_path(base_includedir "\${POLLY_INSTALL_PREFIX}" "${CMAKE_INSTALL_INCLUDEDIR}") if (POLLY_BUNDLED_ISL) set(POLLY_CONFIG_INCLUDE_DIRS "${base_includedir}" "${base_includedir}/polly" ) else() set(POLLY_CONFIG_INCLUDE_DIRS "${base_includedir}" ${ISL_INCLUDE_DIRS} ) endif() # Set locations for imported targets. The path is constructed to be relative to # the config file. # # Include the config code of PollyConfig.cmake to define POLLY_INSTALL_PREFIX # anew in case the export file is included alone rather than from that file. set(POLLY_EXPORTS "${POLLY_CONFIG_CODE} ") foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS) get_target_property(tgt_type ${tgt} TYPE) if (tgt_type STREQUAL "EXECUTABLE") set(tgt_prefix "${CMAKE_INSTALL_BINDIR}") else() set(tgt_prefix "${CMAKE_INSTALL_LIBDIR}") endif() extend_path(tgt_path "\${POLLY_INSTALL_PREFIX}" "${tgt_prefix}/$") if (NOT tgt_type STREQUAL "INTERFACE_LIBRARY") set(POLLY_EXPORTS "set_target_properties(${tgt} PROPERTIES IMPORTED_LOCATION$<$>:_$>> \"${tgt_path}\") ${POLLY_EXPORTS}") endif() endforeach(tgt) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake @ONLY) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake @ONLY) file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME} CONTENT "${POLLY_EXPORTS}") if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake" "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME}" DESTINATION "${POLLY_INSTALL_PACKAGE_DIR}") endif ()