Skip to content

Commit a318065

Browse files
authored
Enzyme CMake Package (rust-lang#335)
* add enzyme cmake package
1 parent 249121f commit a318065

File tree

4 files changed

+106
-2
lines changed

4 files changed

+106
-2
lines changed

enzyme/CMakeLists.txt

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1+
cmake_minimum_required(VERSION 3.9)
12
project(Enzyme)
23

3-
cmake_minimum_required(VERSION 3.9)
4+
include(CMakePackageConfigHelpers)
5+
6+
7+
set(ENZYME_MAJOR_VERSION 0)
8+
set(ENZYME_MINOR_VERSION 0)
9+
set(ENZYME_PATCH_VERSION 19)
10+
set(ENZYME_VERSION
11+
${ENZYME_MAJOR_VERSION}.${ENZYME_MINOR_VERSION}.${ENZYME_PATCH_VERSION})
12+
413

514
SET(CMAKE_CXX_FLAGS "-Wall -fPIC -fno-rtti")
615
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -ggdb")
@@ -57,6 +66,18 @@ message("LLVM_INCLUDE_DIRS: ${LLVM_INCLUDE_DIRS}")
5766
message("found llvm definitions " ${LLVM_DEFINITIONS})
5867
message("found llvm version " ${LLVM_VERSION_MAJOR})
5968

69+
70+
# Offer the user the choice of overriding the installation directories
71+
set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
72+
if(WIN32 AND NOT CYGWIN)
73+
set(DEF_INSTALL_CMAKE_DIR CMake)
74+
else()
75+
set(DEF_INSTALL_CMAKE_DIR lib/CMake/Enzyme)
76+
endif()
77+
set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH
78+
"Installation directory for CMake files")
79+
80+
6081
list(GET LLVM_INCLUDE_DIRS 0 LLVM_IDIR)
6182
message("first llvm include directory" ${LLVM_IDIR})
6283

@@ -97,3 +118,43 @@ add_subdirectory(test)
97118
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/benchmarks")
98119
add_subdirectory(benchmarks)
99120
endif()
121+
122+
123+
# Make relative paths absolute (needed later on)
124+
foreach(p LIB BIN INCLUDE CMAKE)
125+
set(var INSTALL_${p}_DIR)
126+
if(NOT IS_ABSOLUTE "${${var}}")
127+
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
128+
endif()
129+
endforeach()
130+
131+
export(TARGETS LLVMEnzyme-${LLVM_VERSION_MAJOR} ClangEnzyme-${LLVM_VERSION_MAJOR}
132+
FILE "${PROJECT_BINARY_DIR}/EnzymeTargets.cmake")
133+
134+
export(PACKAGE Enzyme)
135+
136+
set(CONF_LLVM_VERSION_MAJOR ${LLVM_VERSION_MAJOR})
137+
set(CONF_LLVM_VERSION_MINOR ${LLVM_VERSION_MINOR})
138+
set(CONF_LLVM_VERSION_PATCH ${LLVM_VERSION_PATCH})
139+
set(CONF_LLVM_DIR ${LLVM_DIR})
140+
set(CONF_LLVM_BINARY_DIR ${LLVM_BINARY_DIR})
141+
142+
set(CONF_INCLUDE_DIRS lib)
143+
configure_file(cmake/EnzymeConfig.cmake.in
144+
"${PROJECT_BINARY_DIR}/EnzymeConfig.cmake" @ONLY)
145+
146+
set(CONF_INCLUDE_DIRS lib)
147+
configure_file(cmake/EnzymeConfig.cmake.in
148+
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/EnzymeConfig.cmake" @ONLY)
149+
150+
configure_file(cmake/EnzymeConfigVersion.cmake.in
151+
"${PROJECT_BINARY_DIR}/EnzymeConfigVersion.cmake" @ONLY)
152+
153+
install(FILES
154+
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/EnzymeConfig.cmake"
155+
"${PROJECT_BINARY_DIR}/EnzymeConfigVersion.cmake"
156+
DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
157+
158+
install(EXPORT EnzymeTargets DESTINATION
159+
"${INSTALL_CMAKE_DIR}" COMPONENT dev NAMESPACE Enzyme::)
160+

enzyme/Enzyme/CMakeLists.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ if (${ENZYME_EXTERNAL_SHARED_LIB})
7171
${ENZYME_SRC}
7272
)
7373
target_link_libraries(Enzyme-${LLVM_VERSION_MAJOR} LLVM)
74-
install(TARGETS Enzyme-${LLVM_VERSION_MAJOR} DESTINATION lib)
74+
install(TARGETS Enzyme-${LLVM_VERSION_MAJOR}
75+
EXPORT EnzymeTargets
76+
LIBRARY DESTINATION lib COMPONENT shlib
77+
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/Enzyme"
78+
COMPONENT dev)
7579
endif()
7680

7781
if (APPLE)
@@ -81,3 +85,9 @@ set_target_properties(LLVMEnzyme-${LLVM_VERSION_MAJOR} PROPERTIES
8185
set_target_properties(ClangEnzyme-${LLVM_VERSION_MAJOR} PROPERTIES
8286
LINK_FLAGS "-Wl,-flat_namespace -Wl,-undefined -Wl,suppress")
8387
endif()
88+
89+
install(TARGETS LLVMEnzyme-${LLVM_VERSION_MAJOR} ClangEnzyme-${LLVM_VERSION_MAJOR}
90+
EXPORT EnzymeTargets
91+
LIBRARY DESTINATION lib COMPONENT shlib
92+
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/Enzyme"
93+
COMPONENT dev)

enzyme/cmake/EnzymeConfig.cmake.in

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# - Config file for the Enzyme package
2+
3+
# Compute paths
4+
get_filename_component(Enzyme_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
5+
set(Enzyme_LLVM_VERSION_MAJOR "@CONF_LLVM_VERSION_MAJOR@")
6+
set(Enzyme_LLVM_VERSION_MINOR "@CONF_LLVM_VERSION_MINOR@")
7+
set(Enzyme_LLVM_VERSION_PATCH "@CONF_LLVM_VERSION_PATCH@")
8+
set(Enzyme_LLVM_DIR "@CONF_LLVM_DIR@")
9+
set(Enzyme_LLVM_BINARY_DIR "@CONF_LLVM_BINARY_DIR@")
10+
11+
set(_supported_components LLVMEnzyme ClangEnzyme LLVM)
12+
13+
foreach(_comp ${Enzyme_FIND_COMPONENTS})
14+
if (_comp STREQUAL "LLVMEnzyme" OR _comp STREQUAL "ClangEnzyme")
15+
# Our library dependencies (contains definitions for IMPORTED targets)
16+
if(NOT TARGET LLVMEnzyme-${Enzyme_LLVM_VERSION_MAJOR} AND NOT TARGET ClangEnzyme-${Enzyme_LLVM_VERSION_MAJOR} AND NOT Enzyme_BINARY_DIR)
17+
include("${Enzyme_CMAKE_DIR}/EnzymeTargets.cmake")
18+
endif()
19+
# These are IMPORTED targets created by EnzymeTargets.cmake
20+
set(Enzyme_LIBRARIES LLVMEnzyme-${Enzyme_LLVM_VERSION_MAJOR} ClangEnzyme-${Enzyme_LLVM_VERSION_MAJOR})
21+
endif()
22+
endforeach()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
set(PACKAGE_VERSION "@ENZYME_VERSION@")
2+
3+
# Check whether the requested PACKAGE_FIND_VERSION is compatible
4+
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
5+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
6+
else()
7+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
8+
if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
9+
set(PACKAGE_VERSION_EXACT TRUE)
10+
endif()
11+
endif()

0 commit comments

Comments
 (0)