Skip to content
Snippets Groups Projects
Commit 3e5f16c4 authored by Maik Nijhuis's avatar Maik Nijhuis
Browse files

AST-1495 Make modules optional

parent 8101b16f
No related branches found
No related tags found
1 merge request!135AST-1495 Make modules optional
......@@ -2,7 +2,9 @@
# SPDX-License-Identifier: GPL-3.0-or-later
# Top level CMakeLists.txt file for SchaapCommon
cmake_minimum_required(VERSION 3.8)
cmake_minimum_required(VERSION 3.13) # CMP0079 needs CMake 3.13
set(SCHAAPCOMMON_ALL_MODULES facets fft fitters h5parm)
# Define a couple of dedicated variables, to prevent that standard CMAKE
# variables get screwed up when schaapcommon included in another package
......@@ -23,6 +25,9 @@ if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
# Enable loading dependencies in subdirectories.
cmake_policy(SET CMP0079 NEW)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)
......@@ -72,6 +77,9 @@ if(SCHAAPCOMMON_MASTER_PROJECT)
endif()
include_directories(${AOCOMMON_INCLUDE_DIR})
# Build everything
set(SCHAAPCOMMON_MODULES ${SCHAAPCOMMON_ALL_MODULES})
if(BUILD_TESTING)
include(CTest)
find_package(
......@@ -87,64 +95,11 @@ if(NOT SCHAAPCOMMON_MASTER_PROJECT)
set(CMAKE_BUILD_TYPE Release)
endif()
# Spawn all compiler warnings
add_compile_options(-Wall -Wzero-as-null-pointer-constant)
# Load dependencies, could be done a bit neater with CMP0079, i.e.
# cmake_policy(SET CMP0079 NEW)
# but requires CMake >= 3.13
# Find and include HDF5
find_package(
HDF5
COMPONENTS C CXX
REQUIRED)
add_definitions(${HDF5_DEFINITIONS})
include_directories(SYSTEM ${HDF5_INCLUDE_DIR})
# Find and include FFTW
find_library(FFTW3F_LIB fftw3f REQUIRED HINTS ENV FFTW3_LIB)
find_library(FFTW3F_THREADS_LIB fftw3f_threads REQUIRED HINTS ENV FFTW3_LIB)
find_path(
FFTW3_INCLUDE_DIR
NAMES fftw3.h
HINTS ENV FFTW3_INCLUDE)
include_directories(SYSTEM ${FFTW3_INCLUDE_DIR})
# Temporary include casacore until this is replaced with aocommon::MC2x2
find_package(
Casacore
COMPONENTS casa
REQUIRED)
include_directories(SYSTEM ${CASACORE_INCLUDE_DIR})
# Find and include Boost (geometry) headers
find_package(Boost REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
# Boost_VERSION has 0's instead of periods for older versions of boost
string(REPLACE 0 . Boost_VERSION_TMP ${Boost_VERSION})
if(Boost_VERSION_TMP VERSION_LESS "1.66")
add_definitions(-DHAVE_BOOST_LT_166)
endif()
find_package(Threads REQUIRED)
find_package(GSL REQUIRED)
include_directories(SYSTEM ${GSL_INCLUDE_DIRS})
# Let schaapcommon be a STATIC library, to reduce the risk on linking problems
add_library(schaapcommon STATIC "")
target_link_libraries(
${SCHAAPCOMMON_PROJECT_NAME}
${HDF5_LIBRARIES}
${HDF5_CXX_LIBRARIES}
${CASACORE_LIBRARIES}
${FFTW3F_LIB}
${FFTW3F_THREADS_LIB}
${CMAKE_THREAD_LIBS_INIT}
${GSL_LIBRARIES})
find_package(Threads REQUIRED)
target_link_libraries(${SCHAAPCOMMON_PROJECT_NAME} Threads::Threads)
if(SCHAAPCOMMON_MASTER_PROJECT)
if(CMAKE_EXPORT_COMPILE_COMMANDS)
......@@ -168,8 +123,14 @@ if(SCHAAPCOMMON_MASTER_PROJECT)
LIBRARY DESTINATION lib)
endif()
# For backwards compatibility: Build everything if SCHAAPCOMMON_MODULES is unset.
if(NOT SCHAAPCOMMON_MODULES)
set(SCHAAPCOMMON_MODULES ${SCHAAPCOMMON_ALL_MODULES})
endif()
message(STATUS "Enabled schaapcommon modules: ${SCHAAPCOMMON_MODULES}")
# Source directories
add_subdirectory(src/facets)
add_subdirectory(src/fft)
add_subdirectory(src/fitters)
add_subdirectory(src/h5parm)
foreach(MODULE ${SCHAAPCOMMON_MODULES})
add_subdirectory(src/${MODULE})
endforeach()
......@@ -2,6 +2,16 @@
# Copyright (C) 2023 Bojan Nikolic
# SPDX-License-Identifier: GPL-3.0-or-later
# Find and include Boost (geometry) headers
find_package(Boost REQUIRED)
target_link_libraries(${SCHAAPCOMMON_PROJECT_NAME} Boost::boost)
# Boost_VERSION has 0's instead of periods for older versions of boost
string(REPLACE 0 . Boost_VERSION_TMP ${Boost_VERSION})
if(Boost_VERSION_TMP VERSION_LESS "1.66")
target_compile_definitions(${SCHAAPCOMMON_PROJECT_NAME} -DHAVE_BOOST_LT_166)
endif()
get_filename_component(MODULE ${CMAKE_CURRENT_SOURCE_DIR} NAME)
set(PUBLIC_HEADER_DIR ${SCHAAPCOMMON_SOURCE_DIR}/include/schaapcommon/${MODULE})
......
# Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
# SPDX-License-Identifier: GPL-3.0-or-later
# Find and include FFTW
find_path(
FFTW3_INCLUDE_DIR
NAMES fftw3.h
HINTS ENV FFTW3_INCLUDE)
find_library(FFTW3F_LIB fftw3f REQUIRED HINTS ENV FFTW3_LIB)
find_library(FFTW3F_THREADS_LIB fftw3f_threads REQUIRED HINTS ENV FFTW3_LIB)
target_include_directories(${SCHAAPCOMMON_PROJECT_NAME} SYSTEM
PUBLIC ${FFTW3_INCLUDE_DIR})
target_link_libraries(${SCHAAPCOMMON_PROJECT_NAME} ${FFTW3F_LIB}
${FFTW3F_THREADS_LIB})
get_filename_component(MODULE ${CMAKE_CURRENT_SOURCE_DIR} NAME)
set(PUBLIC_HEADER_DIR ${SCHAAPCOMMON_SOURCE_DIR}/include/schaapcommon/${MODULE})
......
# Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
# SPDX-License-Identifier: GPL-3.0-or-later
find_package(GSL REQUIRED)
target_link_libraries(${SCHAAPCOMMON_PROJECT_NAME} GSL::gsl)
get_filename_component(MODULE ${CMAKE_CURRENT_SOURCE_DIR} NAME)
set(PUBLIC_HEADER_DIR ${SCHAAPCOMMON_SOURCE_DIR}/include/schaapcommon/${MODULE})
......
# Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
# SPDX-License-Identifier: GPL-3.0-or-later
# Find HDF5 before CasaCore. Since CasaCore also finds HDF5, HDF5 may not have
# CXX support if CasaCore finds it first.
find_package(
HDF5
COMPONENTS C CXX
REQUIRED)
# In CMake 3.20, the hdf5::hdf5_cpp target can replace the lines below.
target_compile_definitions(${SCHAAPCOMMON_PROJECT_NAME}
PUBLIC ${HDF5_DEFINITIONS})
target_include_directories(${SCHAAPCOMMON_PROJECT_NAME} SYSTEM
PUBLIC ${HDF5_INCLUDE_DIR})
target_link_libraries(${SCHAAPCOMMON_PROJECT_NAME} ${HDF5_LIBRARIES}
${HDF5_CXX_LIBRARIES})
# Temporarily include casacore until this is replaced with aocommon::MC2x2.
find_package(
Casacore
COMPONENTS casa
REQUIRED)
target_include_directories(${SCHAAPCOMMON_PROJECT_NAME} SYSTEM
PUBLIC ${CASACORE_INCLUDE_DIR})
target_link_libraries(${SCHAAPCOMMON_PROJECT_NAME} ${CASACORE_LIBRARIES})
get_filename_component(MODULE ${CMAKE_CURRENT_SOURCE_DIR} NAME)
set(PUBLIC_HEADER_DIR ${SCHAAPCOMMON_SOURCE_DIR}/include/schaapcommon/${MODULE})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment