diff options
-rw-r--r-- | share/spack/gitlab/cloud_pipelines/stacks/radiuss/spack.yaml | 5 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ascent/package.py | 5 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/caliper/package.py | 144 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/camp/package.py | 29 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/care/package.py | 273 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/chai/package.py | 59 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/fmt/package.py | 4 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/raja-perf/package.py | 344 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/raja/package.py | 110 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/umpire/package.py | 94 |
10 files changed, 834 insertions, 233 deletions
diff --git a/share/spack/gitlab/cloud_pipelines/stacks/radiuss/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/radiuss/spack.yaml index a8b064535b..3aea6fc48a 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/radiuss/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/radiuss/spack.yaml @@ -17,8 +17,8 @@ spack: - axom - blt - caliper - #- care ## ~benchmarks ~examples ~tests - #- chai ## ~examples + - care # ~benchmarks ~examples ~tests + - chai # ~examples - conduit # ^hdf5+shared - flux-core #- flux-sched @@ -31,6 +31,7 @@ spack: - py-merlin - py-shroud - raja # ~examples # ~tests + - raja-perf - samrai - scr - sundials diff --git a/var/spack/repos/builtin/packages/ascent/package.py b/var/spack/repos/builtin/packages/ascent/package.py index 4bc1c8922e..247705a956 100644 --- a/var/spack/repos/builtin/packages/ascent/package.py +++ b/var/spack/repos/builtin/packages/ascent/package.py @@ -196,14 +196,14 @@ class Ascent(CMakePackage, CudaPackage): ####################### with when("+raja"): depends_on("raja") - depends_on("raja@2024.02.1:", when="@0.9.3:") + depends_on("raja@2024.02.1:2024.02.99", when="@0.9.3:") depends_on("raja+openmp", when="+openmp") depends_on("raja~openmp", when="~openmp") with when("+umpire"): depends_on("umpire") depends_on("umpire@:2023.06.0", when="@:0.9.2") - depends_on("umpire@2024.02.1:", when="@0.9.3:") + depends_on("umpire@2024.02.1:2024.02.99", when="@0.9.3:") ####################### # BabelFlow @@ -216,6 +216,7 @@ class Ascent(CMakePackage, CudaPackage): ####################### with when("+vtkh"): depends_on("vtk-m +doubleprecision ~64bitids") + depends_on("vtk-m@2.1:", when="@0.9.3:") depends_on("vtk-m@2.0:", when="@0.9.2:") # 2.1 support needs commit e52b7bb8c9fd131f2fd49edf58037cc5ef77a166 depends_on("vtk-m@:2.0", when="@:0.9.2") diff --git a/var/spack/repos/builtin/packages/caliper/package.py b/var/spack/repos/builtin/packages/caliper/package.py index 01857c5f33..e165899674 100644 --- a/var/spack/repos/builtin/packages/caliper/package.py +++ b/var/spack/repos/builtin/packages/caliper/package.py @@ -9,7 +9,7 @@ import sys from spack.package import * -class Caliper(CMakePackage, CudaPackage, ROCmPackage): +class Caliper(CachedCMakePackage, CudaPackage, ROCmPackage): """Caliper is a program instrumentation and performance measurement framework. It is designed as a performance analysis toolbox in a library, allowing one to bake performance analysis capabilities @@ -21,7 +21,7 @@ class Caliper(CMakePackage, CudaPackage, ROCmPackage): url = "https://github.com/LLNL/Caliper/archive/v2.11.0.tar.gz" tags = ["e4s", "radiuss"] - maintainers("daboehme") + maintainers("daboehme", "adrienbernede") test_requires_compiler = True @@ -134,69 +134,109 @@ class Caliper(CMakePackage, CudaPackage, ROCmPackage): when="@2.9.0:2.9.1 +libunwind +sampler", ) - def cmake_args(self): + def _get_sys_type(self, spec): + sys_type = spec.architecture + if "SYS_TYPE" in env: + sys_type = env["SYS_TYPE"] + return sys_type + + def initconfig_compiler_entries(self): + spec = self.spec + entries = super().initconfig_compiler_entries() + + if spec.satisfies("+rocm"): + entries.insert(0, cmake_cache_path("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) + + entries.append(cmake_cache_option("WITH_FORTRAN", spec.satisfies("+fortran"))) + + entries.append(cmake_cache_option("BUILD_SHARED_LIBS", spec.satisfies("+shared"))) + entries.append(cmake_cache_option("BUILD_TESTING", spec.satisfies("+tests"))) + entries.append(cmake_cache_option("BUILD_DOCS", False)) + entries.append(cmake_cache_path("PYTHON_EXECUTABLE", spec["python"].command.path)) + + return entries + + def initconfig_hardware_entries(self): + spec = self.spec + entries = super().initconfig_hardware_entries() + + if spec.satisfies("+cuda"): + entries.append(cmake_cache_option("WITH_CUPTI", True)) + entries.append(cmake_cache_option("WITH_NVTX", True)) + entries.append(cmake_cache_path("CUDA_TOOLKIT_ROOT_DIR", spec["cuda"].prefix)) + entries.append(cmake_cache_path("CUPTI_PREFIX", spec["cuda"].prefix)) + else: + entries.append(cmake_cache_option("WITH_CUPTI", False)) + entries.append(cmake_cache_option("WITH_NVTX", False)) + + if spec.satisfies("+rocm"): + entries.append(cmake_cache_option("WITH_ROCTRACER", True)) + entries.append(cmake_cache_option("WITH_ROCTX", True)) + else: + entries.append(cmake_cache_option("WITH_ROCTRACER", False)) + entries.append(cmake_cache_option("WITH_ROCTX", False)) + + return entries + + def initconfig_mpi_entries(self): spec = self.spec + entries = super().initconfig_mpi_entries() - args = [ - "-DBUILD_TESTING=Off", - "-DBUILD_DOCS=Off", - self.define_from_variant("BUILD_SHARED_LIBS", "shared"), - self.define_from_variant("WITH_ADIAK", "adiak"), - self.define_from_variant("WITH_GOTCHA", "gotcha"), - self.define_from_variant("WITH_PAPI", "papi"), - self.define_from_variant("WITH_LIBDW", "libdw"), - self.define_from_variant("WITH_LIBPFM", "libpfm"), - self.define_from_variant("WITH_SOSFLOW", "sosflow"), - self.define_from_variant("WITH_SAMPLER", "sampler"), - self.define_from_variant("WITH_MPI", "mpi"), - self.define_from_variant("WITH_FORTRAN", "fortran"), - self.define_from_variant("WITH_CUPTI", "cuda"), - self.define_from_variant("WITH_NVTX", "cuda"), - self.define_from_variant("WITH_ROCTRACER", "rocm"), - self.define_from_variant("WITH_ROCTX", "rocm"), - self.define_from_variant("WITH_VARIORUM", "variorum"), - self.define_from_variant("WITH_VTUNE", "vtune"), - self.define_from_variant("WITH_KOKKOS", "kokkos"), - ] + entries.append(cmake_cache_option("WITH_MPI", spec.satisfies("+mpi"))) + return entries + + def initconfig_package_entries(self): + spec = self.spec + entries = [] + + # TPL locations + entries.append("#------------------{0}".format("-" * 60)) + entries.append("# TPLs") + entries.append("#------------------{0}\n".format("-" * 60)) + + if spec.satisfies("+adiak"): + entries.append(cmake_cache_path("adiak_DIR", spec["adiak"].prefix)) if spec.satisfies("+papi"): - args.append("-DPAPI_PREFIX=%s" % spec["papi"].prefix) + entries.append(cmake_cache_path("PAPI_PREFIX", spec["papi"].prefix)) if spec.satisfies("+libdw"): - args.append("-DLIBDW_PREFIX=%s" % spec["elfutils"].prefix) + entries.append(cmake_cache_path("LIBDW_PREFIX", spec["elfutils"].prefix)) if spec.satisfies("+libpfm"): - args.append("-DLIBPFM_INSTALL=%s" % spec["libpfm4"].prefix) + entries.append(cmake_cache_path("LIBPFM_INSTALL", spec["libpfm4"].prefix)) if spec.satisfies("+sosflow"): - args.append("-DSOS_PREFIX=%s" % spec["sosflow"].prefix) + entries.append(cmake_cache_path("SOS_PREFIX", spec["sosflow"].prefix)) if spec.satisfies("+variorum"): - args.append("-DVARIORUM_PREFIX=%s" % spec["variorum"].prefix) + entries.append(cmake_cache_path("VARIORUM_PREFIX", spec["variorum"].prefix)) + if spec.satisfies("+vtune"): + itt_dir = join_path(spec["intel-oneapi-vtune"].prefix, "vtune", "latest") + entries.append(cmake_cache_path("ITT_PREFIX", itt_dir)) + if spec.satisfies("+libunwind"): + entries.append(cmake_cache_path("LIBUNWIND_PREFIX", spec["unwind"].prefix)) + + # Build options + entries.append("#------------------{0}".format("-" * 60)) + entries.append("# Build Options") + entries.append("#------------------{0}\n".format("-" * 60)) + + entries.append(cmake_cache_option("WITH_ADIAK", spec.satisfies("+adiak"))) + entries.append(cmake_cache_option("WITH_GOTCHA", spec.satisfies("+gotcha"))) + entries.append(cmake_cache_option("WITH_SAMPLER", spec.satisfies("+sampler"))) + entries.append(cmake_cache_option("WITH_PAPI", spec.satisfies("+papi"))) + entries.append(cmake_cache_option("WITH_LIBDW", spec.satisfies("+libdw"))) + entries.append(cmake_cache_option("WITH_LIBPFM", spec.satisfies("+libpfm"))) + entries.append(cmake_cache_option("WITH_SOSFLOW", spec.satisfies("+sosflow"))) + entries.append(cmake_cache_option("WITH_KOKKOS", spec.satisfies("+kokkos"))) + entries.append(cmake_cache_option("WITH_VARIORUM", spec.satisfies("+variorum"))) + entries.append(cmake_cache_option("WITH_VTUNE", spec.satisfies("+vtune"))) # -DWITH_CALLPATH was renamed -DWITH_LIBUNWIND in 2.5 callpath_flag = "LIBUNWIND" if spec.satisfies("@2.5:") else "CALLPATH" - if spec.satisfies("+libunwind"): - args.append("-DLIBUNWIND_PREFIX=%s" % spec["unwind"].prefix) - args.append("-DWITH_%s=On" % callpath_flag) - else: - args.append("-DWITH_%s=Off" % callpath_flag) + entries.append(cmake_cache_option("WITH_%s" % callpath_flag, spec.satisfies("+libunwind"))) - if spec.satisfies("+mpi"): - args.append("-DMPI_C_COMPILER=%s" % spec["mpi"].mpicc) - args.append("-DMPI_CXX_COMPILER=%s" % spec["mpi"].mpicxx) + return entries - if spec.satisfies("+cuda"): - args.append("-DCUDA_TOOLKIT_ROOT_DIR=%s" % spec["cuda"].prefix) - # technically only works with cuda 10.2+, otherwise cupti is in - # ${CUDA_TOOLKIT_ROOT_DIR}/extras/CUPTI - args.append("-DCUPTI_PREFIX=%s" % spec["cuda"].prefix) - - if spec.satisfies("+vtune"): - itt_dir = join_path(spec["intel-oneapi-vtune"].prefix, "vtune", "latest") - args.append("-DITT_PREFIX=%s" % itt_dir) - - if spec.satisfies("+rocm"): - args.append("-DCMAKE_CXX_COMPILER={0}".format(spec["hip"].hipcc)) - args.append("-DROCM_PREFIX=%s" % spec["hsa-rocr-dev"].prefix) - - return args + def cmake_args(self): + return [] @run_after("install") def cache_test_sources(self): diff --git a/var/spack/repos/builtin/packages/camp/package.py b/var/spack/repos/builtin/packages/camp/package.py index 6e1d44188d..7e7c305b18 100644 --- a/var/spack/repos/builtin/packages/camp/package.py +++ b/var/spack/repos/builtin/packages/camp/package.py @@ -22,8 +22,14 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage): version("main", branch="main", submodules=False) version( + "2024.07.0", + tag="v2024.07.0", + commit="0f07de4240c42e0b38a8d872a20440cb4b33d9f5", + submodules=False, + ) + version( "2024.02.1", - tag="v2024.02.", + tag="v2024.02.1", commit="79c320fa09db987923b56884afdc9f82f4b70fc4", submodules=False, ) @@ -53,12 +59,14 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage): # TODO: figure out gtest dependency and then set this default True. variant("tests", default=False, description="Build tests") variant("openmp", default=False, description="Build with OpenMP support") + variant("omptarget", default=False, description="Build with OpenMP Target support") + variant("sycl", default=False, description="Build with Sycl support") depends_on("cub", when="+cuda") depends_on("blt", type="build") depends_on("blt@0.6.2:", type="build", when="@2024.02.1:") - depends_on("blt@0.6.1:", type="build", when="@2024.02.0:") + depends_on("blt@0.6.1", type="build", when="@2024.02.0") depends_on("blt@0.5.0:0.5.3", type="build", when="@2022.03.0:2023.06.0") patch("libstdc++-13-missing-header.patch", when="@:2022.10") @@ -67,6 +75,16 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage): conflicts("^blt@:0.3.6", when="+rocm") + conflicts("+omptarget +rocm") + conflicts("+sycl +omptarget") + conflicts("+sycl +rocm") + conflicts( + "+sycl", + when="@:2024.02.99", + msg="Support for SYCL was introduced in RAJA after 2024.02 release, " + "please use a newer release.", + ) + def cmake_args(self): spec = self.spec @@ -94,7 +112,12 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage): options.append("-DGPU_TARGETS={0}".format(archs)) options.append("-DAMDGPU_TARGETS={0}".format(archs)) - options.append(self.define_from_variant("ENABLE_OPENMP", "openmp")) + if spec.satisfies("+omptarget"): + options.append(cmake_cache_string("RAJA_DATA_ALIGN", 64)) + options.append(self.define_from_variant("ENABLE_TESTS", "tests")) + options.append(self.define_from_variant("ENABLE_OPENMP", "openmp")) + options.append(self.define_from_variant("CAMP_ENABLE_TARGET_OPENMP", "omptarget")) + options.append(self.define_from_variant("ENABLE_SYCL", "sycl")) return options diff --git a/var/spack/repos/builtin/packages/care/package.py b/var/spack/repos/builtin/packages/care/package.py index 34fdc7d3a0..f6465bb4ca 100644 --- a/var/spack/repos/builtin/packages/care/package.py +++ b/var/spack/repos/builtin/packages/care/package.py @@ -3,42 +3,59 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import socket + from spack.package import * +from .blt import llnl_link_helpers + -class Care(CMakePackage, CudaPackage, ROCmPackage): +class Care(CachedCMakePackage, CudaPackage, ROCmPackage): """ - Algorithms for chai managed arrays. + CHAI and RAJA extensions (includes data structures and algorithms). """ homepage = "https://github.com/LLNL/CARE" git = "https://github.com/LLNL/CARE.git" tags = ["radiuss"] - license("GPL-2.0-or-later") + license("BSD-3-Clause") - maintainers("adayton1") + maintainers("adayton1", "adrienbernede") - version("develop", branch="develop", submodules="True") - version("master", branch="main", submodules="True") + version("develop", branch="develop", submodules=False) + version("master", branch="master", submodules=False) + version( + "0.13.3", + tag="v0.13.3", + commit="93853696b452647278eae9311b835ad206236522", + submodules=False, + ) + version( + "0.13.2", + tag="v0.13.2", + commit="b25dcd2a35683a68db1c25173e849be69833ed4f", + submodules=False, + ) version( "0.13.1", tag="v0.13.1", commit="0fd0d47aaaa57076f26caad88e667fbc01ff7214", - submodules="True", + submodules=False, ) version( "0.13.0", tag="v0.13.0", commit="2b288e2c557c3b14befeebc8e14a7d48348bd857", - submodules="True", + submodules=False, ) version( "0.12.0", tag="v0.12.0", commit="a9978083035eb00a090451bd36d7987bc935204d", - submodules="True", + submodules=False, ) + version("0.10.0", tag="v0.10.0", submodules="True") version( "0.3.0", tag="v0.3.0", commit="5e2b69b2836c9f2215207ca9a36a690cb77eea33", submodules="True" ) @@ -50,137 +67,219 @@ class Care(CMakePackage, CudaPackage, ROCmPackage): depends_on("cxx", type="build") # generated depends_on("fortran", type="build") # generated - variant("openmp", default=False, description="Build Shared Libs") + variant("openmp", default=False, description="Build with OpenMP support") + variant("mpi", default=False, description="Enable MPI support") variant( "implicit_conversions", - default=True, + default=False, description="Enable implicit" "conversions to/from raw pointers", ) - variant("benchmarks", default=True, description="Build benchmarks.") - variant("examples", default=True, description="Build examples.") - variant("docs", default=False, description="Build documentation") variant("tests", default=False, description="Build tests") + variant("benchmarks", default=False, description="Build benchmarks.") + variant("examples", default=False, description="Build examples.") + variant("docs", default=False, description="Build documentation") variant("loop_fuser", default=False, description="Enable loop fusion capability") - depends_on("cmake@3.8:", type="build") - depends_on("cmake@3.9:", type="build", when="+cuda") - depends_on("cmake@3.18:", type="build", when="@0.12.0:") + depends_on("cmake", type="build") + depends_on("cmake@3.23:", type="build", when="@0.13.2:") depends_on("cmake@3.21:", type="build", when="@0.12.0:+rocm") + depends_on("cmake@3.18:", type="build", when="@0.12.0:") + depends_on("cmake@3.14:", type="build", when="@0.10.0:") + depends_on("cmake@3.9:", type="build", when="+cuda") + depends_on("cmake@3.8:", type="build") - depends_on("blt") + depends_on("blt", type="build") depends_on("blt@0.6.2:", type="build", when="@0.13.0:") depends_on("blt@0.6.1:", type="build", when="@0.12.0:") - depends_on("blt@0.4.0:", type="build", when="@0.3.1:") + depends_on("blt@0.5.2:", type="build", when="@0.10.0:") + depends_on("blt@0.4.1:", type="build", when="@0.3.1:") depends_on("blt@:0.3.6", type="build", when="@:0.3.0") conflicts("^blt@:0.3.6", when="+rocm") depends_on("camp", when="@:0.11.1") depends_on("umpire") + depends_on("umpire+mpi", when="+mpi") + depends_on("umpire@2024.07.0:", when="@0.13.2:") depends_on("umpire@2024.02.1:", when="@0.13.0:") depends_on("umpire@2024.02.0:", when="@0.12.0:") + depends_on("umpire@2022.10.0:", when="@0.10.0:") depends_on("raja") + depends_on("raja@2024.07.0:", when="@0.13.2:") depends_on("raja@2024.02.2:", when="@0.13.1:") depends_on("raja@2024.02.1:", when="@0.13.0:") depends_on("raja@2024.02.0:", when="@0.12.0:") + depends_on("raja@2022.10.5:", when="@0.10.0:") + # TODO: Add an enable_pick variant depends_on("chai+enable_pick+raja") + depends_on("chai@2024.07.0:", when="@0.13.2:") depends_on("chai@2024.02.2:", when="@0.13.1:") depends_on("chai@2024.02.1:", when="@0.13.0:") depends_on("chai@2024.02.0:", when="@0.12.0:") - - # pass on +cuda variants - # WARNING: this package currently only supports an internal cub - # package. This will cause a race condition if compiled with another - # package that uses cub. TODO: have all packages point to the same external - # cub package. - depends_on("cub", when="+cuda") - depends_on("camp+cuda", when="+cuda") - depends_on("umpire+cuda~shared", when="+cuda") - depends_on("raja+cuda~openmp", when="+cuda") - depends_on("chai+cuda~shared", when="+cuda") - - # variants +rocm and amdgpu_targets are not automatically passed to - # dependencies, so do it manually. - depends_on("camp+rocm", when="+rocm") - depends_on("umpire+rocm", when="+rocm") - depends_on("raja+rocm~openmp", when="+rocm") - depends_on("chai+rocm", when="+rocm") - for val in ROCmPackage.amdgpu_targets: - depends_on("camp amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) - depends_on("umpire amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) - depends_on("raja amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) - depends_on("chai amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) + depends_on("chai@2022.10.0:", when="@0.10.0:") conflicts("+openmp", when="+rocm") conflicts("+openmp", when="+cuda") + conflicts("~tests", when="+benchmarks") - def cmake_args(self): - spec = self.spec - from_variant = self.define_from_variant + with when("+openmp"): + depends_on("umpire+openmp") + depends_on("raja+openmp") + depends_on("chai+openmp") - options = [] - options.append("-DBLT_SOURCE_DIR={0}".format(spec["blt"].prefix)) + with when("+cuda"): + # WARNING: this package currently only supports an internal cub + # package. This will cause a race condition if compiled with another + # package that uses cub. TODO: have all packages point to the same external + # cub package. + depends_on("cub") - if spec.satisfies("+cuda"): - options.extend( - [ - "-DENABLE_CUDA=ON", - "-DCUDA_TOOLKIT_ROOT_DIR=" + spec["cuda"].prefix, - "-DNVTOOLSEXT_DIR=" + spec["cuda"].prefix, - "-DCUB_DIR=" + spec["cub"].prefix, - ] + depends_on("umpire+cuda") + depends_on("raja+cuda") + depends_on("chai+cuda") + + for sm_ in CudaPackage.cuda_arch_values: + depends_on("umpire+cuda cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + depends_on("raja+cuda cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + depends_on("chai+cuda cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + + with when("+rocm"): + depends_on("umpire+rocm") + depends_on("raja+rocm") + depends_on("chai+rocm") + + for arch_ in ROCmPackage.amdgpu_targets: + depends_on( + "umpire+rocm amdgpu_target={0}".format(arch_), + when="amdgpu_target={0}".format(arch_), + ) + depends_on( + "raja+rocm amdgpu_target={0}".format(arch_), when="amdgpu_target={0}".format(arch_) + ) + depends_on( + "chai+rocm amdgpu_target={0}".format(arch_), when="amdgpu_target={0}".format(arch_) ) - if not spec.satisfies("cuda_arch=none"): - cuda_arch = spec.variants["cuda_arch"].value - # Please note that within care, CUDA_ARCH is assigned to -code - # and likewise CUDA_CODE is assigned to -arch, so these are - # intentionally flipped here. - options.append("-DCUDA_ARCH=sm_{0}".format(cuda_arch[0])) - options.append("-DCUDA_CODE=compute_{0}".format(cuda_arch[0])) - else: - options.append("-DENABLE_CUDA=OFF") + def _get_sys_type(self, spec): + sys_type = spec.architecture + if "SYS_TYPE" in env: + sys_type = env["SYS_TYPE"] + return sys_type + + @property + def cache_name(self): + hostname = socket.gethostname() + + if "SYS_TYPE" in env: + hostname = hostname.rstrip("1234567890") + return "{0}-{1}-{2}@{3}-{4}.cmake".format( + hostname, + self._get_sys_type(self.spec), + self.spec.compiler.name, + self.spec.compiler.version, + self.spec.dag_hash(8), + ) + + def initconfig_compiler_entries(self): + spec = self.spec + compiler = self.compiler + entries = super().initconfig_compiler_entries() if spec.satisfies("+rocm"): - options.extend(["-DENABLE_HIP=ON", "-DHIP_ROOT_DIR={0}".format(spec["hip"].prefix)]) + entries.insert(0, cmake_cache_path("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) + + llnl_link_helpers(entries, spec, compiler) + + return entries + + def initconfig_hardware_entries(self): + spec = self.spec + entries = super().initconfig_hardware_entries() + + entries.append(cmake_cache_option("ENABLE_OPENMP", spec.satisfies("+openmp"))) + + if spec.satisfies("+cuda"): + entries.append(cmake_cache_option("ENABLE_CUDA", True)) + entries.append(cmake_cache_option("CUDA_SEPARABLE_COMPILATION", True)) + entries.append(cmake_cache_string("NVTOOLSEXT_DIR", spec["cuda"].prefix)) + entries.append(cmake_cache_string("CUB_DIR", spec["cub"].prefix)) + else: + entries.append(cmake_cache_option("ENABLE_CUDA", False)) + if spec.satisfies("+rocm"): + entries.append(cmake_cache_option("ENABLE_HIP", True)) archs = self.spec.variants["amdgpu_target"].value if archs != "none": arch_str = ",".join(archs) - options.append("-DHIP_HIPCC_FLAGS=--amdgpu-target={0}".format(arch_str)) + entries.append( + cmake_cache_string("HIP_HIPCC_FLAGS", "--amdgpu-target={0}".format(arch_str)) + ) else: - options.append("-DENABLE_HIP=OFF") - - options.extend( - [ - from_variant("CARE_ENABLE_IMPLICIT_CONVERSIONS", "implicit_conversions"), - from_variant("CARE_ENABLE_LOOP_FUSER", "loop_fuser"), - self.define("CAMP_DIR", spec["camp"].prefix.share.camp.cmake), - self.define("UMPIRE_DIR", spec["umpire"].prefix.share.umpire.cmake), - self.define("RAJA_DIR", spec["raja"].prefix.share.raja.cmake), - self.define("CHAI_DIR", spec["chai"].prefix.share.chai.cmake), - from_variant("CARE_ENABLE_TESTS", "tests"), - ] - ) + entries.append(cmake_cache_option("ENABLE_HIP", False)) + + return entries + + def initconfig_mpi_entries(self): + spec = self.spec + entries = super(Care, self).initconfig_mpi_entries() + entries.append(cmake_cache_option("ENABLE_MPI", spec.satisfies("+mpi"))) + + return entries + + def initconfig_package_entries(self): + spec = self.spec + entries = [] + + # TPL locations + entries.append("#------------------{0}".format("-" * 60)) + entries.append("# TPLs") + entries.append("#------------------{0}\n".format("-" * 60)) + + entries.append(cmake_cache_path("BLT_SOURCE_DIR", spec["blt"].prefix)) + entries.append(cmake_cache_path("CAMP_DIR", spec["camp"].prefix)) + entries.append(cmake_cache_path("UMPIRE_DIR", spec["umpire"].prefix)) + entries.append(cmake_cache_path("RAJA_DIR", spec["raja"].prefix)) + entries.append(cmake_cache_path("CHAI_DIR", spec["chai"].prefix)) + + # Build options + entries.append("#------------------{0}".format("-" * 60)) + entries.append("# Build Options") + entries.append("#------------------{0}\n".format("-" * 60)) + + entries.append(cmake_cache_string("CMAKE_BUILD_TYPE", spec.variants["build_type"].value)) + + entries.append(cmake_cache_option("ENABLE_TESTS", spec.satisfies("+tests"))) + entries.append(cmake_cache_option("CARE_ENABLE_TESTS", spec.satisfies("+tests"))) # For tests to work, we also need BLT_ENABLE_TESTS to be on. # This will take care of the gtest dependency. CARE developers should # consider consolidating these flags in the future. - options.append(from_variant("BLT_ENABLE_TESTS", "tests")) + entries.append(cmake_cache_option("BLT_ENABLE_TESTS", spec.satisfies("+tests"))) # There are both CARE_ENABLE_* and ENABLE_* variables in here because # one controls the BLT infrastructure and the other controls the CARE # infrastructure. The goal is to just be able to use the CARE_ENABLE_* # variables, but CARE isn't set up correctly for that yet. - options.append(from_variant("ENABLE_BENCHMARKS", "benchmarks")) - options.append(from_variant("CARE_ENABLE_BENCHMARKS", "benchmarks")) + entries.append(cmake_cache_option("ENABLE_BENCHMARKS", spec.satisfies("+benchmarks"))) + entries.append(cmake_cache_option("CARE_ENABLE_BENCHMARKS", spec.satisfies("+benchmarks"))) + + entries.append(cmake_cache_option("ENABLE_EXAMPLES", spec.satisfies("+examples"))) + entries.append(cmake_cache_option("CARE_ENABLE_EXAMPLES", spec.satisfies("+examples"))) - options.append(from_variant("ENABLE_EXAMPLES", "examples")) - options.append(from_variant("CARE_ENABLE_EXAMPLES", "examples")) + entries.append(cmake_cache_option("ENABLE_DOCS", spec.satisfies("+docs"))) + entries.append(cmake_cache_option("CARE_ENABLE_DOCS", spec.satisfies("+docs"))) - options.append(from_variant("ENABLE_DOCS", "docs")) - options.append(from_variant("CARE_ENABLE_DOCS", "docs")) + entries.append( + cmake_cache_option( + "CARE_ENABLE_IMPLICIT_CONVERSIONS", spec.satisfies("+implicit_conversions") + ) + ) - return options + entries.append(cmake_cache_option("CARE_ENABLE_LOOP_FUSER", spec.satisfies("+loop_fuser"))) + + return entries + + def cmake_args(self): + return [] diff --git a/var/spack/repos/builtin/packages/chai/package.py b/var/spack/repos/builtin/packages/chai/package.py index 2d408dbc0a..9529daaca5 100644 --- a/var/spack/repos/builtin/packages/chai/package.py +++ b/var/spack/repos/builtin/packages/chai/package.py @@ -19,12 +19,18 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): git = "https://github.com/LLNL/CHAI.git" tags = ["ecp", "e4s", "radiuss"] - maintainers("davidbeckingsale", "adayton1") + maintainers("davidbeckingsale", "adayton1", "adrienbernede") license("BSD-3-Clause") version("develop", branch="develop", submodules=False) version( + "2024.07.0", + tag="v2024.07.0", + commit="df7741f1dbbdc5fff5f7d626151fdf1904e62b19", + submodules=False, + ) + version( "2024.02.2", tag="v2024.02.2", commit="5ba0944d862513f600432c34b009824875df27e5", @@ -119,13 +125,15 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): description="Tests to run", ) - depends_on("cmake@3.8:", type="build") + depends_on("cmake", type="build") + depends_on("cmake@3.23:", type="build", when="@2024.07.0:") + depends_on("cmake@3.14:", type="build", when="@2022.03.0:2024.2") depends_on("cmake@3.9:", type="build", when="+cuda") - depends_on("cmake@3.14:", type="build", when="@2022.03.0:") + depends_on("cmake@3.8:", type="build") - depends_on("blt") + depends_on("blt", type="build") depends_on("blt@0.6.2:", type="build", when="@2024.02.1:") - depends_on("blt@0.6.1:", type="build", when="@2024.02.0:") + depends_on("blt@0.6.1", type="build", when="@2024.02.0") depends_on("blt@0.5.3", type="build", when="@2023.06.0") depends_on("blt@0.5.2:0.5.3", type="build", when="@2022.10.0") depends_on("blt@0.5.0:0.5.3", type="build", when="@2022.03.0") @@ -135,8 +143,9 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): conflicts("^blt@:0.3.6", when="+rocm") depends_on("umpire") - depends_on("umpire@2024.02.1:", when="@2024.02.1:") - depends_on("umpire@2024.02.0:", when="@2024.02.0:") + depends_on("umpire@2024.07.0:", when="@2024.07.0:") + depends_on("umpire@2024.02.1", when="@2024.02.1") + depends_on("umpire@2024.02.0", when="@2024.02.0") depends_on("umpire@2023.06.0", when="@2023.06.0") depends_on("umpire@2022.10.0:2023.06.0", when="@2022.10.0") depends_on("umpire@2022.03.0:2023.06.0", when="@2022.03.0") @@ -149,6 +158,8 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): depends_on("umpire+cuda") for sm_ in CudaPackage.cuda_arch_values: depends_on("umpire+cuda cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + with when("@2024.02.0:"): + depends_on("umpire~fmt_header_only") with when("+rocm"): depends_on("umpire+rocm") @@ -160,15 +171,16 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): with when("+raja"): depends_on("raja~openmp", when="~openmp") depends_on("raja+openmp", when="+openmp") - depends_on("raja@2024.02.2:", when="@2024.02.2:") - depends_on("raja@2024.02.1:", when="@2024.02.1:") - depends_on("raja@2024.02.0:", when="@2024.02.0:") + depends_on("raja@2024.07.0:", when="@2024.07.0:") + depends_on("raja@2024.02.2", when="@2024.02.2") + depends_on("raja@2024.02.1", when="@2024.02.1") + depends_on("raja@2024.02.0", when="@2024.02.0") depends_on("raja@2023.06.0", when="@2023.06.0") depends_on("raja@2022.10.0:2023.06.0", when="@2022.10.0") depends_on("raja@2022.03.0:2023.06.0", when="@2022.03.0") - depends_on("raja@0.12.0", when="@2.2.0:2.2.2") - depends_on("raja@0.13.0", when="@2.3.0") depends_on("raja@0.14.0", when="@2.4.0") + depends_on("raja@0.13.0", when="@2.3.0") + depends_on("raja@0.12.0", when="@2.2.0:2.2.2") with when("+cuda"): depends_on("raja+cuda") @@ -229,7 +241,6 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): if spec.satisfies("+separable_compilation"): entries.append(cmake_cache_option("CMAKE_CUDA_SEPARABLE_COMPILATION", True)) entries.append(cmake_cache_option("CUDA_SEPARABLE_COMPILATION", True)) - else: entries.append(cmake_cache_option("ENABLE_CUDA", False)) @@ -244,7 +255,7 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): spec = self.spec entries = super(Chai, self).initconfig_mpi_entries() - entries.append(cmake_cache_option("ENABLE_MPI", "+mpi" in spec)) + entries.append(cmake_cache_option("ENABLE_MPI", spec.satisfies("+mpi"))) return entries @@ -259,10 +270,17 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): entries.append("# TPLs") entries.append("#------------------{0}\n".format("-" * 60)) + # - BLT entries.append(cmake_cache_path("BLT_SOURCE_DIR", spec["blt"].prefix)) + + # - RAJA if spec.satisfies("+raja"): entries.append(cmake_cache_option("{}ENABLE_RAJA_PLUGIN".format(option_prefix), True)) entries.append(cmake_cache_path("RAJA_DIR", spec["raja"].prefix)) + else: + entries.append(cmake_cache_option("{}ENABLE_RAJA_PLUGIN".format(option_prefix), False)) + + # - Umpire entries.append(cmake_cache_path("umpire_DIR", spec["umpire"].prefix)) # Build options @@ -270,24 +288,25 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage): entries.append("# Build Options") entries.append("#------------------{0}\n".format("-" * 60)) - # Build options entries.append(cmake_cache_string("CMAKE_BUILD_TYPE", spec.variants["build_type"].value)) - entries.append(cmake_cache_option("BUILD_SHARED_LIBS", "+shared" in spec)) + entries.append(cmake_cache_option("BUILD_SHARED_LIBS", spec.satisfies("+shared"))) # Generic options that have a prefixed equivalent in CHAI CMake - entries.append(cmake_cache_option("ENABLE_OPENMP", "+openmp" in spec)) - entries.append(cmake_cache_option("ENABLE_EXAMPLES", "+examples" in spec)) + entries.append(cmake_cache_option("ENABLE_OPENMP", spec.satisfies("+openmp"))) + entries.append(cmake_cache_option("ENABLE_EXAMPLES", spec.satisfies("+examples"))) entries.append(cmake_cache_option("ENABLE_DOCS", False)) if spec.satisfies("tests=benchmarks"): # BLT requires ENABLE_TESTS=True to enable benchmarks entries.append(cmake_cache_option("ENABLE_BENCHMARKS", True)) entries.append(cmake_cache_option("ENABLE_TESTS", True)) else: - entries.append(cmake_cache_option("ENABLE_TESTS", "tests=none" not in spec)) + entries.append(cmake_cache_option("ENABLE_TESTS", not spec.satisfies("tests=none"))) # Prefixed options that used to be name without one entries.append( - cmake_cache_option("{}ENABLE_PICK".format(option_prefix), "+enable_pick" in spec) + cmake_cache_option( + "{}ENABLE_PICK".format(option_prefix), spec.satisfies("+enable_pick") + ) ) return entries diff --git a/var/spack/repos/builtin/packages/fmt/package.py b/var/spack/repos/builtin/packages/fmt/package.py index 898b835f9a..c0d1b2461a 100644 --- a/var/spack/repos/builtin/packages/fmt/package.py +++ b/var/spack/repos/builtin/packages/fmt/package.py @@ -101,10 +101,10 @@ class Fmt(CMakePackage): # Fix 'variable "buffer" may not be initialized' compiler error patch( - "fmt-no-variable-initialize_10.0.0.patch", when="@10.0.0:10.2.1%clang@12.0.1.ibm.gcc.8.3.1" + "fmt-no-variable-initialize_10.0.0.patch", when="@10.0.0:11.0.2%clang@12.0.1.ibm.gcc.8.3.1" ) patch( - "fmt-no-variable-initialize_10.0.0.patch", when="@10.0.0:10.2.1%clang@14.0.5.ibm.gcc.8.3.1" + "fmt-no-variable-initialize_10.0.0.patch", when="@10.0.0:11.0.2%clang@14.0.5.ibm.gcc.8.3.1" ) def cmake_args(self): diff --git a/var/spack/repos/builtin/packages/raja-perf/package.py b/var/spack/repos/builtin/packages/raja-perf/package.py new file mode 100644 index 0000000000..e0c34fcd64 --- /dev/null +++ b/var/spack/repos/builtin/packages/raja-perf/package.py @@ -0,0 +1,344 @@ +# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +import socket + +from spack.package import * + +from .blt import llnl_link_helpers + + +class RajaPerf(CachedCMakePackage, CudaPackage, ROCmPackage): + """RAJA Performance Suite.""" + + homepage = "https://github.com/LLNL/RAJAPerf" + git = "https://github.com/LLNL/RAJAPerf.git" + tags = ["radiuss"] + + maintainers("davidbeckingsale", "adrienbernede") + + license("BSD-3-Clause") + + version("develop", branch="develop", submodules="True") + version("main", branch="main", submodules="True") + version( + "2024.07.0", + tag="v2024.07.0", + commit="6e81aa58af244a13755a694bfdc7bc301139a244", + submodules="True", + ) + version( + "2023.06.0", + tag="v2023.06.0", + commit="e5b2102f50e4642f53d9c86fb622b398a748974a", + submodules="True", + ) + version( + "2022.10.0", + tag="v2022.10.0", + commit="57ee53e402d2ac0a398df39ad1ca85cf1d2be45b", + submodules="True", + ) + version( + "0.12.0", + tag="v0.12.0", + commit="388c1d7562e1cb364191cb34c1ff62f3cadf54a0", + submodules="True", + ) + version( + "0.11.0", + tag="v0.11.0", + commit="22ac1de533ebd477c781d53962a92478c0a11d43", + submodules="True", + ) + version( + "0.10.0", + tag="v0.10.0", + commit="6bf725af38da41b1ebd1d29c75ffa5b8e57f7cbf", + submodules="True", + ) + version( + "0.9.0", tag="v0.9.0", commit="064dd17dae696c3e440eeb7469fa90341858a636", submodules="True" + ) + version( + "0.8.0", tag="v0.8.0", commit="94c65b2caefec2220f712f34c2a198b682ca7e23", submodules="True" + ) + version( + "0.7.0", tag="v0.7.0", commit="a6ef0279d9d240199947d872d8f28bf121f2192c", submodules="True" + ) + version( + "0.6.0", tag="v0.6.0", commit="21e476f031bc10bbdb8514425c380553bfb23bdc", submodules="True" + ) + version( + "0.5.2", tag="v0.5.2", commit="2da5e27bc648ff5540ffa69bbde67f125e4581d3", submodules="True" + ) + version( + "0.5.1", tag="v0.5.1", commit="a7b6f63e4fef2d0146932eff409788da51ab0cb3", submodules="True" + ) + version( + "0.5.0", tag="v0.5.0", commit="888f5ebe69a9b2ae35058cf8fb8d89d91a379bea", submodules="True" + ) + version( + "0.4.0", tag="v0.4.0", commit="a8f669c1ad01d51132a4e3d9d6aa8b2cabc9eff0", submodules="True" + ) + + depends_on("cxx", type="build") # generated + + variant("mpi", default=False, description="Enable MPI support") + variant("openmp", default=False, description="Build OpenMP backend") + variant("omptarget", default=False, description="Build with OpenMP target support") + variant("sycl", default=False, description="Build sycl backend") + variant("shared", default=False, description="Build Shared Libs") + variant("omptask", default=False, description="Build OpenMP task variants of algorithms") + variant( + "tests", + default="basic", + values=("none", "basic", "benchmarks"), + multi=False, + description="Tests to run", + ) + variant("caliper", default=False, description="Build with support for Caliper based profiling") + + depends_on("blt") + depends_on("blt@0.6.2:", type="build", when="@2024.07.0:") + depends_on("blt@0.5.3", type="build", when="@2023.06") + depends_on("blt@0.5.2:0.5.3", type="build", when="@2022.10") + depends_on("blt@0.5.0:", type="build", when="@0.12.0:") + depends_on("blt@0.4.1:", type="build", when="@0.11.0:") + depends_on("blt@0.4.0:", type="build", when="@0.8.0:") + depends_on("blt@0.3.0:", type="build", when="@:0.7.0") + + depends_on("cmake@3.23:", when="@2024.07.0:", type="build") + depends_on("cmake@3.23:", when="@0.12.0:2023.06.0 +rocm", type="build") + depends_on("cmake@3.20:", when="@0.12.0:2023.06.0", type="build") + depends_on("cmake@3.14:", when="@:0.12.0", type="build") + + depends_on("mpi", when="+mpi") + + depends_on("llvm-openmp", when="+openmp %apple-clang") + + depends_on("rocprim", when="+rocm") + + depends_on("caliper@2.9.0:", when="+caliper") + depends_on("caliper@2.9.0: +cuda", when="+caliper +cuda") + depends_on("caliper@2.9.0: +rocm", when="+caliper +rocm") + + with when("@0.12.0: +rocm +caliper"): + depends_on("caliper +rocm") + for arch in ROCmPackage.amdgpu_targets: + depends_on( + "caliper +rocm amdgpu_target={0}".format(arch), + when="amdgpu_target={0}".format(arch), + ) + conflicts("+openmp", when="@:2022.03") + + with when("@0.12.0: +cuda +caliper"): + depends_on("caliper +cuda") + for sm_ in CudaPackage.cuda_arch_values: + depends_on("caliper +cuda cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + + conflicts("~openmp", when="+omptarget", msg="OpenMP target requires OpenMP") + conflicts("+cuda", when="+omptarget", msg="Cuda may not be activated when omptarget is ON") + conflicts("+omptarget +rocm") + conflicts("+sycl +omptarget") + conflicts("+sycl +rocm") + # Using RAJA version as threshold on purpose (no 2024.02 version of RAJAPerf were released). + conflicts( + "+sycl", + when="@:2024.02.99", + msg="Support for SYCL was introduced in RAJA after 2024.02 release, " + "please use a newer release.", + ) + + def _get_sys_type(self, spec): + sys_type = str(spec.architecture) + if "SYS_TYPE" in env: + sys_type = env["SYS_TYPE"] + return sys_type + + @property + def cache_name(self): + hostname = socket.gethostname() + if "SYS_TYPE" in env: + hostname = hostname.rstrip("1234567890") + return "{0}-{1}-{2}@{3}-{4}.cmake".format( + hostname, + self._get_sys_type(self.spec), + self.spec.compiler.name, + self.spec.compiler.version, + self.spec.dag_hash(8), + ) + + def initconfig_compiler_entries(self): + spec = self.spec + compiler = self.compiler + # Default entries are already defined in CachedCMakePackage, inherit them: + entries = super().initconfig_compiler_entries() + + if spec.satisfies("+rocm"): + entries.insert(0, cmake_cache_path("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) + + # adrienbernede-23-01 + # Maybe we want to share this in the above llnl_link_helpers function. + compilers_using_cxx14 = ["intel-17", "intel-18", "xl"] + if any(compiler in self.compiler.cxx for compiler in compilers_using_cxx14): + entries.append(cmake_cache_string("BLT_CXX_STD", "c++14")) + + llnl_link_helpers(entries, spec, compiler) + + return entries + + def initconfig_hardware_entries(self): + spec = self.spec + compiler = self.compiler + entries = super().initconfig_hardware_entries() + + entries.append("#------------------{0}".format("-" * 30)) + entries.append("# Package custom hardware settings") + entries.append("#------------------{0}\n".format("-" * 30)) + + entries.append(cmake_cache_option("ENABLE_OPENMP", "+openmp" in spec)) + + # T benefit from the shared function "cuda_for_radiuss_projects", + # we do not modify CMAKE_CUDA_FLAGS: it is already appended by the + # shared function. + if "+cuda" in spec: + entries.append(cmake_cache_option("ENABLE_CUDA", True)) + # Shared handling of cuda. + + # Custom options. + # We place everything in CMAKE_CUDA_FLAGS_(RELEASE|RELWITHDEBINFO|DEBUG) + # which are not set by cuda_for_radiuss_projects + if "xl" in compiler.cxx: + all_targets_flags = ( + "-Xcompiler -qstrict -Xcompiler -qxlcompatmacros -Xcompiler -qalias=noansi" + + "-Xcompiler -qsmp=omp -Xcompiler -qhot -Xcompiler -qnoeh" + + "-Xcompiler -qsuppress=1500-029 -Xcompiler -qsuppress=1500-036" + + "-Xcompiler -qsuppress=1500-030" + ) + cuda_release_flags = "-O3 -Xcompiler -O2 " + all_targets_flags + cuda_reldebinf_flags = "-O3 -g -Xcompiler -O2 " + all_targets_flags + cuda_debug_flags = "-O0 -g -Xcompiler -O2 " + all_targets_flags + + elif "gcc" in compiler.cxx: + all_targets_flags = "-Xcompiler -finline-functions -Xcompiler -finline-limit=20000" + + cuda_release_flags = "-O3 -Xcompiler -Ofast " + all_targets_flags + cuda_reldebinf_flags = "-O3 -g -Xcompiler -Ofast " + all_targets_flags + cuda_debug_flags = "-O0 -g -Xcompiler -O0 " + all_targets_flags + + else: + all_targets_flags = "-Xcompiler -finline-functions" + + cuda_release_flags = "-O3 -Xcompiler -Ofast " + all_targets_flags + cuda_reldebinf_flags = "-O3 -g -Xcompiler -Ofast " + all_targets_flags + cuda_debug_flags = "-O0 -g -Xcompiler -O0 " + all_targets_flags + + entries.append(cmake_cache_string("CMAKE_CUDA_FLAGS_RELEASE", cuda_release_flags)) + entries.append( + cmake_cache_string("CMAKE_CUDA_FLAGS_RELWITHDEBINFO", cuda_reldebinf_flags) + ) + entries.append(cmake_cache_string("CMAKE_CUDA_FLAGS_DEBUG", cuda_debug_flags)) + + else: + entries.append(cmake_cache_option("ENABLE_CUDA", False)) + + if "+rocm" in spec: + entries.append(cmake_cache_option("ENABLE_HIP", True)) + else: + entries.append(cmake_cache_option("ENABLE_HIP", False)) + + entries.append(cmake_cache_option("ENABLE_OPENMP_TARGET", "+omptarget" in spec)) + if "+omptarget" in spec: + if "%xl" in spec: + entries.append( + cmake_cache_string( + "BLT_OPENMP_COMPILE_FLAGS", "-qoffload;-qsmp=omp;-qnoeh;-qalias=noansi" + ) + ) + entries.append( + cmake_cache_string( + "BLT_OPENMP_LINK_FLAGS", "-qoffload;-qsmp=omp;-qnoeh;-qalias=noansi" + ) + ) + if "%clang" in spec: + entries.append( + cmake_cache_string( + "BLT_OPENMP_COMPILE_FLAGS", "-fopenmp;-fopenmp-targets=nvptx64-nvidia-cuda" + ) + ) + entries.append( + cmake_cache_string( + "BLT_OPENMP_LINK_FLAGS", "-fopenmp;-fopenmp-targets=nvptx64-nvidia-cuda" + ) + ) + + return entries + + def initconfig_mpi_entries(self): + spec = self.spec + entries = super().initconfig_mpi_entries() + + entries.append(cmake_cache_option("ENABLE_MPI", "+mpi" in spec)) + + return entries + + def initconfig_package_entries(self): + spec = self.spec + entries = [] + + # option_prefix = "RAJA_" if spec.satisfies("@0.14.0:") else "" + + # TPL locations + entries.append("#------------------{0}".format("-" * 60)) + entries.append("# TPLs") + entries.append("#------------------{0}\n".format("-" * 60)) + + entries.append(cmake_cache_path("BLT_SOURCE_DIR", spec["blt"].prefix)) + if "caliper" in self.spec: + entries.append( + cmake_cache_path("caliper_DIR", spec["caliper"].prefix + "/share/cmake/caliper/") + ) + entries.append( + cmake_cache_path("adiak_DIR", spec["adiak"].prefix + "/lib/cmake/adiak/") + ) + + # Build options + entries.append("#------------------{0}".format("-" * 60)) + entries.append("# Build Options") + entries.append("#------------------{0}\n".format("-" * 60)) + + entries.append(cmake_cache_string("CMAKE_BUILD_TYPE", spec.variants["build_type"].value)) + + entries.append(cmake_cache_string("RAJA_RANGE_ALIGN", "4")) + entries.append(cmake_cache_string("RAJA_RANGE_MIN_LENGTH", "32")) + entries.append(cmake_cache_string("RAJA_DATA_ALIGN", "64")) + + entries.append(cmake_cache_option("RAJA_HOST_CONFIG_LOADED", True)) + + entries.append(cmake_cache_option("BUILD_SHARED_LIBS", "+shared" in spec)) + entries.append(cmake_cache_option("ENABLE_OPENMP", "+openmp" in spec)) + entries.append(cmake_cache_option("RAJA_ENABLE_OPENMP_TASK", "+omptask" in spec)) + entries.append(cmake_cache_option("RAJA_ENABLE_SYCL", spec.satisfies("+sycl"))) + + # C++17 + if spec.satisfies("@2024.07.0:") and spec.satisfies("+sycl"): + entries.append(cmake_cache_string("BLT_CXX_STD", "c++17")) + # C++14 + # Using RAJA version as threshold on purpose (no 0.14 version of RAJAPerf were released). + elif spec.satisfies("@0.14.0:"): + entries.append(cmake_cache_string("BLT_CXX_STD", "c++14")) + + entries.append(cmake_cache_option("ENABLE_BENCHMARKS", "tests=benchmarks" in spec)) + entries.append( + cmake_cache_option("ENABLE_TESTS", "tests=none" not in spec or self.run_tests) + ) + + entries.append(cmake_cache_option("RAJA_PERFSUITE_USE_CALIPER", "+caliper" in spec)) + + return entries + + def cmake_args(self): + return [] diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py index 715756c573..39f1d10862 100644 --- a/var/spack/repos/builtin/packages/raja/package.py +++ b/var/spack/repos/builtin/packages/raja/package.py @@ -33,6 +33,12 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): version("develop", branch="develop", submodules=submodules) version("main", branch="main", submodules=submodules) version( + "2024.07.0", + tag="v2024.07.0", + commit="4d7fcba55ebc7cb972b7cc9f6778b48e43792ea1", + submodules=submodules, + ) + version( "2024.02.2", tag="v2024.02.2", commit="593f756b14ac57ded33ee61d8d2292d4beb840e6", @@ -177,6 +183,8 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): variant( "omptask", default=False, description="Build OpenMP task variants of internal algorithms" ) + variant("omptarget", default=False, description="Build OpenMP on target device support") + variant("sycl", default=False, description="Build sycl backend") variant("plugins", default=False, description="Enable runtime plugins") variant("examples", default=True, description="Build examples.") @@ -196,7 +204,7 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): depends_on("blt", type="build") depends_on("blt@0.6.2:", type="build", when="@2024.02.1:") - depends_on("blt@0.6.1:", type="build", when="@2024.02.0:") + depends_on("blt@0.6.1", type="build", when="@2024.02.0") depends_on("blt@0.5.3", type="build", when="@2023.06.0:2023.06.1") depends_on("blt@0.5.2:0.5.3", type="build", when="@2022.10.5") depends_on("blt@0.5.0:0.5.3", type="build", when="@0.14.1:2022.10.4") @@ -205,22 +213,25 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): depends_on("blt@0.3.6:0.4.1", type="build", when="@:0.12.0") conflicts("^blt@:0.3.6", when="+rocm") + depends_on("camp") depends_on("camp+openmp", when="+openmp") - depends_on("camp@main", when="@develop") - depends_on("camp@main", when="@main") - depends_on("camp@2024.02.1:", type="build", when="@2024.02.1:") - depends_on("camp@2024.02.0:", type="build", when="@2024.02.0:") - depends_on("camp@2023.06.0", type="build", when="@2023.06.0:2023.06.1") - depends_on("camp@2022.10.1:2023.06.0", type="build", when="@2022.10.3:2022.10.5") - depends_on("camp@2022.10.0:2023.06.0", type="build", when="@2022.10.0:2022.10.2") - depends_on("camp@2022.03.2", type="build", when="@2022.03.0:2022.03.1") + depends_on("camp+omptarget", when="+omptarget") + depends_on("camp+sycl", when="+sycl") + depends_on("camp@2024.07.0:", when="@2024.02.2:") + depends_on("camp@2024.02.1", when="@2024.02.1") + depends_on("camp@2024.02.0", when="@2024.02.0") + depends_on("camp@2023.06.0", when="@2023.06.0:2023.06.1") + depends_on("camp@2022.10.1:2023.06.0", when="@2022.10.3:2022.10.5") + depends_on("camp@2022.10.0:2023.06.0", when="@2022.10.0:2022.10.2") + depends_on("camp@2022.03.2", when="@2022.03.0:2022.03.1") depends_on("camp@0.2.2:0.2.3", when="@0.14.0") depends_on("camp@0.1.0", when="@0.10.0:0.13.0") - depends_on("cmake@3.23:", when="@2022.10.0:+rocm", type="build") - depends_on("cmake@3.20:", when="@2022.10.0:", type="build") - depends_on("cmake@3.14:", when="@2022.03.0:", type="build") - depends_on("cmake@:3.20", when="@:2022.03+rocm", type="build") + depends_on("cmake@3.23:", when="@2024.07.0:", type="build") + depends_on("cmake@3.23:", when="@2022.10.0:2024.02.2+rocm", type="build") + depends_on("cmake@3.20:", when="@2022.10.0:2024.02.2", type="build") + depends_on("cmake@3.20:", when="@:2022.03+rocm", type="build") + depends_on("cmake@3.14:", when="@:2022.03", type="build") depends_on("llvm-openmp", when="+openmp %apple-clang") @@ -238,6 +249,16 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): for sm_ in CudaPackage.cuda_arch_values: depends_on("camp +cuda cuda_arch={0}".format(sm_), when="cuda_arch={0}".format(sm_)) + conflicts("+omptarget +rocm") + conflicts("+sycl +omptarget") + conflicts("+sycl +rocm") + conflicts( + "+sycl", + when="@:2024.02.99", + msg="Support for SYCL was introduced in RAJA after 2024.02 release, " + "please use a newer release.", + ) + def _get_sys_type(self, spec): sys_type = spec.architecture if "SYS_TYPE" in env: @@ -268,7 +289,7 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): # Default entries are already defined in CachedCMakePackage, inherit them: entries = super().initconfig_compiler_entries() - if "+rocm" in spec: + if spec.satisfies("+rocm"): entries.insert(0, cmake_cache_path("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) llnl_link_helpers(entries, spec, compiler) @@ -283,14 +304,14 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): entries.append("# Package custom hardware settings") entries.append("#------------------{0}\n".format("-" * 30)) - entries.append(cmake_cache_option("ENABLE_OPENMP", "+openmp" in spec)) + entries.append(cmake_cache_option("ENABLE_OPENMP", spec.satisfies("+openmp"))) - if "+cuda" in spec: + if spec.satisfies("+cuda"): entries.append(cmake_cache_option("ENABLE_CUDA", True)) else: entries.append(cmake_cache_option("ENABLE_CUDA", False)) - if "+rocm" in spec: + if spec.satisfies("+rocm"): entries.append(cmake_cache_option("ENABLE_HIP", True)) hipcc_flags = [] if self.spec.satisfies("@0.14.0:"): @@ -322,35 +343,62 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): entries.append("#------------------{0}\n".format("-" * 60)) entries.append(cmake_cache_string("CMAKE_BUILD_TYPE", spec.variants["build_type"].value)) - entries.append(cmake_cache_option("BUILD_SHARED_LIBS", "+shared" in spec)) + entries.append(cmake_cache_option("BUILD_SHARED_LIBS", spec.satisfies("+shared"))) - entries.append(cmake_cache_option("RAJA_ENABLE_DESUL_ATOMICS", "+desul" in spec)) + entries.append(cmake_cache_option("RAJA_ENABLE_DESUL_ATOMICS", spec.satisfies("+desul"))) - entries.append(cmake_cache_option("RAJA_ENABLE_VECTORIZATION", "+vectorization" in spec)) + entries.append( + cmake_cache_option("RAJA_ENABLE_VECTORIZATION", spec.satisfies("+vectorization")) + ) + + entries.append(cmake_cache_option("RAJA_ENABLE_OPENMP_TASK", spec.satisfies("+omptask"))) + + entries.append( + cmake_cache_option("RAJA_ENABLE_TARGET_OPENMP", spec.satisfies("+omptarget")) + ) - entries.append(cmake_cache_option("RAJA_ENABLE_OPENMP_TASK", "+omptask" in spec)) + entries.append(cmake_cache_option("RAJA_ENABLE_SYCL", spec.satisfies("+sycl"))) + # C++17 + if spec.satisfies("@2024.07.0:") and spec.satisfies("+sycl"): + entries.append(cmake_cache_string("BLT_CXX_STD", "c++17")) # C++14 - if spec.satisfies("@0.14.0:"): + elif spec.satisfies("@0.14.0:"): entries.append(cmake_cache_string("BLT_CXX_STD", "c++14")) - if "+desul" in spec: - if "+cuda" in spec: + if spec.satisfies("+desul"): + if spec.satisfies("+cuda"): entries.append(cmake_cache_string("CMAKE_CUDA_STANDARD", "14")) - entries.append(cmake_cache_option("RAJA_ENABLE_RUNTIME_PLUGINS", "+plugins" in spec)) + entries.append( + cmake_cache_option("RAJA_ENABLE_RUNTIME_PLUGINS", spec.satisfies("+plugins")) + ) + + if spec.satisfies("+omptarget"): + entries.append( + cmake_cache_string( + "BLT_OPENMP_COMPILE_FLAGS", "-fopenmp;-fopenmp-targets=nvptx64-nvidia-cuda" + ) + ) + entries.append( + cmake_cache_string( + "BLT_OPENMP_LINK_FLAGS", "-fopenmp;-fopenmp-targets=nvptx64-nvidia-cuda" + ) + ) entries.append( - cmake_cache_option("{}ENABLE_EXAMPLES".format(option_prefix), "+examples" in spec) + cmake_cache_option( + "{}ENABLE_EXAMPLES".format(option_prefix), spec.satisfies("+examples") + ) ) if spec.satisfies("@0.14.0:"): entries.append( cmake_cache_option( - "{}ENABLE_EXERCISES".format(option_prefix), "+exercises" in spec + "{}ENABLE_EXERCISES".format(option_prefix), spec.satisfies("+exercises") ) ) else: - entries.append(cmake_cache_option("ENABLE_EXERCISES", "+exercises" in spec)) + entries.append(cmake_cache_option("ENABLE_EXERCISES", spec.satisfies("+exercises"))) # TODO: Treat the workaround when building tests with spack wrapper # For now, removing it to test CI, which builds tests outside of wrapper. @@ -359,12 +407,12 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage): # removes -Werror from GTest flags # # if self.spec.satisfies("%clang target=ppc64le:") - # or (not self.run_tests and "+tests" not in spec): - if not self.run_tests and "+tests" not in spec: + # or (not self.run_tests and not spec.satisfies("+tests")): + if not self.run_tests and not spec.satisfies("+tests"): entries.append(cmake_cache_option("ENABLE_TESTS", False)) else: entries.append(cmake_cache_option("ENABLE_TESTS", True)) - if "+run-all-tests" not in spec: + if not spec.satisfies("+run-all-tests"): if spec.satisfies("%clang@12.0.0:13.9.999"): entries.append( cmake_cache_string( diff --git a/var/spack/repos/builtin/packages/umpire/package.py b/var/spack/repos/builtin/packages/umpire/package.py index 6348d943d3..e0d1df007c 100644 --- a/var/spack/repos/builtin/packages/umpire/package.py +++ b/var/spack/repos/builtin/packages/umpire/package.py @@ -25,6 +25,12 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): version("develop", branch="develop", submodules=False) version( + "2024.07.0", + tag="v2024.07.0", + commit="abd729f40064175e999a83d11d6b073dac4c01d2", + submodules=False, + ) + version( "2024.02.1", tag="v2024.02.1", commit="3058d562fc707650e904f9321b1ee9bcebad3ae2", @@ -196,7 +202,7 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): variant("numa", default=False, description="Enable NUMA support") variant("shared", default=True, description="Enable Shared libs") variant("openmp", default=False, description="Build with OpenMP support") - variant("openmp_target", default=False, description="Build with OpenMP 4.5 support") + variant("omptarget", default=False, description="Build with OpenMP 4.5 support") variant("deviceconst", default=False, description="Enables support for constant device memory") variant("examples", default=False, description="Build Umpire Examples") variant( @@ -213,16 +219,19 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): variant("werror", default=False, description="Enable warnings as errors") variant("asan", default=False, description="Enable ASAN") variant("sanitizer_tests", default=False, description="Enable address sanitizer tests") + variant("fmt_header_only", default=True, description="Link to header-only fmt target") + depends_on("cmake@3.23:", when="@2024.07.0:", type="build") depends_on("cmake@3.23:", when="@2022.10.0: +rocm", type="build") - depends_on("cmake@3.20:", when="@2022.10.0:", type="build") + depends_on("cmake@3.20:", when="@2022.10.0:2024.02.1", type="build") depends_on("cmake@:3.20", when="@2022.03.0:2022.03 +rocm", type="build") depends_on("cmake@3.14:", when="@2022.03.0:", type="build") depends_on("cmake@3.9:", when="+cuda", type="build") depends_on("cmake@3.8:", type="build") depends_on("blt", type="build") - depends_on("blt@0.6.1:", type="build", when="@2024.02.0:") + depends_on("blt@0.6.2:", type="build", when="@2024.02.1:") + depends_on("blt@0.6.1", type="build", when="@2024.02.0") depends_on("blt@0.5.3", type="build", when="@2023.06.0") depends_on("blt@0.5.2:0.5.3", type="build", when="@2022.10.0") depends_on("blt@0.5.0:0.5.3", type="build", when="@2022.03.0:2022.03.1") @@ -235,7 +244,9 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): depends_on("camp+openmp", when="+openmp") depends_on("camp~cuda", when="~cuda") depends_on("camp@main", when="@develop") - depends_on("camp@2024.02.0:", when="@2024.02.0:") + depends_on("camp@2024.07.0:", when="@2024.07.0:") + depends_on("camp@2024.02.1", when="@2024.02.1") + depends_on("camp@2024.02.0", when="@2024.02.0") depends_on("camp@2023.06.0", when="@2023.06.0") depends_on("camp@2022.10.0:2023.06.0", when="@2022.10.0") depends_on("camp@2022.03.2:2023.06.0", when="@2022.03.0:2022.03.1") @@ -273,13 +284,11 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): conflicts("+device_alloc", when="~rocm~cuda") conflicts("+deviceconst", when="~rocm~cuda") - conflicts("~openmp", when="+openmp_target", msg="OpenMP target requires OpenMP") + conflicts("~openmp", when="+omptarget", msg="OpenMP target requires OpenMP") conflicts("+cuda", when="+rocm") conflicts("+tools", when="+rocm") conflicts( - "+rocm", - when="+openmp_target", - msg="Cant support both rocm and openmp device backends at once", + "+rocm", when="+omptarget", msg="Cant support both rocm and openmp device backends at once" ) conflicts("+ipc_shmem", when="@:5.0.1") @@ -320,12 +329,14 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): option_prefix = "UMPIRE_" if spec.satisfies("@2022.03.0:") else "" - if "+fortran" in spec and compiler.fc is not None: + if spec.satisfies("+fortran") and compiler.fc is not None: entries.append(cmake_cache_option("ENABLE_FORTRAN", True)) else: entries.append(cmake_cache_option("ENABLE_FORTRAN", False)) - entries.append(cmake_cache_option("{}ENABLE_C".format(option_prefix), "+c" in spec)) + entries.append( + cmake_cache_option("{}ENABLE_C".format(option_prefix), spec.satisfies("+c")) + ) llnl_link_helpers(entries, spec, compiler) @@ -341,31 +352,31 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): option_prefix = "UMPIRE_" if spec.satisfies("@2022.03.0:") else "" - if "+cuda" in spec: + if spec.satisfies("+cuda"): entries.append(cmake_cache_option("ENABLE_CUDA", True)) # Umpire used to pick only the first architecture in the list. The shared logic in # CachedCMakePackage keeps the list of architectures. else: entries.append(cmake_cache_option("ENABLE_CUDA", False)) - if "+rocm" in spec: + if spec.satisfies("+rocm"): entries.append(cmake_cache_option("ENABLE_HIP", True)) else: entries.append(cmake_cache_option("ENABLE_HIP", False)) entries.append( cmake_cache_option( - "{}ENABLE_DEVICE_CONST".format(option_prefix), "+deviceconst" in spec + "{}ENABLE_DEVICE_CONST".format(option_prefix), spec.satisfies("+deviceconst") ) ) entries.append( cmake_cache_option( - "{}ENABLE_OPENMP_TARGET".format(option_prefix), "+openmp_target" in spec + "{}ENABLE_OPENMP_TARGET".format(option_prefix), spec.satisfies("+omptarget") ) ) - if "+openmp_target" in spec and "%xl" in spec: + if spec.satisfies("+omptarget") and spec.satisfies("%xl"): entries.append(cmake_cache_string("OpenMP_CXX_FLAGS", "-qsmp;-qoffload")) return entries @@ -373,8 +384,8 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): def initconfig_mpi_entries(self): spec = self.spec - entries = super(Umpire, self).initconfig_mpi_entries() - entries.append(cmake_cache_option("ENABLE_MPI", "+mpi" in spec)) + entries = super().initconfig_mpi_entries() + entries.append(cmake_cache_option("ENABLE_MPI", spec.satisfies("+mpi"))) return entries @@ -402,58 +413,73 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage): entries.append("#------------------{0}\n".format("-" * 60)) entries.append(cmake_cache_string("CMAKE_BUILD_TYPE", spec.variants["build_type"].value)) - entries.append(cmake_cache_option("BUILD_SHARED_LIBS", "+shared" in spec)) - entries.append(cmake_cache_option("ENABLE_WARNINGS_AS_ERRORS", "+werror" in spec)) + entries.append(cmake_cache_option("BUILD_SHARED_LIBS", spec.satisfies("+shared"))) + entries.append(cmake_cache_option("ENABLE_WARNINGS_AS_ERRORS", spec.satisfies("+werror"))) # Generic options that have a prefixed equivalent in Umpire CMake - entries.append(cmake_cache_option("ENABLE_OPENMP", "+openmp" in spec)) - entries.append(cmake_cache_option("ENABLE_EXAMPLES", "+examples" in spec)) + entries.append(cmake_cache_option("ENABLE_OPENMP", spec.satisfies("+openmp"))) + entries.append(cmake_cache_option("ENABLE_EXAMPLES", spec.satisfies("+examples"))) entries.append(cmake_cache_option("ENABLE_DOCS", False)) - if "tests=benchmarks" in spec or "+dev_benchmarks" in spec: + if spec.satisfies("tests=benchmarks") or spec.satisfies("+dev_benchmarks"): # BLT requires ENABLE_TESTS=True to enable benchmarks entries.append(cmake_cache_option("ENABLE_BENCHMARKS", True)) entries.append(cmake_cache_option("ENABLE_TESTS", True)) else: entries.append(cmake_cache_option("ENABLE_BENCHMARKS", False)) - entries.append(cmake_cache_option("ENABLE_TESTS", "tests=none" not in spec)) + entries.append(cmake_cache_option("ENABLE_TESTS", not spec.satisfies("tests=none"))) # Prefixed options that used to be name without one - entries.append(cmake_cache_option("{}ENABLE_NUMA".format(option_prefix), "+numa" in spec)) + entries.append( + cmake_cache_option("{}ENABLE_NUMA".format(option_prefix), spec.satisfies("+numa")) + ) entries.append( cmake_cache_option( - "{}ENABLE_DEVELOPER_BENCHMARKS".format(option_prefix), "+dev_benchmarks" in spec + "{}ENABLE_DEVELOPER_BENCHMARKS".format(option_prefix), + spec.satisfies("+dev_benchmarks"), ) ) entries.append( - cmake_cache_option("{}ENABLE_TOOLS".format(option_prefix), "+tools" in spec) + cmake_cache_option("{}ENABLE_TOOLS".format(option_prefix), spec.satisfies("+tools")) ) entries.append( - cmake_cache_option("{}ENABLE_BACKTRACE".format(option_prefix), "+backtrace" in spec) + cmake_cache_option( + "{}ENABLE_BACKTRACE".format(option_prefix), spec.satisfies("+backtrace") + ) + ) + entries.append( + cmake_cache_option("{}ENABLE_ASAN".format(option_prefix), spec.satisfies("+asan")) ) - entries.append(cmake_cache_option("{}ENABLE_ASAN".format(option_prefix), "+asan" in spec)) entries.append( cmake_cache_option( - "{}ENABLE_SANITIZER_TESTS".format(option_prefix), "+sanitizer_tests" in spec + "{}ENABLE_SANITIZER_TESTS".format(option_prefix), + spec.satisfies("+sanitizer_tests"), ) ) # Recent options, were never name without prefix entries.append( - cmake_cache_option("UMPIRE_ENABLE_DEVICE_ALLOCATOR", "+device_alloc" in spec) + cmake_cache_option("UMPIRE_ENABLE_DEVICE_ALLOCATOR", spec.satisfies("+device_alloc")) ) entries.append( - cmake_cache_option("UMPIRE_ENABLE_SQLITE_EXPERIMENTAL", "+sqlite_experimental" in spec) + cmake_cache_option( + "UMPIRE_ENABLE_SQLITE_EXPERIMENTAL", spec.satisfies("+sqlite_experimental") + ) ) - if "+sqlite_experimental" in spec: + if spec.satisfies("+sqlite_experimental"): entries.append(cmake_cache_path("SQLite3_ROOT", spec["sqlite"].prefix)) # This option was renamed later than the others if spec.satisfies("@2022.10.0:"): entries.append( - cmake_cache_option("UMPIRE_ENABLE_IPC_SHARED_MEMORY", "+ipc_shmem" in spec) + cmake_cache_option("UMPIRE_ENABLE_IPC_SHARED_MEMORY", spec.satisfies("+ipc_shmem")) ) else: - entries.append(cmake_cache_option("ENABLE_IPC_SHARED_MEMORY", "+ipc_shmem" in spec)) + entries.append( + cmake_cache_option("ENABLE_IPC_SHARED_MEMORY", spec.satisfies("+ipc_shmem")) + ) + + if spec.satisfies("~fmt_header_only"): + entries.append(cmake_cache_string("UMPIRE_FMT_TARGET", "fmt::fmt")) return entries |