-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
141 lines (118 loc) · 4.96 KB
/
CMakeLists.txt
File metadata and controls
141 lines (118 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#
# Copyright 2023 Benjamin Worpitz, Erik Zenker, Axel Hübl, Jan Stephan, René Widera, Jeffrey Kelling, Andrea Bocci,
# Bernhard Manfred Gruber, Aurora Perego
# SPDX-License-Identifier: MPL-2.0
#
cmake_minimum_required(VERSION 3.25)
# Find alpaka version.
file(
STRINGS
"${CMAKE_CURRENT_LIST_DIR}/include/alpaka/version.hpp"
alpaka_VERSION_MAJOR_HPP
REGEX "#define ALPAKA_VERSION_MAJOR "
)
file(
STRINGS
"${CMAKE_CURRENT_LIST_DIR}/include/alpaka/version.hpp"
alpaka_VERSION_MINOR_HPP
REGEX "#define ALPAKA_VERSION_MINOR "
)
file(
STRINGS
"${CMAKE_CURRENT_LIST_DIR}/include/alpaka/version.hpp"
alpaka_VERSION_PATCH_HPP
REGEX "#define ALPAKA_VERSION_PATCH "
)
string(REGEX MATCH "([0-9]+)" alpaka_VERSION_MAJOR ${alpaka_VERSION_MAJOR_HPP})
string(REGEX MATCH "([0-9]+)" alpaka_VERSION_MINOR ${alpaka_VERSION_MINOR_HPP})
string(REGEX MATCH "([0-9]+)" alpaka_VERSION_PATCH ${alpaka_VERSION_PATCH_HPP})
set(PACKAGE_VERSION "${alpaka_VERSION_MAJOR}.${alpaka_VERSION_MINOR}.${alpaka_VERSION_PATCH}")
project(
alpaka
VERSION ${alpaka_VERSION_MAJOR}.${alpaka_VERSION_MINOR}.${alpaka_VERSION_PATCH}
DESCRIPTION "The alpaka library is a header-only C++20 abstraction library for accelerator development."
HOMEPAGE_URL "https://github.com/alpaka-group/alpaka3"
)
# This file's directory.
set(_alpaka_ROOT_DIR ${alpaka_SOURCE_DIR})
# Compiler feature tests.
set(_alpaka_FEATURE_TESTS_DIR "${_alpaka_ROOT_DIR}/cmake/test")
set(_alpaka_CMAKE_DIR "${_alpaka_ROOT_DIR}/cmake")
set(_alpaka_TESTS_DIR "${_alpaka_ROOT_DIR}/test")
# Set include directories
set(_alpaka_INCLUDE_DIRECTORY "${_alpaka_ROOT_DIR}/include")
# CMake Options
option(alpaka_TESTS "Enable/Disable testing" OFF)
option(alpaka_DOCS "Enable/Disable documentation code snippet testing" OFF)
option(alpaka_BENCHMARKS "Enable/Disable benchmarks" OFF)
option(alpaka_EXAMPLES "Enable/Disable examples" OFF)
option(alpaka_HEADERCHECKS "Enable/Disable header check tests" OFF)
# only check for compiler support if this cmake is called with add_subdirectory or examples, benchmarks, ... should be compiled too
if(
NOT PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME
OR (alpaka_TESTS OR alpaka_DOCS OR alpaka_BENCHMARKS OR alpaka_EXAMPLES OR alpaka_HEADERCHECKS)
)
include(${_alpaka_CMAKE_DIR}/alpakaCommon.cmake)
endif()
if(alpaka_TESTS)
include(CTest)
enable_testing()
add_subdirectory("${_alpaka_TESTS_DIR}")
endif()
if(alpaka_DOCS)
include(CTest)
enable_testing()
add_subdirectory("${_alpaka_ROOT_DIR}/docs/snippets")
endif()
if(alpaka_BENCHMARKS)
enable_testing()
add_subdirectory("${_alpaka_ROOT_DIR}/benchmark")
endif()
if(alpaka_EXAMPLES)
enable_testing()
add_subdirectory("${_alpaka_ROOT_DIR}/example")
endif()
if(alpaka_HEADERCHECKS)
enable_testing()
add_subdirectory("${_alpaka_ROOT_DIR}/headerCheck")
endif()
# Installation and config
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
write_basic_package_version_file("alpakaConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
install(
FILES
"${_alpaka_ROOT_DIR}/cmake/finalize.cmake"
"${_alpaka_ROOT_DIR}/cmake/alpakaCommon.cmake"
"${_alpaka_ROOT_DIR}/cmake/alpakaCuda.cmake"
"${_alpaka_ROOT_DIR}/cmake/alpakaHip.cmake"
"${_alpaka_ROOT_DIR}/cmake/alpakaOneApi.cmake"
"${_alpaka_ROOT_DIR}/cmake/alpakaHwloc.cmake"
"${_alpaka_ROOT_DIR}/cmake/buildDependencies.cmake"
"${_alpaka_ROOT_DIR}/cmake/common.cmake"
"${_alpaka_ROOT_DIR}/cmake/alpakaCompilePedantic.cmake"
"${PROJECT_BINARY_DIR}/alpakaConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/alpaka
)
configure_package_config_file(
${_alpaka_ROOT_DIR}/cmake/alpakaConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/alpakaConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/alpaka
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/alpakaConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/alpaka)
# copy tests to the installation
install(DIRECTORY ${_alpaka_TESTS_DIR} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} USE_SOURCE_PERMISSIONS)
# Files required to validate optional features std::atomic_ref and std::simd
install(FILES "${_alpaka_FEATURE_TESTS_DIR}/StdAtomicRef.cpp" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/alpaka/tests)
install(FILES "${_alpaka_FEATURE_TESTS_DIR}/StdSimd.cpp" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/alpaka/tests)
# Load alpaka's languages after FetchContent_MakeAvailable()
#
# This macro must be called after FetchContent_MakeAvailable() used to load alpaka.
# The reason is that this is the only way in CMake allowing alpaka to load the required languages.
macro(alpaka_fetchcontent_finalize)
message(
WARNING
"alpaka_fetchcontent_finalize() is deprecated and will be removed soon. Except for removing the call to this function, no additional changes are required."
)
endmacro()