From c2d601a4cd26deac1e389d64915dc44f1af86f1c Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 8 Oct 2024 14:12:39 -0600 Subject: [PATCH 1/3] Update cmake phase1 (ENDFtk level) --- CMakeLists.txt | 150 ++++++++++++++++++++++--------- cmake/nditk-config.cmake.in | 7 ++ cmake/release_dependencies.cmake | 54 +++++------ cmake/unit_testing.cmake | 3 +- 4 files changed, 139 insertions(+), 75 deletions(-) create mode 100644 cmake/nditk-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d2e83f..e998dfe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Preamble ######################################################################## -cmake_minimum_required( VERSION 3.14 ) +cmake_minimum_required( VERSION 3.27 ) set( subproject OFF ) if( DEFINED PROJECT_NAME ) @@ -30,15 +30,19 @@ cmake_dependent_option( "Build the NDItk unit tests and integrate with ctest" ON "BUILD_TESTING AND NOT ${subproject}" OFF ) + cmake_dependent_option( NDItk.python "Build NDItk python bindings" ON - "NOT ${subproject} OR DEFINED requires.NDItk.python " OFF + "NOT ${subproject} OR DEFINED require.NDItk.python " OFF ) + if ( NDItk.python ) set( require.tools.python CACHE BOOL ON ) endif() +option( NDItk.installation "Install NDItk" ON ) + ######################################################################## # Dependencies ######################################################################## @@ -66,18 +70,20 @@ endif() # Project targets ######################################################################## +string( CONCAT prefix + "$" + "$" +) + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # NDItk : library # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - add_library( NDItk INTERFACE ) add_library( njoy::NDItk ALIAS NDItk ) -target_compile_features( NDItk INTERFACE cxx_std_17 ) -target_include_directories( NDItk - INTERFACE - $ - $ -) + +target_include_directories( NDItk INTERFACE ${prefix} ) + target_link_libraries( NDItk INTERFACE njoy::tools @@ -87,50 +93,58 @@ target_link_libraries( NDItk # NDItk : python bindings # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -if( NDItk.python ) +if (NDItk.python AND NOT TARGET njoy::tools.python) + message(WARNING "njoy::tools was not built with python enabled. Disabling build of NDItk's python API.") + set(NDItk.python OFF) +endif() - FetchContent_MakeAvailable( pybind11 ) +if( NDItk.python ) pybind11_add_module( NDItk.python - python/src/NDItk.python.cpp - python/src/MultigroupTable.python.cpp - python/src/depletion.python.cpp - python/src/depletion/ReactionMultiplicityType.python.cpp - python/src/depletion/Multiplicities.python.cpp - python/src/depletion/ReactionMultiplicities.python.cpp - python/src/multigroup.python.cpp - python/src/multigroup/FissionType.python.cpp - python/src/multigroup/Metadata.python.cpp - python/src/multigroup/CrossSection.python.cpp - python/src/multigroup/FluxWeights.python.cpp - python/src/multigroup/EnergyGroupStructure.python.cpp - python/src/multigroup/ReactionCrossSections.python.cpp - python/src/multigroup/TotalCrossSection.python.cpp - python/src/multigroup/AverageFissionEnergyRelease.python.cpp - python/src/multigroup/FissionNeutronMultiplicity.python.cpp - python/src/multigroup/FissionNeutronProduction.python.cpp - python/src/multigroup/FissionNeutronSpectrumVector.python.cpp - python/src/multigroup/FissionNeutronSpectrumMatrix.python.cpp - python/src/multigroup/Velocities.python.cpp - python/src/multigroup/HeatingNumbers.python.cpp - python/src/multigroup/Kerma.python.cpp - python/src/multigroup/OutgoingParticleTypes.python.cpp - python/src/multigroup/OutgoingParticleTransportData.python.cpp - python/src/multigroup/LegendreMoment.python.cpp - python/src/multigroup/ScatteringMatrix.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/NDItk.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/MultigroupTable.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/depletion.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/depletion/ReactionMultiplicityType.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/depletion/Multiplicities.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/depletion/ReactionMultiplicities.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/FissionType.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/Metadata.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/CrossSection.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/FluxWeights.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/EnergyGroupStructure.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/ReactionCrossSections.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/TotalCrossSection.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/AverageFissionEnergyRelease.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/FissionNeutronMultiplicity.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/FissionNeutronProduction.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/FissionNeutronSpectrumVector.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/FissionNeutronSpectrumMatrix.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/Velocities.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/HeatingNumbers.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/Kerma.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/OutgoingParticleTypes.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/OutgoingParticleTransportData.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/LegendreMoment.python.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/python/src/multigroup/ScatteringMatrix.python.cpp ) - target_link_libraries( NDItk.python PRIVATE NDItk ) + target_link_libraries( NDItk.python PRIVATE njoy::NDItk ) + add_dependencies( NDItk.python njoy::tools.python ) target_include_directories( NDItk.python PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/python/src ) - target_compile_options( NDItk.python PRIVATE "-fvisibility=hidden" ) + target_compile_options( NDItk.python PRIVATE -fvisibility=hidden ) set_target_properties( NDItk.python PROPERTIES OUTPUT_NAME NDItk ) set_target_properties( NDItk.python PROPERTIES COMPILE_DEFINITIONS "PYBIND11" ) set_target_properties( NDItk.python PROPERTIES POSITION_INDEPENDENT_CODE ON ) message( STATUS "Building NDItk's python API" ) - list( APPEND NDItk_PYTHONPATH ${CMAKE_CURRENT_BINARY_DIR} ) - list( APPEND tools_PYTHONPATH ${CMAKE_CURRENT_BINARY_DIR}/_deps/tools-build ) + set( NDItk_PYTHONPATH "${CMAKE_CURRENT_BINARY_DIR}" ) + # Append potential installation and build paths for tools python module + set( tools_PYTHONPATH "${CMAKE_CURRENT_BINARY_DIR}/_deps/tools-build" ) + if (tools_DIR) + set( tools_PYTHONPATH "${tools_PYTHONPATH}:${tools_DIR}/../../../lib64" ) + endif() if( NDItk.tests ) include( cmake/unit_testing_python.cmake ) @@ -138,8 +152,56 @@ if( NDItk.python ) endif() -if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) - if( NDItk.tests ) - include( cmake/unit_testing.cmake ) - endif() +if( ${NDItk.tests} ) + include( cmake/unit_testing.cmake ) +endif() + +####################################################################### +# Installation +####################################################################### + +if(NDItk.installation) + include(CMakePackageConfigHelpers) + + install(TARGETS NDItk EXPORT NDItk-targets + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ) + + install(EXPORT NDItk-targets + FILE "NDItk-targets.cmake" + NAMESPACE njoy:: + DESTINATION share/cmake/NDItk + ) + + install(DIRECTORY src/ + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING PATTERN "*.hpp" + PATTERN "*test*" EXCLUDE + ) + + string(TOLOWER NDItk lowercasePackageName) + + write_basic_package_version_file("${lowercasePackageName}-config-version.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion) + + configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${lowercasePackageName}-config.cmake.in + ${PROJECT_BINARY_DIR}/${lowercasePackageName}-config.cmake + INSTALL_DESTINATION share/cmake/NDItk + ) + + install(FILES + "${PROJECT_BINARY_DIR}/${lowercasePackageName}-config.cmake" + "${PROJECT_BINARY_DIR}/${lowercasePackageName}-config-version.cmake" + DESTINATION share/cmake/NDItk + ) + + if(NOT subproject) + set(CPACK_PACKAGE_VENDOR "Los Alamos National Laboratory") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") + include(CPack) + endif() endif() diff --git a/cmake/nditk-config.cmake.in b/cmake/nditk-config.cmake.in new file mode 100644 index 0000000..db2466f --- /dev/null +++ b/cmake/nditk-config.cmake.in @@ -0,0 +1,7 @@ +include(CMakeFindDependencyMacro) + +if (NOT TARGET njoy::tools) + find_dependency(tools) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/NDItk-targets.cmake") diff --git a/cmake/release_dependencies.cmake b/cmake/release_dependencies.cmake index ba6d77d..301dfa3 100644 --- a/cmake/release_dependencies.cmake +++ b/cmake/release_dependencies.cmake @@ -1,42 +1,36 @@ -cmake_minimum_required( VERSION 3.14 ) +cmake_minimum_required( VERSION 3.27 ) +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/.cmake) include( FetchContent ) -####################################################################### -# Declare project dependencies -####################################################################### - -FetchContent_Declare( Catch2 - GIT_REPOSITORY https://github.com/catchorg/Catch2 - GIT_TAG 3f0283de7a9c43200033da996ff9093be3ac84dc # tag: v3.3.2 - ) - -FetchContent_Declare( fast_float - GIT_REPOSITORY https://github.com/fastfloat/fast_float - GIT_TAG f476bc713fda06fbd34dc621b466745a574b3d4c # tag: v6.1.1 - ) - -FetchContent_Declare( pybind11 - GIT_REPOSITORY https://github.com/pybind/pybind11 - GIT_TAG 5b0a6fc2017fcc176545afe3e09c9f9885283242 # tag: v2.10.4 - ) - -FetchContent_Declare( spdlog - GIT_REPOSITORY https://github.com/gabime/spdlog - GIT_TAG ad0e89cbfb4d0c1ce4d097e134eb7be67baebb36 # tag: v1.11.0 - ) - set( SPDLOG_BUILD_PIC CACHE INTERNAL BOOL ON ) - FetchContent_Declare( tools - GIT_REPOSITORY https://github.com/njoy/tools - GIT_TAG 99cc26d49e386a23d817d9f4f4989999d3e58f55 + GIT_REPOSITORY ../../njoy/tools + GIT_TAG e0eb6b4f3e6d7afce7c2c521e68b4f223c50fe2d # tag: v0.4.0 ) ####################################################################### # Load dependencies ####################################################################### +if(NDItk.python) + FetchContent_Declare( pybind11 + GIT_REPOSITORY ../../pybind/pybind11 + GIT_TAG 5b0a6fc2017fcc176545afe3e09c9f9885283242 # tag: v2.10.4 + ) + FetchContent_MakeAvailable( + pybind11 + ) +endif() + +if(NDItk.tests) + FetchContent_Declare( Catch2 + GIT_REPOSITORY ../../catchorg/Catch2 + GIT_TAG 3f0283de7a9c43200033da996ff9093be3ac84dc # tag: v3.3.2 + ) + FetchContent_MakeAvailable( + Catch2 + ) +endif() + FetchContent_MakeAvailable( - fast_float - spdlog tools ) diff --git a/cmake/unit_testing.cmake b/cmake/unit_testing.cmake index 16c15ba..d253b0d 100644 --- a/cmake/unit_testing.cmake +++ b/cmake/unit_testing.cmake @@ -2,7 +2,6 @@ # Setup ####################################################################### -message( STATUS "Adding NDItk unit testing" ) enable_testing() FetchContent_MakeAvailable( Catch2 ) @@ -26,6 +25,8 @@ endfunction() # Unit testing directories ####################################################################### +message( STATUS "Adding NDItk C++ unit testing" ) + add_subdirectory( src/NDItk/base/Keyword/test ) add_subdirectory( src/NDItk/base/SingleIntegerRecord/test ) add_subdirectory( src/NDItk/base/SingleRealRecord/test ) From f45aea3ba6b9e23f84db86d928108ac28f7ea0d6 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 8 Oct 2024 14:17:22 -0600 Subject: [PATCH 2/3] Renaming release deps file --- cmake/{release_dependencies.cmake => dependencies.cmake} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cmake/{release_dependencies.cmake => dependencies.cmake} (100%) diff --git a/cmake/release_dependencies.cmake b/cmake/dependencies.cmake similarity index 100% rename from cmake/release_dependencies.cmake rename to cmake/dependencies.cmake From 8b749ff086ec27fe1ff1470d7633f2615387cb75 Mon Sep 17 00:00:00 2001 From: Wim Haeck Date: Tue, 8 Oct 2024 14:17:41 -0600 Subject: [PATCH 3/3] removing the develop dependency file --- CMakeLists.txt | 20 ++------------------ cmake/dependencies.cmake | 1 - cmake/develop_dependencies.cmake | 32 -------------------------------- 3 files changed, 2 insertions(+), 51 deletions(-) delete mode 100644 cmake/develop_dependencies.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index e998dfe..37f4485 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,24 +47,8 @@ option( NDItk.installation "Install NDItk" ON ) # Dependencies ######################################################################## -set( REPOSITORIES "release" - CACHE STRING - "Options for where to fetch repositories: develop, release, local" - ) - -message( STATUS "Using ${REPOSITORIES} repositories" ) - -if( REPOSITORIES STREQUAL "develop" ) - include( cmake/develop_dependencies.cmake ) - -elseif( REPOSITORIES STREQUAL "release" ) - include( cmake/release_dependencies.cmake ) - -elseif( REPOSITORIES STREQUAL "local" ) - include( cmake/local_dependencies.cmake ) - -endif() - +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/.cmake) +include( cmake/dependencies.cmake ) ######################################################################## # Project targets diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 301dfa3..27e846c 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -1,5 +1,4 @@ cmake_minimum_required( VERSION 3.27 ) -list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/.cmake) include( FetchContent ) FetchContent_Declare( tools diff --git a/cmake/develop_dependencies.cmake b/cmake/develop_dependencies.cmake deleted file mode 100644 index b88a474..0000000 --- a/cmake/develop_dependencies.cmake +++ /dev/null @@ -1,32 +0,0 @@ -cmake_minimum_required( VERSION 3.14 ) -include( FetchContent ) - -####################################################################### -# Declare project dependencies -####################################################################### - -FetchContent_Declare( tools - GIT_REPOSITORY https://github.com/njoy/tools - GIT_TAG feature/use-case - GIT_SHALLOW TRUE - ) - -FetchContent_Declare( Catch2 - GIT_REPOSITORY https://github.com/catchorg/Catch2 - GIT_TAG v3.3.2 - GIT_SHALLOW TRUE - ) - -FetchContent_Declare( pybind11 - GIT_REPOSITORY https://github.com/pybind/pybind11 - GIT_TAG v2.10.4 - GIT_SHALLOW TRUE - ) - -####################################################################### -# Load dependencies -####################################################################### - -FetchContent_MakeAvailable( - tools - )