This repository has been archived by the owner on Mar 21, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 758
/
CMakeLists.txt
155 lines (129 loc) · 5.28 KB
/
CMakeLists.txt
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# 3.15 is the minimum for including the project with add_subdirectory.
# 3.17 for building the project's standalone tests/examples/etc.
# 3.18.3 for C++17 + CUDA
cmake_minimum_required(VERSION 3.15)
# Remove this when we use the new CUDA_ARCHITECTURES properties with both
# nvcc and nvc++.
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
cmake_policy(SET CMP0104 OLD)
endif()
project(Thrust NONE)
# Determine whether Thrust is the top-level project or included into
# another project via add_subdirectory()
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_LIST_DIR}")
set(THRUST_TOPLEVEL_PROJECT ON)
else()
set(THRUST_TOPLEVEL_PROJECT OFF)
endif()
## thrust_fix_clang_nvcc_build_for
#
# Modifies the given target to include a fix for the clang host compiler case.
# The fix consists of force-including a header into each compilation unit.
#
function(thrust_fix_clang_nvcc_build_for target)
if (UNIX)
# Path to the header containing the fix for clang + nvcc < 11.6. For more info,
# check the content of this header.
set(clang_fix_header_path "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/testing/fix_clang_nvcc_11.5.h")
# Only affects host compiler
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:CUDA>:-include${clang_fix_header_path}>")
endif()
endfunction()
# This must be done before any languages are enabled:
if (THRUST_TOPLEVEL_PROJECT)
include(cmake/ThrustCompilerHacks.cmake)
endif()
# This must appear after our Compiler Hacks or else CMake will delete the cache
# and reconfigure from scratch.
# This must also appear before the installation rules, as it is required by the
# GNUInstallDirs CMake module.
enable_language(CXX)
# Optionally include installation rules for non-top-level builds:
option(THRUST_ENABLE_INSTALL_RULES "Enable installation of Thrust" ${THRUST_TOPLEVEL_PROJECT})
if (THRUST_ENABLE_INSTALL_RULES)
include(cmake/ThrustInstallRules.cmake)
endif()
# Support adding Thrust to a parent project via add_subdirectory.
# See examples/cmake/add_subdir/CMakeLists.txt for details.
if (NOT THRUST_TOPLEVEL_PROJECT)
include(cmake/ThrustAddSubdir.cmake)
return()
endif()
# We use 3.17 features when building our tests, etc.
cmake_minimum_required(VERSION 3.17)
option(THRUST_ENABLE_HEADER_TESTING "Test that all public headers compile." "ON")
option(THRUST_ENABLE_TESTING "Build Thrust testing suite." "ON")
option(THRUST_ENABLE_EXAMPLES "Build Thrust examples." "ON")
option(THRUST_ENABLE_BENCHMARKS "Build Thrust runtime benchmarks." "OFF")
option(THRUST_INCLUDE_CUB_CMAKE "Build CUB tests and examples. (Requires CUDA)." "OFF")
# Mark this option as advanced for now. We'll revisit this later once the new
# benchmarks are ready. For now, we just need to expose a way to compile
# bench.cu from CMake for NVIDIA's internal builds.
mark_as_advanced(THRUST_ENABLE_BENCHMARKS)
# Check if we're actually building anything before continuing. If not, no need
# to search for deps, etc. This is a common approach for packagers that just
# need the install rules. See GH issue NVIDIA/thrust#1211.
if (NOT (THRUST_ENABLE_HEADER_TESTING OR
THRUST_ENABLE_TESTING OR
THRUST_ENABLE_EXAMPLES OR
THRUST_ENABLE_BENCHMARKS OR
THRUST_INCLUDE_CUB_CMAKE))
return()
endif()
include(cmake/AppendOptionIfAvailable.cmake)
include(cmake/ThrustBuildCompilerTargets.cmake)
include(cmake/ThrustBuildTargetList.cmake)
include(cmake/ThrustFindThrust.cmake)
include(cmake/ThrustMultiConfig.cmake)
include(cmake/ThrustUtilities.cmake)
# Add cache string options for CMAKE_BUILD_TYPE and default to RelWithDebInfo.
if ("" STREQUAL "${CMAKE_BUILD_TYPE}")
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE)
set_property(
CACHE CMAKE_BUILD_TYPE
PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel
)
endif ()
# Disable compiler extensions:
set(CMAKE_CXX_EXTENSIONS OFF)
# Where to put build outputs. Use CMAKE_BINARY_DIR so they'll show up in the
# top-level project's dir when building Thrust via add_subdirectory.
set(THRUST_LIBRARY_OUTPUT_DIR "${CMAKE_BINARY_DIR}/lib")
set(THRUST_EXECUTABLE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/bin")
thrust_configure_multiconfig()
thrust_find_thrust()
thrust_build_compiler_targets()
thrust_update_system_found_flags()
if (THRUST_CUDA_FOUND)
include(cmake/ThrustCudaConfig.cmake)
endif()
thrust_build_target_list()
message(STATUS "CPP system found? ${THRUST_CPP_FOUND}")
message(STATUS "CUDA system found? ${THRUST_CUDA_FOUND}")
message(STATUS "TBB system found? ${THRUST_TBB_FOUND}")
message(STATUS "OMP system found? ${THRUST_OMP_FOUND}")
if (THRUST_ENABLE_HEADER_TESTING)
include(cmake/ThrustHeaderTesting.cmake)
endif()
# Both testing and examples use ctest
if (THRUST_ENABLE_TESTING OR THRUST_ENABLE_EXAMPLES)
include(CTest)
enable_testing()
endif()
if (THRUST_ENABLE_TESTING)
add_subdirectory(testing)
endif()
if (THRUST_ENABLE_EXAMPLES)
add_subdirectory(examples)
endif()
if (THRUST_ENABLE_BENCHMARKS)
add_subdirectory(internal/benchmark)
endif()
if (THRUST_INCLUDE_CUB_CMAKE AND THRUST_CUDA_FOUND)
set(CUB_IN_THRUST ON)
# CUB's path is specified generically to support both GitHub and Perforce
# source tree layouts. The include directory used by cub-config.cmake
# for source layouts is the same as the project root.
add_subdirectory("${_CUB_INCLUDE_DIR}" dependencies/cub)
endif()