From 54c5dc6f0eba31123f5f3b3db4b969bcc56dc66b Mon Sep 17 00:00:00 2001 From: mmichaux Date: Wed, 15 May 2019 15:17:27 +0200 Subject: [PATCH] Added CLASS as a submodule. --- .gitignore | 2 ++ .gitmodules | 3 +++ CMakeLists.txt | 2 ++ external/class | 1 + external/class.cmake | 64 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 160000 external/class create mode 100644 external/class.cmake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1899660 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +.vscode \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4b06ca9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "external/class"] + path = external/class + url = https://github.com/lesgourg/class_public.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e2dc4f..544336c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.9) set(PRGNAME fastLPT) project(fastLPT) +# include class submodule +include(${CMAKE_CURRENT_SOURCE_DIR}/external/class.cmake) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -march=native -Wall -fno-omit-frame-pointer -g -fsanitize=address") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native -Wall") diff --git a/external/class b/external/class new file mode 160000 index 0000000..63f3cf1 --- /dev/null +++ b/external/class @@ -0,0 +1 @@ +Subproject commit 63f3cf18fad0061688b8bf95055765b4793f25c7 diff --git a/external/class.cmake b/external/class.cmake new file mode 100644 index 0000000..7cd6360 --- /dev/null +++ b/external/class.cmake @@ -0,0 +1,64 @@ +# 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() + +# 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/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) + +# test executable +add_executable(testKlass + ${CMAKE_CURRENT_LIST_DIR}/class/cpp/testKlass.cc) +target_include_directories(testKlass + PRIVATE ${CMAKE_CURRENT_LIST_DIR}/class/include) +target_link_libraries(testKlass ${CLASS_OBJECT_FILES}) +target_link_libraries(testKlass class_cpp) +add_dependencies(testKlass class_objects)