1- # cmake/InstallIppl.cmake
2- # -------------------------------------------------------
3- # Installation logic for the IPPL library
4- # -------------------------------------------------------
1+ # -----------------------------------------------------------------------------
2+ # InstallIppl.cmake
3+ # ~~~
4+ #
5+ # Setup install rules for ippl (and dependencies if needed).
6+ #
7+ # Responsibilities:
8+ # - Create IPPLConfig, IPPLConfigVersion, IPPLTargets files in install dir
9+ # - Also create above files in build dir, for development, when building ippl
10+ # locally and using a non-installed version
11+ #
12+ # Note:
13+ # - NameSpace 'IPPL' should be used to match Project name as used in
14+ # find_package(IPPL ...
15+ # ~~~
16+ # -----------------------------------------------------------------------------
517
618set (IPPL_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR} /cmake/ippl"
719 CACHE PATH "Directory for ippl CMake package files" )
820
21+ # cmake-format: off
22+ # -------------------------------------------------------
23+ # Define patterns for globbing of files we are not installing
24+ # -------------------------------------------------------
925set (_ippl_install_excludes
10- PATTERN
11- "CMakeFiles"
12- EXCLUDE
13- PATTERN
14- "CMakeLists.txt"
15- EXCLUDE
16- PATTERN
17- "*.c"
18- EXCLUDE
19- PATTERN
20- "*.cc"
21- EXCLUDE
22- PATTERN
23- "*.cpp"
24- EXCLUDE
25- PATTERN
26- "*.cu"
27- EXCLUDE )
26+ PATTERN "CMakeFiles" EXCLUDE
27+ PATTERN "CMakeLists.txt" EXCLUDE
28+ PATTERN "*.c" EXCLUDE
29+ PATTERN "*.cc" EXCLUDE
30+ PATTERN "*.cpp" EXCLUDE
31+ PATTERN "*.cu" EXCLUDE
32+ # match your filenames if needed
33+ )
34+
2835if (NOT IPPL_ENABLE_FFT)
2936 list (
30- APPEND
31- _ippl_install_excludes
32- PATTERN
33- "FFT/*"
34- EXCLUDE
35- PATTERN
36- "PoissonSolvers/FFT*"
37- EXCLUDE # match your filenames if needed
38- )
37+ APPEND _ippl_install_excludes
38+ PATTERN "FFT/*" EXCLUDE
39+ PATTERN "PoissonSolvers/FFT*" EXCLUDE )
3940endif ()
4041
42+ # -------------------------------------------------------
43+ # Define patterns for files we are installing
4144install (
4245 DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /
4346 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /ippl
@@ -49,9 +52,16 @@ install(
4952 PATTERN "*.cuh"
5053 PATTERN "*.tpp" ${_ippl_install_excludes} )
5154
52- install (FILES ${CMAKE_CURRENT_BINARY_DIR} /IpplVersions.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
55+ # -------------------------------------------------------
56+ # install all the header/other files
57+ # -------------------------------------------------------
58+ install (
59+ FILES ${CMAKE_CURRENT_BINARY_DIR} /IpplVersions.h
60+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
5361
54- # Install the actual library target
62+ # -------------------------------------------------------
63+ # Define an install rule for the targets we export
64+ # -------------------------------------------------------
5565install (
5666 TARGETS ippl
5767 EXPORT ipplTargets
@@ -61,66 +71,56 @@ install(
6171 INCLUDES
6272 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
6373
64- # Export the CMake target for find_package()
65- install (EXPORT ipplTargets FILE ipplTargets.cmake NAMESPACE ippl::
66- DESTINATION ${IPPL_INSTALL_CMAKEDIR} )
67-
68- include (CMakePackageConfigHelpers)
69-
70- write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR} /IPPLConfigVersion.cmake"
71- VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
72-
73- configure_package_config_file(
74- "${PROJECT_SOURCE_DIR} /cmake/IPPLConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR} /IPPLConfig.cmake"
75- INSTALL_DESTINATION ${IPPL_INSTALL_CMAKEDIR} )
76-
77- install (FILES "${CMAKE_CURRENT_BINARY_DIR} /IPPLConfig.cmake"
78- "${CMAKE_CURRENT_BINARY_DIR} /IPPLConfigVersion.cmake"
79- DESTINATION ${IPPL_INSTALL_CMAKEDIR} )
80-
81- return ()
82-
83- # cmake/InstallIppl.cmake
8474# -------------------------------------------------------
85- # Installation logic for the IPPL library
75+ # Install rule to create the CMake targets for find_package()
8676# -------------------------------------------------------
87- include (CMakePackageConfigHelpers)
88-
89- # -------------------------------------------------------
90- # Install public headers
91- install (FILES ${IPPL_SOURCE_DIR} /Ippl.h ${IPPL_SOURCE_DIR} /IpplCore.h
92- ${IPPL_BINARY_DIR} /IpplVersions.h DESTINATION include )
77+ install (
78+ EXPORT ipplTargets
79+ FILE IPPLTargets.cmake
80+ NAMESPACE IPPL::
81+ DESTINATION ${IPPL_INSTALL_CMAKEDIR} )
9382
94- # -------------------------------------------------------
95- # Install the actual library target
96- install (TARGETS ippl EXPORT IpplTargets DESTINATION lib)
83+ # Also export targets to the build directory to support uninstalled builds
84+ export (
85+ EXPORT ipplTargets
86+ FILE "${PROJECT_BINARY_DIR} /IPPLTargets.cmake"
87+ NAMESPACE IPPL::)
9788
98- # Ensure extern dependencies (like HEFFTE) are exported correctly if they were built in-tree. This
99- # is necessary for Heffte because it does not use CMake's export target mechanism
100- if (TARGET Heffte)
101- install (TARGETS Heffte EXPORT IpplTargets DESTINATION lib)
102- endif ()
89+ # cmake-format: on
10390
10491# -------------------------------------------------------
105- # Export the CMake targets for find_package()
106- install (EXPORT IpplTargets FILE IPPLTargets.cmake NAMESPACE IPPL:: DESTINATION lib/cmake/IPPL)
107-
92+ # Create the project ConfigVersion file
10893# -------------------------------------------------------
109- # Also export targets to the build directory to support uninstalled builds
110- export (EXPORT IpplTargets FILE " ${PROJECT_BINARY_DIR} /IPPLTargets.cmake" NAMESPACE IPPL:: )
94+ write_basic_package_version_file( " ${CMAKE_CURRENT_BINARY_DIR} /IPPLConfigVersion.cmake"
95+ VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion )
11196
112- # -------------------------------------------------------
113- # generate a version file for the package (in the build tree)
97+ # Also generate version file in the build directory to support uninstalled builds
11498write_basic_package_version_file("${PROJECT_BINARY_DIR} /IPPLConfigVersion.cmake"
11599 VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
116100
117101# -------------------------------------------------------
118- # generate a package config file (in the build tree)
102+ # Setup the main project config file found by find_package(IPPL
103+ # -------------------------------------------------------
104+ configure_package_config_file(
105+ "${PROJECT_SOURCE_DIR} /cmake/IPPLConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR} /IPPLConfig.cmake"
106+ INSTALL_DESTINATION ${IPPL_INSTALL_CMAKEDIR} )
107+
108+ # Also generate config file in the build directory to support uninstalled builds
119109configure_package_config_file(
120110 "${PROJECT_SOURCE_DIR} /cmake/IPPLConfig.cmake.in" "${PROJECT_BINARY_DIR} /IPPLConfig.cmake"
121111 INSTALL_DESTINATION lib/cmake/IPPL)
122112
123113# -------------------------------------------------------
124- # install the generated version and package config files in the install tree
125- install (FILES "${PROJECT_BINARY_DIR} /IPPLConfig.cmake"
126- "${PROJECT_BINARY_DIR} /IPPLConfigVersion.cmake" DESTINATION lib/cmake/IPPL)
114+ # The install rule that copies the generated config files to the install tree
115+ # -------------------------------------------------------
116+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /IPPLConfig.cmake"
117+ "${CMAKE_CURRENT_BINARY_DIR} /IPPLConfigVersion.cmake"
118+ DESTINATION ${IPPL_INSTALL_CMAKEDIR} )
119+
120+ # -------------------------------------------------------
121+ # Fix/Hack: Ensure extern dependencies are exported correctly if they were built in-tree. This is
122+ # needed for Heffte because it doesn't fully use CMake's export target mechanism
123+ # -------------------------------------------------------
124+ if (TARGET Heffte)
125+ install (TARGETS Heffte EXPORT ipplTargets DESTINATION lib)
126+ endif ()
0 commit comments