From a217b330ef952f103a033d9857a4e1281faf3839 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Thu, 26 Oct 2023 01:30:21 -0700 Subject: [PATCH] Install: CMake Config & Targets Install the CMake package files for consumption of CMake targets in downstream projects. We will in the future expose public headers for downstream projects as well that will help us to compile templated classes, such as particle containers, targeted in the downstream repo instead of collecting all known usage here in upstream. --- CMakeLists.txt | 42 ++++++++++++++++++++-------------- cmake/dependencies/AMReX.cmake | 2 +- pyAMReXConfig.cmake.in | 40 ++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 pyAMReXConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index f1495353..807b5cfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,13 +194,21 @@ set_cxx_warnings() # Generate Configuration and .pc Files ######################################## # # these files are used if pyAMReX is installed and picked up by a downstream -# project (not needed yet) +# project +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${pyAMReX_SOURCE_DIR}/pyAMReXConfig.cmake.in + ${pyAMReX_BINARY_DIR}/pyAMReXConfig.cmake + INSTALL_DESTINATION ${pyAMReX_INSTALL_CMAKEDIR} + #PATH_VARS MODULE_PATH + # We have our own check_required_components + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) -#include(CMakePackageConfigHelpers) -#write_basic_package_version_file("pyAMReXConfigVersion.cmake" -# VERSION ${pyAMReX_VERSION} -# COMPATIBILITY SameMajorVersion -#) +write_basic_package_version_file("pyAMReXConfigVersion.cmake" + VERSION ${pyAMReX_VERSION} + COMPATIBILITY SameMinorVersion +) # Installs #################################################################### @@ -220,17 +228,17 @@ install(TARGETS ${pyAMReX_INSTALL_TARGET_NAMES} ) # CMake package file for find_package(pyAMReX) in depending projects -#install(EXPORT pyAMReXTargets -# FILE pyAMReXTargets.cmake -# NAMESPACE pyAMReX:: -# DESTINATION ${pyAMReX_INSTALL_CMAKEDIR} -#) -#install( -# FILES -# ${pyAMReX_BINARY_DIR}/pyAMReXConfig.cmake -# ${pyAMReX_BINARY_DIR}/pyAMReXConfigVersion.cmake -# DESTINATION ${pyAMReX_INSTALL_CMAKEDIR} -#) +install(EXPORT pyAMReXTargets + FILE pyAMReXTargets.cmake + NAMESPACE pyAMReX:: + DESTINATION ${pyAMReX_INSTALL_CMAKEDIR} +) +install( + FILES + ${pyAMReX_BINARY_DIR}/pyAMReXConfig.cmake + ${pyAMReX_BINARY_DIR}/pyAMReXConfigVersion.cmake + DESTINATION ${pyAMReX_INSTALL_CMAKEDIR} +) # pip helpers for the amrex package ########################################### diff --git a/cmake/dependencies/AMReX.cmake b/cmake/dependencies/AMReX.cmake index 033ce898..3164a655 100644 --- a/cmake/dependencies/AMReX.cmake +++ b/cmake/dependencies/AMReX.cmake @@ -85,7 +85,7 @@ option(pyAMReX_amrex_internal "Download & build AMReX" ON) set(pyAMReX_amrex_repo "https://github.com/AMReX-Codes/amrex.git" CACHE STRING "Repository URI to pull and build AMReX from if(pyAMReX_amrex_internal)") -set(pyAMReX_amrex_branch "23.10" +set(pyAMReX_amrex_branch "da79aff8053058371a78d4bf85488384242368ee" CACHE STRING "Repository branch for pyAMReX_amrex_repo if(pyAMReX_amrex_internal)") diff --git a/pyAMReXConfig.cmake.in b/pyAMReXConfig.cmake.in new file mode 100644 index 00000000..f929ff1c --- /dev/null +++ b/pyAMReXConfig.cmake.in @@ -0,0 +1,40 @@ +@PACKAGE_INIT@ + +# only add PUBLIC dependencies as well +# https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#creating-a-package-configuration-file +include(CMakeFindDependencyMacro) + +# Search in _ROOT: +# https://cmake.org/cmake/help/v3.12/policy/CMP0074.html +if(POLICY CMP0074) + cmake_policy(SET CMP0074 NEW) +endif() + +# General options +set(pyAMReX_SPACEDIM @AMReX_SPACEDIM@) +set(_search_amrex_dim) +foreach(D IN LISTS AMReX_SPACEDIM) + set(pyAMReX_${D}D_FOUND ON) + set(_search_amrex_dim ${_search_amrex_dim} "${D}D") +endforeach() + +find_dependency(AMReX COMPONENTS ${_search_amrex_dim}) + +set(pyAMReX_MPI @AMReX_MPI@) +set(pyAMReX_OMP @AMReX_OMP@) +set(pyAMReX_CUDA @AMReX_CUDA@) +set(pyAMReX_SYCL @AMReX_SYCL@) +set(pyAMReX_HIP @AMReX_HIP@) +set(pyAMReX_GPU_BACKEND @AMReX_GPU_BACKEND@) + +# define central pyAMReX::pyAMReX_${D}d targets +include("${CMAKE_CURRENT_LIST_DIR}/pyAMReXTargets.cmake") + +# check if components are fulfilled and set pyAMReX__FOUND vars +foreach(comp ${pyAMReX_FIND_COMPONENTS}) + if(NOT pyAMReX_${comp}_FOUND) + if(pyAMReX_FIND_REQUIRED_${comp}) + set(pyAMReX_FOUND FALSE) + endif() + endif() +endforeach()