diff --git a/CMakeLists.txt b/CMakeLists.txt index e26969634..a153ccdec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ project(FMS DESCRIPTION "GFDL FMS Library" HOMEPAGE_URL "https://www.gfdl.noaa.gov/fms" LANGUAGES C Fortran) - +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include(GNUInstallDirs) if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$") @@ -67,6 +67,11 @@ option(LARGEFILE "Enable compiler definition -Duse_LARGEFILE" option(WITH_YAML "Enable compiler definition -Duse_yaml" OFF) option(USE_DEPRECATED_IO "THIS OPTION HAS NO EFFECT AND WILL BE REMOVED IN A FUTURE RELEASE" OFF) +if(CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC") + set(ENABLE_QUAD_PRECISION OFF) + message(WARNING "NVHPC does not support building FMS with QUAD_PRECISION!") +endif() + if(32BIT) list(APPEND kinds "r4") endif() @@ -332,6 +337,7 @@ foreach(kind ${kinds}) mosaic2/include constants astronomy/include + field_manager/ field_manager/include time_interp/include tracer_manager/include diff --git a/cmake/compiler_flags_NVHPC_C.cmake b/cmake/compiler_flags_NVHPC_C.cmake new file mode 100644 index 000000000..fe6ac05f9 --- /dev/null +++ b/cmake/compiler_flags_NVHPC_C.cmake @@ -0,0 +1,6 @@ +# NVHPC C +set(CMAKE_C_FLAGS_RELEASE "-O3") + +set(CMAKE_C_FLAGS_DEBUG "-O0 -g") + +set(CMAKE_C_LINK_FLAGS "") diff --git a/cmake/compiler_flags_NVHPC_Fortran.cmake b/cmake/compiler_flags_NVHPC_Fortran.cmake new file mode 100644 index 000000000..4095ba0b6 --- /dev/null +++ b/cmake/compiler_flags_NVHPC_Fortran.cmake @@ -0,0 +1,13 @@ +# Precision-based Fortran compiler flags +set(r8_flags "-r8") # Fortran flags for 64BIT precision + +# NVHPC Fortan +set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ") + +set(CMAKE_Fortran_FLAGS_RELEASE "-O3") + +set(CMAKE_Fortran_FLAGS_DEBUG "-O0" ) +# -g can cause bugs, see: https://forums.developer.nvidia.com/t/bug-compiling-with-g-o0-produces-a-compute-sanitizer-error-removing-g-removes-the-error/341478 +# not sure if this is only on GPUs + +set(CMAKE_Fortran_LINK_FLAGS "" ) diff --git a/cmake/fms_compiler_flags.cmake b/cmake/fms_compiler_flags.cmake index cc7a2fee0..be8487734 100644 --- a/cmake/fms_compiler_flags.cmake +++ b/cmake/fms_compiler_flags.cmake @@ -8,6 +8,8 @@ elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") include(compiler_flags_Intel_Fortran) elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") include(compiler_flags_IntelLLVM_Fortran) +elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC") + include(compiler_flags_NVHPC_Fortran) else() message(WARNING "Fortran compiler with ID ${CMAKE_Fortran_COMPILER_ID} will be used with CMake default options") endif() @@ -24,6 +26,8 @@ elseif(CMAKE_C_COMPILER_ID STREQUAL "IntelLLVM") include(compiler_flags_IntelLLVM_C) elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") include(compiler_flags_Clang_C) +elseif(CMAKE_C_COMPILER_ID MATCHES "NVHPC") + include(compiler_flags_NVHPC_C) else() message(WARNING "C compiler with ID ${CMAKE_C_COMPILER_ID} will be used with CMake default options") endif()