amun-code/CMakeLists.txt
Grzegorz Kowal a10d7d5499 CMAKE, HASH, IO: Detect and use the system libxxhash.
If it is available, allow to choose between XXH64 (default) and XXH3
hash algorithms provided by the library XXHASH.

If it is not available, the internal slower implementation is used.

Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
2021-11-18 23:15:51 -03:00

111 lines
3.5 KiB
CMake

cmake_minimum_required(VERSION 3.13)
project(amun
VERSION 1.0
DESCRIPTION "AMUN Code - a code to perform numerical simulations in astrophysics"
HOMEPAGE_URL "https://amuncode.org"
LANGUAGES Fortran
)
enable_language(Fortran)
set(default_build_type "Release")
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")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
add_compile_options("$<$<CONFIG:RELEASE>:-march=native;-pipe;-fno-tree-vectorize;-fno-unsafe-math-optimizations;-frounding-math;-fsignaling-nans;-finline-limit=10000;-fdiagnostics-color=always>")
add_compile_options("$<$<CONFIG:DEBUG>:-Og;-pedantic;-fcheck=all;-W;-Wall;-Wno-unused-dummy-argument>")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
add_compile_options("$<$<CONFIG:RELEASE>:-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("$<$<CONFIG:DEBUG>:-O>")
add_compile_options(-assume byterecl)
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES "PGI")
add_compile_options("$<$<CONFIG:RELEASE>:-fastsse;-O4;-Mvect=simd;-Minline=maxsize:1000>")
add_compile_options("$<$<CONFIG:DEBUG>:-O;-Minfo=all>")
endif()
file(GLOB_RECURSE sources sources/*.F90)
add_executable(amun.x ${sources})
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)
if(ENABLE_HDF5)
find_package(HDF5 COMPONENTS Fortran)
if(HDF5_Fortran_FOUND)
include_directories(${HDF5_Fortran_INCLUDE_DIRS})
target_compile_definitions(amun.x PRIVATE HDF5)
target_link_libraries(amun.x ${HDF5_Fortran_LIBRARIES})
endif()
endif()
option(ENABLE_MPI "Enable MPI support" ON)
if(ENABLE_MPI)
find_package(MPI COMPONENTS Fortran)
if(MPI_Fortran_FOUND)
include_directories(${MPI_Fortran_INCLUDE_DIRS})
target_compile_definitions(amun.x PRIVATE MPI)
target_link_libraries(amun.x ${MPI_Fortran_LIBRARIES})
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)
if(ENABLE_ZSTD)
include(FindPkgConfig)
pkg_search_module(ZSTD QUIET libzstd)
if(ZSTD_FOUND)
target_compile_definitions(amun.x PRIVATE ZSTD)
target_link_libraries(amun.x ${ZSTD_LIBRARIES})
endif()
endif()
option(ENABLE_LZ4 "Enable LZ4 compression support" ON)
if(ENABLE_LZ4)
include(FindPkgConfig)
pkg_search_module(LZ4 QUIET liblz4)
if(LZ4_FOUND)
target_compile_definitions(amun.x PRIVATE LZ4)
target_link_libraries(amun.x ${LZ4_LIBRARIES})
endif()
endif()
option(ENABLE_LZMA "Enable LZMA compression support" ON)
if(ENABLE_LZMA)
include(FindPkgConfig)
pkg_search_module(LZMA QUIET liblzma)
if(LZMA_FOUND)
target_compile_definitions(amun.x PRIVATE LZMA)
target_link_libraries(amun.x ${LZMA_LIBRARIES})
endif()
endif()
option(ENABLE_XXHASH "Enable system's XXHASH library" ON)
if(ENABLE_XXHASH)
include(FindPkgConfig)
pkg_search_module(XXHASH QUIET libxxhash)
if(XXHASH_FOUND)
target_compile_definitions(amun.x PRIVATE XXHASH)
target_link_libraries(amun.x ${XXHASH_LIBRARIES})
endif()
endif()