Skip to content

Commit

Permalink
Merge branch 'update/cmake' into 'develop'
Browse files Browse the repository at this point in the history
Update/cmake

See merge request njoy/NDItk!1
  • Loading branch information
whaeck committed Oct 9, 2024
2 parents 62c0d5a + 8b749ff commit 16f4c85
Show file tree
Hide file tree
Showing 6 changed files with 152 additions and 137 deletions.
170 changes: 108 additions & 62 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Preamble
########################################################################

cmake_minimum_required( VERSION 3.14 )
cmake_minimum_required( VERSION 3.27 )

set( subproject OFF )
if( DEFINED PROJECT_NAME )
Expand Down Expand Up @@ -30,54 +30,44 @@ 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
########################################################################

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
########################################################################

string( CONCAT prefix
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 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
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

target_include_directories( NDItk INTERFACE ${prefix} )

target_link_libraries( NDItk
INTERFACE
njoy::tools
Expand All @@ -87,59 +77,115 @@ 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 )
endif()

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()
35 changes: 35 additions & 0 deletions cmake/dependencies.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
cmake_minimum_required( VERSION 3.27 )
include( FetchContent )

FetchContent_Declare( tools
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(
tools
)
32 changes: 0 additions & 32 deletions cmake/develop_dependencies.cmake

This file was deleted.

7 changes: 7 additions & 0 deletions cmake/nditk-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
include(CMakeFindDependencyMacro)

if (NOT TARGET njoy::tools)
find_dependency(tools)
endif()

include("${CMAKE_CURRENT_LIST_DIR}/NDItk-targets.cmake")
42 changes: 0 additions & 42 deletions cmake/release_dependencies.cmake

This file was deleted.

3 changes: 2 additions & 1 deletion cmake/unit_testing.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
# Setup
#######################################################################

message( STATUS "Adding NDItk unit testing" )
enable_testing()

FetchContent_MakeAvailable( Catch2 )
Expand All @@ -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 )
Expand Down

0 comments on commit 16f4c85

Please sign in to comment.