From 89238f1631a0b00fc1e98a0d7a7e70d04cd1a1ea Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Wed, 17 Dec 2025 20:46:35 +0100 Subject: [PATCH 01/12] Add a basic cmake preset configuration --- CMakePresets.json | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 CMakePresets.json diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..cb7529059 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,45 @@ +{ + "version": 3, + "configurePresets": [ + { + "name": "common", + "hidden": true, + "cacheVariables": { + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", + "CMAKE_CXX_STANDARD": "20", + "CMAKE_CXX_FLAGS": " -fdiagnostics-color=always ", + "PODIO_USE_CLANG_FORMAT": "OFF", + "PODIO_SET_RPATH": "ON" + } + }, + { + "name": "base-build", + "displayName": "Base Build including RNTuple backend and DataSource", + "inherits": "common", + "generator": "Ninja", + "cacheVariables": { + "BUILD_TESTING": "ON", + "ENABLE_RNTUPLE": "ON", + "ENABLE_DATASOURCE": "ON", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + } + }, + { + "name": "full-build", + "displayName": "Full build including schema evolution tests and SIO", + "inherits": "base-build", + "cacheVariables": { + "ENABLE_SIO": "ON", + "PODIO_ENABLE_SCHEMA_EVOLUTION_TESTS": "ON" + } + }, + { + "name": "ci-build", + "displayName": "Full build with warnings as errors", + "inherits": "full-build", + "cacheVariables": { + "CMAKE_CXX_FLAGS": " -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations" + } + } + ] +} From 4560cbcb9e157ff2a779b35b5bba4c13f21e7e63 Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Wed, 17 Dec 2025 20:54:47 +0100 Subject: [PATCH 02/12] Start to use presets for CI workflows --- .github/workflows/edm4eic.yml | 10 ++------- .github/workflows/edm4hep.yaml | 36 ++++++++++++------------------ .github/workflows/key4hep.yml | 15 +++---------- .github/workflows/pre-commit.yml | 14 +++--------- .github/workflows/publish-docs.yml | 5 ++--- .github/workflows/sanitizers.yaml | 20 +++++------------ .github/workflows/test.yml | 19 +++++----------- .github/workflows/ubuntu.yml | 20 +++++------------ 8 files changed, 42 insertions(+), 97 deletions(-) diff --git a/.github/workflows/edm4eic.yml b/.github/workflows/edm4eic.yml index 6af7b7098..c26725b74 100644 --- a/.github/workflows/edm4eic.yml +++ b/.github/workflows/edm4eic.yml @@ -42,17 +42,11 @@ jobs: STARTDIR=$(pwd) echo "::group::Build podio" cmake -B ${STARTDIR}/podio/build -S ${STARTDIR}/podio \ + --preset ci-build \ -DCMAKE_INSTALL_PREFIX=${STARTDIR}/podio/install \ - -DCMAKE_CXX_STANDARD=20 \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations " \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DUSE_EXTERNAL_CATCH2=ON \ - -DENABLE_RNTUPLE=ON \ - -DENABLE_DATASOURCE=ON \ - -DPODIO_SET_RPATH=ON \ -DBUILD_TESTING=OFF \ - -DENABLE_JULIA=OFF \ - -G Ninja + -DENABLE_JULIA=OFF cmake --build ${STARTDIR}/podio/build --target install cd ${STARTDIR}/podio && source init.sh && source env.sh && cd ${STARTDIR} echo "::endgroup::" diff --git a/.github/workflows/edm4hep.yaml b/.github/workflows/edm4hep.yaml index a73d4361f..37f77f1a4 100644 --- a/.github/workflows/edm4hep.yaml +++ b/.github/workflows/edm4hep.yaml @@ -42,43 +42,35 @@ jobs: STARTDIR=$(pwd) echo "::group::Build Catch2" cd $STARTDIR/catch2 - mkdir build && cd build - cmake -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") -DCMAKE_INSTALL_PREFIX=../install -G Ninja .. - ninja -k0 install + cmake -B build -S . -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") -DCMAKE_INSTALL_PREFIX=$(pwd)/install -G Ninja + cmake --build build --target install export CMAKE_PREFIX_PATH=$STARTDIR/catch2/install:$CMAKE_PREFIX_PATH echo "::endgroup::" echo "::group::Build podio" cd $STARTDIR/podio - mkdir build && cd build - cmake -DENABLE_SIO=ON \ + cmake -B build -S . \ + --preset ci-build \ -DENABLE_JULIA=ON \ - -DENABLE_DATASOURCE=ON \ - -DENABLE_RNTUPLE=ON \ - -DCMAKE_INSTALL_PREFIX=../install \ + -DCMAKE_INSTALL_PREFIX=$(pwd)/install \ -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations " \ -DUSE_EXTERNAL_CATCH2=ON \ - -DBUILD_TESTING=ON \ - -DPODIO_RUN_STRACE_TEST=ON \ - -DPODIO_ENABLE_SCHEMA_EVOLUTION_TESTS=ON \ - -G Ninja .. - ninja -k0 + -DPODIO_RUN_STRACE_TEST=ON + cmake --build build -- -k0 echo "::endgroup::" echo "::group::Test and install podio" - ctest --output-on-failure --schedule-random -j$(nproc) --timeout 600 - ninja install + ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) --timeout 600 + cmake --build build --target install cd $STARTDIR/podio source init.sh && source env.sh echo "::endgroup::" echo "::group::Build and test EDM4hep" cd $STARTDIR/edm4hep - mkdir build && cd build - cmake -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") \ + cmake -B build -S . \ + -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") \ -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always " \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DUSE_EXTERNAL_CATCH2=ON \ - -G Ninja .. - ninja -k0 - ctest --output-on-failure + -G Ninja + cmake --build build -- -k0 + ctest --test-dir build --output-on-failure echo "::endgroup::" diff --git a/.github/workflows/key4hep.yml b/.github/workflows/key4hep.yml index 0d1c43d85..5e9704b02 100644 --- a/.github/workflows/key4hep.yml +++ b/.github/workflows/key4hep.yml @@ -40,19 +40,10 @@ jobs: echo "::group::Run CMake" mkdir -p build install cd build - cmake -DENABLE_SIO=ON \ - -DENABLE_JULIA=OFF \ - -DCMAKE_INSTALL_PREFIX=../install \ - -DCMAKE_CXX_STANDARD=20 \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations " \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + cmake --preset ci-build \ + -DCMAKE_INSTALL_PREFIX=$(pwd)/install \ -DUSE_EXTERNAL_CATCH2=AUTO \ - -DENABLE_RNTUPLE=ON \ - -DENABLE_DATASOURCE=ON \ - -DPODIO_SET_RPATH=ON \ - -DPODIO_RUN_STRACE_TEST=ON \ - -DPODIO_ENABLE_SCHEMA_EVOLUTION_TESTS=ON \ - -G Ninja .. + -DPODIO_RUN_STRACE_TEST=ON echo "::endgroup::" echo "::group::Build" ninja -k0 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index d992dc59d..6af7500a4 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -25,19 +25,11 @@ jobs: git config --global --add safe.directory $(pwd) echo "::endgroup::" echo "::group::Run CMake" - mkdir build - cd build - cmake .. -DENABLE_SIO=ON \ + cmake -B build -S . \ + --preset ci-build \ -DENABLE_JULIA=ON \ - -DENABLE_RNTUPLE=ON \ - -DENABLE_DATASOURCE=ON \ - -DCMAKE_CXX_STANDARD=20 \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always -Werror "\ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - -DPODIO_ENABLE_SCHEMA_EVOLUTION_TESTS=ON \ -DUSE_EXTERNAL_CATCH2=OFF - ln -s $(pwd)/compile_commands.json ../ - cd .. + ln -s build/compile_commands.json compile_commands.json echo "::endgroup::" echo "::group::Run pre-commit" pre-commit run --show-diff-on-failure \ diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 5188903ec..529cf9d6c 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -32,9 +32,8 @@ jobs: export PYTHONPATH=$VIRTUAL_ENV/lib/python3.$(python3 -c 'import sys; print(f"{sys.version_info[1]}")')/site-packages:$PYTHONPATH echo -e "::endgroup::\n::group::Build podio" cmake -B build . --install-prefix=$(pwd)/install \ - -GNinja -DENABLE_SIO=ON -DENABLE_RNTUPLE=ON \ - -DENABLE_DATASOURCE=ON -DBUILD_TESTING=OFF \ - -DCMAKE_CXX_STANDARD=20 + --preset full-build \ + -DBUILD_TESTING=OFF cmake --build build --target install source ./init.sh && source ./env.sh echo -e "::endgroup::\n::group::build doc" diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index aa0d74b83..23e860552 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -41,23 +41,15 @@ jobs: ccache-key: ccache-sanitizers-el9-${{ matrix.compiler }}-${{ matrix.sanitizer }} run: | echo "::group::Run CMake" - mkdir -p build - cd build - cmake -DCMAKE_BUILD_TYPE=Debug \ + cmake -B build S . \ + --preset ci-build \ + -DCMAKE_BUILD_TYPE=Debug \ -DUSE_SANITIZER=${{ matrix.sanitizer }} \ - -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.compiler }} == gcc15 ]] && echo "23" || echo "20") \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always " \ - -DENABLE_SIO=ON \ - -DENABLE_JULIA=OFF \ - -DENABLE_RNTUPLE=ON \ - -DENABLE_DATASOURCE=ON \ - -DPODIO_ENABLE_SCHEMA_EVOLUTION_TESTS=ON \ - -G Ninja .. + -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.compiler }} == gcc15 ]] && echo "23" || echo "20") echo "::endgroup::" echo "::group::Build" - ninja -k0 + cmake --build build -- -k0 echo "::endgroup::" echo "::group::Run tests" - ctest --output-on-failure --schedule-random -j$(nproc) + ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) echo "::endgroup::" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ea8b98009..e519f7d54 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,24 +34,17 @@ jobs: run: | echo "::group::Run CMake" # export JULIA_DEPOT_PATH="$(mktemp -d -p /tmp -t julia_depot_XXXXX):" - mkdir -p build install - cd build - cmake -DENABLE_SIO=ON \ + cmake -B build -S . \ + --preset ci-build \ -DENABLE_JULIA=ON \ -DENABLE_RNTUPLE=$([[ ${{ matrix.LCG }} == LCG_104/* ]] && echo "OFF" || echo "ON") \ - -DENABLE_DATASOURCE=ON \ -DPODIO_RUN_STRACE_TEST=$([[ ${{ matrix.LCG }} == LCG_104/* ]] && echo "OFF" || echo "ON") \ -DCMAKE_INSTALL_PREFIX=../install \ - -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations " \ -DUSE_EXTERNAL_CATCH2=AUTO \ - -DPODIO_USE_CLANG_FORMAT=AUTO \ - -DPODIO_ENABLE_SCHEMA_EVOLUTION_TESTS=ON \ - -G Ninja .. + -DPODIO_USE_CLANG_FORMAT=AUTO echo "::endgroup::" echo "::group::Build" - ninja -k0 + cmake --build build -- -k0 echo "::endgroup::" echo "::group::Julia StaticArrays Package Install" # # Temporary workaround for https://its.cern.ch/jira/browse/SPI-2838 @@ -59,8 +52,8 @@ jobs: julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --output-on-failure --schedule-random -j$(nproc) --timeout 600 + ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) --timeout 600 echo "::endgroup::" echo "::group::Install" - ninja install + cmake --build build --target install echo "::endgroup::" diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 4187e4180..ec88fbefd 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -30,31 +30,23 @@ jobs: ccache-key: ccache-ubuntu-${{ matrix.LCG }} run: | echo "::group::Run CMake" - mkdir -p build install - cd build - cmake -DENABLE_SIO=ON \ + cmake -B build -S . \ + --preset ci-build \ -DENABLE_JULIA=ON \ - -DENABLE_DATASOURCE=ON \ -DCMAKE_INSTALL_PREFIX=../install \ -DCMAKE_CXX_STANDARD=20 \ - -DCMAKE_CXX_FLAGS=" -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations " \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DUSE_EXTERNAL_CATCH2=OFF \ - -DPODIO_SET_RPATH=ON \ - -DPODIO_RUN_STRACE_TEST=ON \ - -DENABLE_RNTUPLE=ON \ - -DPODIO_ENABLE_SCHEMA_EVOLUTION_TESTS=ON \ - -G Ninja .. + -DPODIO_RUN_STRACE_TEST=ON echo "::endgroup::" echo "::group::Build" - ninja -k0 + cmake --build build -- -k0 echo "::endgroup" echo "::group::Julia StaticArrays Package Install" julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --output-on-failure --schedule-random -j$(nproc) --timeout 600 + ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) --timeout 600 echo "::endgroup::" echo "::group::Install" - ninja install + cmake --build build --target install echo "::endgroup::" From f5f3cd53c9621bae62ecf9c17f689ce127b59be3 Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Thu, 18 Dec 2025 10:05:12 +0100 Subject: [PATCH 03/12] Add a build and a test preset for CI workflows --- CMakePresets.json | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/CMakePresets.json b/CMakePresets.json index cb7529059..d9743d210 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -4,6 +4,7 @@ { "name": "common", "hidden": true, + "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", "CMAKE_CXX_STANDARD": "20", @@ -38,8 +39,35 @@ "displayName": "Full build with warnings as errors", "inherits": "full-build", "cacheVariables": { - "CMAKE_CXX_FLAGS": " -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations" + "CMAKE_CXX_FLAGS": " -fdiagnostics-color=always -Werror -Wno-error=deprecated-declarations", + "PODIO_USE_CLANG_FORMAT": "AUTO" } } + ], + + "buildPresets": [ + { + "name": "ci-build", + "displayName": "Building like on CI", + "configurePreset": "ci-build", + "nativeToolOptions": ["-k0"] + } + ], + + "testPresets": [ + { + "name": "ci-build", + "displayName": "Testing like on CI", + "configurePreset": "ci-build", + "execution": { + "stopOnFailure": false, + "scheduleRandom": true, + "timeout": 600 + }, + "output": { + "outputOnFailure": true + } + + } ] } From 7bf494436980c471ea5fdeb7d45d6564b0cd31eb Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Thu, 18 Dec 2025 10:11:36 +0100 Subject: [PATCH 04/12] Use build and test presets in CI workflows --- .github/workflows/edm4eic.yml | 4 ++-- .github/workflows/edm4hep.yaml | 9 ++++----- .github/workflows/key4hep.yml | 8 +++----- .github/workflows/publish-docs.yml | 2 +- .github/workflows/test.yml | 9 ++++----- .github/workflows/ubuntu.yml | 9 ++++----- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/.github/workflows/edm4eic.yml b/.github/workflows/edm4eic.yml index c26725b74..1c864e706 100644 --- a/.github/workflows/edm4eic.yml +++ b/.github/workflows/edm4eic.yml @@ -41,13 +41,13 @@ jobs: run: | STARTDIR=$(pwd) echo "::group::Build podio" - cmake -B ${STARTDIR}/podio/build -S ${STARTDIR}/podio \ + cmake -S ${STARTDIR}/podio \ --preset ci-build \ -DCMAKE_INSTALL_PREFIX=${STARTDIR}/podio/install \ -DUSE_EXTERNAL_CATCH2=ON \ -DBUILD_TESTING=OFF \ -DENABLE_JULIA=OFF - cmake --build ${STARTDIR}/podio/build --target install + cmake --build ${STARTDIR}/podio/build --preset ci-build --target install cd ${STARTDIR}/podio && source init.sh && source env.sh && cd ${STARTDIR} echo "::endgroup::" diff --git a/.github/workflows/edm4hep.yaml b/.github/workflows/edm4hep.yaml index 37f77f1a4..8ac679d16 100644 --- a/.github/workflows/edm4hep.yaml +++ b/.github/workflows/edm4hep.yaml @@ -48,18 +48,17 @@ jobs: echo "::endgroup::" echo "::group::Build podio" cd $STARTDIR/podio - cmake -B build -S . \ - --preset ci-build \ + cmake -S . --preset ci-build \ -DENABLE_JULIA=ON \ -DCMAKE_INSTALL_PREFIX=$(pwd)/install \ -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.LCG }} == *-gcc15-* ]] && echo "23" || echo "20") \ -DUSE_EXTERNAL_CATCH2=ON \ -DPODIO_RUN_STRACE_TEST=ON - cmake --build build -- -k0 + cmake --build --preset ci-build echo "::endgroup::" echo "::group::Test and install podio" - ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) --timeout 600 - cmake --build build --target install + ctest --preset ci-build -j$(nproc) + cmake --build --preset ci-build --target install cd $STARTDIR/podio source init.sh && source env.sh echo "::endgroup::" diff --git a/.github/workflows/key4hep.yml b/.github/workflows/key4hep.yml index 5e9704b02..004971945 100644 --- a/.github/workflows/key4hep.yml +++ b/.github/workflows/key4hep.yml @@ -38,19 +38,17 @@ jobs: echo "::group::Run k4_local_repo" k4_local_repo echo "::group::Run CMake" - mkdir -p build install - cd build cmake --preset ci-build \ -DCMAKE_INSTALL_PREFIX=$(pwd)/install \ -DUSE_EXTERNAL_CATCH2=AUTO \ -DPODIO_RUN_STRACE_TEST=ON echo "::endgroup::" echo "::group::Build" - ninja -k0 + cmake --build --preset ci-build echo "::endgroup" echo "::group::Run tests" - ctest --output-on-failure --schedule-random -j$(nproc) --timeout 600 + ctest --preset ci-build -j$(nproc) echo "::endgroup::" echo "::group::Install" - ninja install + cmake --build --preset ci-build --target install echo "::endgroup::" diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 529cf9d6c..31d225749 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -31,7 +31,7 @@ jobs: python3 -m pip install -r doc/requirements.txt export PYTHONPATH=$VIRTUAL_ENV/lib/python3.$(python3 -c 'import sys; print(f"{sys.version_info[1]}")')/site-packages:$PYTHONPATH echo -e "::endgroup::\n::group::Build podio" - cmake -B build . --install-prefix=$(pwd)/install \ + cmake -S . --install-prefix=$(pwd)/install \ --preset full-build \ -DBUILD_TESTING=OFF cmake --build build --target install diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e519f7d54..7b7b0b006 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,8 +34,7 @@ jobs: run: | echo "::group::Run CMake" # export JULIA_DEPOT_PATH="$(mktemp -d -p /tmp -t julia_depot_XXXXX):" - cmake -B build -S . \ - --preset ci-build \ + cmake --preset ci-build \ -DENABLE_JULIA=ON \ -DENABLE_RNTUPLE=$([[ ${{ matrix.LCG }} == LCG_104/* ]] && echo "OFF" || echo "ON") \ -DPODIO_RUN_STRACE_TEST=$([[ ${{ matrix.LCG }} == LCG_104/* ]] && echo "OFF" || echo "ON") \ @@ -44,7 +43,7 @@ jobs: -DPODIO_USE_CLANG_FORMAT=AUTO echo "::endgroup::" echo "::group::Build" - cmake --build build -- -k0 + cmake --build --preset ci-build echo "::endgroup::" echo "::group::Julia StaticArrays Package Install" # # Temporary workaround for https://its.cern.ch/jira/browse/SPI-2838 @@ -52,8 +51,8 @@ jobs: julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) --timeout 600 + ctest --preset ci-build -j$(nproc) echo "::endgroup::" echo "::group::Install" - cmake --build build --target install + cmake --build --preset ci-build --target install echo "::endgroup::" diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index ec88fbefd..629ca6d08 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -30,8 +30,7 @@ jobs: ccache-key: ccache-ubuntu-${{ matrix.LCG }} run: | echo "::group::Run CMake" - cmake -B build -S . \ - --preset ci-build \ + cmake -S . --preset ci-build \ -DENABLE_JULIA=ON \ -DCMAKE_INSTALL_PREFIX=../install \ -DCMAKE_CXX_STANDARD=20 \ @@ -39,14 +38,14 @@ jobs: -DPODIO_RUN_STRACE_TEST=ON echo "::endgroup::" echo "::group::Build" - cmake --build build -- -k0 + cmake --build --preset ci-build echo "::endgroup" echo "::group::Julia StaticArrays Package Install" julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) --timeout 600 + ctest --preset ci-build -j$(nproc) echo "::endgroup::" echo "::group::Install" - cmake --build build --target install + cmake --build --preset ci-build --target install echo "::endgroup::" From 2c0a1b9a4eb788ec5b824a617ddcfeb2634f83ad Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Fri, 19 Dec 2025 14:56:52 +0100 Subject: [PATCH 05/12] Do not use preset for building EDM4eic --- .github/workflows/edm4eic.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/edm4eic.yml b/.github/workflows/edm4eic.yml index 1c864e706..8f6901883 100644 --- a/.github/workflows/edm4eic.yml +++ b/.github/workflows/edm4eic.yml @@ -44,10 +44,9 @@ jobs: cmake -S ${STARTDIR}/podio \ --preset ci-build \ -DCMAKE_INSTALL_PREFIX=${STARTDIR}/podio/install \ - -DUSE_EXTERNAL_CATCH2=ON \ -DBUILD_TESTING=OFF \ -DENABLE_JULIA=OFF - cmake --build ${STARTDIR}/podio/build --preset ci-build --target install + cmake --build ${STARTDIR}/podio/build --target install cd ${STARTDIR}/podio && source init.sh && source env.sh && cd ${STARTDIR} echo "::endgroup::" From eccdf8aa47633dd2a749bc885857d3cc5508529b Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Fri, 19 Dec 2025 14:58:05 +0100 Subject: [PATCH 06/12] Remove unnecessary argument for linux builds --- .github/workflows/test.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7b7b0b006..4456fd810 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,9 +38,8 @@ jobs: -DENABLE_JULIA=ON \ -DENABLE_RNTUPLE=$([[ ${{ matrix.LCG }} == LCG_104/* ]] && echo "OFF" || echo "ON") \ -DPODIO_RUN_STRACE_TEST=$([[ ${{ matrix.LCG }} == LCG_104/* ]] && echo "OFF" || echo "ON") \ - -DCMAKE_INSTALL_PREFIX=../install \ - -DUSE_EXTERNAL_CATCH2=AUTO \ - -DPODIO_USE_CLANG_FORMAT=AUTO + -DCMAKE_INSTALL_PREFIX=$(pwd)/install \ + -DUSE_EXTERNAL_CATCH2=AUTO echo "::endgroup::" echo "::group::Build" cmake --build --preset ci-build From 142564e8ddb9b66393f9ec4685b6bab45a70a444 Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Tue, 20 Jan 2026 11:42:16 +0100 Subject: [PATCH 07/12] fix: missing dash in argument Co-authored-by: Juan Miguel Carceller <22276694+jmcarcell@users.noreply.github.com> --- .github/workflows/sanitizers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index 23e860552..92ae639eb 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -41,7 +41,7 @@ jobs: ccache-key: ccache-sanitizers-el9-${{ matrix.compiler }}-${{ matrix.sanitizer }} run: | echo "::group::Run CMake" - cmake -B build S . \ + cmake -B build -S . \ --preset ci-build \ -DCMAKE_BUILD_TYPE=Debug \ -DUSE_SANITIZER=${{ matrix.sanitizer }} \ From 1e6338175a15f60b889ea4d22db6463fd5e4f626 Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Tue, 20 Jan 2026 11:44:46 +0100 Subject: [PATCH 08/12] Use preset for building in CI --- .github/workflows/sanitizers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sanitizers.yaml b/.github/workflows/sanitizers.yaml index 92ae639eb..654e1a788 100644 --- a/.github/workflows/sanitizers.yaml +++ b/.github/workflows/sanitizers.yaml @@ -48,7 +48,7 @@ jobs: -DCMAKE_CXX_STANDARD=$([[ ${{ matrix.compiler }} == gcc15 ]] && echo "23" || echo "20") echo "::endgroup::" echo "::group::Build" - cmake --build build -- -k0 + cmake --build --preset ci-build echo "::endgroup::" echo "::group::Run tests" ctest --test-dir build --output-on-failure --schedule-random -j$(nproc) From de0a6fe46e2c287fda0a3b2bad37297f66ab7a1d Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Tue, 20 Jan 2026 11:52:27 +0100 Subject: [PATCH 09/12] Use native parallel build option for ctest in presets --- .github/workflows/edm4hep.yaml | 2 +- .github/workflows/key4hep.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/ubuntu.yml | 2 +- CMakePresets.json | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/edm4hep.yaml b/.github/workflows/edm4hep.yaml index 8ac679d16..07ec64478 100644 --- a/.github/workflows/edm4hep.yaml +++ b/.github/workflows/edm4hep.yaml @@ -57,7 +57,7 @@ jobs: cmake --build --preset ci-build echo "::endgroup::" echo "::group::Test and install podio" - ctest --preset ci-build -j$(nproc) + ctest --preset ci-build cmake --build --preset ci-build --target install cd $STARTDIR/podio source init.sh && source env.sh diff --git a/.github/workflows/key4hep.yml b/.github/workflows/key4hep.yml index 004971945..2da190c89 100644 --- a/.github/workflows/key4hep.yml +++ b/.github/workflows/key4hep.yml @@ -47,7 +47,7 @@ jobs: cmake --build --preset ci-build echo "::endgroup" echo "::group::Run tests" - ctest --preset ci-build -j$(nproc) + ctest --preset ci-build echo "::endgroup::" echo "::group::Install" cmake --build --preset ci-build --target install diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4456fd810..b9094e48d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,7 +50,7 @@ jobs: julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --preset ci-build -j$(nproc) + ctest --preset ci-build echo "::endgroup::" echo "::group::Install" cmake --build --preset ci-build --target install diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 629ca6d08..7ee4186f5 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -44,7 +44,7 @@ jobs: julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --preset ci-build -j$(nproc) + ctest --preset ci-build echo "::endgroup::" echo "::group::Install" cmake --build --preset ci-build --target install diff --git a/CMakePresets.json b/CMakePresets.json index d9743d210..a363a20ef 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -62,7 +62,8 @@ "execution": { "stopOnFailure": false, "scheduleRandom": true, - "timeout": 600 + "timeout": 600, + "jobs": 0 }, "output": { "outputOnFailure": true From 7368627cc6002ec66e95181fe8ed18e4474d6485 Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Tue, 20 Jan 2026 11:53:00 +0100 Subject: [PATCH 10/12] Turn off schema evolution tests for base build --- CMakePresets.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakePresets.json b/CMakePresets.json index a363a20ef..48b690b20 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -10,7 +10,8 @@ "CMAKE_CXX_STANDARD": "20", "CMAKE_CXX_FLAGS": " -fdiagnostics-color=always ", "PODIO_USE_CLANG_FORMAT": "OFF", - "PODIO_SET_RPATH": "ON" + "PODIO_SET_RPATH": "ON", + "PODIO_ENABLE_SCHEMA_EVOLUTION_TESTS": "OFF" } }, { From b12a12dc62fdb3babbf003791a52aba512690abe Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Tue, 20 Jan 2026 13:03:30 +0100 Subject: [PATCH 11/12] Don't use jobs: 0 to avoid unbounded parallelism --- .github/workflows/edm4hep.yaml | 2 +- .github/workflows/key4hep.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/ubuntu.yml | 2 +- CMakePresets.json | 3 +-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/edm4hep.yaml b/.github/workflows/edm4hep.yaml index 07ec64478..e55aee648 100644 --- a/.github/workflows/edm4hep.yaml +++ b/.github/workflows/edm4hep.yaml @@ -57,7 +57,7 @@ jobs: cmake --build --preset ci-build echo "::endgroup::" echo "::group::Test and install podio" - ctest --preset ci-build + ctest --preset ci-build --parallel cmake --build --preset ci-build --target install cd $STARTDIR/podio source init.sh && source env.sh diff --git a/.github/workflows/key4hep.yml b/.github/workflows/key4hep.yml index 2da190c89..dc98d2b70 100644 --- a/.github/workflows/key4hep.yml +++ b/.github/workflows/key4hep.yml @@ -47,7 +47,7 @@ jobs: cmake --build --preset ci-build echo "::endgroup" echo "::group::Run tests" - ctest --preset ci-build + ctest --preset ci-build --parallel echo "::endgroup::" echo "::group::Install" cmake --build --preset ci-build --target install diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b9094e48d..0336984ae 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,7 +50,7 @@ jobs: julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --preset ci-build + ctest --preset ci-build --parallel echo "::endgroup::" echo "::group::Install" cmake --build --preset ci-build --target install diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 7ee4186f5..cf4287df3 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -44,7 +44,7 @@ jobs: julia -e 'import Pkg; Pkg.add("StaticArrays")' echo "::endgroup" echo "::group::Run tests" - ctest --preset ci-build + ctest --preset ci-build --parallel echo "::endgroup::" echo "::group::Install" cmake --build --preset ci-build --target install diff --git a/CMakePresets.json b/CMakePresets.json index 48b690b20..e7b63651c 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -63,8 +63,7 @@ "execution": { "stopOnFailure": false, "scheduleRandom": true, - "timeout": 600, - "jobs": 0 + "timeout": 600 }, "output": { "outputOnFailure": true From ebbadea4de8964b818ddb4981e8ef20f78508046 Mon Sep 17 00:00:00 2001 From: Thomas Madlener Date: Tue, 3 Feb 2026 14:27:44 +0100 Subject: [PATCH 12/12] Use presets and update build commands in top level README --- README.md | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index aa9d2cef5..f0dc1f175 100644 --- a/README.md +++ b/README.md @@ -91,18 +91,37 @@ and `env.sh`. ## Compiling -If you are using the easy setup from `init.sh` then create separate build -and install areas, and trigger the build: +Podio uses CMake presets to simplify the build process. The following presets are available: - mkdir build - mkdir install - cd build - cmake -DCMAKE_INSTALL_PREFIX=../install .. - make -j 4 install +- `base-build`: Base build with RNTuple backend and DataSource support +- `full-build`: Full build including SIO and schema evolution tests +- `ci-build`: Full build with warnings as errors (used for continuous integration) -To see a list of options, do this in the build-directory: +### Basic build - cmake -LH .. +To build podio with the base configuration: + + cmake --preset base-build -DCMAKE_INSTALL_PREFIX=install + cmake --build build -j 4 + cmake --install build + +### Full build + +For a complete build with all features: + + cmake --preset full-build -DCMAKE_INSTALL_PREFIX=install + cmake --build build -j 4 + cmake --install build + +### Custom configuration + +To see available CMake options: + + cmake --preset base-build -LH + +You can override preset options by adding `-D` flags: + + cmake --preset base-build -DCMAKE_INSTALL_PREFIX=install -DENABLE_SIO=ON ## Running tests