From 379703196a744363edebcb8fd9b739efcca20f55 Mon Sep 17 00:00:00 2001 From: Michael Buehlmann Date: Thu, 27 Aug 2020 11:09:21 -0500 Subject: [PATCH] include class with cmake fetch (rm submodule) --- .gitmodules | 3 - CMakeLists.txt | 27 ++++---- external/class | 1 - external/class.cmake | 152 ++++--------------------------------------- 4 files changed, 28 insertions(+), 155 deletions(-) delete mode 160000 external/class diff --git a/.gitmodules b/.gitmodules index 2d8159f..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "external/class"] - path = external/class - url = https://github.com/ohahn/class_public.git diff --git a/CMakeLists.txt b/CMakeLists.txt index cd32a71..6d22dec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,9 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -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) diff --git a/external/class b/external/class deleted file mode 160000 index 414e895..0000000 --- a/external/class +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 414e89597d6eb93f713bad33c63aa62348f02e62 diff --git a/external/class.cmake b/external/class.cmake index 5ffc64e..5988cfb 100644 --- a/external/class.cmake +++ b/external/class.cmake @@ -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) \ No newline at end of file +FetchContent_GetProperties(class) +if(NOT class_POPULATED) + FetchContent_Populate(class) + add_subdirectory(${class_SOURCE_DIR} ${class_BINARY_DIR}) +endif() \ No newline at end of file