@@ -12,8 +12,7 @@ cmake_minimum_required(VERSION 3.20)
1212# We include C as a language because - for some reason -
1313# FIND_LIBRARY_USE_LIB64_PATHS is otherwise ignored.
1414
15- project (MFC LANGUAGES C Fortran)
16-
15+ project (MFC LANGUAGES C CXX Fortran)
1716
1817# Build options exposed to users and their default values.
1918
@@ -109,7 +108,7 @@ if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
109108
110109 if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
111110 add_compile_options (
112- -fcheck=all ,no -array-temps
111+ -fcheck=all ,no -array-temps
113112 -fbacktrace
114113 -fimplicit-none
115114 #-ffpe-trap=invalid,zero,denormal,overflow
@@ -125,11 +124,22 @@ if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
125124elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" )
126125 add_compile_options (
127126 "SHELL:-h nomessage=296:878:1391:1069"
128- "SHELL:-h msgs" "SHELL:-h static" "SHELL:-h keepfiles"
127+ "SHELL:-h static" "SHELL:-h keepfiles"
128+ "SHELL:-h acc_model=auto_async_none"
129+ "SHELL: -h acc_model=no_fast_addr"
130+ "SHELL: -h list=adm" "-DCRAY_ACC_SIMPLIFY" "-DCRAY_ACC_WAR"
129131 )
130132
133+ add_link_options ("SHELL:-hkeepfiles" )
134+
131135 if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
132- add_compile_options (-e D "SHELL:-h func_trace" )
136+ add_compile_options (
137+ "SHELL:-h acc_model=auto_async_none"
138+ "SHELL: -h acc_model=no_fast_addr"
139+ "SHELL: -K trap=fp" "SHELL: -G2"
140+
141+ )
142+ add_link_options ("SHELL: -K trap=fp" "SHELL: -G2" )
133143 endif ()
134144elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Flang" )
135145 add_compile_options (
@@ -197,13 +207,14 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
197207endif ()
198208
199209
210+
200211# HANDLE_SOURCES: Given a target (herein <target>):
201212#
202213# * Locate all source files for <target> of the type
203214#
204215# src/[<target>,common]/[.,include]/*.[f90,fpp].
205- #
206- # * For each .fpp file found with filepath <dirpath>/<filename>.fpp, using a
216+ #
217+ # * For each .fpp file found with filepath <dirpath>/<filename>.fpp, using a
207218# custom command, instruct CMake how to generate a file with path
208219#
209220# src/<target>/fypp/<filename>.f90
@@ -224,7 +235,7 @@ endif()
224235# file is modified, but also when any file with filepath of the form
225236#
226237# src/[<target>,common]/include/*.fpp
227- #
238+ #
228239# is modified. This is a reasonable compromise as modifications to .fpp files
229240# in the include directories will be rare - by design. Other approaches would
230241# have required a more complex CMakeLists.txt file (perhaps parsing the .fpp
@@ -333,11 +344,11 @@ function(MFC_SETUP_TARGET)
333344
334345 set_target_properties (${ARGS_TARGET} PROPERTIES Fortran_PREPROCESS ON )
335346
336- target_include_directories (${ARGS_TARGET} PRIVATE
347+ target_include_directories (${ARGS_TARGET} PRIVATE
337348 "${CMAKE_SOURCE_DIR} /src/common"
338349 "${CMAKE_SOURCE_DIR} /src/common/include"
339350 "${CMAKE_SOURCE_DIR} /src/${ARGS_TARGET} " )
340-
351+
341352 if (EXISTS "${CMAKE_SOURCE_DIR} /src/${ARGS_TARGET} /include" )
342353 target_include_directories (${ARGS_TARGET} PRIVATE
343354 "${CMAKE_SOURCE_DIR} /src/${ARGS_TARGET} /include" )
@@ -367,9 +378,14 @@ function(MFC_SETUP_TARGET)
367378 endif ()
368379
369380 if (ARGS_FFTW)
370- if (MFC_OpenACC AND ARGS_OpenACC AND (CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC" OR CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" ))
371- find_package (CUDAToolkit REQUIRED)
372- target_link_libraries (${ARGS_TARGET} PRIVATE CUDA::cudart CUDA::cufft)
381+ if (MFC_OpenACC AND ARGS_OpenACC)
382+ if (CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC" OR CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" )
383+ find_package (CUDAToolkit REQUIRED)
384+ target_link_libraries (${ARGS_TARGET} PRIVATE CUDA::cudart CUDA::cufft)
385+ else ()
386+ find_package (hipfort COMPONENTS hipfft CONFIG REQUIRED)
387+ target_link_libraries (${ARGS_TARGET} PRIVATE hipfort::hipfft)
388+ endif ()
373389 else ()
374390 find_package (FFTW REQUIRED)
375391 target_link_libraries (${ARGS_TARGET} PRIVATE FFTW::FFTW)
@@ -420,6 +436,9 @@ function(MFC_SETUP_TARGET)
420436 PRIVATE -gpu=autocompare,debug
421437 )
422438 endif ()
439+ elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" )
440+ find_package (hipfort COMPONENTS hip CONFIG REQUIRED)
441+ target_link_libraries (${ARGS_TARGET} PRIVATE hipfort::hip hipfort::hipfort-amdgcn)
423442 endif ()
424443 elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" )
425444 target_compile_options (${ARGS_TARGET} PRIVATE "SHELL:-h noacc" "SHELL:-x acc" )
@@ -438,19 +457,31 @@ if (MFC_PRE_PROCESS)
438457 MFC_SETUP_TARGET(TARGET pre_process
439458 SOURCES "${pre_process_SRCs} "
440459 MPI)
460+ if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" )
461+ target_compile_options (pre_process PRIVATE -hfp0)
462+ endif ()
441463endif ()
442464
443465if (MFC_SIMULATION)
444466 MFC_SETUP_TARGET(TARGET simulation
445467 SOURCES "${simulation_SRCs} "
446468 MPI OpenACC FFTW)
469+
470+ if (CMAKE_Fortran_COMPILER_ID STREQUAL "Cray" AND MFC_OpenACC)
471+ add_custom_command (TARGET simulation POST_BUILD
472+ COMMAND "${CMAKE_CURRENT_SOURCE_DIR} /toolchain/cce_simulation_workgroup_256.sh"
473+ "${CMAKE_CURRENT_BINARY_DIR} "
474+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} "
475+ COMMENT "Patching & Rebuilding with Cray hacks"
476+ )
477+ endif ()
447478endif ()
448479
449480if (MFC_POST_PROCESS)
450481 MFC_SETUP_TARGET(TARGET post_process
451482 SOURCES "${post_process_SRCs} "
452483 MPI SILO HDF5 FFTW)
453-
484+
454485 # -O0 is in response to https://github.com/MFlowCode/MFC-develop/issues/95
455486 target_compile_options (post_process PRIVATE -O0)
456487endif ()
@@ -468,7 +499,7 @@ if (MFC_DOCUMENTATION)
468499 add_custom_command (
469500 OUTPUT "${CMAKE_CURRENT_SOURCE_DIR} /docs/documentation/examples.md"
470501 DEPENDS "${CMAKE_CURRENT_SOURCE_DIR} /docs/examples.sh;${examples_DOCs} "
471- COMMAND "bash" "${CMAKE_CURRENT_SOURCE_DIR} /docs/examples.sh"
502+ COMMAND "bash" "${CMAKE_CURRENT_SOURCE_DIR} /docs/examples.sh"
472503 "${CMAKE_CURRENT_SOURCE_DIR} "
473504 COMMENT "Generating examples.md"
474505 VERBATIM
@@ -500,7 +531,7 @@ if (MFC_DOCUMENTATION)
500531 set (DOXYGEN_IMAGE_PATH "\" ${CMAKE_CURRENT_SOURCE_DIR} /docs/res\"\
501532 \" ${CMAKE_CURRENT_SOURCE_DIR} /docs/${target} \" " )
502533
503- file (MAKE_DIRECTORY "${DOXYGEN_OUTPUT_DIRECTORY} " )
534+ file (MAKE_DIRECTORY "${DOXYGEN_OUTPUT_DIRECTORY} " )
504535
505536 configure_file (
506537 "${CMAKE_CURRENT_SOURCE_DIR} /docs/Doxyfile.in"
@@ -537,7 +568,7 @@ if (MFC_DOCUMENTATION)
537568 endmacro ()
538569
539570 add_custom_target (documentation)
540-
571+
541572 find_package (Doxygen REQUIRED dot REQUIRED)
542573
543574 # > Fetch CSS Theme
0 commit comments