1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
#include(PackageLookup) # check for existence, or install external projects
# Scripts to run purify from build directory. Good for testing/debugging.
include(EnvironmentScript)
# Look up packages: if not found, installs them
# On different platforms the CMakeDeps generator in conan seems to install eigen
# as either "eigen" or "Eigen3" because the recipe does not explicitly define the
# name (yet). To work around this we have to check for both.
find_package(eigen NAMES Eigen3)
if(eigen_FOUND OR Eigen3_FOUND)
if(eigen_INCLUDE_DIR)
set(EIGEN3_INCLUDE_DIR ${eigen_INCLUDE_DIR} CACHE INTERNAL "")
elseif(Eigen3_INCLUDE_DIR)
set(EIGEN3_INCLUDE_DIR ${Eigen3_INCLUDE_DIR} CACHE INTERNAL "")
endif()
else()
message(FATAL_ERROR "Eigen is required")
endif()
find_package(CFitsIO REQUIRED)
find_package(yaml-cpp REQUIRED)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30.0")
cmake_policy(SET CMP0167 NEW)
endif()
find_package(Boost COMPONENTS filesystem REQUIRED)
find_package(sopt REQUIRED)
set(PURIFY_ONNXRT FALSE)
if (onnxrt)
if (${sopt_HAS_ORT})
set(PURIFY_ONNXRT TRUE)
else()
message(FATAL_ERROR "SOPT built without ONNXrt support")
endif()
install(DIRECTORY ${CMAKE_SOURCE_DIR}/models DESTINATION .)
endif()
find_package(Cubature QUIET)
if(NOT Cubature_FOUND)
message(STATUS "Cubature not found. Attempt to install...")
include(LookUpCubature)
set(PURIFY_CUBATURE_LOOKUP TRUE)
endif()
# Look for external software
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_package(Threads)
if(THREADS_FOUND)
add_compile_options(-pthread)
endif(THREADS_FOUND)
endif()
if(docs)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.3.0")
cmake_policy(SET CMP0057 NEW)
endif()
find_package(Doxygen REQUIRED dot)
endif()
if(tests) # Adds ctest
enable_testing()
find_package(Catch2)
include(AddCatchTest)
endif()
if(tests OR examples)
file(COPY data DESTINATION .)
endif()
if(benchmarks)
find_package(benchmark REQUIRED CONFIG)
endif()
# Always find open-mp, since it may be used by sopt
if (openmp)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.12.0")
cmake_policy(SET CMP0074 NEW)
endif()
find_package(OpenMP)
if (OPENMP_FOUND)
# Set PURIFY_OPENMP to TRUE when OpenMP is both found and requested
set(PURIFY_OPENMP TRUE)
else()
# Set to FALSE when OpenMP is not found or not requested
message(STATUS "Could not find OpenMP. Compiling without.")
endif()
endif()
# Allows loading FFTW3 settings from another project
set (FFTW3_CONFIG_FILE "${CMAKE_CURRENT_LIST_FILE}")
set (FFTW3_LIBRARIES fftw3)
set (FFTW3_LIBRARY_DIRS /usr/lib)
set (FFTW3_INCLUDE_DIRS /usr/include)
set(PURIFY_MPI FALSE)
if(dompi)
find_package(MPI REQUIRED)
if (${sopt_HAS_MPI})
set(PURIFY_MPI TRUE)
else()
message(FATAL_ERROR "SOPT built without MPI support")
endif()
endif()
find_package(TIFF REQUIRED)
set(PURIFY_ARRAYFIRE FALSE)
if(doaf)
lookup_package(ArrayFire REQUIRED)
set(PURIFY_ARRAYFIRE TRUE)
endif()
set(PURIFY_CImg FALSE)
if(docimg)
find_package(X11)
find_package(cimg)
set(PURIFY_CImg TRUE)
endif()
set(PURIFY_CASACORE FALSE)
if(docasa)
find_package(CasaCore OPTIONAL_COMPONENTS ms QUIET)
if(NOT CasaCore_FOUND)
message(STATUS "Casacore requested but not found. Attempt to install...")
include(LookUpCasaCore)
set(PURIFY_CASACORE_LOOKUP TRUE)
endif()
set(PURIFY_CASACORE TRUE)
endif()
set(PURIFY_H5 FALSE)
if(hdf5)
find_package(HDF5 COMPONENTS CXX REQUIRED)
message(STATUS "Found HDF5 include dir: ${HDF5_INCLUDE_DIR}")
message(STATUS "Found HDF5 CXX library: ${HDF5_CXX_LIBRARIES}")
message(STATUS "HDF5 parallel: ${HDF5_IS_PARALLEL}")
if (PURIFY_MPI AND NOT ${HDF5_IS_PARALLEL})
message(FATAL_ERROR "HDF5 built without MPI support")
endif()
find_package(HighFive QUIET)
if(NOT HighFive_FOUND)
message(STATUS "HighFive not found. Attempt to install...")
include(LookUpHighFive)
set(PURIFY_HIGHFIVE_LOOKUP TRUE)
endif()
set(PURIFY_H5 TRUE)
endif()
# Add script to execute to make sure libraries in the build tree can be found
add_to_ld_path("${EXTERNAL_ROOT}/lib")
|