cmake_minimum_required(VERSION 3.11) project(class) set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Options option(ENABLE_TESTS "compile test executables" OFF) # OpenMP find_package(OpenMP) # Sources file( GLOB TOOLS_SRC ${PROJECT_SOURCE_DIR}/tools/*.c ) file( GLOB SOURCE_SRC ${PROJECT_SOURCE_DIR}/source/*.c ) set(CPP_SRC ${PROJECT_SOURCE_DIR}/tools/arrays.c ${PROJECT_SOURCE_DIR}/tools/hyperspherical.c ${PROJECT_SOURCE_DIR}/source/perturbations.c ${PROJECT_SOURCE_DIR}/source/primordial.c ${PROJECT_SOURCE_DIR}/source/transfer.c ${PROJECT_SOURCE_DIR}/source/harmonic.c ${PROJECT_SOURCE_DIR}/source/lensing.c ) set(TESTS test_loops test_loops_omp test_spectra test_transfer test_nonlinear test_perturbations test_thermodynamics test_background test_hyperspherical ) file( GLOB EXTERNAL_SRC ${PROJECT_SOURCE_DIR}/external/RecfastCLASS/*.c ${PROJECT_SOURCE_DIR}/external/HyRec2020/*.c ${PROJECT_SOURCE_DIR}/external/heating/*.c ) set(EXTERNAL_INCLUDE ${PROJECT_SOURCE_DIR}/external/RecfastCLASS/ ${PROJECT_SOURCE_DIR}/external/HyRec2020/ ${PROJECT_SOURCE_DIR}/external/heating/ ) SET_SOURCE_FILES_PROPERTIES(${CPP_SRC} PROPERTIES LANGUAGE CXX ) ## Main library find_package(Threads REQUIRED) if(THREADS_HAVE_PTHREAD_ARG) target_compile_options(libclass PUBLIC "-pthread") endif() if(CMAKE_THREAD_LIBS_INIT) target_link_libraries(libclass "${CMAKE_THREAD_LIBS_INIT}") endif() add_library(libclass STATIC ${TOOLS_SRC} ${SOURCE_SRC} ${EXTERNAL_SRC} ) add_library(class::libclass ALIAS libclass) target_compile_options(libclass PRIVATE -Wno-write-strings -fpermissive -O3 -g) set_property(TARGET libclass PROPERTY POSITION_INDEPENDENT_CODE ON) target_compile_definitions(libclass PUBLIC "__CLASSDIR__=\"${CMAKE_CURRENT_SOURCE_DIR}\"") target_include_directories(libclass PUBLIC include ${EXTERNAL_INCLUDE}) target_link_libraries(libclass PRIVATE m) if(OpenMP_FOUND) target_link_libraries(libclass PRIVATE OpenMP::OpenMP_C) endif() if(ENABLE_HYREC) target_compile_definitions(libclass PUBLIC "HYREC") target_include_directories(libclass PUBLIC ${CMAKE_CURRENT_LIST_DIR}/external/HyRec2020) target_include_directories(libclass PUBLIC ${CMAKE_CURRENT_LIST_DIR}/external/RecFastCLASS) target_include_directories(libclass PUBLIC ${CMAKE_CURRENT_LIST_DIR}/external/heating) endif()