Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a bundle package and environment to build a basic "externals" stack #676

Merged
merged 8 commits into from
Jan 10, 2025
21 changes: 21 additions & 0 deletions environments/key4hep-dev-external/spack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
spack:
packages:
all:
variants:
- build_type=RelWithDebInfo
- 'cxxstd=20'
target: []
compiler: []

boost:
require: +atomic+chrono+context+date_time+exception+fiber+filesystem+graph+iostreams+locale+log+math+multithreaded+program_options+python+random+regex+serialization+shared+signals+system+test+thread+timer+wave
jmcarcell marked this conversation as resolved.
Show resolved Hide resolved
# Keep the possibility to build Gaudi 38
fmt:
require: "@:10"

view: false
include:
- ../key4hep-common/packages.yaml

specs:
- key4hep-external-stack
68 changes: 68 additions & 0 deletions packages/key4hep-external-stack/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env python3

from datetime import datetime

from spack.pkg.k4.key4hep_stack import Key4hepPackage, install_setup_script

from common import *


class Key4hepExternalStack(BundlePackage, Key4hepPackage):
"""Bundle package that contains a basic external software stack upon which
Key4hep can be built

The packages in this base stack are mainly
"""

homepage = "https://cern.ch/key4hep"

version(datetime.today().strftime("%Y-%m-%d"))

# this bundle package installs a custom setup script, so
# need to add the install phase (which normally does not
# exist for a bundle package)
phases = ["install"]

# Some generally useful development tools
depends_on("cmake")
depends_on("ninja")
depends_on("python")
depends_on("gdb")
depends_on("catch2@3:")
depends_on("boost")
depends_on("py-pytest")

# general hep packages
depends_on("root")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+root7 is not a default one and is probably needed in some places, others may also be needed to prevent a dependency from needing another ROOT.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But this should be covered by including the common packages.yaml, I think.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if changing the requirements in the common packages.yaml and affecting the external stack will be a problem or not 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. I think it shouldn't since the ones specified in the external environment take precedence. However, if the requirements in the common packages are underspecified, then building a key4hep-stack on top of the external environment might lead to some packages being rebuilt for the latter because not all variants are present.

This might be something that could be checked in CI (maybe in a follow up PR): concretize this external environment and either the release or nightly environment and see if the packages that are common to both get concretized the same.

depends_on("geant4")
depends_on("pythia8")
depends_on("hepmc3")
depends_on("evtgen +photos+tauola+pythia8+hepmc3")
depends_on("heppdt")
depends_on("fastjet")

# podio dependencies
depends_on("py-pyyaml")
depends_on("py-tabulate")
depends_on("py-jinja2")
depends_on("py-graphviz")

# other general deps
depends_on("py-numpy")
depends_on("py-scipy")

# gaudi dependencies
depends_on("py-nose")
depends_on("cppgsl")
depends_on("fmt")
depends_on("cppunit")
depends_on("gperftools")
depends_on("py-networkx")
depends_on("py-six")
depends_on("range-v3")
depends_on("py-pytest-cov")
depends_on("jemalloc")
depends_on("aida")

def install(self, spec, prefix):
return install_setup_script(self, spec, prefix, "K4_EXTERNAL_STACK")
Loading