Skip to content

Commit e68215c

Browse files
committed
[Polly][CMake] Make PollyConfig.cmake relocatable like other projects'
This builds on D116521 to add this functionality to Polly without more copy-pasted code. Reviewed By: beanz Differential Revision: https://reviews.llvm.org/D116555
1 parent 072e2a7 commit e68215c

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

polly/CMakeLists.txt

+9-7
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,15 @@ endif ()
4848
set(POLLY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
4949
set(POLLY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
5050

51-
# Add path for custom modules
52-
set(CMAKE_MODULE_PATH
53-
${CMAKE_MODULE_PATH}
54-
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
51+
if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
52+
set(LLVM_COMMON_CMAKE_UTILS ${POLLY_SOURCE_DIR}/../cmake)
53+
endif()
54+
55+
# Make sure that our source directory is on the current cmake module path so that
56+
# we can include cmake files from this directory.
57+
list(INSERT CMAKE_MODULE_PATH 0
58+
"${POLLY_SOURCE_DIR}/cmake"
59+
"${LLVM_COMMON_CMAKE_UTILS}/Modules"
5560
)
5661

5762
include("polly_macros")
@@ -68,9 +73,6 @@ else ()
6873
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
6974
endif ()
7075

71-
# Add path for custom modules
72-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${POLLY_SOURCE_DIR}/cmake")
73-
7476
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
7577

7678
option(POLLY_ENABLE_GPGPU_CODEGEN "Enable GPGPU code generation feature" OFF)

polly/cmake/CMakeLists.txt

+21-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Keep this in sync with llvm/cmake/CMakeLists.txt!
22

3+
include(FindPrefixFromConfig)
4+
35
set(LLVM_INSTALL_PACKAGE_DIR "lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
46
set(POLLY_INSTALL_PACKAGE_DIR "lib${LLVM_LIBDIR_SUFFIX}/cmake/polly")
57
if (CMAKE_CONFIGURATION_TYPES)
@@ -46,6 +48,7 @@ endif()")
4648
endif()
4749

4850
# Generate PollyConfig.cmake for the build tree.
51+
set(POLLY_CONFIG_CODE "")
4952
set(POLLY_CONFIG_CMAKE_DIR "${CMAKE_BINARY_DIR}/${POLLY_INSTALL_PACKAGE_DIR}")
5053
set(POLLY_CONFIG_INCLUDE_DIRS
5154
${POLLY_SOURCE_DIR}/include
@@ -79,24 +82,31 @@ file(GENERATE
7982

8083
# Generate PollyConfig.cmake for the install tree.
8184
unset(POLLY_EXPORTS)
82-
set(POLLY_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
83-
set(POLLY_CONFIG_LLVM_CMAKE_DIR "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
84-
set(POLLY_CONFIG_CMAKE_DIR "${POLLY_INSTALL_PREFIX}/${POLLY_INSTALL_PACKAGE_DIR}")
85-
set(POLLY_CONFIG_LIBRARY_DIRS "${POLLY_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}")
85+
find_prefix_from_config(POLLY_CONFIG_CODE POLLY_INSTALL_PREFIX "${POLLY_INSTALL_PACKAGE_DIR}")
86+
set(POLLY_CONFIG_LLVM_CMAKE_DIR "\${POLLY_INSTALL_PREFIX}/${LLVM_INSTALL_PACKAGE_DIR}")
87+
set(POLLY_CONFIG_CMAKE_DIR "\${POLLY_INSTALL_PREFIX}/${POLLY_INSTALL_PACKAGE_DIR}")
88+
set(POLLY_CONFIG_LIBRARY_DIRS "\${POLLY_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}")
8689
if (POLLY_BUNDLED_ISL)
8790
set(POLLY_CONFIG_INCLUDE_DIRS
88-
"${POLLY_INSTALL_PREFIX}/include"
89-
"${POLLY_INSTALL_PREFIX}/include/polly"
91+
"\${POLLY_INSTALL_PREFIX}/include"
92+
"\${POLLY_INSTALL_PREFIX}/include/polly"
9093
)
9194
else()
9295
set(POLLY_CONFIG_INCLUDE_DIRS
93-
"${POLLY_INSTALL_PREFIX}/include"
96+
"\${POLLY_INSTALL_PREFIX}/include"
9497
${ISL_INCLUDE_DIRS}
9598
)
9699
endif()
97100

98-
# set locations for imported targets. The path is constructed to be relative to
99-
# the config file
101+
# Set locations for imported targets. The path is constructed to be relative to
102+
# the config file.
103+
#
104+
# Include the config code of PollyConfig.cmake to define POLLY_INSTALL_PREFIX
105+
# anew in case the export file is included alone rather than from that file.
106+
set(POLLY_EXPORTS
107+
"${POLLY_CONFIG_CODE}
108+
109+
")
100110
foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS)
101111
get_target_property(tgt_type ${tgt} TYPE)
102112
if (tgt_type STREQUAL "EXECUTABLE")
@@ -105,13 +115,12 @@ foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS)
105115
set(tgt_prefix "lib/")
106116
endif()
107117

108-
set(tgt_path "${CMAKE_INSTALL_PREFIX}/${tgt_prefix}$<TARGET_FILE_NAME:${tgt}>")
109-
file(RELATIVE_PATH tgt_path ${POLLY_CONFIG_CMAKE_DIR} ${tgt_path})
118+
set(tgt_path "\${POLLY_INSTALL_PREFIX}/${tgt_prefix}$<TARGET_FILE_NAME:${tgt}>")
110119

111120
if (NOT tgt_type STREQUAL "INTERFACE_LIBRARY")
112121
set(POLLY_EXPORTS
113122
"set_target_properties(${tgt} PROPERTIES
114-
IMPORTED_LOCATION$<$<NOT:$<CONFIG:>>:_$<UPPER_CASE:$<CONFIG>>> \${CMAKE_CURRENT_LIST_DIR}/${tgt_path})
123+
IMPORTED_LOCATION$<$<NOT:$<CONFIG:>>:_$<UPPER_CASE:$<CONFIG>>> \"${tgt_path}\")
115124
${POLLY_EXPORTS}")
116125
endif()
117126
endforeach(tgt)

polly/cmake/PollyConfig.cmake.in

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# This file allows users to call find_package(Polly) and pick up our targets.
22

3+
@POLLY_CONFIG_CODE@
4+
35
find_package(LLVM REQUIRED CONFIG
46
HINTS "@POLLY_CONFIG_LLVM_CMAKE_DIR@")
57

0 commit comments

Comments
 (0)