forked from kokkos/pykokkos-base
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKokkosPythonKokkos.cmake
More file actions
162 lines (132 loc) · 5.95 KB
/
KokkosPythonKokkos.cmake
File metadata and controls
162 lines (132 loc) · 5.95 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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#----------------------------------------------------------------------------------------#
# Kokkos submodule
#----------------------------------------------------------------------------------------#
INCLUDE_GUARD(GLOBAL)
INCLUDE(KokkosPythonUtilities) # miscellaneous macros and functions
# if first time cmake is run and no external/internal preference is specified,
# try to find already installed kokkos unless (A) the Kokkos targets already
# exist or (B) pykokkos-base is being build via scikit-build. In the case
# of scikit-build, we want to prefer the internal kokkos because it is
# unlikely the user will see or kokkos which kokkos is found
IF(NOT DEFINED ENABLE_INTERNAL_KOKKOS AND NOT TARGET Kokkos::kokkoscore AND NOT SKBUILD)
FIND_PACKAGE(Kokkos)
# set the default cache value
IF(Kokkos_FOUND)
SET(_INTERNAL_KOKKOS OFF)
# force using same compiler as kokkos
kokkos_compilation(GLOBAL)
ELSE()
SET(_INTERNAL_KOKKOS ON)
ENDIF()
ELSEIF(TARGET Kokkos::kokkoscore)
SET(_INTERNAL_KOKKOS OFF)
ELSEIF(NOT DEFINED ENABLE_INTERNAL_KOKKOS AND SKBUILD)
set(_INTERNAL_KOKKOS ON)
ELSE()
# make sure ADD_OPTION in KokkosPythonOptions has a value
SET(_INTERNAL_KOKKOS ${ENABLE_INTERNAL_KOKKOS})
ENDIF()
# force an error
IF(NOT _INTERNAL_KOKKOS AND NOT TARGET Kokkos::kokkoscore)
FIND_PACKAGE(Kokkos REQUIRED COMPONENTS launch_compiler)
kokkos_compilation(GLOBAL)
IF(NOT Kokkos_INCLUDE_DIR)
GET_TARGET_PROPERTY(Kokkos_INCLUDE_DIR Kokkos::kokkoscore INTERFACE_INCLUDE_DIRECTORIES)
ENDIF()
FIND_FILE(Kokkos_InterOp_Header
NO_DEFAULT_PATH
NAMES Kokkos_InterOp.hpp KokkosExp_InterOp.hpp
PATHS ${Kokkos_INCLUDE_DIR} ${Kokkos_ROOT}
HINTS ${Kokkos_INCLUDE_DIR} ${Kokkos_ROOT}
DOC "Path to Kokkos InterOp header"
PATH_SUFFIXES include ../../../include)
ADD_FEATURE(Kokkos_CXX_COMPILER "Compiler used to build Kokkos")
ADD_FEATURE(Kokkos_CXX_COMPILER_ID "Compiler ID used to build Kokkos")
ELSEIF(TARGET Kokkos::kokkoscore)
IF(NOT Kokkos_INCLUDE_DIR)
GET_TARGET_PROPERTY(Kokkos_INCLUDE_DIR Kokkos::kokkoscore INTERFACE_INCLUDE_DIRECTORIES)
ENDIF()
FIND_FILE(Kokkos_InterOp_Header
NO_DEFAULT_PATH
NAMES Kokkos_InterOp.hpp KokkosExp_InterOp.hpp
PATHS ${Kokkos_INCLUDE_DIR} ${Kokkos_ROOT}
HINTS ${Kokkos_INCLUDE_DIR} ${Kokkos_ROOT}
DOC "Path to Kokkos InterOp header"
PATH_SUFFIXES include ../../../include)
ADD_FEATURE(Kokkos_CXX_COMPILER "Compiler used to build Kokkos")
ADD_FEATURE(Kokkos_CXX_COMPILER_ID "Compiler ID used to build Kokkos")
ELSE()
FIND_FILE(Kokkos_InterOp_Header
NO_DEFAULT_PATH
NAMES Kokkos_InterOp.hpp KokkosExp_InterOp.hpp
PATHS ${PROJECT_SOURCE_DIR}/external/kokkos/core/src
HINTS ${PROJECT_SOURCE_DIR}/external/kokkos/core/src
DOC "Path to Kokkos InterOp header")
ENDIF()
#
IF(_INTERNAL_KOKKOS)
# try to find some packages quietly in order to set some defaults
SET(OpenMP_FOUND OFF)
SET(Threads_FOUND OFF)
SET(CUDA_FOUND OFF)
IF(NOT Kokkos_ENABLE_THREADS)
FIND_PACKAGE(OpenMP QUIET)
ENDIF()
IF(NOT DEFINED Kokkos_ENABLE_THREADS AND NOT OpenMP_FOUND)
FIND_PACKAGE(Threads QUIET)
ENDIF()
IF(NOT DEFINED Kokkos_ENABLE_CUDA)
FIND_PACKAGE(CUDA QUIET)
ENDIF()
ADD_OPTION(ENABLE_SERIAL "Enable Serial backend when building Kokkos submodule" ON)
ADD_OPTION(ENABLE_OPENMP "Enable OpenMP when building Kokkos submodule" ${OpenMP_FOUND})
ADD_OPTION(ENABLE_THREADS "Enable Pthreads when building Kokkos submodule" ${Threads_FOUND})
ADD_OPTION(ENABLE_CUDA "Enable CUDA when building Kokkos submodule" ${CUDA_FOUND})
# if OpenMP defaulted to ON but Kokkos_ENABLE_THREADS was explicitly set,
# disable OpenMP defaulting to ON
IF(ENABLE_OPENMP AND Kokkos_ENABLE_THREADS)
SET(ENABLE_OPENMP OFF)
SET(Kokkos_ENABLE_OPENMP OFF)
ENDIF()
# always disable pthread backend since pthreads are not supported on Windows
IF(WIN32)
SET(ENABLE_THREADS OFF)
SET(Kokkos_ENABLE_THREADS OFF)
ENDIF()
# make sure this pykokkos-base option is synced to Kokkos option
IF(DEFINED Kokkos_ENABLE_SERIAL)
SET(ENABLE_SERIAL ${Kokkos_ENABLE_SERIAL})
ENDIF()
# make sure this pykokkos-base option is synced to Kokkos option
IF(DEFINED Kokkos_ENABLE_OPENMP)
SET(ENABLE_OPENMP ${Kokkos_ENABLE_OPENMP})
ENDIF()
# make sure this pykokkos-base option is synced to Kokkos option
IF(DEFINED Kokkos_ENABLE_THREADS)
SET(ENABLE_THREADS ${Kokkos_ENABLE_THREADS})
ENDIF()
# make sure this pykokkos-base option is synced to Kokkos option
IF(DEFINED Kokkos_ENABLE_CUDA)
SET(ENABLE_CUDA ${Kokkos_ENABLE_CUDA})
ENDIF()
# define the kokkos option as default and/or get it to display
IF(ENABLE_SERIAL)
ADD_OPTION(Kokkos_ENABLE_SERIAL "Build Kokkos submodule with serial support" ON)
ENDIF()
# define the kokkos option as default and/or get it to display
IF(ENABLE_OPENMP)
ADD_OPTION(Kokkos_ENABLE_OPENMP "Build Kokkos submodule with OpenMP support" ON)
ENDIF()
# define the kokkos option as default and/or get it to display
IF(ENABLE_THREADS)
ADD_OPTION(Kokkos_ENABLE_THREADS "Build Kokkos submodule with Pthread support" ON)
ENDIF()
# define the kokkos option as default and/or get it to display
IF(ENABLE_CUDA)
ADD_OPTION(Kokkos_ENABLE_CUDA "Build Kokkos submodule with CUDA support" ON)
ADD_OPTION(Kokkos_ENABLE_CUDA_UVM "Build Kokkos submodule with CUDA UVM support" ON)
ADD_OPTION(Kokkos_ENABLE_CUDA_LAMBDA "Build Kokkos submodule with CUDA lambda support" ON)
ENDIF()
ADD_SUBDIRECTORY(external)
SET(Kokkos_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/external/kokkos/core/src)
ENDIF()