diff --git a/var/spack/repos/builtin/packages/arborx/package.py b/var/spack/repos/builtin/packages/arborx/package.py index 20dcbe17f19..3099e5f11cc 100644 --- a/var/spack/repos/builtin/packages/arborx/package.py +++ b/var/spack/repos/builtin/packages/arborx/package.py @@ -110,22 +110,15 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage): conflicts("~serial", when="+trilinos") def cmake_args(self): - spec = self.spec - - if "+trilinos" in spec: - kokkos_spec = spec["trilinos"] - else: - kokkos_spec = spec["kokkos"] - + kokkos_pkg = self["trilinos"] if self.spec.satisfies("+trilinos") else self["kokkos"] options = [ - f"-DKokkos_ROOT={kokkos_spec.prefix}", + self.define("Kokkos_ROOT", kokkos_pkg.prefix), self.define_from_variant("ARBORX_ENABLE_MPI", "mpi"), ] - - if spec.satisfies("+cuda"): - options.append(f"-DCMAKE_CXX_COMPILER={kokkos_spec.kokkos_cxx}") - if spec.satisfies("+rocm"): - options.append("-DCMAKE_CXX_COMPILER=%s" % spec["hip"].hipcc) + if self.spec.satisfies("+cuda"): + options.append(self.define("CMAKE_CXX_COMPILER", kokkos_pkg.kokkos_cxx)) + if self.spec.satisfies("+rocm"): + options.append(self.define("CMAKE_CXX_COMPILER", self.spec["hip"].hipcc)) return options diff --git a/var/spack/repos/builtin/packages/compadre/package.py b/var/spack/repos/builtin/packages/compadre/package.py index bb9776f991a..943b369ae79 100644 --- a/var/spack/repos/builtin/packages/compadre/package.py +++ b/var/spack/repos/builtin/packages/compadre/package.py @@ -66,7 +66,7 @@ def cmake_args(self): [ "-DKokkosCore_PREFIX={0}".format(kokkos.prefix), "-DKokkosKernels_PREFIX={0}".format(kokkos_kernels.prefix), - "-DCMAKE_CXX_COMPILER:STRING={0}".format(spec["kokkos"].kokkos_cxx), + "-DCMAKE_CXX_COMPILER:STRING={0}".format(self["kokkos"].kokkos_cxx), # Compadre_USE_PYTHON is OFF by default "-DCompadre_USE_PYTHON=OFF", ] diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py index 6fb69dddb49..c75ccfe3de0 100644 --- a/var/spack/repos/builtin/packages/dealii/package.py +++ b/var/spack/repos/builtin/packages/dealii/package.py @@ -552,7 +552,7 @@ def cmake_args(self): ) # Make sure we use the same compiler that Trilinos uses if spec.satisfies("+trilinos"): - options.extend([self.define("CMAKE_CXX_COMPILER", spec["trilinos"].kokkos_cxx)]) + options.extend([self.define("CMAKE_CXX_COMPILER", self["trilinos"].kokkos_cxx)]) # Complex support options.append(self.define_from_variant("DEAL_II_WITH_COMPLEX_VALUES", "complex")) diff --git a/var/spack/repos/builtin/packages/exawind/package.py b/var/spack/repos/builtin/packages/exawind/package.py index 89b5aae76fa..42ada8b5431 100644 --- a/var/spack/repos/builtin/packages/exawind/package.py +++ b/var/spack/repos/builtin/packages/exawind/package.py @@ -121,9 +121,9 @@ def setup_build_environment(self, env): # Manually turn off device self.defines to solve Kokkos issues in Nalu-Wind headers env.append_flags("CXXFLAGS", "-U__HIP_DEVICE_COMPILE__ -DDESUL_HIP_RDC") if self.spec.satisfies("+cuda"): - env.set("OMPI_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) - env.set("MPICH_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) - env.set("MPICXX_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("OMPI_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("MPICH_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("MPICXX_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) if self.spec.satisfies("+rocm"): env.set("OMPI_CXX", self.spec["hip"].hipcc) env.set("MPICH_CXX", self.spec["hip"].hipcc) diff --git a/var/spack/repos/builtin/packages/flecsi/package.py b/var/spack/repos/builtin/packages/flecsi/package.py index a2de79a6743..c37fd487005 100644 --- a/var/spack/repos/builtin/packages/flecsi/package.py +++ b/var/spack/repos/builtin/packages/flecsi/package.py @@ -147,7 +147,7 @@ def cmake_args(self): # CMake pulled in via find_package(Legion) won't work without this options.append(self.define("HIP_PATH", "{0}/hip".format(spec["hip"].prefix))) elif self.spec.satisfies("^kokkos"): - options.append(self.define("CMAKE_CXX_COMPILER", self.spec["kokkos"].kokkos_cxx)) + options.append(self.define("CMAKE_CXX_COMPILER", self["kokkos"].kokkos_cxx)) else: # kept for supporing version prior to 2.2 options = [ diff --git a/var/spack/repos/builtin/packages/kokkos-kernels/package.py b/var/spack/repos/builtin/packages/kokkos-kernels/package.py index 98848493ef7..1200d29dcd9 100644 --- a/var/spack/repos/builtin/packages/kokkos-kernels/package.py +++ b/var/spack/repos/builtin/packages/kokkos-kernels/package.py @@ -267,7 +267,7 @@ def cmake_args(self): options.append("-DCMAKE_CXX_COMPILER=%s" % spec["hip"].hipcc) else: # Compiler weirdness due to nvcc_wrapper - options.append("-DCMAKE_CXX_COMPILER=%s" % spec["kokkos"].kokkos_cxx) + options.append("-DCMAKE_CXX_COMPILER=%s" % self["kokkos"].kokkos_cxx) if self.run_tests: options.append("-DKokkosKernels_ENABLE_TESTS=ON") diff --git a/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py b/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py index 42497a7f2ef..75a1adbb792 100644 --- a/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py +++ b/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py @@ -69,6 +69,6 @@ def setup_dependent_build_environment(self, env, dependent_spec): env.set("OMPI_CXX", wrapper) env.set("MPICXX_CXX", wrapper) # HPE MPT - def setup_dependent_package(self, module, dependent_spec): - wrapper = join_path(self.prefix.bin, "nvcc_wrapper") - self.spec.kokkos_cxx = wrapper + @property + def kokkos_cxx(self) -> str: + return join_path(self.prefix.bin, "nvcc_wrapper") diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py index a9a717684ad..ece0d78667f 100644 --- a/var/spack/repos/builtin/packages/kokkos/package.py +++ b/var/spack/repos/builtin/packages/kokkos/package.py @@ -408,11 +408,12 @@ def append_args(self, cmake_prefix, cmake_options, spack_options): if option: spack_options.append(option) - def setup_dependent_package(self, module, dependent_spec): - try: - self.spec.kokkos_cxx = self.spec["kokkos-nvcc-wrapper"].kokkos_cxx - except Exception: - self.spec.kokkos_cxx = spack_cxx + @property + def kokkos_cxx(self) -> str: + if self.spec.satisfies("+wrapper"): + return self["kokkos-nvcc-wrapper"].kokkos_cxx + # Assumes build-time globals have been set already + return spack_cxx def cmake_args(self): spec = self.spec @@ -474,9 +475,7 @@ def cmake_args(self): options.append(self.define(tpl + "_DIR", spec[tpl].prefix)) if self.spec.satisfies("+wrapper"): - options.append( - self.define("CMAKE_CXX_COMPILER", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) - ) + options.append(self.define("CMAKE_CXX_COMPILER", self.kokkos_cxx)) elif "+rocm" in self.spec: if "+cmake_lang" in self.spec: options.append( diff --git a/var/spack/repos/builtin/packages/legion/package.py b/var/spack/repos/builtin/packages/legion/package.py index dbd636ff768..ff3227918f9 100644 --- a/var/spack/repos/builtin/packages/legion/package.py +++ b/var/spack/repos/builtin/packages/legion/package.py @@ -406,7 +406,7 @@ def cmake_args(self): if spec.satisfies("+kokkos"): # default is off. options.append("-DLegion_USE_Kokkos=ON") - os.environ["KOKKOS_CXX_COMPILER"] = spec["kokkos"].kokkos_cxx + os.environ["KOKKOS_CXX_COMPILER"] = self["kokkos"].kokkos_cxx if spec.satisfies("+cuda+cuda_unsupported_compiler ^kokkos%clang +cuda"): # Keep CMake CUDA compiler detection happy options.append( diff --git a/var/spack/repos/builtin/packages/nalu-wind/package.py b/var/spack/repos/builtin/packages/nalu-wind/package.py index c8093159135..b9a4a04750e 100644 --- a/var/spack/repos/builtin/packages/nalu-wind/package.py +++ b/var/spack/repos/builtin/packages/nalu-wind/package.py @@ -140,9 +140,9 @@ def setup_build_environment(self, env): spec = self.spec env.append_flags("CXXFLAGS", "-DUSE_STK_SIMD_NONE") if spec.satisfies("+cuda"): - env.set("OMPI_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) - env.set("MPICH_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) - env.set("MPICXX_CXX", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("OMPI_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("MPICH_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("MPICXX_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) if spec.satisfies("+rocm"): env.append_flags("CXXFLAGS", "-fgpu-rdc") diff --git a/var/spack/repos/builtin/packages/nlcglib/package.py b/var/spack/repos/builtin/packages/nlcglib/package.py index d5c17f3ac59..55ac169201a 100644 --- a/var/spack/repos/builtin/packages/nlcglib/package.py +++ b/var/spack/repos/builtin/packages/nlcglib/package.py @@ -116,7 +116,7 @@ def cmake_args(self): if "+cuda%gcc" in self.spec: options += [ self.define( - "CMAKE_CXX_COMPILER", "{0}".format(self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) + "CMAKE_CXX_COMPILER", "{0}".format(self["kokkos-nvcc-wrapper"].kokkos_cxx) ) ] diff --git a/var/spack/repos/builtin/packages/py-pycompadre/package.py b/var/spack/repos/builtin/packages/py-pycompadre/package.py index 339852892b6..da1760d87d9 100644 --- a/var/spack/repos/builtin/packages/py-pycompadre/package.py +++ b/var/spack/repos/builtin/packages/py-pycompadre/package.py @@ -61,7 +61,7 @@ def set_cmake_from_variants(self): with open("cmake_opts.txt", "w") as f: f.write("KokkosCore_PREFIX:PATH=%s\n" % spec["kokkos"].prefix) f.write("KokkosKernels_PREFIX:PATH=%s\n" % spec["kokkos-kernels"].prefix) - f.write("CMAKE_CXX_COMPILER:STRING={0}\n".format(spec["kokkos"].kokkos_cxx)) + f.write("CMAKE_CXX_COMPILER:STRING={0}\n".format(self["kokkos"].kokkos_cxx)) if spec.variants["debug"].value == "0": f.write( "CMAKE_CXX_FLAGS:STRING=%s\n" diff --git a/var/spack/repos/builtin/packages/singularity-eos/package.py b/var/spack/repos/builtin/packages/singularity-eos/package.py index 62d0bfd6648..d300575d39b 100644 --- a/var/spack/repos/builtin/packages/singularity-eos/package.py +++ b/var/spack/repos/builtin/packages/singularity-eos/package.py @@ -184,7 +184,7 @@ def cmake_args(self): ] if "+kokkos+cuda" in self.spec: - args.append(self.define("CMAKE_CXX_COMPILER", self.spec["kokkos"].kokkos_cxx)) + args.append(self.define("CMAKE_CXX_COMPILER", self["kokkos"].kokkos_cxx)) return args diff --git a/var/spack/repos/builtin/packages/spiner/package.py b/var/spack/repos/builtin/packages/spiner/package.py index dcc5722c535..be219868cfa 100644 --- a/var/spack/repos/builtin/packages/spiner/package.py +++ b/var/spack/repos/builtin/packages/spiner/package.py @@ -98,5 +98,5 @@ def cmake_args(self): args.append(self.define("CMAKE_CXX_COMPILER", self.spec["hip"].hipcc)) args.append(self.define("CMAKE_C_COMPILER", self.spec["hip"].hipcc)) if self.spec.satisfies("^kokkos+cuda"): - args.append(self.define("CMAKE_CXX_COMPILER", self.spec["kokkos"].kokkos_cxx)) + args.append(self.define("CMAKE_CXX_COMPILER", self["kokkos"].kokkos_cxx)) return args diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index 89224744bd0..d346b5e0a10 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -589,21 +589,22 @@ def setup_dependent_run_environment(self, env, dependent_spec): # in case the dependent app also run a CUDA backend via Trilinos env.set("CUDA_LAUNCH_BLOCKING", "1") - def setup_dependent_package(self, module, dependent_spec): - if "+wrapper" in self.spec: - self.spec.kokkos_cxx = self.spec["kokkos-nvcc-wrapper"].kokkos_cxx - else: - self.spec.kokkos_cxx = spack_cxx + @property + def kokkos_cxx(self) -> str: + if self.spec.satisfies("+wrapper"): + return self["kokkos-nvcc-wrapper"].kokkos_cxx + # Assumes build-time globals have been set already + return spack_cxx def setup_build_environment(self, env): spec = self.spec if "+cuda" in spec and "+wrapper" in spec: if "+mpi" in spec: - env.set("OMPI_CXX", spec["kokkos-nvcc-wrapper"].kokkos_cxx) - env.set("MPICH_CXX", spec["kokkos-nvcc-wrapper"].kokkos_cxx) - env.set("MPICXX_CXX", spec["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("OMPI_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("MPICH_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("MPICXX_CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) else: - env.set("CXX", spec["kokkos-nvcc-wrapper"].kokkos_cxx) + env.set("CXX", self["kokkos-nvcc-wrapper"].kokkos_cxx) if "+rocm" in spec: if "+mpi" in spec: