Skip to content

Add a BioDynaMo recipe and setup-biodynamo action. - #97

Merged
vgvassilev merged 1 commit into
compiler-research:mainfrom
vgvassilev:pr-biodynamo-recipe
Aug 13, 2026
Merged

Add a BioDynaMo recipe and setup-biodynamo action.#97
vgvassilev merged 1 commit into
compiler-research:mainfrom
vgvassilev:pr-biodynamo-recipe

Conversation

@vgvassilev

Copy link
Copy Markdown
Contributor

Every downstream simulation repo builds BioDynaMo inline on each CI run: a long build that also downloads a ~300 MB prebuilt ROOT tarball from CERN, and that needs a pyenv-managed interpreter set up beforehand. CARTopiaX carries a clone-cache-build dance plus its own pyenv step to do it.

Publishing it once per cell turns that into a cache fetch. The artifact is relocatable by construction: BioDynaMo installs its own ROOT under third_party/root, and bin/thisbdm.sh derives BDMSYS from its own location, so the tree works wherever setup-recipe extracts it. build.py proves that before publishing -- it moves the install to a different path and drives a full consumer build from there. setup-biodynamo then sources thisbdm.sh and marshals the resulting environment into $GITHUB_ENV, since a composite action cannot leave a sourced shell behind and the script sets a dozen variables.

Two host packages are not optional and are installed by the recipe. ROOT's PyROOT and cppyy are extension modules built against a single CPython minor, and no Ubuntu LTS ships the 3.9 the bundled ROOT wants, so it comes from deadsnakes; cling shells out to the compiler ROOT was built with to locate the standard library headers, so g++-11 has to be present or import cppyy dies inside libCling with a segmentation violation. The build passes -DNOPYENV=YES so the generated thisbdm.sh does not require pyenv on the consumer, which would otherwise make the published tree unsourceable.

@vgvassilev
vgvassilev force-pushed the pr-biodynamo-recipe branch 2 times, most recently from 021bf1a to 7882fd7 Compare August 13, 2026 17:21
Every downstream simulation repo builds BioDynaMo inline on each CI run: a
long build that also downloads a ~300 MB prebuilt ROOT tarball from CERN,
and that needs a pyenv-managed interpreter set up beforehand. CARTopiaX
carries a clone-cache-build dance plus its own pyenv step to do it.

Publishing it once per cell turns that into a cache fetch. The artifact is
relocatable by construction: BioDynaMo installs its own ROOT under
third_party/root, and bin/thisbdm.sh derives BDMSYS from its own location, so
the tree works wherever setup-recipe extracts it. build.py proves that before
publishing -- it moves the install to a different path and drives a full
consumer build from there. setup-biodynamo then sources thisbdm.sh and
marshals the resulting environment into $GITHUB_ENV, since a composite action
cannot leave a sourced shell behind and the script sets a dozen variables.

Two host packages are not optional and are installed by the recipe. ROOT's
PyROOT and cppyy are extension modules built against a single CPython minor,
and no Ubuntu LTS ships the 3.9 the bundled ROOT wants, so it comes from
deadsnakes; cling shells out to the compiler ROOT was built with to locate
the standard library headers, so g++-11 has to be present or `import cppyy`
dies inside libCling with a segmentation violation. The build passes
-DNOPYENV=YES so the generated thisbdm.sh does not require pyenv on the
consumer, which would otherwise make the published tree unsourceable.
@vgvassilev
vgvassilev force-pushed the pr-biodynamo-recipe branch from 7882fd7 to ce1916f Compare August 13, 2026 17:39
@vgvassilev
vgvassilev merged commit 93297ae into compiler-research:main Aug 13, 2026
42 checks passed
@vgvassilev
vgvassilev deleted the pr-biodynamo-recipe branch August 13, 2026 18:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant