2020-02-13 14:06:30 +01:00
cmake_minimum_required ( VERSION 3.9 )
set ( PRGNAME MUSIC )
project ( MUSIC )
2023-02-14 19:44:50 +01:00
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native -Wall -fno-omit-frame-pointer -g -fsanitize=address")
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -march=native -Wall -pedantic" CACHE STRING "Flags used by the compiler during Release builds." FORCE )
set ( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -march=native -fno-omit-frame-pointer -Wall -pedantic" CACHE STRING "Flags used by the compiler during RelWithDebInfo builds." FORCE )
set ( CMAKE_CXX_FLAGS_DEBUG "-g -O1 -march=native -DDEBUG -fno-omit-frame-pointer -Wall -pedantic" CACHE STRING "Flags used by the compiler during Debug builds." FORCE )
set ( CMAKE_CXX_FLAGS_DEBUGSANADD "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address " CACHE STRING "Flags used by the compiler during Debug builds with Sanitizer for address." FORCE )
set ( CMAKE_CXX_FLAGS_DEBUGSANUNDEF "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=undefined" CACHE STRING "Flags used by the compiler during Debug builds with Sanitizer for undefineds." FORCE )
set ( CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "Flags used by the compiler during Release builds." FORCE )
set ( CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" CACHE STRING "Flags used by the compiler during RelWithDebInfo builds." FORCE )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "Flags used by the compiler during Debug builds." FORCE )
set ( CMAKE_C_FLAGS_DEBUGSANADD "${CMAKE_CXX_FLAGS_DEBUGSANADD}" CACHE STRING "Flags used by the compiler during Debug builds with Sanitizer for address." FORCE )
set ( CMAKE_C_FLAGS_DEBUGSANUNDEF "${CMAKE_CXX_FLAGS_DEBUGSANUNDEF}" CACHE STRING "Flags used by the compiler during Debug builds with Sanitizer for undefineds." FORCE )
set ( default_build_type "RelWithDebInfo" )
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
S T R I N G " C h o o s e t h e t y p e o f b u i l d . " F O R C E )
# Set the possible values of build type for cmake-gui
set_property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
" D e b u g " " R e l e a s e " " R e l W i t h D e b I n f o " " D e b u g S a n A d d " " D e b u g S a n U n d e f " )
endif ( )
mark_as_advanced ( CMAKE_CXX_FLAGS_DEBUGSANADD CMAKE_CXX_FLAGS_DEBUGSANUNDEF )
mark_as_advanced ( CMAKE_C_FLAGS_DEBUGSANADD CMAKE_C_FLAGS_DEBUGSANUNDEF )
mark_as_advanced ( CMAKE_EXECUTABLE_FORMAT CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT )
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native -Wall -pedantic -DCMAKE_BUILD")
2020-02-13 14:06:30 +01:00
find_package ( PkgConfig REQUIRED )
set ( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}" )
2020-02-13 14:21:55 +01:00
option ( MUSIC_ENABLE_SINGLE_PRECISION "Enable Single Precision Mode" OFF )
2020-02-13 14:06:30 +01:00
########################################################################################################################
# OpenMP
find_package ( OpenMP REQUIRED )
if ( OPENMP_FOUND )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}" )
endif ( )
########################################################################################################################
# Pthreads
find_package ( Threads REQUIRED )
########################################################################################################################
# FFTW
if ( POLICY CMP0074 )
cmake_policy ( SET CMP0074 NEW )
endif ( )
2020-02-13 14:36:23 +01:00
find_package ( FFTW3 COMPONENTS SINGLE DOUBLE THREADS )
2020-02-13 14:21:55 +01:00
2021-11-30 22:47:40 +01:00
########################################################################################################################
# TIRPC, needed only for Tipsy format
find_package ( TIRPC )
2020-02-13 14:21:55 +01:00
########################################################################################################################
# Add a custom command that produces version.cc, plus
# a dummy output that's not actually produced, in order
# to force version.cmake to always be re-run before the build
ADD_CUSTOM_COMMAND (
O U T P U T $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / v e r s i o n . c c
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / _ v e r s i o n . c c
C O M M A N D $ { C M A K E _ C O M M A N D } - P
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v e r s i o n . c m a k e )
2020-02-13 14:06:30 +01:00
########################################################################################################################
# GSL
find_package ( GSL REQUIRED )
########################################################################################################################
# HDF5
find_package ( HDF5 )
########################################################################################################################
# INCLUDES
include_directories ( ${ PROJECT_SOURCE_DIR } /src )
# SOURCES
# get all the *.cc files in the subfolders
file ( GLOB SOURCES
$ { P R O J E C T _ S O U R C E _ D I R } / s r c / * . c c
)
# add the auto generated version file
list ( APPEND SOURCES "${CMAKE_CURRENT_BINARY_DIR}/version.cc" )
# PLUGINS
# get all the *.cc files in the plugin subfolder
file ( GLOB PLUGINS
$ { P R O J E C T _ S O U R C E _ D I R } / s r c / p l u g i n s / * . c c
)
2023-02-12 03:49:50 +01:00
# PANPHASIA
option ( ENABLE_PANPHASIA "Enable PANPHASIA random number generator" ON )
if ( ENABLE_PANPHASIA )
enable_language ( Fortran )
if ( "${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel" )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -132 -implicit-none" )
elseif ( "${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU" )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffixed-line-length-132 -fimplicit-none" )
endif ( )
list ( APPEND SOURCES
$ { P R O J E C T _ S O U R C E _ D I R } / e x t / p a n p h a s i a / p a n p h a s i a _ r o u t i n e s . f
$ { P R O J E C T _ S O U R C E _ D I R } / e x t / p a n p h a s i a / g e n e r i c _ l e c u y e r . f 9 0
)
# target_include_directories(${PRGNAME} PRIVATE ${PROJECT_SOURCE_DIR}/external/panphasia_ho)
endif ( ENABLE_PANPHASIA )
2020-02-13 14:06:30 +01:00
add_executable ( ${ PRGNAME } ${ SOURCES } ${ PLUGINS } )
set_target_properties ( ${ PRGNAME } PROPERTIES CXX_STANDARD 11 )
if ( FFTW3_FOUND )
target_compile_options ( ${ PRGNAME } PRIVATE "-DFFTW3" )
2020-02-13 14:21:55 +01:00
if ( MUSIC_ENABLE_SINGLE_PRECISION )
target_compile_options ( ${ PRGNAME } PRIVATE "-DSINGLE_PRECISION" )
2020-02-13 14:36:23 +01:00
if ( FFTW3_SINGLE_THREADS_FOUND )
target_link_libraries ( ${ PRGNAME } ${ FFTW3_SINGLE_THREADS_LIBRARY } )
target_compile_options ( ${ PRGNAME } PRIVATE "-DUSE_FFTW_THREADS" )
elseif ( FFTW3_SINGLE_SERIAL_FOUND )
target_link_libraries ( ${ PRGNAME } ${ FFTW3_SINGLE_SERIAL_LIBRARY } )
message ( WARNING "using serial version of FFTW3 -- this will most likely cause a very slow version of MUSIC. Rec: install FFTW3 with thread support" )
else ( )
message ( FATAL "chose compilation in single precision, but FFTW3 not found for single precision" )
endif ( )
else ( MUSIC_ENABLE_SINGLE_PRECISION )
if ( FFTW3_DOUBLE_THREADS_FOUND )
target_link_libraries ( ${ PRGNAME } ${ FFTW3_DOUBLE_THREADS_LIBRARY } )
target_compile_options ( ${ PRGNAME } PRIVATE "-DUSE_FFTW_THREADS" )
elseif ( FFTW3_DOUBLE_SERIAL_FOUND )
target_link_libraries ( ${ PRGNAME } ${ FFTW3_DOUBLE_SERIAL_LIBRARY } )
message ( WARNING "using serial version of FFTW3 -- this will most likely cause a very slow version of MUSIC. Rec: install FFTW3 with thread support" )
else ( )
message ( FATAL "chose compilation in double precision, but FFTW3 not found for double precision" )
endif ( )
2020-02-13 14:21:55 +01:00
endif ( MUSIC_ENABLE_SINGLE_PRECISION )
endif ( FFTW3_FOUND )
2020-02-13 14:06:30 +01:00
if ( HDF5_FOUND )
# target_link_libraries(${PRGNAME} ${HDF5_C_LIBRARY_DIRS})
target_link_libraries ( ${ PRGNAME } ${ HDF5_LIBRARIES } )
target_include_directories ( ${ PRGNAME } PRIVATE ${ HDF5_INCLUDE_DIRS } )
target_compile_options ( ${ PRGNAME } PRIVATE "-DHAVE_HDF5" )
target_compile_options ( ${ PRGNAME } PRIVATE "-DH5_USE_16_API" )
endif ( HDF5_FOUND )
2021-11-30 22:47:40 +01:00
if ( TIRPC_FOUND )
target_link_libraries ( ${ PRGNAME } ${ TIRPC_LIBRARIES } )
target_include_directories ( ${ PRGNAME } PRIVATE ${ TIRPC_INCLUDE_DIRS } )
target_compile_options ( ${ PRGNAME } PRIVATE "-DHAVE_TIRPC" )
endif ( TIRPC_FOUND )
2023-02-12 03:49:50 +01:00
if ( ENABLE_PANPHASIA )
target_compile_options ( ${ PRGNAME } PRIVATE "-DHAVE_PANPHASIA" )
endif ( ENABLE_PANPHASIA )
2020-02-13 14:06:30 +01:00
target_link_libraries ( ${ PRGNAME } ${ FFTW3_LIBRARIES } )
target_include_directories ( ${ PRGNAME } PRIVATE ${ FFTW3_INCLUDE_DIRS } )
target_link_libraries ( ${ PRGNAME } ${ GSL_LIBRARIES } )
target_include_directories ( ${ PRGNAME } PRIVATE ${ GSL_INCLUDE_DIR } )
target_link_libraries ( ${ PRGNAME } ${ HDF5_LIBRARIES } )
target_include_directories ( ${ PRGNAME } PRIVATE ${ HDF5_INCLUDE_DIR } )