1
0
Fork 0
mirror of https://github.com/cosmo-sims/monofonIC.git synced 2024-09-16 13:33:45 +02:00

include class with cmake fetch (rm submodule)

This commit is contained in:
Michael Buehlmann 2020-08-27 11:09:21 -05:00
parent ddd7957362
commit 379703196a
4 changed files with 28 additions and 155 deletions

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "external/class"]
path = external/class
url = https://github.com/ohahn/class_public.git

View file

@ -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 +0,0 @@
Subproject commit 414e89597d6eb93f713bad33c63aa62348f02e62

152
external/class.cmake vendored
View file

@ -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})
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)
FetchContent_GetProperties(class)
if(NOT class_POPULATED)
FetchContent_Populate(class)
add_subdirectory(${class_SOURCE_DIR} ${class_BINARY_DIR})
endif()