# SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root # SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception cmake_minimum_required(VERSION 3.16) project(dune-common LANGUAGES C CXX) # CMake 3.29.1 is incompatible as it removed PACKAGE_PREFIX_DIR if (CMAKE_VERSION VERSION_EQUAL 3.29.1) message(FATAL_ERROR "CMake 3.29.1 is not compatible with Dune. Use a different CMake version.") endif() # make sure our own modules are found list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules) set(THREADS_PREFER_PTHREAD_FLAG TRUE CACHE BOOL "Prefer -pthread compiler and linker flag") #include the dune macros include(DuneMacros) # deactivate global include-directories for dune-common dune_policy(SET DP_DEFAULT_INCLUDE_DIRS NEW) # deactivate global calls to add_dune_all_flags in tests dune_policy(SET DP_TEST_ADD_ALL_FLAGS NEW) # start a dune project with information from dune.module dune_project() # Create a target for dune-common with a Dune::Common alias dune_add_library(dunecommon EXPORT_NAME Common NAMESPACE Dune::) # set include directories for dunecommon library dune_default_include_directories(dunecommon PUBLIC) # minimal c++ standard required target_compile_features(dunecommon PUBLIC cxx_std_20) # Set properties to the dunecommon target add_dune_blas_lapack_flags(dunecommon) add_dune_tbb_flags(dunecommon) # collect dependencies to be added into the dune-common-config.cmake files set(DUNE_COMMON_PACKAGE_DEPENDENCIES [[set(THREADS_PREFER_PTHREAD_FLAG TRUE CACHE BOOL "Prefer -pthread compiler and linker flag")]]) # since dunecommon is exported its linked libs must be provided downstream too if (LAPACK_FOUND) list(APPEND DUNE_COMMON_PACKAGE_DEPENDENCIES "find_dependency(LAPACK)") elseif (BLAS_FOUND) list(APPEND DUNE_COMMON_PACKAGE_DEPENDENCIES "find_dependency(BLAS)") endif() if (Threads_FOUND) list(APPEND DUNE_COMMON_PACKAGE_DEPENDENCIES "find_dependency(Threads)") endif() if (TBB_FOUND) list(APPEND DUNE_COMMON_PACKAGE_DEPENDENCIES "find_dependency(TBB)") endif() # add subdirectories to execute CMakeLists.txt there add_subdirectory(bin) add_subdirectory(cmake) add_subdirectory(doc) add_subdirectory(dune) add_subdirectory(lib) add_subdirectory(share) # if Python bindings are enabled, include necessary sub directories. if(DUNE_ENABLE_PYTHONBINDINGS) add_subdirectory(python) endif() # write contents into DUNE_CUSTOM_PKG_CONFIG_SECTION, which will be injected into dune-common-config.cmake string(JOIN "\n" DUNE_CUSTOM_PKG_CONFIG_SECTION # make sure that Find<module>.cmake provided by dune-common can be found by cmake [[list(APPEND CMAKE_MODULE_PATH "${dune-common_MODULE_PATH}")]] ${DUNE_COMMON_PACKAGE_DEPENDENCIES} ) # finalize the dune project, e.g. generating config.h, dune-common-config.cmake, etc. finalize_dune_project()