From d5a94dbaf9b4898a14fc8510368094a26ac11640 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Tue, 16 Dec 2025 16:10:44 +0100 Subject: [PATCH 01/32] Fix CMake export and include interfaces --- cpp/CMakeLists.txt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index d58ffcc..a9e945e 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -23,6 +23,19 @@ add_subdirectory(generated/petsird) # Currently it is just empty, but allows creating target properties which are transitive add_library(petsird) target_link_libraries(petsird PUBLIC petsird_generated) -target_include_directories(petsird PUBLIC "${PROJECT_SOURCE_DIR}/generated") +target_include_directories(petsird + PUBLIC + $ + $ +) add_subdirectory(helpers) + +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/ + DESTINATION include) + +install(TARGETS petsird petsird_generated + EXPORT STIRTargets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) From 74fecb701a12c6f05371c7b1ee6c52255da9eac3 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Tue, 16 Dec 2025 18:01:29 +0100 Subject: [PATCH 02/32] Adjust CMake to support embedding in parent project --- cpp/CMakeLists.txt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index a9e945e..aeb69a0 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -19,6 +19,7 @@ endif() # sourcesOutputDir: ../cpp/generated/petsird add_subdirectory(generated/petsird) +add_subdirectory(helpers) # create a petsird library target # Currently it is just empty, but allows creating target properties which are transitive add_library(petsird) @@ -26,16 +27,16 @@ target_link_libraries(petsird PUBLIC petsird_generated) target_include_directories(petsird PUBLIC $ + $ $ ) -add_subdirectory(helpers) - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/ - DESTINATION include) - install(TARGETS petsird petsird_generated - EXPORT STIRTargets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) + +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/ + DESTINATION include) + + From 640644a687924147c798792984af727bcb97d2f1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 16 Dec 2025 17:02:10 +0000 Subject: [PATCH 03/32] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- cpp/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index aeb69a0..52b5aef 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -38,5 +38,3 @@ install(TARGETS petsird petsird_generated install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/ DESTINATION include) - - From 62455c3f51535288b91f428170729fb4f58cf8e0 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 18 Dec 2025 08:39:10 +0100 Subject: [PATCH 04/32] Install in the correct location when build with STIR --- cpp/CMakeLists.txt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 52b5aef..dd3df90 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 3.12.0) # older would work, but could give warnings on policy CMP0074 project(petsird VERSION 0.7.2) +include(GNUInstallDirs) set(CMAKE_CXX_STANDARD 17) @@ -32,9 +33,12 @@ target_include_directories(petsird ) install(TARGETS petsird petsird_generated - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin) + EXPORT petsirdTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/ - DESTINATION include) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) From 7a68f0ec8bc1c5560d7220f436fd4a5bc57d85ce Mon Sep 17 00:00:00 2001 From: NikEfth Date: Wed, 24 Dec 2025 09:51:58 +0100 Subject: [PATCH 05/32] CMake: export PETSIRD as a proper installable package - Add install/export rules for PETSIRD targets - Provide PETSIRDConfig.cmake and version file - Fix include directories using BUILD/INSTALL interfaces - Export PETSIRD::petsird target for find_package() - Prepare PETSIRD for external consumers (STIR -- this has been going on for a while ) --- cpp/CMakeLists.txt | 53 ++++++++++++++++++++++++++++---- cpp/cmake/PETSIRDConfig.cmake.in | 3 ++ cpp/helpers/CMakeLists.txt | 6 +++- 3 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 cpp/cmake/PETSIRDConfig.cmake.in diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index dd3df90..6a9051f 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 3.12.0) # older would work, but could give warnings on policy CMP0074 -project(petsird VERSION 0.7.2) +project(petsird VERSION 0.7.2 LANGUAGES CXX) include(GNUInstallDirs) +include(CMakePackageConfigHelpers) set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) if(WIN32) add_compile_options(/W3 /WX) @@ -24,21 +26,60 @@ add_subdirectory(helpers) # create a petsird library target # Currently it is just empty, but allows creating target properties which are transitive add_library(petsird) -target_link_libraries(petsird PUBLIC petsird_generated) +add_library(PETSIRD::petsird ALIAS petsird) + +target_link_libraries(petsird + PUBLIC + petsird_generated + petsird_helpers +) + +target_compile_features(petsird PUBLIC cxx_std_17) + target_include_directories(petsird PUBLIC $ $ - $ + $ ) -install(TARGETS petsird petsird_generated +install(TARGETS petsird petsird_generated petsird_helpers EXPORT petsirdTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/petsird/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/petsird +) + +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/helpers/include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/petsird ) + +install(EXPORT petsirdTargets + NAMESPACE PETSIRD:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD +) + + +configure_package_config_file( + cmake/PETSIRDConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfig.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD +) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD +) \ No newline at end of file diff --git a/cpp/cmake/PETSIRDConfig.cmake.in b/cpp/cmake/PETSIRDConfig.cmake.in new file mode 100644 index 0000000..c574943 --- /dev/null +++ b/cpp/cmake/PETSIRDConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/petsirdTargets.cmake") \ No newline at end of file diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 127bcc0..12641d0 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -4,7 +4,11 @@ find_package(xtensor-blas REQUIRED) # Currently it is just empty, but allows creating target properties which are transitive add_library(petsird_helpers INTERFACE) target_link_libraries(petsird_helpers INTERFACE petsird xtensor-blas) -target_include_directories(petsird_helpers INTERFACE "${PROJECT_SOURCE_DIR}/helpers/include") +target_include_directories(petsird_helpers + INTERFACE + $ + $ +) add_executable(petsird_generator petsird_generator.cpp) target_link_libraries(petsird_generator petsird_helpers) From f1e880a5fb401b44a5d4975a872f63c6f92454b1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 08:56:06 +0000 Subject: [PATCH 06/32] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- cpp/CMakeLists.txt | 2 +- cpp/cmake/PETSIRDConfig.cmake.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 6a9051f..b3f31b1 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -82,4 +82,4 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD -) \ No newline at end of file +) diff --git a/cpp/cmake/PETSIRDConfig.cmake.in b/cpp/cmake/PETSIRDConfig.cmake.in index c574943..2f0d82f 100644 --- a/cpp/cmake/PETSIRDConfig.cmake.in +++ b/cpp/cmake/PETSIRDConfig.cmake.in @@ -1,3 +1,3 @@ @PACKAGE_INIT@ -include("${CMAKE_CURRENT_LIST_DIR}/petsirdTargets.cmake") \ No newline at end of file +include("${CMAKE_CURRENT_LIST_DIR}/petsirdTargets.cmake") From e5db953d46e1bc7ce929b1f6e5f5d03be55ce36d Mon Sep 17 00:00:00 2001 From: NikEfth Date: Wed, 24 Dec 2025 11:00:35 +0100 Subject: [PATCH 07/32] More changes for CMake export path fix --- cpp/CMakeLists.txt | 13 +++++++++---- cpp/cmake/PETSIRDConfig.cmake.in | 4 +++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index b3f31b1..4e3c822 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.12.0) # older would work, but could give warnings on policy CMP0074 project(petsird VERSION 0.7.2 LANGUAGES CXX) include(GNUInstallDirs) +set(PETSIRD_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD") + include(CMakePackageConfigHelpers) set(CMAKE_CXX_STANDARD 17) @@ -18,6 +20,8 @@ if(CCACHE_PROGRAM) message(STATUS "ccache found, so we will use it.") endif() +find_package(date REQUIRED) + # assume that yardl was run with the following in the _package.yml # sourcesOutputDir: ../cpp/generated/petsird @@ -32,6 +36,7 @@ target_link_libraries(petsird PUBLIC petsird_generated petsird_helpers + date::date ) target_compile_features(petsird PUBLIC cxx_std_17) @@ -57,19 +62,19 @@ install( install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/helpers/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/petsird + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install(EXPORT petsirdTargets NAMESPACE PETSIRD:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD + DESTINATION ${PETSIRD_CMAKE_DIR} ) configure_package_config_file( cmake/PETSIRDConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfig.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD + INSTALL_DESTINATION ${PETSIRD_CMAKE_DIR} ) write_basic_package_version_file( @@ -81,5 +86,5 @@ write_basic_package_version_file( install(FILES ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/PETSIRDConfigVersion.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD + DESTINATION ${PETSIRD_CMAKE_DIR} ) diff --git a/cpp/cmake/PETSIRDConfig.cmake.in b/cpp/cmake/PETSIRDConfig.cmake.in index 2f0d82f..c2b92c2 100644 --- a/cpp/cmake/PETSIRDConfig.cmake.in +++ b/cpp/cmake/PETSIRDConfig.cmake.in @@ -1,3 +1,5 @@ @PACKAGE_INIT@ - +include(CMakeFindDependencyMacro) +find_dependency(date) include("${CMAKE_CURRENT_LIST_DIR}/petsirdTargets.cmake") +check_required_components(PETSIRD) From 9cffc2b7385ff242c6da4bb3faa7a07fcf2b6fa2 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Wed, 24 Dec 2025 12:11:36 +0100 Subject: [PATCH 08/32] This should be the last commit. STIR links successfully now. --- cpp/cmake/PETSIRDConfig.cmake.in | 1 + cpp/helpers/CMakeLists.txt | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cpp/cmake/PETSIRDConfig.cmake.in b/cpp/cmake/PETSIRDConfig.cmake.in index c2b92c2..1e8df22 100644 --- a/cpp/cmake/PETSIRDConfig.cmake.in +++ b/cpp/cmake/PETSIRDConfig.cmake.in @@ -1,5 +1,6 @@ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) find_dependency(date) +find_dependency(BLAS) include("${CMAKE_CURRENT_LIST_DIR}/petsirdTargets.cmake") check_required_components(PETSIRD) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 12641d0..84db3a1 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -1,17 +1,23 @@ +find_package(xtensor REQUIRED) find_package(xtensor-blas REQUIRED) +find_package(BLAS REQUIRED) # create a petsird_helpers library target # Currently it is just empty, but allows creating target properties which are transitive add_library(petsird_helpers INTERFACE) -target_link_libraries(petsird_helpers INTERFACE petsird xtensor-blas) + target_include_directories(petsird_helpers INTERFACE + ${xtensor_INCLUDE_DIRS} + ${xtensor-blas_INCLUDE_DIRS} $ $ ) +target_link_libraries(petsird_helpers INTERFACE petsird BLAS::BLAS) + add_executable(petsird_generator petsird_generator.cpp) -target_link_libraries(petsird_generator petsird_helpers) +target_link_libraries(petsird_generator PRIVATE petsird_helpers) add_executable(petsird_analysis petsird_analysis.cpp) -target_link_libraries(petsird_analysis petsird_helpers) +target_link_libraries(petsird_analysis PRIVATE petsird_helpers) From 8751dae8db1aba15226578607311ec48dbc1b5cf Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 25 Dec 2025 11:47:17 +0100 Subject: [PATCH 09/32] This seems to necessary for CI. --- cpp/helpers/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 84db3a1..060d36a 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -1,5 +1,5 @@ -find_package(xtensor REQUIRED) -find_package(xtensor-blas REQUIRED) +# find_package(xtensor REQUIRED) +# find_package(xtensor-blas REQUIRED) find_package(BLAS REQUIRED) # create a petsird_helpers library target From 2d6daa15f115111aba3f27976a598399d355b6c1 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 25 Dec 2025 13:54:42 +0100 Subject: [PATCH 10/32] Restore previous commit. --- cpp/helpers/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 060d36a..84db3a1 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -1,5 +1,5 @@ -# find_package(xtensor REQUIRED) -# find_package(xtensor-blas REQUIRED) +find_package(xtensor REQUIRED) +find_package(xtensor-blas REQUIRED) find_package(BLAS REQUIRED) # create a petsird_helpers library target From f898abd0982bf60d8a34ba8fe9c78c3e7bfafca0 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 25 Dec 2025 14:21:22 +0100 Subject: [PATCH 11/32] Still something asks for lxtensor. --- cpp/helpers/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 84db3a1..2c4cdd4 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -1,4 +1,4 @@ -find_package(xtensor REQUIRED) +# find_package(xtensor REQUIRED) find_package(xtensor-blas REQUIRED) find_package(BLAS REQUIRED) From 66a54c1aaef1fb5ae1634e67aabf96324e129814 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 25 Dec 2025 14:37:52 +0100 Subject: [PATCH 12/32] Some conda package is broke and linlks to lxtensor. --- cpp/helpers/CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 2c4cdd4..df5df4c 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -1,5 +1,5 @@ -# find_package(xtensor REQUIRED) -find_package(xtensor-blas REQUIRED) +find_package(xtensor REQUIRED) +# find_package(xtensor-blas REQUIRED) find_package(BLAS REQUIRED) # create a petsird_helpers library target @@ -9,7 +9,6 @@ add_library(petsird_helpers INTERFACE) target_include_directories(petsird_helpers INTERFACE ${xtensor_INCLUDE_DIRS} - ${xtensor-blas_INCLUDE_DIRS} $ $ ) From 9d8ef4dbb677eb1bcf8ccf31c0e1d23d66e593b6 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 25 Dec 2025 14:57:07 +0100 Subject: [PATCH 13/32] lxtensor still leaks. --- cpp/helpers/CMakeLists.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index df5df4c..4ae6d55 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -20,3 +20,14 @@ target_link_libraries(petsird_generator PRIVATE petsird_helpers) add_executable(petsird_analysis petsird_analysis.cpp) target_link_libraries(petsird_analysis PRIVATE petsird_helpers) + +foreach(t petsird petsird_generated petsird_helpers) + if(TARGET ${t}) + get_target_property(_libs ${t} INTERFACE_LINK_LIBRARIES) + if(_libs) + list(FILTER _libs EXCLUDE REGEX "xtensor") + set_target_properties(${t} + PROPERTIES INTERFACE_LINK_LIBRARIES "${_libs}") + endif() + endif() +endforeach() From b813de2d54f05bc0031531473814f673c3d6ce01 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 25 Dec 2025 17:04:31 +0100 Subject: [PATCH 14/32] Find dependencies (even if optional) --- cpp/cmake/PETSIRDConfig.cmake.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/cmake/PETSIRDConfig.cmake.in b/cpp/cmake/PETSIRDConfig.cmake.in index 1e8df22..b168acc 100644 --- a/cpp/cmake/PETSIRDConfig.cmake.in +++ b/cpp/cmake/PETSIRDConfig.cmake.in @@ -2,5 +2,11 @@ include(CMakeFindDependencyMacro) find_dependency(date) find_dependency(BLAS) +if(@PETSIRD_GENERATED_USE_NDJSON@) + find_dependency(nlohmann_json) +endif() +if(@PETSIRD_GENERATED_USE_HDF5@) + find_dependency(HDF5 COMPONENTS CXX) +endif() include("${CMAKE_CURRENT_LIST_DIR}/petsirdTargets.cmake") check_required_components(PETSIRD) From 0c8fb7194e07dd07dffa230a236c4e4c23dc16d5 Mon Sep 17 00:00:00 2001 From: Nikos Efthimiou Date: Sun, 28 Dec 2025 17:49:10 +0100 Subject: [PATCH 15/32] Update cpp/CMakeLists.txt Co-authored-by: Kris Thielemans --- cpp/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 4e3c822..fff799b 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -20,8 +20,6 @@ if(CCACHE_PROGRAM) message(STATUS "ccache found, so we will use it.") endif() -find_package(date REQUIRED) - # assume that yardl was run with the following in the _package.yml # sourcesOutputDir: ../cpp/generated/petsird From e0d9ca0cb7b2a0eabb926c6681bbdc47f9374610 Mon Sep 17 00:00:00 2001 From: Nikos Efthimiou Date: Sun, 28 Dec 2025 17:49:24 +0100 Subject: [PATCH 16/32] Update cpp/CMakeLists.txt Co-authored-by: Kris Thielemans --- cpp/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index fff799b..f63cc69 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -42,7 +42,6 @@ target_compile_features(petsird PUBLIC cxx_std_17) target_include_directories(petsird PUBLIC $ - $ $ ) From e028d87c40cf214d2f1ff2ecbe569b9b81771ccf Mon Sep 17 00:00:00 2001 From: Nikos Efthimiou Date: Sun, 28 Dec 2025 17:49:37 +0100 Subject: [PATCH 17/32] Update cpp/CMakeLists.txt Co-authored-by: Kris Thielemans --- cpp/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index f63cc69..60c7020 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -34,7 +34,6 @@ target_link_libraries(petsird PUBLIC petsird_generated petsird_helpers - date::date ) target_compile_features(petsird PUBLIC cxx_std_17) From 94e39b0153101811a494d6874134c480a05e551c Mon Sep 17 00:00:00 2001 From: NikEfth Date: Sun, 28 Dec 2025 18:26:31 +0100 Subject: [PATCH 18/32] New CI workflow that builds and deploys PyPI package Export 2 targets: PETSIRD::generated and PETSIRD::helpers and PETSIRD as interface target. Reverted Xtesnor dependency --- .github/workflows/ci.yml | 213 ++++++++++++++++++++----------- cpp/CMakeLists.txt | 45 ++++--- cpp/cmake/PETSIRDConfig.cmake.in | 2 +- cpp/helpers/CMakeLists.txt | 19 +-- 4 files changed, 173 insertions(+), 106 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b26e50..779f4b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,79 +1,142 @@ name: CI + on: - push: - branches: [main] - tags: ['**'] - paths-ignore: - - '**/*.md' - pull_request: {branches: [main]} - workflow_dispatch: - inputs: - debug_enabled: - description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' - required: false - default: false -defaults: {run: {shell: 'bash -el {0}'}} # https://github.com/marketplace/actions/setup-miniconda#important -env: - YARDL_VERSION: 0.6.3 + push: + paths-ignore: + - '**/*.md' + pull_request: {branches: [main]} + workflow_dispatch: + inputs: + debug_enabled: + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: 'false' + jobs: - validate: - strategy: - matrix: - cppVersion: [17] - environment: pypi - permissions: {id-token: write} - name: Validate Python and C++${{ matrix.cppVersion }} and deploy to PyPI - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: {fetch-depth: 0, submodules: recursive} - - name: strip environment.yml - run: | - cat environment.yml | grep -v "#.*\<\local\>" > temp-ci-environment.yml - - uses: conda-incubator/setup-miniconda@v3 - with: - activate-environment: yardl - environment-file: temp-ci-environment.yml - - name: Install yardl - run: | - rm temp-ci-environment.yml - gh release download -R microsoft/yardl -p '*linux_x86_64.tar.gz' v$YARDL_VERSION - mkdir yardl - tar -xzf "yardl_${YARDL_VERSION}_linux_x86_64.tar.gz" -C yardl - rm "yardl_${YARDL_VERSION}_linux_x86_64.tar.gz" - echo "$PWD/yardl" >> "$GITHUB_PATH" + validate: + strategy: + matrix: + cppVersion: [17] + runs-on: ubuntu-24.04 + name: Validate Python and C++${{ matrix.cppVersion }} and deploy to PyPI env: - GH_TOKEN: ${{ github.token }} - # Enable tmate debugging of manually-triggered workflows if the input option was provided - - name: Setup tmate session if triggered - #if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 - timeout-minutes: 30 - if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled == 'true' }} - - name: Build model - run: | - just generate - - name: Python - run: | - just run-python - - name: cpp - run: | - mkdir cpp/build - cd cpp/build - cmake -G Ninja -S .. -DHDF5_ROOT="$CONDA_PREFIX" - ninja - cd ../.. - just run-cpp - - name: Copy LICENSE for deployment - run: | - cp LICENSE.txt python/LICENSE - cp LICENSE.txt cpp/LICENSE - - uses: casperdcl/deploy-pypi@v2 - with: - build: python -o dist - upload: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }} - requirements: 'build twine packaging>=24.2' # https://github.com/pypa/twine/issues/1216 - - uses: actions/upload-artifact@v4 - with: - name: python-petsird - path: dist/** + PETSIRD_PREFIX: ${{ github.workspace }}/petsird-install + + steps: + - name: Install System Dependencies (date-tz) + run: | + sudo apt-get update + sudo apt-get install -y software-properties-common + sudo add-apt-repository -y universe + sudo apt-get update + sudo apt install -y libomp-dev libboost-dev libhdf5-serial-dev nlohmann-json3-dev + sudo apt-get install -y libdate-tz-dev || sudo apt-get install -y libhowardhinnant-date-dev + + - name: Checkout PETSIRD + uses: actions/checkout@v4 + + + - name: Checkout Yardl (main) + uses: actions/checkout@v4 + with: + repository: microsoft/yardl + ref: main + path: yardl + + - name: Setup micromamba (yardl env) + uses: mamba-org/setup-micromamba@v2 + with: + environment-file: yardl/environment.yml + activate-environment: yardl + + - name: Export CMake prefix path + run: | + echo "CMAKE_PREFIX_PATH=$CONDA_PREFIX;$CMAKE_PREFIX_PATH" >> $GITHUB_ENV + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.22' + + - name: Build and install Yardl + run: | + cd yardl/tooling/cmd/yardl + go build + mkdir -p "$HOME/.local/bin" + install -m 755 yardl $HOME/.local/bin/yardl + echo "$HOME/.local/bin" >> $GITHUB_PATH + "$HOME/.local/bin/yardl" --version + + - name: Setup tmate session if triggered + #if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 + timeout-minutes: 30 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled == 'true' }} + + - name: Install just + run: | + sudo apt-get update + sudo apt-get install -y cmake ninja-build just + + - name: Install PETSIRD Python dependencies + run: | + micromamba install -y -n yardl -f environment.yml + micromamba install -n yardl -c conda-forge xtensor xtensor-blas openblas + + - name: Generate PETSIRD sources (yardl) + run: | + micromamba run -n yardl bash -lc " + export CC=/usr/bin/gcc + export CXX=/usr/bin/g++ + + # Make conda packages visible to CMake + export CMAKE_PREFIX_PATH=\$CONDA_PREFIX:\$CMAKE_PREFIX_PATH + export CXXFLAGS=\"-I\$MAMBA_ROOT_PREFIX/envs/yardl/include \$CXXFLAGS\" + + cd model + just generate + just run-python + just run-cpp + " + + - name: Build PETSIRD C++ + run: | + micromamba run -n yardl bash -lc " + cd cpp + mkdir -p build + cd build + + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH=\"\$CONDA_PREFIX\" \ + -DCMAKE_INSTALL_PREFIX=\"${{ env.PETSIRD_PREFIX }}\" + + cmake --build . --target install -- -j$(nproc) + " + + - name: Fix yardl mistake + run: | + FILE="cpp/generated/petsird/CMakeLists.txt" + echo "🔧 Fixing yardl-generated CMakeLists.txt (removing xtensor linkage)" + sed -i.bak \ + -e '/^[[:space:]]*xtensor[[:space:]]*$/d' \ + "$FILE" + + - name: Set up Python for PyPI + uses: actions/setup-python@v5 + with: + python-version: '3.11' + - name: Copy LICENSE for deployment + run: | + cp LICENSE.txt python/LICENSE + cp LICENSE.txt cpp/LICENSSE + - uses: casperdcl/deploy-pypi@v2 + with: + build: python -o dist + upload: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }} + requirements: 'build twine packaging>=24.2' # https://github.com/pypa/twine/issues/1216 + - uses: actions/upload-artifact@v4 + with: + name: python-petsird + path: dist/** + diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 60c7020..edba60c 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -24,48 +24,51 @@ endif() # sourcesOutputDir: ../cpp/generated/petsird add_subdirectory(generated/petsird) +target_include_directories(petsird_generated + PUBLIC + $ + $ +) + add_subdirectory(helpers) -# create a petsird library target -# Currently it is just empty, but allows creating target properties which are transitive -add_library(petsird) + +add_library(PETSIRD::generated ALIAS petsird_generated) +add_library(PETSIRD::helpers ALIAS petsird_helpers) + + +add_library(petsird INTERFACE) add_library(PETSIRD::petsird ALIAS petsird) target_link_libraries(petsird - PUBLIC - petsird_generated - petsird_helpers + INTERFACE + PETSIRD::generated + PETSIRD::helpers ) -target_compile_features(petsird PUBLIC cxx_std_17) - -target_include_directories(petsird - PUBLIC - $ - $ -) +target_compile_features(petsird INTERFACE cxx_std_17) install(TARGETS petsird petsird_generated petsird_helpers EXPORT petsirdTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) +install(EXPORT petsirdTargets + NAMESPACE PETSIRD:: + DESTINATION ${PETSIRD_CMAKE_DIR} +) + install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/generated/petsird/ + DIRECTORY generated/petsird/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/petsird ) install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/helpers/include/ + DIRECTORY helpers/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) -install(EXPORT petsirdTargets - NAMESPACE PETSIRD:: - DESTINATION ${PETSIRD_CMAKE_DIR} -) - configure_package_config_file( cmake/PETSIRDConfig.cmake.in diff --git a/cpp/cmake/PETSIRDConfig.cmake.in b/cpp/cmake/PETSIRDConfig.cmake.in index b168acc..d901470 100644 --- a/cpp/cmake/PETSIRDConfig.cmake.in +++ b/cpp/cmake/PETSIRDConfig.cmake.in @@ -1,7 +1,7 @@ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) find_dependency(date) -find_dependency(BLAS) +find_dependency(xtensor-blas) if(@PETSIRD_GENERATED_USE_NDJSON@) find_dependency(nlohmann_json) endif() diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 4ae6d55..011abd7 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -1,25 +1,26 @@ -find_package(xtensor REQUIRED) -# find_package(xtensor-blas REQUIRED) -find_package(BLAS REQUIRED) +find_package(xtensor-blas REQUIRED) # create a petsird_helpers library target # Currently it is just empty, but allows creating target properties which are transitive -add_library(petsird_helpers INTERFACE) +add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) target_include_directories(petsird_helpers - INTERFACE - ${xtensor_INCLUDE_DIRS} + PUBLIC $ $ ) -target_link_libraries(petsird_helpers INTERFACE petsird BLAS::BLAS) +target_link_libraries(petsird_helpers + PUBLIC + petsird_generated + xtensor-blas +) add_executable(petsird_generator petsird_generator.cpp) -target_link_libraries(petsird_generator PRIVATE petsird_helpers) +target_link_libraries(petsird_generator PRIVATE petsird_generated petsird_helpers) add_executable(petsird_analysis petsird_analysis.cpp) -target_link_libraries(petsird_analysis PRIVATE petsird_helpers) +target_link_libraries(petsird_analysis PRIVATE petsird_generated petsird_helpers) foreach(t petsird petsird_generated petsird_helpers) if(TARGET ${t}) From 4a98590452ce2a89e31b81d31fe0702ad5eb5904 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Sun, 28 Dec 2025 18:30:48 +0100 Subject: [PATCH 19/32] pre-commit --- .github/workflows/ci.yml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 779f4b2..04eaaa4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: name: Validate Python and C++${{ matrix.cppVersion }} and deploy to PyPI env: PETSIRD_PREFIX: ${{ github.workspace }}/petsird-install - + steps: - name: Install System Dependencies (date-tz) run: | @@ -35,20 +35,20 @@ jobs: - name: Checkout PETSIRD uses: actions/checkout@v4 - + - name: Checkout Yardl (main) uses: actions/checkout@v4 with: repository: microsoft/yardl ref: main path: yardl - + - name: Setup micromamba (yardl env) uses: mamba-org/setup-micromamba@v2 with: environment-file: yardl/environment.yml activate-environment: yardl - + - name: Export CMake prefix path run: | echo "CMAKE_PREFIX_PATH=$CONDA_PREFIX;$CMAKE_PREFIX_PATH" >> $GITHUB_ENV @@ -83,12 +83,12 @@ jobs: micromamba install -y -n yardl -f environment.yml micromamba install -n yardl -c conda-forge xtensor xtensor-blas openblas - - name: Generate PETSIRD sources (yardl) + - name: Generate PETSIRD sources (yardl) run: | micromamba run -n yardl bash -lc " export CC=/usr/bin/gcc export CXX=/usr/bin/g++ - + # Make conda packages visible to CMake export CMAKE_PREFIX_PATH=\$CONDA_PREFIX:\$CMAKE_PREFIX_PATH export CXXFLAGS=\"-I\$MAMBA_ROOT_PREFIX/envs/yardl/include \$CXXFLAGS\" @@ -103,9 +103,9 @@ jobs: run: | micromamba run -n yardl bash -lc " cd cpp - mkdir -p build + mkdir -p build cd build - + cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=\"\$CONDA_PREFIX\" \ @@ -121,13 +121,13 @@ jobs: sed -i.bak \ -e '/^[[:space:]]*xtensor[[:space:]]*$/d' \ "$FILE" - + - name: Set up Python for PyPI uses: actions/setup-python@v5 with: python-version: '3.11' - name: Copy LICENSE for deployment - run: | + run: | cp LICENSE.txt python/LICENSE cp LICENSE.txt cpp/LICENSSE - uses: casperdcl/deploy-pypi@v2 @@ -139,4 +139,3 @@ jobs: with: name: python-petsird path: dist/** - From cfff721c50672937ede24d694e54399e6015a100 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Wed, 18 Mar 2026 22:37:34 +0100 Subject: [PATCH 20/32] Revert CI --- .github/workflows/ci.yml | 186 +++++++++++++-------------------------- 1 file changed, 60 insertions(+), 126 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b106819..3265d37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,4 @@ name: CI - on: push: branches: [main] @@ -17,129 +16,64 @@ defaults: {run: {shell: 'bash -el {0}'}} # https://github.com/marketplace/action env: YARDL_VERSION: 0.6.6 jobs: - validate: - strategy: - matrix: - cppVersion: [17] - runs-on: ubuntu-24.04 - name: Validate Python and C++${{ matrix.cppVersion }} and deploy to PyPI + validate: + strategy: + matrix: + cppVersion: [17] + environment: pypi + permissions: {id-token: write} + name: Validate Python and C++${{ matrix.cppVersion }} and deploy to PyPI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: {fetch-depth: 0, submodules: recursive} + - name: strip environment.yml + run: | + cat environment.yml | grep -v "#.*\<\local\>" > temp-ci-environment.yml + - uses: conda-incubator/setup-miniconda@v3 + with: + activate-environment: yardl + environment-file: temp-ci-environment.yml + - name: Install yardl + run: | + rm temp-ci-environment.yml + gh release download -R microsoft/yardl -p '*linux_x86_64.tar.gz' v$YARDL_VERSION + mkdir yardl + tar -xzf "yardl_${YARDL_VERSION}_linux_x86_64.tar.gz" -C yardl + rm "yardl_${YARDL_VERSION}_linux_x86_64.tar.gz" + echo "$PWD/yardl" >> "$GITHUB_PATH" env: - PETSIRD_PREFIX: ${{ github.workspace }}/petsird-install - - steps: - - name: Install System Dependencies (date-tz) - run: | - sudo apt-get update - sudo apt-get install -y software-properties-common - sudo add-apt-repository -y universe - sudo apt-get update - sudo apt install -y libomp-dev libboost-dev libhdf5-serial-dev nlohmann-json3-dev - sudo apt-get install -y libdate-tz-dev || sudo apt-get install -y libhowardhinnant-date-dev - - - name: Checkout PETSIRD - uses: actions/checkout@v4 - - - - name: Checkout Yardl (main) - uses: actions/checkout@v4 - with: - repository: microsoft/yardl - ref: main - path: yardl - - - name: Setup micromamba (yardl env) - uses: mamba-org/setup-micromamba@v2 - with: - environment-file: yardl/environment.yml - activate-environment: yardl - - - name: Export CMake prefix path - run: | - echo "CMAKE_PREFIX_PATH=$CONDA_PREFIX;$CMAKE_PREFIX_PATH" >> $GITHUB_ENV - - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version: '1.22' - - - name: Build and install Yardl - run: | - cd yardl/tooling/cmd/yardl - go build - mkdir -p "$HOME/.local/bin" - install -m 755 yardl $HOME/.local/bin/yardl - echo "$HOME/.local/bin" >> $GITHUB_PATH - "$HOME/.local/bin/yardl" --version - - - name: Setup tmate session if triggered - #if: ${{ failure() }} - uses: mxschmitt/action-tmate@v3 - timeout-minutes: 30 - if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled == 'true' }} - - - name: Install just - run: | - sudo apt-get update - sudo apt-get install -y cmake ninja-build just - - - name: Install PETSIRD Python dependencies - run: | - micromamba install -y -n yardl -f environment.yml - micromamba install -n yardl -c conda-forge xtensor xtensor-blas openblas - - - name: Generate PETSIRD sources (yardl) - run: | - micromamba run -n yardl bash -lc " - export CC=/usr/bin/gcc - export CXX=/usr/bin/g++ - - # Make conda packages visible to CMake - export CMAKE_PREFIX_PATH=\$CONDA_PREFIX:\$CMAKE_PREFIX_PATH - export CXXFLAGS=\"-I\$MAMBA_ROOT_PREFIX/envs/yardl/include \$CXXFLAGS\" - - cd model - just generate - just run-python - just run-cpp - " - - - name: Build PETSIRD C++ - run: | - micromamba run -n yardl bash -lc " - cd cpp - mkdir -p build - cd build - - cmake .. \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_PREFIX_PATH=\"\$CONDA_PREFIX\" \ - -DCMAKE_INSTALL_PREFIX=\"${{ env.PETSIRD_PREFIX }}\" - - cmake --build . --target install -- -j$(nproc) - " - - - name: Fix yardl mistake - run: | - FILE="cpp/generated/petsird/CMakeLists.txt" - echo "🔧 Fixing yardl-generated CMakeLists.txt (removing xtensor linkage)" - sed -i.bak \ - -e '/^[[:space:]]*xtensor[[:space:]]*$/d' \ - "$FILE" - - - name: Set up Python for PyPI - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - name: Copy LICENSE for deployment - run: | - cp LICENSE.txt python/LICENSE - cp LICENSE.txt cpp/LICENSSE - - uses: casperdcl/deploy-pypi@v2 - with: - build: python -o dist - upload: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }} - requirements: 'build twine packaging>=24.2' # https://github.com/pypa/twine/issues/1216 - - uses: actions/upload-artifact@v4 - with: - name: python-petsird - path: dist/** + GH_TOKEN: ${{ github.token }} + # Enable tmate debugging of manually-triggered workflows if the input option was provided + - name: Setup tmate session if triggered + #if: ${{ failure() }} + uses: mxschmitt/action-tmate@v3 + timeout-minutes: 30 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled == 'true' }} + - name: Build model + run: | + just generate + - name: Python + run: | + just run-python + - name: cpp + run: | + mkdir cpp/build + cd cpp/build + cmake -G Ninja -S .. -DHDF5_ROOT="$CONDA_PREFIX" + ninja + cd ../.. + just run-cpp + - name: Copy LICENSE for deployment + run: | + cp LICENSE.txt python/LICENSE + cp LICENSE.txt cpp/LICENSE + - uses: casperdcl/deploy-pypi@v2 + with: + build: python -o dist + upload: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') }} + requirements: 'build twine packaging>=24.2' # https://github.com/pypa/twine/issues/1216 + - uses: actions/upload-artifact@v4 + with: + name: python-petsird + path: dist/** From fbb48a154277c789e75f2f520ed2ce47e6d71068 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Wed, 18 Mar 2026 22:59:58 +0100 Subject: [PATCH 21/32] Address PR comments --- cpp/CMakeLists.txt | 2 +- cpp/helpers/CMakeLists.txt | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index edba60c..ff7b326 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -45,7 +45,7 @@ target_link_libraries(petsird PETSIRD::helpers ) -target_compile_features(petsird INTERFACE cxx_std_17) +# target_compile_features(petsird INTERFACE cxx_std_17) install(TARGETS petsird petsird_generated petsird_helpers EXPORT petsirdTargets diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 011abd7..d4e2ae5 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -22,13 +22,13 @@ target_link_libraries(petsird_generator PRIVATE petsird_generated petsird_helper add_executable(petsird_analysis petsird_analysis.cpp) target_link_libraries(petsird_analysis PRIVATE petsird_generated petsird_helpers) -foreach(t petsird petsird_generated petsird_helpers) - if(TARGET ${t}) - get_target_property(_libs ${t} INTERFACE_LINK_LIBRARIES) - if(_libs) - list(FILTER _libs EXCLUDE REGEX "xtensor") - set_target_properties(${t} - PROPERTIES INTERFACE_LINK_LIBRARIES "${_libs}") - endif() - endif() -endforeach() +# foreach(t petsird petsird_generated petsird_helpers) +# if(TARGET ${t}) +# get_target_property(_libs ${t} INTERFACE_LINK_LIBRARIES) +# if(_libs) +# list(FILTER _libs EXCLUDE REGEX "xtensor") +# set_target_properties(${t} +# PROPERTIES INTERFACE_LINK_LIBRARIES "${_libs}") +# endif() +# endif() +# endforeach() From 1b4e34f8e97dfb5a3944b58037b525e98db8edfd Mon Sep 17 00:00:00 2001 From: NikEfth Date: Wed, 18 Mar 2026 23:14:53 +0100 Subject: [PATCH 22/32] Revert "fix: remove xtensor from interface link libraries" --- cpp/helpers/CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index d4e2ae5..011abd7 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -22,13 +22,13 @@ target_link_libraries(petsird_generator PRIVATE petsird_generated petsird_helper add_executable(petsird_analysis petsird_analysis.cpp) target_link_libraries(petsird_analysis PRIVATE petsird_generated petsird_helpers) -# foreach(t petsird petsird_generated petsird_helpers) -# if(TARGET ${t}) -# get_target_property(_libs ${t} INTERFACE_LINK_LIBRARIES) -# if(_libs) -# list(FILTER _libs EXCLUDE REGEX "xtensor") -# set_target_properties(${t} -# PROPERTIES INTERFACE_LINK_LIBRARIES "${_libs}") -# endif() -# endif() -# endforeach() +foreach(t petsird petsird_generated petsird_helpers) + if(TARGET ${t}) + get_target_property(_libs ${t} INTERFACE_LINK_LIBRARIES) + if(_libs) + list(FILTER _libs EXCLUDE REGEX "xtensor") + set_target_properties(${t} + PROPERTIES INTERFACE_LINK_LIBRARIES "${_libs}") + endif() + endif() +endforeach() From d6c3ed1ad1280281a84a88166992311e482a3d78 Mon Sep 17 00:00:00 2001 From: Kris Thielemans Date: Thu, 19 Mar 2026 07:39:17 +0000 Subject: [PATCH 23/32] update version and revert INTERFACE library for petsird_helpers Co-authored-by: Kris Thielemans --- cpp/CMakeLists.txt | 4 ++-- cpp/helpers/CMakeLists.txt | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index ff7b326..90a5649 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12.0) # older would work, but could give warnings on policy CMP0074 -project(petsird VERSION 0.7.2 LANGUAGES CXX) +project(petsird VERSION 0.7.3 LANGUAGES CXX) include(GNUInstallDirs) -set(PETSIRD_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD") +set(PETSIRD_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD-0.7") include(CMakePackageConfigHelpers) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 011abd7..6d2e825 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -2,7 +2,9 @@ find_package(xtensor-blas REQUIRED) # create a petsird_helpers library target # Currently it is just empty, but allows creating target properties which are transitive -add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) +add_library(petsird_helpers INTERFACE) +# Future change for when we have sources: +# add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) target_include_directories(petsird_helpers PUBLIC From aba291bc7d070506700d49e8dc177499e3ddc7ba Mon Sep 17 00:00:00 2001 From: Kris Thielemans Date: Thu, 19 Mar 2026 08:05:24 +0000 Subject: [PATCH 24/32] one more INTERFACE --- cpp/helpers/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 6d2e825..b1904ca 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -13,7 +13,7 @@ target_include_directories(petsird_helpers ) target_link_libraries(petsird_helpers - PUBLIC + INTERFACE petsird_generated xtensor-blas ) From ec7928a042a9eb86c3b1472fad4e91924e9e0293 Mon Sep 17 00:00:00 2001 From: Kris Thielemans Date: Thu, 19 Mar 2026 08:12:48 +0000 Subject: [PATCH 25/32] fix --- cpp/helpers/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index b1904ca..ed5553b 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -7,7 +7,7 @@ add_library(petsird_helpers INTERFACE) # add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) target_include_directories(petsird_helpers - PUBLIC + INTERFACE $ $ ) From 98ed8b0b370ae4ede126fedf8f5f3038ea667615 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 19 Mar 2026 11:00:32 +0100 Subject: [PATCH 26/32] Helpers have sources, but no need to expose xtensor-blas to users of the library. --- cpp/helpers/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index ed5553b..8e2f6e4 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -2,19 +2,20 @@ find_package(xtensor-blas REQUIRED) # create a petsird_helpers library target # Currently it is just empty, but allows creating target properties which are transitive -add_library(petsird_helpers INTERFACE) +# add_library(petsird_helpers INTERFACE) # Future change for when we have sources: -# add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) +add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) target_include_directories(petsird_helpers - INTERFACE + PUBLIC $ $ ) target_link_libraries(petsird_helpers - INTERFACE + PUBLIC petsird_generated + PRIVATE xtensor-blas ) From e52e6344c61a771343271fe4404744e040c6242a Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 19 Mar 2026 11:20:45 +0100 Subject: [PATCH 27/32] Cxx 20 --- cpp/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 90a5649..c2c966e 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -5,7 +5,7 @@ set(PETSIRD_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD-0.7") include(CMakePackageConfigHelpers) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(WIN32) From 55c8ee9e23590130d775c191bc96e8f2c97da152 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 19 Mar 2026 11:38:18 +0100 Subject: [PATCH 28/32] Restrain xtensor to 0.24.2 to avoid the breaking changes in 0.25.0, which causes the CMake export to fail due to C++ 20 --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 2e8c2c1..6b69ae5 100644 --- a/environment.yml +++ b/environment.yml @@ -19,5 +19,5 @@ dependencies: - pre-commit=4.0.1 - python>=3.11.3 - shellcheck>=0.8.0 - - xtensor>=0.24.2 + - xtensor>=0.24.2, <0.25.0 - xtensor-blas From 5bd11106e36d0b788bc40ed75802bef2d30b3cde Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 19 Mar 2026 11:42:48 +0100 Subject: [PATCH 29/32] Amend. --- cpp/helpers/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 8e2f6e4..118cb16 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -15,7 +15,6 @@ target_include_directories(petsird_helpers target_link_libraries(petsird_helpers PUBLIC petsird_generated - PRIVATE xtensor-blas ) From f4752023c209fed839ae2a26cfd48f529404b9cb Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 19 Mar 2026 14:01:36 +0100 Subject: [PATCH 30/32] Shoudl be linking correctly now --- cpp/CMakeLists.txt | 7 ++++--- cpp/helpers/CMakeLists.txt | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index c2c966e..d3fa543 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -5,7 +5,7 @@ set(PETSIRD_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD-0.7") include(CMakePackageConfigHelpers) -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(WIN32) @@ -36,12 +36,13 @@ add_library(PETSIRD::generated ALIAS petsird_generated) add_library(PETSIRD::helpers ALIAS petsird_helpers) -add_library(petsird INTERFACE) +add_library(petsird STATIC) add_library(PETSIRD::petsird ALIAS petsird) target_link_libraries(petsird - INTERFACE + PUBLIC PETSIRD::generated + INTERFACE PETSIRD::helpers ) diff --git a/cpp/helpers/CMakeLists.txt b/cpp/helpers/CMakeLists.txt index 118cb16..ed5553b 100644 --- a/cpp/helpers/CMakeLists.txt +++ b/cpp/helpers/CMakeLists.txt @@ -2,18 +2,18 @@ find_package(xtensor-blas REQUIRED) # create a petsird_helpers library target # Currently it is just empty, but allows creating target properties which are transitive -# add_library(petsird_helpers INTERFACE) +add_library(petsird_helpers INTERFACE) # Future change for when we have sources: -add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) +# add_library(petsird_helpers ${PETSIRD_HELPERS_SOURCES}) target_include_directories(petsird_helpers - PUBLIC + INTERFACE $ $ ) target_link_libraries(petsird_helpers - PUBLIC + INTERFACE petsird_generated xtensor-blas ) From 659bf076b0008de6b077d6af1fa0a18e08c7d159 Mon Sep 17 00:00:00 2001 From: NikEfth Date: Thu, 19 Mar 2026 22:19:46 +0100 Subject: [PATCH 31/32] Updates for xtensor. --- cpp/CMakeLists.txt | 2 +- environment.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index d3fa543..a182245 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -5,7 +5,7 @@ set(PETSIRD_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/PETSIRD-0.7") include(CMakePackageConfigHelpers) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(WIN32) diff --git a/environment.yml b/environment.yml index 6b69ae5..2e8c2c1 100644 --- a/environment.yml +++ b/environment.yml @@ -19,5 +19,5 @@ dependencies: - pre-commit=4.0.1 - python>=3.11.3 - shellcheck>=0.8.0 - - xtensor>=0.24.2, <0.25.0 + - xtensor>=0.24.2 - xtensor-blas From bb4400a86225e6c925c513628fe35114a15eca2a Mon Sep 17 00:00:00 2001 From: NikEfth Date: Fri, 20 Mar 2026 18:01:40 +0100 Subject: [PATCH 32/32] Try to communicate the used CXX standard. --- cpp/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index a182245..af98b17 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -46,6 +46,12 @@ target_link_libraries(petsird PETSIRD::helpers ) +if(CMAKE_CXX_STANDARD) + target_compile_features(petsird PUBLIC cxx_std_${CMAKE_CXX_STANDARD}) +else() + target_compile_features(petsird PUBLIC cxx_std_17) +endif() + # target_compile_features(petsird INTERFACE cxx_std_17) install(TARGETS petsird petsird_generated petsird_helpers