mirror of
https://github.com/cosmo-sims/monofonIC.git
synced 2024-09-20 18:13:44 +02:00
141 lines
No EOL
6.2 KiB
CMake
141 lines
No EOL
6.2 KiB
CMake
option(ENABLE_CLASS "Enable CLASS support (as a submodule)." ON)
|
|
|
|
if(ENABLE_CLASS)
|
|
|
|
# initialize the class submodule if necessary
|
|
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/class/Makefile")
|
|
message(STATUS "class submodule is initialized.")
|
|
else()
|
|
message(STATUS "class submodule is NOT initialized: executing git command")
|
|
execute_process(COMMAND git submodule update --init -- external/class
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
|
endif()
|
|
|
|
# include directories
|
|
set(CLASS_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/class/include)
|
|
set(CLASS_INCLUDE_CPP_DIR ${CMAKE_CURRENT_LIST_DIR}/class/cpp)
|
|
|
|
# build method for class
|
|
option(USE_CLASS_MAKEFILE "Build CLASS using its own Makefile." OFF)
|
|
|
|
if(USE_CLASS_MAKEFILE)
|
|
# list of object files generated by class
|
|
set(CLASS_OBJECT_FILES
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/arrays.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/background.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/common.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/dei_rkck.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/evolver_ndf15.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/evolver_rkck.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/growTable.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/helium.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/history.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/hydrogen.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/hyperspherical.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/trigonometric_integrals.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/hyrectools.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/input.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/lensing.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/nonlinear.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/output.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/parser.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/perturbations.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/primordial.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/quadrature.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/sparse.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/spectra.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/thermodynamics.o
|
|
${CMAKE_CURRENT_LIST_DIR}/class/build/transfer.o
|
|
)
|
|
|
|
# python3
|
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
|
|
# command to build class using its own makefile
|
|
add_custom_command(OUTPUT ${CLASS_OBJECT_FILES}
|
|
COMMAND PYTHON=${Python3_EXECUTABLE} CC=${CMAKE_C_COMPILER} make
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/class
|
|
)
|
|
|
|
# target for class objects
|
|
add_custom_target(class_objects DEPENDS ${CLASS_OBJECT_FILES})
|
|
|
|
# library for class cpp wrappers
|
|
add_library(class_cpp
|
|
${CMAKE_CURRENT_LIST_DIR}/class/cpp/Engine.cc
|
|
${CMAKE_CURRENT_LIST_DIR}/class/cpp/ClassEngine.cc)
|
|
target_include_directories(class_cpp
|
|
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/class/include)
|
|
else(USE_CLASS_MAKEFILE)
|
|
|
|
# list of CLASS source files
|
|
set(CLASS_SOURCE_FILES
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/growTable.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/dei_rkck.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/sparse.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/evolver_rkck.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/evolver_ndf15.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/arrays.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/parser.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/quadrature.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/hyperspherical.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/trigonometric_integrals.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/tools/common.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/input.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/background.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/thermodynamics.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/perturbations.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/primordial.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/nonlinear.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/transfer.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/spectra.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/lensing.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/hyrec/hyrectools.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/hyrec/helium.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/hyrec/hydrogen.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/hyrec/history.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/source/output.c
|
|
${CMAKE_CURRENT_LIST_DIR}/class/cpp/Engine.cc
|
|
${CMAKE_CURRENT_LIST_DIR}/class/cpp/ClassEngine.cc
|
|
)
|
|
|
|
# create the library
|
|
add_library(class ${CLASS_SOURCE_FILES})
|
|
target_include_directories(class PRIVATE ${CLASS_INCLUDE_DIR})
|
|
target_include_directories(class PRIVATE ${CLASS_INCLUDE_CPP_DIR})
|
|
target_compile_options(class PRIVATE "-ffast-math")
|
|
target_compile_definitions(class PRIVATE "__CLASSDIR__=\"${CMAKE_CURRENT_LIST_DIR}/class\"")
|
|
set_property(TARGET class PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
target_include_directories(class PRIVATE ${CMAKE_CURRENT_LIST_DIR}/class/hyrec)
|
|
target_compile_definitions(class PRIVATE "HYREC")
|
|
set_target_properties(class PROPERTIES CXX_STANDARD 14 C_STANDARD 11)
|
|
# target_compile_options(class PRIVATE "-Wall")
|
|
# target_compile_options(class PRIVATE "-Wextra")
|
|
# target_compile_options(class PRIVATE "-pedantic")
|
|
endif(USE_CLASS_MAKEFILE)
|
|
endif(ENABLE_CLASS)
|
|
|
|
# macro to setup include dir and link libraries for target using class
|
|
macro(target_setup_class target_name)
|
|
if(ENABLE_CLASS)
|
|
target_include_directories(${target_name}
|
|
PRIVATE ${CLASS_INCLUDE_DIR})
|
|
target_include_directories(${target_name}
|
|
PRIVATE ${CLASS_INCLUDE_CPP_DIR})
|
|
if(USE_CLASS_MAKEFILE)
|
|
target_link_libraries(${target_name} ${CLASS_OBJECT_FILES})
|
|
target_link_libraries(${target_name} class_cpp)
|
|
add_dependencies(${target_name} class_objects)
|
|
else(USE_CLASS_MAKEFILE)
|
|
target_link_libraries(${target_name} PRIVATE class)
|
|
endif(USE_CLASS_MAKEFILE)
|
|
target_compile_definitions(${target_name} PRIVATE "USE_CLASS")
|
|
endif(ENABLE_CLASS)
|
|
endmacro(target_setup_class)
|
|
|
|
# if(ENABLE_CLASS)
|
|
# # test executable
|
|
# add_executable(testTk
|
|
# ${CMAKE_CURRENT_LIST_DIR}/class/cpp/testTk.cc)
|
|
# target_setup_class(testTk)
|
|
# endif(ENABLE_CLASS) |