|
| 1 | +#@HEADER |
| 2 | +# ************************************************************************ |
| 3 | +# |
| 4 | +# Kokkos v. 4.0 |
| 5 | +# Copyright (2022) National Technology & Engineering |
| 6 | +# Solutions of Sandia, LLC (NTESS). |
| 7 | +# |
| 8 | +# Under the terms of Contract DE-NA0003525 with NTESS, |
| 9 | +# the U.S. Government retains certain rights in this software. |
| 10 | +# |
| 11 | +# Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. |
| 12 | +# See https://kokkos.org/LICENSE for license information. |
| 13 | +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 14 | +# |
| 15 | +#@HEADER |
| 16 | + |
1 | 17 | # 3.9: MPI::MPI_CXX |
2 | 18 | # 3.12: CMAKE_PROJECT_VERSION_MAJOR |
3 | 19 | # 3.15: PUBLIC_HEADER files for interface libraries |
4 | | -cmake_minimum_required(VERSION 3.12) |
5 | | -project(KokkosComm VERSION 0.0.2) |
| 20 | +# 3.23: FILE_SETs for easy export of header-only libraries |
| 21 | +cmake_minimum_required(VERSION 3.23) |
| 22 | + |
| 23 | +project( |
| 24 | + KokkosComm |
| 25 | + LANGUAGES |
| 26 | + CXX |
| 27 | + VERSION 0.2.0 |
| 28 | + DESCRIPTION "Experimental MPI interfaces (and more!) for the Kokkos C++ Performance Portability Programming ecosystem" |
| 29 | + HOMEPAGE_URL "https://kokkos.org/kokkos-comm/" |
| 30 | +) |
6 | 31 |
|
7 | 32 | option(KokkosComm_ENABLE_PERFTESTS "Build KokkosComm perf tests" OFF) |
8 | | -option(KokkosComm_ENABLE_TESTS "Build KokkosComm perf tests" OFF) |
| 33 | +option(KokkosComm_ENABLE_TESTS "Build KokkosComm tests" OFF) |
9 | 34 | option(KokkosComm_ENABLE_MPI "Build KokkosComm with MPI transport" ON) |
10 | 35 |
|
11 | | - |
12 | | -## resolve options |
| 36 | +# Resolve options |
13 | 37 | set(KOKKOSCOMM_ENABLE_PERFTESTS ${KokkosComm_ENABLE_PERFTESTS} CACHE BOOL "" FORCE) |
14 | 38 | set(KOKKOSCOMM_ENABLE_TESTS ${KokkosComm_ENABLE_TESTS} CACHE BOOL "" FORCE) |
15 | 39 | set(KOKKOSCOMM_ENABLE_MPI ${KokkosComm_ENABLE_MPI} CACHE BOOL "" FORCE) |
16 | 40 |
|
17 | 41 | find_package(Kokkos REQUIRED) |
18 | | -find_package(MPI REQUIRED) |
19 | | - |
20 | | -message(STATUS "Kokkos Comm: MPI_VERSION = ${MPI_VERSION}") |
21 | | -message(STATUS "Kokkos Comm: MPI_CXX_COMPILER = ${MPI_CXX_COMPILER}") |
22 | | -message(STATUS "Kokkos Comm: MPI_CXX_COMPILE_OPTIONS = ${MPI_CXX_COMPILE_OPTIONS}") |
23 | | -message(STATUS "Kokkos Comm: MPI_CXX_COMPILE_DEFINITIONS = ${MPI_CXX_COMPILE_DEFINITIONS}") |
24 | | -message(STATUS "Kokkos Comm: MPI_CXX_INCLUDE_DIRS = ${MPI_CXX_INCLUDE_DIRS}") |
25 | | -message(STATUS "Kokkos Comm: MPI_CXX_LINK_FLAGS = ${MPI_CXX_LINK_FLAGS}") |
26 | | -message(STATUS "Kokkos Comm: MPI_CXX_LIBRARIES = ${MPI_CXX_LIBRARIES}") |
27 | | - |
| 42 | +if(KOKKOSCOMM_ENABLE_MPI) |
| 43 | + find_package(MPI REQUIRED) |
| 44 | +endif() |
28 | 45 |
|
29 | | -include(cmake/flags.cmake) |
30 | 46 | add_subdirectory(src) |
31 | | -kokkoscomm_add_cxx_flags(TARGET KokkosComm INTERFACE) |
| 47 | +if(KOKKOSCOMM_ENABLE_TESTS) |
| 48 | + add_subdirectory(unit_tests) |
| 49 | +endif() |
| 50 | +if(KOKKOSCOMM_ENABLE_PERFTESTS) |
| 51 | + add_subdirectory(perf_tests) |
| 52 | +endif() |
32 | 53 |
|
33 | | -## Version config file |
| 54 | +# -- PACKAGING -- # |
| 55 | +include(CMakePackageConfigHelpers) |
| 56 | +include(GNUInstallDirs) |
| 57 | + |
| 58 | +# Generate version config header |
34 | 59 | set(KOKKOSCOMM_VERSION_MAJOR ${CMAKE_PROJECT_VERSION_MAJOR} CACHE STRING "" FORCE) |
35 | 60 | set(KOKKOSCOMM_VERSION_MINOR ${CMAKE_PROJECT_VERSION_MINOR} CACHE STRING "" FORCE) |
36 | 61 | set(KOKKOSCOMM_VERSION_PATCH ${CMAKE_PROJECT_VERSION_PATCH} CACHE STRING "" FORCE) |
37 | 62 | configure_file( |
38 | | - ${CMAKE_CURRENT_LIST_DIR}/cmake/KokkosComm_config.hpp.in |
39 | | - ${CMAKE_CURRENT_BINARY_DIR}/src/KokkosComm_config.hpp |
40 | | - @ONLY |
| 63 | + ${PROJECT_SOURCE_DIR}/cmake/KokkosComm_config.hpp.in |
| 64 | + ${PROJECT_BINARY_DIR}/src/KokkosComm/config.hpp |
| 65 | + @ONLY |
41 | 66 | ) |
42 | 67 |
|
43 | | -# this sets CMAKE_INSTALL_[...]DIR |
44 | | -include(GNUInstallDirs) |
45 | | - |
46 | | -target_include_directories(KokkosComm INTERFACE |
47 | | - $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src/> |
48 | | - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> |
| 68 | +# Generate package config file |
| 69 | +configure_package_config_file( |
| 70 | + ${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in |
| 71 | + ${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake |
| 72 | + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm |
| 73 | + NO_SET_AND_CHECK_MACRO |
| 74 | + NO_CHECK_REQUIRED_COMPONENTS_MACRO |
49 | 75 | ) |
50 | 76 |
|
51 | | -## Package config file |
52 | | -include(CMakePackageConfigHelpers) |
53 | | -configure_package_config_file ( |
54 | | - ${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in |
55 | | - ${PROJECT_BINARY_DIR}/cmake/KokkosComm/${PROJECT_NAME}Config.cmake |
56 | | - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} |
57 | | - NO_SET_AND_CHECK_MACRO |
58 | | - NO_CHECK_REQUIRED_COMPONENTS_MACRO |
59 | | -) |
| 77 | +# Generate package version file |
60 | 78 | write_basic_package_version_file( |
61 | | - ${PROJECT_BINARY_DIR}/cmake/KokkosComm/${PROJECT_NAME}Version.cmake |
62 | | - COMPATIBILITY SameMajorVersion |
63 | | -) |
64 | | - |
65 | | -export ( |
66 | | - TARGETS KokkosComm |
67 | | - NAMESPACE "${PROJECT_NAME}::" |
68 | | - FILE ${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommTargets.cmake |
| 79 | + ${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake |
| 80 | + COMPATIBILITY SameMajorVersion |
| 81 | + ARCH_INDEPENDENT # KokkosComm is a header-only library |
69 | 82 | ) |
70 | 83 |
|
71 | | - |
72 | | -install( |
73 | | - TARGETS KokkosComm |
74 | | - EXPORT KokkosCommTargets # does this do anything? |
75 | | - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
76 | | - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
77 | | - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
78 | | -# install the include tree |
79 | | -install( |
80 | | - DIRECTORY "src/" |
81 | | - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
82 | | - FILES_MATCHING PATTERN "*.hpp") |
83 | | -# install the configured files |
| 84 | +# Install CMake package files |
84 | 85 | install( |
85 | | - DIRECTORY "${PROJECT_BINARY_DIR}/src/" |
86 | | - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
87 | | - FILES_MATCHING PATTERN "*.hpp") |
88 | | -install( |
89 | | - FILES |
90 | | - "${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake" |
91 | | - "${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake" |
92 | | - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm/ |
| 86 | + FILES |
| 87 | + ${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake |
| 88 | + ${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake |
| 89 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm |
93 | 90 | ) |
94 | 91 | install( |
95 | | - EXPORT KokkosCommTargets |
96 | | - NAMESPACE "${PROJECT_NAME}::" |
97 | | - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" |
| 92 | + EXPORT KokkosCommTargets |
| 93 | + FILE KokkosCommTargets.cmake |
| 94 | + NAMESPACE KokkosComm:: |
| 95 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm |
98 | 96 | ) |
99 | | - |
100 | | - |
101 | | -if(KOKKOSCOMM_ENABLE_TESTS) |
102 | | - enable_testing() |
103 | | - add_subdirectory(unit_tests) |
104 | | -endif() |
105 | | -if(KOKKOSCOMM_ENABLE_PERFTESTS) |
106 | | - enable_testing() |
107 | | - add_subdirectory(perf_tests) |
108 | | -endif() |
0 commit comments