Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
c24db67
tmp:add: wait_for_compilation
Mar 9, 2026
7b8376e
fix: wrong icon4py version
Mar 9, 2026
752a540
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 13, 2026
6fb1419
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 13, 2026
c1269fd
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 13, 2026
5abd3f8
Update recipes/icon-dsl/25.12/gh200/repo/packages/icon-exclaim/packag…
msimberg Mar 13, 2026
b93847a
Update recipes/icon-dsl/25.12/gh200/repo/packages/icon-exclaim/packag…
msimberg Mar 13, 2026
ea53fc5
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 16, 2026
466f016
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 16, 2026
6b7cd7d
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 16, 2026
59bea8a
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 16, 2026
eae7b87
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 16, 2026
ae0d38b
Update recipes/icon-dsl/25.12/gh200/environments.yaml
msimberg Mar 16, 2026
5fd54de
Update recipes/icon-dsl/25.12/gh200/repo/packages/icon-exclaim/packag…
msimberg Mar 16, 2026
69fdb48
Try older commit of ghex
msimberg Mar 17, 2026
ce47321
Remove ghex version constraint
msimberg Mar 18, 2026
4276806
Update icon4py
msimberg Mar 18, 2026
8715551
Remove more version constraints
msimberg Mar 18, 2026
091e1a7
Update icon-exclaim commit
msimberg Mar 19, 2026
3d66d18
Update icon4py and icon-exclaim
msimberg Mar 26, 2026
e2c2efe
Update icon4py build options in icon-exclaim package
msimberg Mar 26, 2026
1956e51
Try to set icon4py venv bin path in icon-exclaim
msimberg Mar 26, 2026
b1bb3d9
Try to add dsl=verify
msimberg Mar 26, 2026
ed98294
Add icon4py 0.1.0 and icon-exclaim 0.3.0
msimberg Mar 27, 2026
2cffb3a
Update recipe with icon4py/icon-exclaim versions
msimberg Mar 27, 2026
5dde8bc
Try to update icon-dsl/25.12/a100 recipe to match gh200
msimberg Mar 27, 2026
22775e9
No symlink for repo
msimberg Mar 27, 2026
8dc0fbc
Update pre-install for icon-dsl/25.12/a100
msimberg Mar 27, 2026
fc007a2
Bring in backported network stack
msimberg Apr 15, 2026
e265997
Use cuda-mempool variant
msimberg Apr 15, 2026
2ad68e1
Update cray-mpich
msimberg Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion ci/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ pipeline-configure:
tags: [languard-k8s-lightweight]
image: docker.io/python:latest
script:
- git clone https://github.com/eth-cscs/uenv-pipeline.git
- git clone https://github.com/msimberg/uenv-pipeline.git
- git -C ./uenv-pipeline checkout v5-libfabric-buildable
- ./uenv-pipeline/configure-pipeline -c./config.yaml -r./recipes -s$system -u$uenv -a$uarch -o./pipeline.yml
artifacts:
paths:
Expand Down
92 changes: 78 additions & 14 deletions recipes/icon-dsl/25.12/a100/environments.yaml
Original file line number Diff line number Diff line change
@@ -1,26 +1,31 @@
icon:
compiler:
- toolchain: gcc
spec: gcc
- toolchain: llvm
spec: nvhpc
- toolchain: gcc
spec: gcc
- toolchain: llvm
spec: nvhpc
mpi:
spec: cray-mpich@8.1.30%nvhpc
gpu: cuda
unify: true
spec: cray-mpich@8.1.32%nvhpc
gpu: cuda
specs:
# icon4py deps
- libfabric@2.4.0 +cuda +gdrcopy fabrics=cxi,rxm,tcp
- libcxi@13.0.0
- cxi-driver@13.0.0
- cassini-headers@13.0.0
- python@3.11
- py-cupy@13.3.0 +cuda cuda_arch=80
- ghex@async-mpi +python +cuda cuda_arch=80
- py-cupy@13.3 +cuda cuda_arch=80
- ghex
- oomph
- hwmalloc
- boost +thread
- py-mpi4py
- icon4py@0.0.15
- icon-exclaim @0.3.0 %nvhpc dsl=substitute +grib2 +eccodes-definitions +ecrad
- icon4py@0.1.0
- icon-exclaim@0.3.0 %nvhpc dsl=substitute +grib2 +eccodes-definitions +ecrad
~emvorado +art +dace gpu=nvidia-80 +mpi-gpu +realloc-buf ~aes ~jsbach ~ocean ~coupling
~rte-rrtmgp ~loop-exchange ~async-io-rma ~cuda-graphs fflags="-traceback"
# icon deps
- cuda@12.4
- cuda@12.6:12
- eccodes@2.36.4%nvhpc +tools +fortran +aec +openmp jp2k=jasper
- cosmo-eccodes-definitions@2.36.0.3
- hdf5%nvhpc +szip +hl +fortran +mpi
Expand All @@ -30,14 +35,15 @@ icon:
- osu-micro-benchmarks@5.9%nvhpc
- openblas
# for validation
- cdo
# - cdo # TODO: Enable? Currently broken.
# everything needed for nccl on SS11
- nccl
- nccl-tests
# extras
- libfyaml
- zlib-ng
- cmake
unify: true
variants:
- +mpi
- +cuda
Expand All @@ -46,6 +52,64 @@ icon:
default:
link: roots
uenv:
add_compilers: true
prefix_paths:
LD_LIBRARY_PATH: [lib, lib64]
# TODO: What's the cleanest way to do this? We want both dsl=substitute and
# dsl=verify available in the uenv. dsl=verify does not have to be available
# easily.
icon-verify:
compiler:
- toolchain: gcc
spec: gcc
- toolchain: llvm
spec: nvhpc
mpi:
spec: cray-mpich@8.1.32%nvhpc
gpu: cuda
specs:
# icon4py deps
- libfabric@2.4.0 +cuda +gdrcopy fabrics=cxi,rxm,tcp
- libcxi@13.0.0
- cxi-driver@13.0.0
- cassini-headers@13.0.0
- python@3.11
- py-cupy@13.3 +cuda cuda_arch=80
- ghex
- oomph
- hwmalloc
- boost +thread
- py-mpi4py
- icon4py@0.1.0
- icon-exclaim@0.3.0 %nvhpc dsl=verify +grib2 +eccodes-definitions +ecrad
~emvorado +art +dace gpu=nvidia-80 +mpi-gpu +realloc-buf ~aes ~jsbach ~ocean ~coupling
~rte-rrtmgp ~loop-exchange ~async-io-rma ~cuda-graphs fflags="-traceback"
# icon deps
- cuda@12.6:12
- eccodes@2.36.4%nvhpc +tools +fortran +aec +openmp jp2k=jasper
- cosmo-eccodes-definitions@2.36.0.3
- hdf5%nvhpc +szip +hl +fortran +mpi
- netcdf-c@4.9.2%nvhpc
- netcdf-cxx4@4.3.1%nvhpc
- netcdf-fortran@4.6.1%nvhpc
- osu-micro-benchmarks@5.9%nvhpc
- openblas
# for validation
# - cdo # TODO: Enable? Currently broken.
# everything needed for nccl on SS11
- nccl
- nccl-tests
# extras
- libfyaml
- zlib-ng
- cmake
unify: true
variants:
- +mpi
- +cuda
- cuda_arch=80
views:
default-verify:
link: roots
uenv:
prefix_paths:
LD_LIBRARY_PATH: [lib, lib64]
12 changes: 10 additions & 2 deletions recipes/icon-dsl/25.12/a100/pre-install
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,18 @@ packages=(
"oomph"
"uv"
"icon4py"
# "icon"
"libfabric"
"nccl"
"libcxi"
"cxi-driver"
"cassini-headers"
"aws-ofi-nccl"
"gdrcopy"
"gettext"
"libfuse"
# "icon-exclaim"
)
SPACK_C2SM_TAG="v0.22.2.6"
SPACK_C2SM_TAG="sc-nccl"

echo "----------------------------------------"
echo "SPACK C2SM Setup Script"
Expand Down
48 changes: 14 additions & 34 deletions recipes/icon-dsl/25.12/a100/repo/packages/icon-exclaim/package.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -365,9 +365,9 @@ class IconExclaim(Icon):

version('develop', branch='icon-dsl', submodules=True)
version("0.3.0",
commit="5c5b742a969af2bd491e26cd0a05a35838f121c4",
commit="a0be2c3e0448ec2dc92024e3b38ec635435ac0dd",
submodules=True)

# EXCLAIM-GT4Py specific features:
dsl_values = ('substitute', 'verify')
variant('dsl',
Expand All @@ -377,10 +377,19 @@ class IconExclaim(Icon):
description='Build with GT4Py dynamical core',
multi=True)

depends_on("icon4py@0.0.15", when="@0.3.0")
for x in dsl_values:
depends_on('icon4py', type="build", when=f"dsl={x}")


# TODO: Should this be set here or in the icon4py package?
def setup_build_environment(self, env):
if self.spec.variants['dsl'].value != ('none', ):
# TODO: clean up
print(f"adding {self.spec['icon4py'].prefix.share.venv.bin} to PATH for icon4py bindings because +dsl is enabled")
env.prepend_path("PATH", self.spec["icon4py"].prefix.share.venv.bin)
env.append_path("PATH", self.spec["icon4py"].prefix.share.venv.bin)


def configure_args(self):
raw_args = super().configure_args()

Expand All @@ -404,21 +413,14 @@ def configure_args(self):
dsl = self.spec.variants['dsl'].value
if dsl != ('none', ):
if 'substitute' in dsl:
args_flags.append('--enable-py2f=substitute')
args_flags.append('--enable-icon4py=substitute')
elif 'verify' in dsl:
args_flags.append('--enable-py2f=verify')
args_flags.append('--enable-icon4py=verify')
else:
raise ValueError(
f"Unknown DSL variant '{dsl}'. "
f"Valid options are: {', '.join(('none',) + dsl_values)}")

# Add icon4py paths and libs
icon4py_prefix = self.spec["icon4py"].prefix
bindings_dir = os.path.join(icon4py_prefix, "src")

ldflags.append(f"-L{bindings_dir} -Wl,-rpath,{bindings_dir}")
libs.append("-licon4py_bindings")

# Remove duplicates
icon_ldflags = list(dict.fromkeys(icon_ldflags))
ldflags = list(dict.fromkeys(ldflags))
Expand All @@ -434,25 +436,3 @@ def configure_args(self):
final_args.append("LIBS=" + " ".join(libs))

return final_args

def build(self, spec, prefix):
# Check the variant
dsl = self.spec.variants['dsl'].value
if dsl != ('none', ):
file = "icon4py_bindings.f90"

bindings_dir = os.path.join(self.spec["icon4py"].prefix, "src")
src_file = os.path.join(bindings_dir, file)

build_py2f_dir = os.path.join(self.stage.source_path, "src",
"build_py2f")
os.makedirs(build_py2f_dir, exist_ok=True)
dest_file = os.path.join(build_py2f_dir, file)

shutil.copy2(src_file, dest_file)
print(
f"Copied {src_file} to build directory {dest_file} because +dsl is enabled"
)

# Proceed with the normal build
super().build(spec, prefix)
88 changes: 40 additions & 48 deletions recipes/icon-dsl/25.12/a100/repo/packages/py-cupy/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,43 +18,19 @@ class PyCupy(PythonPackage, CudaPackage, ROCmPackage):

homepage = "https://cupy.dev/"
pypi = "cupy/cupy-8.0.0.tar.gz"
version("13.5.1", sha256="3dba2f30258463482d52deb420862fbbbaf2c446165a5e8d67377ac6cb5c0870")
version("13.4.0", sha256="d4b60e5a1d3b89be40fad0845bb9fc467a653abe8660f752416fd38d24ab7fdb")
version("13.3.0", sha256="9a2a17af2b99cce91dd1366939c3805e3f51f9de5046df64f29ccbad3bdf78ed")
version("13.2.0", sha256="e4dbd2b2ed4159a5cc0c0f98a710a014950eb2c16eeb455e956128f3b3bd0d51")
version("13.1.0", sha256="5caf62288481a27713384523623045380ff42e618be4245f478238ed1786f32d")
version("12.1.0", sha256="f6d31989cdb2d96581da12822e28b102f29e254427195c2017eac327869b7320")
version("12.0.0", sha256="61ddbbef73d50d606bd5087570645f3c91ec9176c2566784c1d486d6a3404545")
version("11.6.0", sha256="53dbb840072bb32d4bfbaa6bfa072365a30c98b1fcd1f43e48969071ad98f1a7")
version("11.5.0", sha256="4bc8565bded22cc89b210fd9fb48a5d5316f30701e12bb23852a60314e1f9f6e")
version("11.4.0", sha256="03d52b2626e02a3a2b46d714c1cd03e702c8fe33915fcca6ed8de5c539964f49")
version("11.3.0", sha256="d057cc2f73ecca06fae8b9c270d9e14116203abfd211a704810cc50a453b4c9e")
version("11.2.0", sha256="c33361f117a347a63f6996ea97446d17f1c038f1a1f533e502464235076923e2")

# version(
# "13.5.1",
# sha256="3dba2f30258463482d52deb420862fbbbaf2c446165a5e8d67377ac6cb5c0870",
# )
version(
"13.1.0",
sha256="5caf62288481a27713384523623045380ff42e618be4245f478238ed1786f32d",
)
version(
"12.1.0",
sha256="f6d31989cdb2d96581da12822e28b102f29e254427195c2017eac327869b7320",
)
version(
"12.0.0",
sha256="61ddbbef73d50d606bd5087570645f3c91ec9176c2566784c1d486d6a3404545",
)
version(
"11.6.0",
sha256="53dbb840072bb32d4bfbaa6bfa072365a30c98b1fcd1f43e48969071ad98f1a7",
)
version(
"11.5.0",
sha256="4bc8565bded22cc89b210fd9fb48a5d5316f30701e12bb23852a60314e1f9f6e",
)
version(
"11.4.0",
sha256="03d52b2626e02a3a2b46d714c1cd03e702c8fe33915fcca6ed8de5c539964f49",
)
version(
"11.3.0",
sha256="d057cc2f73ecca06fae8b9c270d9e14116203abfd211a704810cc50a453b4c9e",
)
version(
"11.2.0",
sha256="c33361f117a347a63f6996ea97446d17f1c038f1a1f533e502464235076923e2",
)

variant(
"all", default=False, description="Enable optional py-scipy, optuna, and cython"
Expand All @@ -63,32 +39,48 @@ class PyCupy(PythonPackage, CudaPackage, ROCmPackage):
depends_on("cxx", type="build") # generated

depends_on("python@3.7:", when="@:11", type=("build", "run"))
depends_on("python@3.8:", when="@12:", type=("build", "run"))
depends_on("python@3.8:3.11", when="@12", type=("build", "run"))
depends_on("python@3.9:3.13", when="@13", type=("build", "run"))
depends_on("python@3.10:", when="@14", type=("build", "run"))
depends_on("py-setuptools", type="build")
depends_on("py-cython@0.29.22:2", type="build")
depends_on("py-setuptools@:73", when="@:13.3", type="build")
depends_on("py-cython@0.29.22:0.29", type="build", when="@:13.3")
depends_on(
"py-cython@3:3.0.10,3.0.12:", type="build", when="@13.4:"
) # 3.0.11 broken likely because of cython#6335, fixed in 3.0.12
depends_on("py-cython@0.29.22:0.29", when="@:13.3 +all", type=("build", "run"))
depends_on("py-cython@3:", when="@13.4: +all", type=("build", "run"))
depends_on("py-fastrlock@0.5:", type=("build", "run"))
depends_on("py-numpy@1.20:1.25", when="@:11", type=("build", "run"))
depends_on("py-numpy@1.20:1.26", when="@12:", type=("build", "run"))
depends_on("py-numpy@1.22:1.28", when="@13:", type=("build", "run"))

depends_on("py-scipy@1.6:1.12", when="@:12+all", type=("build", "run"))
depends_on("py-scipy@1.7:1.13", when="@13:+all", type=("build", "run"))
depends_on("py-cython@0.29.22:2", when="+all", type=("build", "run"))
depends_on("py-numpy@1.20:1.26", when="@12", type=("build", "run"))
depends_on("py-numpy@1.22:1", when="@13.1", type=("build", "run"))
depends_on("py-numpy@1.22:2.0", when="@13.2", type=("build", "run"))
depends_on("py-numpy@1.22:2.2", when="@13.4", type=("build", "run"))
depends_on("py-numpy@1.22:2.3", when="@13.5", type=("build", "run"))
depends_on("py-numpy@1.24:2", when="@14", type=("build", "run"))
depends_on("py-scipy@1.6:1.11", when="@:12+all", type=("build", "run"))
depends_on("py-scipy@1.7:1.16", when="@13+all", type=("build", "run"))
depends_on("py-scipy@1.10:1.16", when="@14+all", type=("build", "run"))
depends_on("py-optuna@2:", when="+all", type=("build", "run"))
depends_on("py-optuna@3:", when="@12:+all", type=("build", "run"))

# Based on https://github.com/cupy/cupy/releases
depends_on("cuda@:11.9", when="@:11 +cuda")
depends_on("cuda@:12.1", when="@12:12.1.0 +cuda")
depends_on("cuda@:12.4", when="@13:13.4.1 +cuda")
depends_on("cuda@:12.9", when="@13.5.1: +cuda")
depends_on("cuda@:12.1", when="@13.0 +cuda")
depends_on("cuda@:12.4", when="@13.1:13.2 +cuda")
depends_on("cuda@:12.6", when="@13.3 +cuda")
depends_on("cuda@:12.8", when="@13.4 +cuda")
depends_on("cuda@:12.9", when="@13.5 +cuda")

for a in CudaPackage.cuda_arch_values:
depends_on("nccl +cuda cuda_arch={0}".format(a), when="+cuda cuda_arch={0}".format(a))
depends_on(
"nccl +cuda cuda_arch={0}".format(a), when="+cuda cuda_arch={0}".format(a)
"nccl@2.16:2.26 +cuda cuda_arch={0}".format(a), when="@13+cuda cuda_arch={0}".format(a)
)

depends_on("cutensor", when="@:12.1.0 +cuda")
depends_on("cutensor@2.0.1.2", when="@13.1: +cuda")
depends_on("cutensor@2.0", when="@13.1: +cuda")

for _arch in ROCmPackage.amdgpu_targets:
arch_str = "amdgpu_target={0}".format(_arch)
Expand Down
Loading