@@ -54,15 +54,15 @@ project(self VERSION 1.0.0
54
54
LANGUAGES Fortran C CXX)
55
55
56
56
# Fortran compiler requirements
57
- INCLUDE (FortranCInterface)
57
+ include (FortranCInterface)
58
58
FortranCInterface_VERIFY()
59
- IF (NOT FortranCInterface_VERIFIED_C)
60
- MESSAGE (FATAL_ERROR "Fortran compiler must support C Interface" )
61
- ENDIF (NOT FortranCInterface_VERIFIED_C)
59
+ if (NOT FortranCInterface_VERIFIED_C)
60
+ message (FATAL_ERROR "Fortran compiler must support C Interface" )
61
+ endif (NOT FortranCInterface_VERIFIED_C)
62
62
63
- IF (NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90)
63
+ if (NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90)
64
64
MESSAGE (FATAL_ERROR "Fortran compiler does not support F90" )
65
- ENDIF (NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90)
65
+ endif (NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90)
66
66
67
67
# Default Fortran compiler flags
68
68
# Fortran compiler flags
@@ -130,9 +130,8 @@ if( SELF_ENABLE_MULTITHREADING )
130
130
131
131
endif ()
132
132
133
-
134
133
# MPI
135
- find_package (MPI COMPONENTS Fortran REQUIRED)
134
+ find_package (MPI COMPONENTS Fortran C REQUIRED)
136
135
137
136
# HDF5 : See https://cmake.org/cmake/help/latest/module/FindHDF5.html
138
137
find_package (HDF5 REQUIRED Fortran)
@@ -162,7 +161,7 @@ if(SELF_ENABLE_DOUBLE_PRECISION)
162
161
endif ()
163
162
164
163
if (SELF_ENABLE_GPU)
165
- message ("Enabling GPU Support" )
164
+ message ("-- Enabling GPU Support" )
166
165
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DENABLE_GPU" )
167
166
set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DENABLE_GPU" )
168
167
set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DENABLE_GPU" )
@@ -175,56 +174,68 @@ if(SELF_ENABLE_GPU)
175
174
set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DENABLE_GPU" )
176
175
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DENABLE_GPU" )
177
176
177
+ # Check MPI for GPU awareness
178
+ # Add SELF's cmake module directory to the search path
179
+ set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ;${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
180
+
181
+ # Include the custom module
182
+ include (CheckMPIFeatures)
183
+ CheckMPIFeatures()
184
+
178
185
# HIP (Optional)
179
186
# IF HIP is found, we prefer HIP. IF HIP is not found, then we fall back to look for CUDA
180
187
# only. If neither HIP nor CUDA are found, Cmake will error out.
181
188
find_package (hip)
182
189
if (hip_FOUND)
183
- find_package (hipblas REQUIRED)
184
- message ("HIP found. Enabling HIP language." )
185
- enable_language (HIP)
186
- set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_HIP" )
187
- set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_HIP" )
188
- set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_HIP" )
189
- set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_HIP" )
190
- set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_HIP" )
191
-
192
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_HIP" )
193
- set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DHAVE_HIP" )
194
- set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DHAVE_HIP" )
195
- set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DHAVE_HIP" )
196
- set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DHAVE_HIP" )
197
-
198
- set ( BACKEND_LIBRARIES hip::device roc::hipblas)
190
+ if (MPI_HAS_QUERY_HIP_SUPPORT)
191
+ find_package (hipblas REQUIRED)
192
+ #message("-- HIP found. Enabling HIP language.")
193
+ #enable_language(HIP)
194
+ set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_HIP" )
195
+ set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_HIP" )
196
+ set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_HIP" )
197
+ set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_HIP" )
198
+ set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_HIP" )
199
+
200
+ set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_HIP" )
201
+ set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DHAVE_HIP" )
202
+ set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DHAVE_HIP" )
203
+ set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DHAVE_HIP" )
204
+ set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DHAVE_HIP" )
205
+
206
+ set ( BACKEND_LIBRARIES hip::device roc::hipblas)
207
+ else ()
208
+ message ( FATAL_ERROR "MPI installation is not GPU-aware" )
209
+ endif ()
199
210
else ()
200
211
# CUDA (Optional)
201
212
find_package (cuda)
202
213
if (cuda_FOUND)
203
- message ("CUDA found. Enabling CUDA language." )
204
- enable_language (CUDA)
205
- set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_CUDA" )
206
- set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_CUDA" )
207
- set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_CUDA" )
208
- set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_CUDA" )
209
- set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_CUDA" )
210
-
211
- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CUDA" )
212
- set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DHAVE_CUDA" )
213
- set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DHAVE_CUDA" )
214
- set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DHAVE_CUDA" )
215
- set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DHAVE_CUDA" )
214
+ if (MPI_HAS_QUERY_CUDA_SUPPORT)
215
+ #message("-- CUDA found. Enabling CUDA language.")
216
+ #enable_language(CUDA)
217
+ set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DHAVE_CUDA" )
218
+ set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -DHAVE_CUDA" )
219
+ set ( CMAKE_Fortran_FLAGS_COVERAGE "${CMAKE_Fortran_FLAGS_COVERAGE} -DHAVE_CUDA" )
220
+ set ( CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -DHAVE_CUDA" )
221
+ set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -DHAVE_CUDA" )
222
+
223
+ set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CUDA" )
224
+ set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DHAVE_CUDA" )
225
+ set ( CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_COVERAGE} -DHAVE_CUDA" )
226
+ set ( CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} -DHAVE_CUDA" )
227
+ set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DHAVE_CUDA" )
216
228
217
- # TO DO - need cuda libraries and hipblas libraries
229
+ # TO DO - need cuda libraries and hipblas libraries
230
+ else ()
231
+ message ( FATAL_ERROR "MPI installation is not GPU-aware" )
232
+ endif ()
218
233
else ()
219
234
message ( FATAL_ERROR "Enabling GPU support requires either HIP or CUDA." )
220
235
endif ()
221
236
endif ()
222
237
endif ()
223
- # get_cmake_property(_variableNames VARIABLES)
224
- # list (SORT _variableNames)
225
- # foreach (_variableName ${_variableNames})
226
- # message(STATUS "${_variableName}=${${_variableName}}")
227
- # endforeach()
238
+
228
239
# ----- end dependencies ----- #
229
240
230
241
# Libraries
0 commit comments