borg_public/external/external_build.cmake

490 lines
19 KiB
CMake
Raw Normal View History

2023-05-29 10:41:03 +02:00
OPTION(INTERNAL_BOOST "Use internal version of the Boost library" ON)
OPTION(INTERNAL_EIGEN "Use internal version of the Eigen library" ON)
OPTION(INTERNAL_HDF5 "Use internal HDF5" ON)
OPTION(INTERNAL_GSL "Use internal GSL" ON)
OPTION(INTERNAL_FFTW "Use internal FFTW" ON)
OPTION(STACKTRACE_USE_BACKTRACE "Use backtrace for stacktrace" ON)
message(STATUS "Compiler ID is: C -> ${CMAKE_C_COMPILER_ID}, CXX -> ${CMAKE_CXX_COMPILER_ID}")
MACRO(CHECK_CHANGE_STATE VAR)
IF (DEFINED _PREVIOUS_${VAR})
# message("Already defined value=${_PREVIOUS_${VAR}}")
IF (NOT ${_PREVIOUS_${VAR}}} EQUAL ${${VAR}})
# message("Not equal to previous state")
foreach(loopvar ${ARGN})
# message("Clearing ${loopvar}")
UNSET(${loopvar} CACHE)
endforeach()
ENDIF (NOT ${_PREVIOUS_${VAR}}} EQUAL ${${VAR}})
ENDIF (DEFINED _PREVIOUS_${VAR})
# message("Marking internal ${VAR} with ${${VAR}}")
SET(_PREVIOUS_${VAR} ${${VAR}} CACHE INTERNAL "Internal value")
ENDMACRO(CHECK_CHANGE_STATE)
CHECK_CHANGE_STATE(INTERNAL_BOOST Boost_LIBRARIES Boost_INCLUDE_DIRS)
CHECK_CHANGE_STATE(INTERNAL_GSL GSL_LIBRARY GSL_CBLAS_LIBRARY GSL_INCLUDE)
CHECK_CHANGE_STATE(INTERNAL_HDF5 HDF5_INCLUDE_DIR HDF5_LIBRARIES HDF5_CXX_LIBRARIES HDF5_DIR)
SET(BUILD_PREFIX ${CMAKE_BINARY_DIR}/external_build)
SET(EXT_INSTALL ${CMAKE_BINARY_DIR}/ext_install)
################
# BUILD CFITSIO
################
SET(CFITSIO_URL "http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio-3.47.tar.gz" CACHE STRING "URL to download CFITSIO from")
mark_as_advanced(CFITSIO_URL)
ExternalProject_Add(cfitsio
URL ${CFITSIO_URL}
URL_HASH SHA1=5a25016dcaf12117d950e4278e10d39c6c7d33a5
PREFIX ${BUILD_PREFIX}/cfitsio-prefix
CONFIGURE_COMMAND ./configure --prefix=${EXT_INSTALL} --disable-curl CPPFLAGS=${CONFIGURE_CPP_FLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS ${EXT_INSTALL}/lib/libcfitsio.a
)
SET(CFITSIO_LIBRARY ${EXT_INSTALL}/lib/libcfitsio.a)
SET(ares_DEPS ${ares_DEPS} cfitsio)
################
# BUILD HEALPIX
################
SET(HEALPIX_URL "https://sourceforge.net/projects/healpix/files/Healpix_3.50/healpix_cxx-3.50.0.tar.gz/download" CACHE STRING "URL for Healpix")
SET(HEALPIX_BUILD ${BUILD_PREFIX}/healpix-prefix/src/healpix-build)
SET(HEALPIX_DIR ${BUILD_PREFIX}/healpix-prefix/src/healpix)
ExternalProject_Add(healpix
DEPENDS cfitsio
PREFIX ${BUILD_PREFIX}/healpix-prefix
URL ${HEALPIX_URL}
URL_HASH SHA1=c8a537e743f760dfa453cad246065d37f72fc0cb
CONFIGURE_COMMAND ${CMAKE_COMMAND}
-DHEALPIX_CC=${CMAKE_C_COMPILER}
-DHEALPIX_CXX=${CMAKE_CXX_COMPILER}
-DHEALPIX_DIR:STRING=${HEALPIX_DIR}
-DHEALPIX_INSTALL:STRING=${EXT_INSTALL}
-DCFITSIO_LIB:STRING=${CFITSIO_LIBRARY}
-P ${CMAKE_SOURCE_DIR}/external/configure_healpix.cmake
BUILD_BYPRODUCTS ${EXT_INSTALL}/lib/libhealpix_cxx.a
)
SET(HEALPIX_LIBRARIES
${EXT_INSTALL}/lib/libhealpix_cxx.a
${EXT_INSTALL}/lib/libcfitsio.a
)
SET(ares_DEPS ${ares_DEPS} healpix)
#
# Backtrace
#
SET(BACKTRACE_LIBRARY)
IF (STACKTRACE_USE_BACKTRACE)
SET(BACKTRACE_URL "https://github.com/ianlancetaylor/libbacktrace/archive/f24e9f401fde0249ca48fa98493a672e83b0f3dc.tar.gz" CACHE STRING "URL to download backtrace from")
mark_as_advanced(BACKTRACE_URL)
ExternalProject_Add(backtrace
URL ${BACKTRACE_URL}
URL_HASH SHA1=1a12ce8dbe94980ebf3fc7e8bd22f376e3bd21cb
PREFIX ${BUILD_PREFIX}/backtrace-prefix
CONFIGURE_COMMAND ./configure --prefix=${EXT_INSTALL} --with-pic CPPFLAGS=${CONFIGURE_CPP_FLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS ${EXT_INSTALL}/lib/libbacktrace.a
)
SET(ares_DEPS ${ares_DEPS} backtrace)
SET(BACKTRACE_LIBRARY ${EXT_INSTALL}/lib/libbacktrace.a)
ENDIF()
################
# BUILD BOOST
################
IF (INTERNAL_BOOST)
SET(BOOST_URL "https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.tar.bz2" CACHE STRING "URL to download Boost from")
mark_as_advanced(BOOST_URL)
SET(BOOST_SOURCE_DIR ${BUILD_PREFIX}/boost-prefix/src/boost)
set(LINKER_EXTRA_FLAGS)
message(STATUS "Compiler version is ${CMAKE_CXX_COMPILER_VERSION}, ID is ${CMAKE_CXX_COMPILER_ID}")
string(REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1" ToolsetVer "${CMAKE_CXX_COMPILER_VERSION}")
IF(CMAKE_CXX_COMPILER_ID MATCHES "^Intel$")
SET(b2_toolset intel)
SET(COMPILER_EXTRA_FLAGS "-fPIC")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
SET(b2_toolset darwin)
else()
SET(b2_toolset gcc)
SET(COMPILER_EXTRA_FLAGS "-fPIC -std=gnu++14")
endif()
add_definitions("-Wno-unused-local-typedefs")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
SET(b2_toolset darwin)
SET(COMPILER_EXTRA_FLAGS "-std=c++14")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET(b2_toolset clang)
SET(COMPILER_EXTRA_FLAGS "-std=c++14")
endif()
SET(COMPILER_EXTRA_FLAGS "${COMPILER_EXTRA_FLAGS} -I${EXT_INSTALL}/include")
SET(LINKER_EXTRA_FLAGS "${LINKER_EXTRA_FLAGS} -L${EXT_INSTALL}/lib")
message(STATUS "Building boost with toolset ${b2_toolset}")
IF (STACKTRACE_USE_BACKTRACE)
SET(BOOST_STACKTRACE ${BOOST_SOURCE_DIR}/stage/lib/libboost_stacktrace_backtrace.a)
SET(BOOST_DEPS backtrace)
ELSE()
SET(BOOST_STACKTRACE ${BOOST_SOURCE_DIR}/stage/lib/libboost_stacktrace_basic.a)
SET(BOOST_DEPS)
ENDIF()
SET(BOOST_LIBRARIES
${BOOST_SOURCE_DIR}/stage/lib/libboost_timer.a
${BOOST_SOURCE_DIR}/stage/lib/libboost_chrono.a
${BOOST_SOURCE_DIR}/stage/lib/libboost_random.a
${BOOST_SOURCE_DIR}/stage/lib/libboost_regex.a
${BOOST_SOURCE_DIR}/stage/lib/libboost_program_options.a
${BOOST_SOURCE_DIR}/stage/lib/libboost_system.a
${BOOST_STACKTRACE}
${BOOST_SOURCE_DIR}/stage/lib/libboost_exception.a)
ExternalProject_Add(boost
URL ${BOOST_URL}
DEPENDS ${BOOST_DEPS}
URL_HASH SHA1=f82c0d8685b4d0e3971e8e2a8f9ef1551412c125
PREFIX ${BUILD_PREFIX}/boost-prefix
CONFIGURE_COMMAND ${CMAKE_COMMAND} -DTOOLSET=${b2_toolset} "-DCOMPILER:STRING=${CMAKE_CXX_COMPILER}" "-DCOMPILER_EXTRA_FLAGS=${COMPILER_EXTRA_FLAGS}" "-DINSTALL_PATH:STRING=${EXT_INSTALL}" "-DLINKER_EXTRA_FLAGS=${LINKER_EXTRA_FLAGS}" "-DSRC_DIR:STRING=${BOOST_SOURCE_DIR}" -P ${CMAKE_SOURCE_DIR}/external/configure_boost.cmake
BUILD_IN_SOURCE 1
BUILD_COMMAND ${BOOST_SOURCE_DIR}/b2 --with-regex -d+2 --with-exception --with-chrono --with-timer --with-program_options --with-random --with-stacktrace toolset=${b2_toolset}-cmake variant=release
INSTALL_COMMAND echo "No install"
BUILD_BYPRODUCTS ${BOOST_LIBRARIES}
)
# PATCH_COMMAND patch -p1 -d ${BOOST_SOURCE_DIR} -i ${CMAKE_SOURCE_DIR}/external/patch-boost
SET(Boost_INCLUDE_DIRS ${BOOST_SOURCE_DIR} CACHE STRING "Boost path" FORCE)
SET(boost_built boost)
mark_as_advanced(Boost_INCLUDE_DIRS)
SET(ares_DEPS ${ares_DEPS} boost)
ELSE (INTERNAL_BOOST)
find_package(Boost 1.69 REQUIRED COMPONENTS random chrono regex system program_options timer stacktrace_basic OPTIONAL_COMPONENTS stacktrace_backtrace stacktrace_addr2line)
if (${Boost_VERSION} VERSION_GREATER 1000)
math(EXPR TMP_MAJOR "${Boost_VERSION} / 100000")
math(EXPR TMP_MINOR "(${Boost_VERSION} - ${TMP_MAJOR} * 100000) / 100")
math(EXPR TMP_PATCHLEVEL "${Boost_VERSION} - ${TMP_MAJOR} * 100000 - ${TMP_MINOR} * 100")
set(Boost_VERSION ${TMP_MAJOR}.${TMP_MINOR}.${TMP_PATCHLEVEL})
ENDIF()
message(STATUS "Boost version ${Boost_VERSION}")
if (${Boost_VERSION} VERSION_GREATER_EQUAL 1.70)
set(BOOST_LIBRARIES Boost::headers Boost::random Boost::chrono Boost::regex Boost::system Boost::program_options Boost::timer)
if (Boost_stacktrace_backtrace_FOUND)
set(BOOST_LIBRARIES ${BOOST_LIBRARIES} Boost::stacktrace_backtrace)
else()
set(BOOST_LIBRARIES ${BOOST_LIBRARIES} Boost::stacktrace_basic)
endif()
else()
SET(BOOST_LIBRARIES ${Boost_LIBRARIES})
endif()
SET(BOOST_ROOT)
SET(boost_built)
ENDIF (INTERNAL_BOOST)
################
# BUILD Eigen
################
IF (INTERNAL_EIGEN)
SET(EIGEN_URL "https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.bz2" CACHE STRING "URL to download Eigen from")
mark_as_advanced(EIGEN_URL)
ExternalProject_Add(eigen
URL ${EIGEN_URL}
URL_HASH MD5=b9e98a200d2455f06db9c661c5610496
PREFIX ${BUILD_PREFIX}/eigen-prefix
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${EXT_INSTALL} -DEIGEN_TEST_NO_OPENGL=ON
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
# PATCH_COMMAND ${CMAKE_COMMAND}
# -DBUILD_PREFIX=${BUILD_PREFIX}/eigen-prefix
# -DPATCH_FILE=${CMAKE_SOURCE_DIR}/external/patch_eigen
# -DSOURCE_PREFIX=${BUILD_PREFIX}/eigen-prefix/src/eigen
# -P ${CMAKE_SOURCE_DIR}/external/check_and_apply_patch.cmake
)
SET(EIGEN_INCLUDE_DIRS ${EXT_INSTALL}/include/eigen3)
SET(ares_DEPS ${ares_DEPS} eigen)
SET(EIGEN_PATH ${EXT_INSTALL})
ELSE (INTERNAL_EIGEN)
if(DEFINED EIGEN_PATH)
set(_eigen_old_pkg_path $ENV{PKG_CONFIG_PATH})
set(ENV{PKG_CONFIG_PATH} ${EIGEN_PATH}/share/pkgconfig)
endif()
pkg_check_modules(EIGEN NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH REQUIRED eigen3)
if(DEFINED EIGEN_PATH)
set(ENV{PKG_CONFIG_PATH} ${_eigen_old_pkg_path})
endif()
IF (EIGEN_FOUND)
IF(EIGEN_STATIC_INCLUDE_DIRS)
SET(EIGEN_INCLUDE_DIRS ${EIGEN_STATIC_INCLUDE_DIRS})
ENDIF()
ELSE()
message(FATAL_ERROR "Eigen has not been found")
ENDIF()
ENDIF (INTERNAL_EIGEN)
################
# Build PyBind11
################
IF (BUILD_PYTHON_EXTENSION)
SET(PYBIND11_URL "https://github.com/pybind/pybind11/archive/v2.10.3.tar.gz" CACHE STRING "URL to download Pybind11 from")
mark_as_advanced(PYBIND11_URL)
FetchContent_Declare(
pybind11
URL ${PYBIND11_URL}
URL_HASH MD5=a093dac9dfd613a5a7c2afa50a301098
)
ENDIF()
SET(R3D_URL "https://github.com/devonmpowell/r3d/archive/b3eef85ae5dc111d0148491772e0820406cfe0ea.zip" CACHE STRING "URL to download R3D from")
mark_as_advanced(R3D_URL)
FetchContent_Declare(
r3d
URL ${R3D_URL}
URL_HASH MD5=9e3c4c7348805593539464aae149646a
)
################
# BUILD HDF5
################
if (INTERNAL_HDF5)
SET(HDF5_URL "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.7/src/hdf5-1.10.7.tar.gz" CACHE STRING "URL to download HDF5 from")
mark_as_advanced(HDF5_URL)
SET(HDF5_SOURCE_DIR ${BUILD_PREFIX}/hdf5-prefix/src/hdf5)
SET(HDF5_BIN_DIR ${EXT_INSTALL})
ExternalProject_Add(hdf5
PREFIX ${BUILD_PREFIX}/hdf5-prefix
URL ${HDF5_URL}
URL_HASH MD5=006ed785942f4ed9a6f31556d0ef8ba5
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${EXT_INSTALL}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DHDF5_BUILD_CPP_LIB=ON
-DHDF5_BUILD_TOOLS=ON
-DHDF5_BUILD_HL_LIB=ON
BUILD_BYPRODUCTS ${EXT_INSTALL}/lib/libhdf5.a ${EXT_INSTALL}/lib/libhdf5-static.a ${EXT_INSTALL}/lib/libhdf5_cpp.a
)
SET(hdf5_built hdf5)
set(HDF5_LIBRARIES ${HDF5_BIN_DIR}/lib/libhdf5.a CACHE STRING "HDF5 lib" FORCE)
set(HDF5_CXX_LIBRARIES ${HDF5_BIN_DIR}/lib/libhdf5_cpp.a CACHE STRING "HDF5 C++ lib" FORCE)
SET(HDF5_INCLUDE_DIR ${HDF5_BIN_DIR}/include CACHE STRING "HDF5 include path" FORCE)
SET(CONFIGURE_LDFLAGS "${CONFIGURE_LDFLAGS} -L${HDF5_BIN_DIR}/lib")
SET(HDF5_ROOTDIR ${HDF5_BIN_DIR})
SET(ares_DEPS ${ares_DEPS} hdf5)
mark_as_advanced(HDF5_LIBRARIES HDF5_CXX_LIBRARIES HDF5_INCLUDE_DIR)
else(INTERNAL_HDF5)
mark_as_advanced(CLEAR HDF5_LIBRARIES HDF5_CXX_LIBRARIES HDF5_INCLUDE_DIR)
find_package(HDF5 COMPONENTS CXX)
SET(HDF5_ROOTDIR ${HDF5_BIN_DIR})
SET(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIRS})
endif (INTERNAL_HDF5)
##################
# Build GSL
##################
IF(INTERNAL_GSL)
SET(GSL_URL "http://ftpmirror.gnu.org/gsl/gsl-2.3.tar.gz" CACHE STRING "URL to download GSL from ")
mark_as_advanced(GSL_URL)
SET(GSL_SOURCE_DIR ${BUILD_PREFIX}/gsl-prefix/src/gsl)
ExternalProject_Add(gsl
URL ${GSL_URL}
PREFIX ${BUILD_PREFIX}/gsl-prefix
CONFIGURE_COMMAND ${GSL_SOURCE_DIR}/configure
--prefix=${EXT_INSTALL} --disable-shared
--with-pic
CPPFLAGS=${CONFIGURE_CPP_FLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER}
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS ${EXT_INSTALL}/lib/libgsl.a ${EXT_INSTALL}/lib/libgslcblas.a
)
SET(GSL_INTERNAL_LIBS ${EXT_INSTALL}/lib)
SET(GSL_LIBRARY ${GSL_INTERNAL_LIBS}/libgsl.a CACHE STRING "GSL internal path" FORCE)
SET(GSL_CBLAS_LIBRARY ${GSL_INTERNAL_LIBS}/libgslcblas.a CACHE STRING "GSL internal path" FORCE)
set(GSL_INCLUDE ${CMAKE_BINARY_DIR}/ext_install/include CACHE STRING "GSL internal path" FORCE)
SET(ares_DEPS ${ares_DEPS} gsl)
mark_as_advanced(GSL_LIBRARY GSL_INCLUDE GSL_CBLAS_LIBRARY)
ELSE(INTERNAL_GSL)
mark_as_advanced(CLEAR GSL_LIBRARY GSL_INCLUDE GSL_CBLAS_LIBRARY)
find_library(GSL_LIBRARY gsl)
find_library(GSL_CBLAS_LIBRARY gslcblas)
find_path(GSL_INCLUDE NAMES gsl/gsl_blas.h)
message(STATUS "GSL paths: ${GSL_LIBRARY} ${GSL_CBLAS_LIBRARY} ${GSL_INCLUDE}")
if (NOT (GSL_LIBRARY OR GSL_CBLAS_LIBRARY OR GSL_INCLUDE))
message(FATAL_ERROR "GSL has not been found")
endif()
ENDIF(INTERNAL_GSL)
#############
# Build FFTW
#############
IF(INTERNAL_FFTW)
SET(FFTW_URL "http://www.fftw.org/fftw-3.3.8.tar.gz" CACHE STRING "URL to download FFTW from")
mark_as_advanced(FFTW_URL)
SET(EXTRA_FFTW_CONF)
# IF(HAVE_SSE)
# SET(EXTRA_FFTW_CONF ${EXTRA_FFTW_CONF} --enable-sse)
# ENDIF(HAVE_SSE)
# IF(HAVE_SSE2)
# SET(EXTRA_FFTW_CONF ${EXTRA_FFTW_CONF} --enable-sse2)
# ENDIF(HAVE_SSE2)
# IF(HAVE_AVX)
# SET(EXTRA_FFTW_CONF ${EXTRA_FFTW_CONF} --enable-avx)
# ENDIF(HAVE_AVX)
IF(ENABLE_OPENMP)
SET(EXTRA_FFTW_CONF ${EXTRA_FFTW_CONF} --enable-openmp)
SET(FFTW_LIBS ${FFTW_LIBS} ${EXT_INSTALL}/lib/libfftw3_omp.a )
ENDIF(ENABLE_OPENMP)
IF (ENABLE_MPI)
SET(MPI_OPT ${EXTRA_FFTW_CONF} --enable-mpi MPICC=${MPI_C_COMPILER})
SET(FFTW_LIBS ${FFTW_LIBS} ${EXT_INSTALL}/lib/libfftw3_mpi.a )
ENDIF(ENABLE_MPI)
SET(EXTRA_FFTW_CONF ${EXTRA_FFTW_CONF} "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}")
IF(BUILD_PYTHON_EXTENSION)
SET(EXTRA_FFTW_CONF ${EXTRA_FFTW_CONF} "--with-pic")
ENDIF()
SET(FFTW_SOURCE ${BUILD_PREFIX}/fftw-prefix/src/fftw)
message(STATUS "Opts: ${EXTRA_FFTW_CONF}")
ExternalProject_Add(fftw
URL ${FFTW_URL}
URL_HASH MD5=8aac833c943d8e90d51b697b27d4384d
PREFIX ${BUILD_PREFIX}/fftw-prefix
CONFIGURE_COMMAND
${FFTW_SOURCE}/configure
--prefix=${EXT_INSTALL}
${EXTRA_FFTW_CONF} --disable-shared ${MPI_OPT}
BUILD_BYPRODUCTS ${FFTW_LIBS} ${EXT_INSTALL}/lib/libfftw3.a
)
SET(FFTW_INCLUDE_DIR ${EXT_INSTALL}/include)
SET(FFTW_OMP_LIBRARIES ${EXT_INSTALL}/lib/libfftw3_omp.a)
SET(FFTW_LIBRARIES ${EXT_INSTALL}/lib/libfftw3.a)
SET(FFTW_MPI_LIBRARIES ${EXT_INSTALL}/lib/libfftw3_mpi.a)
SET(ares_DEPS ${ares_DEPS} fftw)
ELSE(INTERNAL_FFTW)
set(FFTW_OMP_FIND_REQUIRED ${ENABLE_OPENMP})
SET(FFTW_NAMES fftw3)
set(FFTW_FIND_REQUIRED YES)
IF(ENABLE_MPI)
set(FFTW_MPI_FIND_REQUIRED YES)
ENDIF()
IF(ENABLE_OPENMP)
set(FFTW_OMP_FIND_REQUIRED YES)
ENDIF()
include(${CMAKE_SOURCE_DIR}/cmake/FindFFTW.cmake)
ENDIF(INTERNAL_FFTW)
IF(ENABLE_OPENMP)
SET(FFTW_LIBRARIES ${FFTW_OMP_LIBRARIES} ${FFTW_LIBRARIES})
ENDIF(ENABLE_OPENMP)
IF(ENABLE_MPI)
SET(FFTW_LIBRARIES ${FFTW_MPI_LIBRARIES} ${FFTW_LIBRARIES})
ENDIF(ENABLE_MPI)
MESSAGE(STATUS "Used FFTW libraries: ${FFTW_LIBRARIES}")
SET(COSMOTOOL_DIR ${CMAKE_SOURCE_DIR}/external/cosmotool)
#MESSAGE(STATUS "Cosmotool deps is ${ares_DEPS}")
SET(SPECIAL_PREFIX_PATH ${CMAKE_PREFIX_PATH})
list(INSERT SPECIAL_PREFIX_PATH 0 ${EXT_INSTALL})
ExternalProject_Add(cosmotool
DEPENDS ${ares_DEPS}
SOURCE_DIR ${COSMOTOOL_DIR}
PREFIX ${BUILD_PREFIX}/cosmotool-prefix
CMAKE_CACHE_ARGS
-DCMAKE_INSTALL_PREFIX:STRING=${EXT_INSTALL}
-DCMAKE_PREFIX_PATH:STRING=${SPECIAL_PREFIX_PATH}
-DEIGEN_PATH:STRING=${EIGEN_PATH}
-DCMAKE_MODULE_PATH:STRING=${EXT_INSTALL}/share/cmake;${CMAKE_MODULE_PATH}
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DHDF5_DIR:STRING=${HDF5_ROOTDIR}/share/cmake
-DHDF5_ROOTDIR:STRING=${HDF5_ROOTDIR}
-DNETCDF_INCLUDE_PATH:STRING=${NETCDF_INCLUDE_PATH}
-DNETCDFCPP_INCLUDE_PATH:STRING=${NETCDFCPP_INCLUDE_PATH}
-DGSL_INCLUDE_PATH:STRING=${GSL_INCLUDE}
-DGSL_LIBRARY:STRING=${GSL_LIBRARY}
-DGSLCBLAS_LIBRARY:STRING=${GSL_CBLAS_LIBRARY}
-DINTERNAL_GSL:BOOL=OFF
-DINTERNAL_EIGEN:BOOL=OFF
-DYORICK_SUPPORT:BOOL=OFF
-DBUILD_PYTHON:BOOL=OFF
-DENABLE_OPENMP:BOOL=${ENABLE_OPENMP}
-DPKG_CONFIG_USE_CMAKE_PREFIX_PATH:BOOL=ON
-DBOOST_INCLUDEDIR:STRING=${Boost_INCLUDE_DIRS}
-DZLIB_LIBRARY:STRING=${ZLIB_LIBRARY}
"-DCMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS:STRING=${CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS}"
BUILD_BYPRODUCTS ${EXT_INSTALL}/lib/libCosmoTool.a
LIST_SEPARATOR ;
)
SET(COSMOTOOL_LIB ${EXT_INSTALL}/lib/libCosmoTool.a)
set(COSMOTOOL_INCLUDE ${EXT_INSTALL}/include)
SET(ares_DEPS ${ares_DEPS} cosmotool)
### CLASS
SET(CLASS_CODE_URL "https://github.com/lesgourg/class_public/archive/refs/tags/v2.9.4.tar.gz" CACHE STRING "URL for CLASS")
SET(LIBCLASS_PATH ${BUILD_PREFIX}/class-code-prefix/src/class_code/libclass.a)
IF(CMAKE_CXX_COMPILER_ID MATCHES "^Intel$")
SET(COMPILER_EXTRA_FLAGS "-fPIC")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
else()
SET(COMPILER_EXTRA_FLAGS "-fPIC")
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
endif()
if (ENABLE_OPENMP)
SET(CLASS_OPENMP ${OpenMP_C_FLAGS})
else()
SET(CLASS_OPENMP)
endif()
ExternalProject_Add(class_code
PREFIX ${BUILD_PREFIX}/class-code-prefix
URL ${CLASS_CODE_URL}
URL_HASH SHA1=ad0c7739d23cdd04263f0030120d159f3b4e5b6e
CONFIGURE_COMMAND echo "No configure"
BUILD_COMMAND make CPPFLAGS=${CONFIGURE_CPP_FLAGS} CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} "CCFLAG=-D__CLASSDIR__=\\\"${BUILD_PREFIX}/class-code-prefix/src/class_code\\\" ${COMPILER_EXTRA_FLAGS} ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}" OPTFLAG= OMPFLAG=${CLASS_OPENMP} libclass.a
INSTALL_COMMAND
${CMAKE_COMMAND}
-DCLASS_SOURCE_INCLUDE=${BUILD_PREFIX}/class-code-prefix/src/class_code/include
-DCLASS_HEADER_INSTALL_PATH=${EXT_INSTALL}/include/class_code
-P ${CMAKE_SOURCE_DIR}/external/install_class.cmake
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS ${LIBCLASS_PATH}
)
SET(ares_DEPS ${ares_DEPS} class_code)