From 922b9b0e50eace2ae1b1f5319713f292b0238b70 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 4 Feb 2025 23:34:21 +0100 Subject: [PATCH] solver: test that we can build llvm%gcc --- lib/spack/spack/solver/concretize.lp | 1 + lib/spack/spack/test/concretization/core.py | 10 ++++++++++ lib/spack/spack/test/data/config/packages.yaml | 1 - lib/spack/spack/test/package_class.py | 2 +- var/spack/repos/builtin.mock/packages/llvm/package.py | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index cf15caa8628..85e257443bd 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -748,6 +748,7 @@ do_not_impose(EffectID, node(X, Package)) explicitly_requested_root(PossibleProvider), not self_build_requirement(PossibleProvider, ProviderNode), not explicitly_requested_root(ProviderNode), + not language(Virtual), internal_error("If a root can provide a virtual, it must be the provider"). % A package cannot be the actual provider for a virtual if it does not diff --git a/lib/spack/spack/test/concretization/core.py b/lib/spack/spack/test/concretization/core.py index af9bde8ef03..520438a9844 100644 --- a/lib/spack/spack/test/concretization/core.py +++ b/lib/spack/spack/test/concretization/core.py @@ -3214,3 +3214,13 @@ def test_compiler_attribute_is_tolerated_in_externals(mutable_config, mock_packa mutable_config.set("packages", packages_yaml["packages"]) s = spack.concretize.concretize_one("cmake") assert s.external and s.external_path == str(tmp_path) + + +def test_compiler_can_be_built_with_other_compilers(config, mock_packages): + """Tests that a compiler can be built also with another compiler.""" + s = Spec("llvm@18 +clang %gcc").concretized() + print(s.tree()) + assert s.satisfies("llvm@18") + + c_compiler = s.dependencies(virtuals=("c",)) + assert len(c_compiler) == 1 and c_compiler[0].satisfies("gcc@10") diff --git a/lib/spack/spack/test/data/config/packages.yaml b/lib/spack/spack/test/data/config/packages.yaml index 0591b88f3e9..537a8af2053 100644 --- a/lib/spack/spack/test/data/config/packages.yaml +++ b/lib/spack/spack/test/data/config/packages.yaml @@ -80,7 +80,6 @@ packages: cxx: /path/bin/g++-10 fortran: /path/bin/gfortran-10 llvm: - buildable: false externals: - spec: "llvm@15.0.0 +clang os={linux_os.name}{linux_os.version} target={target}" prefix: /path diff --git a/lib/spack/spack/test/package_class.py b/lib/spack/spack/test/package_class.py index acc43aba978..3e014647d3e 100644 --- a/lib/spack/spack/test/package_class.py +++ b/lib/spack/spack/test/package_class.py @@ -45,7 +45,7 @@ def mpileaks_possible_deps(mock_packages, mpi_names, compiler_names): "intel-parallel-studio": set(), "libdwarf": set(["libelf"] + compiler_names), "libelf": set(compiler_names), - "llvm": set(), + "llvm": {"gcc", "llvm"}, "mpich": set(compiler_names), "mpich2": set(compiler_names), "mpileaks": set(["callpath"] + mpi_names + compiler_names), diff --git a/var/spack/repos/builtin.mock/packages/llvm/package.py b/var/spack/repos/builtin.mock/packages/llvm/package.py index 92dda155172..ba1bc3d252e 100644 --- a/var/spack/repos/builtin.mock/packages/llvm/package.py +++ b/var/spack/repos/builtin.mock/packages/llvm/package.py @@ -19,6 +19,8 @@ class Llvm(Package, CompilerPackage): provides("c", "cxx", when="+clang") + depends_on("c") + c_names = ["clang"] cxx_names = ["clang++"] fortran_names = ["flang"]