diff --git a/CMakeLists.txt b/CMakeLists.txt index 69d36c0..62cc7cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,25 +15,22 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to '${default_build_type}' as none was specified.") set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") endif() if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") add_compile_options("$<$:-march=native;-pipe;-fno-tree-vectorize;-fno-unsafe-math-optimizations;-frounding-math;-fsignaling-nans;-finline-limit=10000;-fdiagnostics-color=always>") add_compile_options("$<$:-Og;-pedantic;-fcheck=all;-W;-Wall;-Wno-unused-dummy-argument>") endif() - if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") add_compile_options("$<$:-xHost;-fp-model=source;-heap-arrays;-ip;-unroll-aggressive;-simd;-qopt-prefetch;-use-intel-optimized-headers;-finline-limit=1000;-fno-omit-frame-pointer>") add_compile_options("$<$:-O>") add_compile_options(-assume byterecl) endif() - if(CMAKE_Fortran_COMPILER_ID MATCHES "PGI") add_compile_options("$<$:-fastsse;-O4;-Mvect=simd;-Minline=maxsize:1000>") add_compile_options("$<$:-O;-Minfo=all>") endif() - if(CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC") add_compile_options("$<$:-fast;-O4;-Minline>") add_compile_options("$<$:-Mbounds;-Mchkptr;-Minfo=all>") @@ -42,14 +39,14 @@ endif() file(GLOB_RECURSE sources sources/*.F90) add_executable(amun.x ${sources}) -option(ENABLE_3D "Enables 3D domains" OFF) +option(ENABLE_3D "Enables 3D domains." OFF) if(ENABLE_3D) target_compile_definitions(amun.x PRIVATE NDIMS=3) else() target_compile_definitions(amun.x PRIVATE NDIMS=2) endif() -option(ENABLE_HDF5 "Enable HDF5 support" OFF) +option(ENABLE_HDF5 "Enable HDF5 support." OFF) if(ENABLE_HDF5) find_package(HDF5 COMPONENTS Fortran) if(HDF5_Fortran_FOUND) @@ -59,7 +56,7 @@ if(ENABLE_HDF5) endif() endif() -option(ENABLE_MPI "Enable MPI support" ON) +option(ENABLE_MPI "Enable MPI support." ON) if(ENABLE_MPI) find_package(MPI COMPONENTS Fortran) if(MPI_Fortran_FOUND) @@ -69,7 +66,7 @@ if(ENABLE_MPI) endif() endif() -option(ENABLE_OPENMP "Enable OpenMP support" ON) +option(ENABLE_OPENMP "Enable OpenMP support." ON) if(ENABLE_OPENMP) find_package(OpenMP COMPONENTS Fortran) if(OpenMP_Fortran_FOUND) @@ -79,12 +76,28 @@ if(ENABLE_OPENMP) endif() endif() -option(ENABLE_SIGNALS "Enables signal handler support" ON) +option(DISABLE_FMA "Disable FMA operations for slightly slower, but symmetric floating-point arithmetics." OFF) +if(DISABLE_FMA) +if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + target_compile_options(amun.x PRIVATE "-mno-fma;-mno-fma4") +endif() +if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + target_compile_options(amun.x PRIVATE "-no-fma") +endif() +if(CMAKE_Fortran_COMPILER_ID MATCHES "PGI") + target_compile_options(amun.x PRIVATE "-Mnofma") +endif() +if(CMAKE_Fortran_COMPILER_ID MATCHES "NVHPC") + target_compile_options(amun.x PRIVATE "-Mnofma") +endif() +endif() + +option(ENABLE_SIGNALS "Enables signal handler support." ON) if(ENABLE_SIGNALS) target_compile_definitions(amun.x PRIVATE SIGNALS) endif() -option(ENABLE_ZSTD "Enable Zstandard compression support" ON) +option(ENABLE_ZSTD "Enable Zstandard compression support." ON) if(ENABLE_ZSTD) include(FindPkgConfig) pkg_search_module(ZSTD QUIET libzstd) @@ -94,7 +107,7 @@ if(ENABLE_ZSTD) endif() endif() -option(ENABLE_LZ4 "Enable LZ4 compression support" ON) +option(ENABLE_LZ4 "Enable LZ4 compression support." ON) if(ENABLE_LZ4) include(FindPkgConfig) pkg_search_module(LZ4 QUIET liblz4) @@ -104,7 +117,7 @@ if(ENABLE_LZ4) endif() endif() -option(ENABLE_LZMA "Enable LZMA compression support" ON) +option(ENABLE_LZMA "Enable LZMA compression support." ON) if(ENABLE_LZMA) include(FindPkgConfig) pkg_search_module(LZMA QUIET liblzma) @@ -114,7 +127,7 @@ if(ENABLE_LZMA) endif() endif() -option(ENABLE_XXHASH "Enable system's XXHASH library" ON) +option(ENABLE_XXHASH "Enable system's XXHASH library." ON) if(ENABLE_XXHASH) include(FindPkgConfig) pkg_search_module(XXHASH QUIET libxxhash)