From d17c118a783b98c4ac2a3fe4687d77ce7fa595d5 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Fri, 21 Mar 2025 09:58:06 +0100 Subject: [PATCH] add hip-lang as a language virtual --- etc/spack/defaults/packages.yaml | 1 + lib/spack/spack/solver/concretize.lp | 1 + .../builtin/packages/llvm-amdgpu/package.py | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml index f23d55ffb9f..c05a1daa2ef 100644 --- a/etc/spack/defaults/packages.yaml +++ b/etc/spack/defaults/packages.yaml @@ -33,6 +33,7 @@ packages: glu: [mesa-glu, openglu] golang: [go, gcc] go-or-gccgo-bootstrap: [go-bootstrap, gcc] + hip-lang: [llvm-amdgpu] iconv: [libiconv] ipp: [intel-oneapi-ipp] java: [openjdk, jdk] diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index de25bbf5dac..52da588be07 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -1421,6 +1421,7 @@ compiler(Compiler) :- compiler_supports_target(Compiler, _, _). language("c"). language("cxx"). language("fortran"). +language("hip-lang"). language_runtime("fortran-rt"). error(10, "Only external, or concrete, compilers are allowed for the {0} language", Language) diff --git a/var/spack/repos/builtin/packages/llvm-amdgpu/package.py b/var/spack/repos/builtin/packages/llvm-amdgpu/package.py index 6497165455e..1a8f54c2573 100644 --- a/var/spack/repos/builtin/packages/llvm-amdgpu/package.py +++ b/var/spack/repos/builtin/packages/llvm-amdgpu/package.py @@ -59,6 +59,7 @@ class LlvmAmdgpu(CMakePackage, LlvmDetection, CompilerPackage): version("5.3.0", sha256="4e3fcddb5b8ea8dcaa4417e0e31a9c2bbdc9e7d4ac3401635a636df32905c93e") provides("c", "cxx") + provides("hip-lang") provides("fortran") variant( @@ -372,3 +373,20 @@ def _cxx_path(self): def _fortran_path(self): return os.path.join(self.spec.prefix.bin, "amdflang") + + @classmethod + def runtime_constraints(cls, *, spec, pkg): + """Callback function to inject runtime-related rules into the solver. + + Rule-injection is obtained through method calls of the ``pkg`` argument. + + Args: + spec: spec that will inject runtime dependencies + pkg: object used to forward information to the solver + """ + pkg("*").depends_on( + "hip +rocm", + when="%[virtuals=hip-lang] llvm-amdgpu", + type="link", + description="If any package uses %llvm-amdgpu for hip-lang, it depends on hip", + )