mirror of
https://github.com/cosmo-sims/monofonIC.git
synced 2024-09-18 15:53:45 +02:00
include class with cmake fetch (rm submodule)
This commit is contained in:
parent
ddd7957362
commit
379703196a
4 changed files with 28 additions and 155 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
|||
[submodule "external/class"]
|
||||
path = external/class
|
||||
url = https://github.com/ohahn/class_public.git
|
|
@ -15,9 +15,8 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
cmake_minimum_required(VERSION 3.9)
|
||||
cmake_minimum_required(VERSION 3.11)
|
||||
set(PRGNAME monofonIC)
|
||||
|
||||
project(monofonIC C CXX)
|
||||
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native -Wall -fno-omit-frame-pointer -g -fsanitize=address")
|
||||
|
@ -32,8 +31,7 @@ set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "Flags used by t
|
|||
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 "Release")
|
||||
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
|
||||
|
@ -47,12 +45,7 @@ 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)
|
||||
|
||||
|
||||
########################################################################################################################
|
||||
# include class submodule
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/external/class.cmake)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}")
|
||||
|
||||
|
||||
|
@ -187,7 +180,7 @@ configure_file(
|
|||
)
|
||||
|
||||
add_executable(${PRGNAME} ${SOURCES} ${PLUGINS})
|
||||
target_setup_class(${PRGNAME})
|
||||
# target_setup_class(${PRGNAME})
|
||||
|
||||
set_target_properties(${PRGNAME} PROPERTIES CXX_STANDARD 14)
|
||||
|
||||
|
@ -256,7 +249,19 @@ endif(ENABLE_PLT)
|
|||
|
||||
target_link_libraries(${PRGNAME} PRIVATE GSL::gsl)
|
||||
|
||||
# GenericIO
|
||||
|
||||
########################################################################################################################
|
||||
# include CLASS
|
||||
option(ENABLE_CLASS "Enable CLASS support (as a submodule)." ON)
|
||||
|
||||
if(ENABLE_CLASS)
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/external/class.cmake)
|
||||
target_link_libraries(${PRGNAME} PRIVATE class::libclass_cpp)
|
||||
target_compile_definitions(${PRGNAME} PRIVATE "USE_CLASS")
|
||||
endif()
|
||||
|
||||
########################################################################################################################
|
||||
# include GenericIO (only if MPI available)
|
||||
include(CMakeDependentOption)
|
||||
cmake_dependent_option(ENABLE_GENERICIO "Enable GenericIO (HACC) output support" off "ENABLE_MPI;MPI_CXX_FOUND" off)
|
||||
|
||||
|
|
1
external/class
vendored
1
external/class
vendored
|
@ -1 +0,0 @@
|
|||
Subproject commit 414e89597d6eb93f713bad33c63aa62348f02e62
|
150
external/class.cmake
vendored
150
external/class.cmake
vendored
|
@ -1,141 +1,13 @@
|
|||
option(ENABLE_CLASS "Enable CLASS support (as a submodule)." ON)
|
||||
cmake_minimum_required(VERSION 3.11)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
class
|
||||
GIT_REPOSITORY https://github.com/michaelbuehlmann/class_public.git
|
||||
GIT_TAG master
|
||||
)
|
||||
|
||||
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})
|
||||
FetchContent_GetProperties(class)
|
||||
if(NOT class_POPULATED)
|
||||
FetchContent_Populate(class)
|
||||
add_subdirectory(${class_SOURCE_DIR} ${class_BINARY_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)
|
Loading…
Reference in a new issue