490 lines
19 KiB
CMake
490 lines
19 KiB
CMake
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)
|