acts: new variant cxxstd (#38682)

* acts: allow ^root cxxstd=20

* acts: new variant cxxstd, pass through to root

* acts: always args.append CMAKE_CXX_STANDARD from variant

* acts: remove unused import

* acts: fix self.define_from_variant
This commit is contained in:
Wouter Deconinck 2023-07-05 14:56:06 -05:00 committed by GitHub
parent 45838cee0b
commit ea1439dfa1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,6 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
from spack.variant import _ConditionalVariantValues
class Acts(CMakePackage, CudaPackage):
@ -145,6 +146,14 @@ class Acts(CMakePackage, CudaPackage):
variant(
"benchmarks", default=False, description="Build the performance benchmarks", when="@0.16:"
)
_cxxstd_values = (conditional("14", when="@:0.8.1"), "17", conditional("20", when="@24:"))
variant(
"cxxstd",
default="17",
values=_cxxstd_values,
multi=False,
description="Use the specified C++ standard when building.",
)
variant(
"examples",
default=False,
@ -279,11 +288,19 @@ class Acts(CMakePackage, CudaPackage):
depends_on("py-onnxruntime", when="+onnx")
depends_on("py-pybind11 @2.6.2:", when="+python @18:")
depends_on("py-pytest", when="+python +unit_tests")
depends_on("root @6.10: cxxstd=14", when="+tgeo @:0.8.0")
depends_on("root @6.20: cxxstd=17", when="+tgeo @0.8.1:")
depends_on("root @6.10:", when="+tgeo @:0.8.0")
depends_on("root @6.20:", when="+tgeo @0.8.1:")
depends_on("sycl", when="+sycl")
depends_on("vecmem@0.4: +sycl", when="+sycl")
# ACTS imposes requirements on the C++ standard values used by ROOT
for _cxxstd in _cxxstd_values:
if isinstance(_cxxstd, _ConditionalVariantValues):
for _v in _cxxstd:
depends_on(f"root cxxstd={_v.value}", when=f"cxxstd={_v.value} {_v.when} ^root")
else:
depends_on(f"root cxxstd={_cxxstd}", when=f"cxxstd={_cxxstd} ^root")
# ACTS has been using C++17 for a while, which precludes use of old GCC
conflicts("%gcc@:7", when="@0.23:")
@ -387,12 +404,10 @@ def plugin_cmake_variant(plugin_name, spack_variant):
if cuda_arch != "none":
args.append("-DCUDA_FLAGS=-arch=sm_{0}".format(cuda_arch[0]))
if "root" in spec:
cxxstd = spec["root"].variants["cxxstd"].value
args.append("-DCMAKE_CXX_STANDARD={0}".format(cxxstd))
if "+python" in spec:
python = spec["python"].command.path
args.append("-DPython_EXECUTABLE={0}".format(python))
args.append(self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"))
return args