legion: add missing build dependency and new variants (#44329)
* legion: add pip dependency for build pip is needed for the build when the Legion Python binding is enabled * legion: add variants for gc logging and system OpenMP use This also removes the `cmake_cxx_flags` variable from `cmake_args()` because that variable had no effect. * [@spackbot] updating style on behalf of mpokorny * legion: use spec.satisfies() in cmake_args() e.g, replace use of '"+foo" in spec' with 'spec.satisfies("+foo")' * legion: avoid configuring with multiple "-DLegion_REDOP_COMPLEX=ON" arguments In the previous version, when both '+redop_complex' and '+bindings' was set, two instances of "-DLegion_REDOP_COMPLEX=ON" arguments were generated for cmake configuration. * legion: fix value of "Legion_OUTPUT_LEVEL" for configuration the previous version had no effect on setting the configuration value --------- Co-authored-by: mpokorny <mpokorny@users.noreply.github.com>
This commit is contained in:
parent
e6afeca92f
commit
3751372396
@ -120,6 +120,8 @@ def patch(self):
|
||||
depends_on("python@3.8:", when="+python")
|
||||
depends_on("py-cffi", when="+python")
|
||||
depends_on("py-numpy", when="+python")
|
||||
depends_on("py-pip", when="+python", type="build")
|
||||
|
||||
depends_on("papi", when="+papi")
|
||||
depends_on("zlib-api", when="+zlib")
|
||||
|
||||
@ -288,13 +290,17 @@ def validate_gasnet_root(value):
|
||||
|
||||
depends_on("rust@1.74:", type="build", when="+prof")
|
||||
|
||||
variant("gc", default=False, description="Enable garbage collector logging")
|
||||
variant(
|
||||
"sysomp", default=False, description="Use system OpenMP implementation instead of Realm's"
|
||||
)
|
||||
|
||||
def cmake_args(self):
|
||||
spec = self.spec
|
||||
cmake_cxx_flags = []
|
||||
from_variant = self.define_from_variant
|
||||
options = [from_variant("CMAKE_CXX_STANDARD", "cxxstd")]
|
||||
|
||||
if "network=gasnet" in spec:
|
||||
if spec.satisfies("network=gasnet"):
|
||||
options.append("-DLegion_NETWORKS=gasnetex")
|
||||
if spec.variants["gasnet_root"].value != "none":
|
||||
gasnet_dir = spec.variants["gasnet_root"].value
|
||||
@ -313,109 +319,105 @@ def cmake_args(self):
|
||||
else:
|
||||
options.append("-DGASNet_CONDUIT=%s" % gasnet_conduit)
|
||||
|
||||
if "+gasnet_debug" in spec:
|
||||
if spec.satisfies("+gasnet_debug"):
|
||||
options.append("-DLegion_EMBED_GASNet_CONFIGURE_ARGS=--enable-debug")
|
||||
elif "network=mpi" in spec:
|
||||
elif spec.satisfies("network=mpi"):
|
||||
options.append("-DLegion_NETWORKS=mpi")
|
||||
elif "network=ucx" in spec:
|
||||
elif spec.satisfies("network=ucx"):
|
||||
options.append("-DLegion_NETWORKS=ucx")
|
||||
else:
|
||||
options.append("-DLegion_EMBED_GASNet=OFF")
|
||||
|
||||
if "+shared" in spec:
|
||||
if spec.satisfies("+shared"):
|
||||
options.append("-DBUILD_SHARED_LIBS=ON")
|
||||
else:
|
||||
options.append("-DBUILD_SHARED_LIBS=OFF")
|
||||
|
||||
if "+bounds_checks" in spec:
|
||||
if spec.satisfies("+bounds_checks"):
|
||||
# default is off.
|
||||
options.append("-DLegion_BOUNDS_CHECKS=ON")
|
||||
if "+privilege_checks" in spec:
|
||||
if spec.satisfies("+privilege_checks"):
|
||||
# default is off.
|
||||
options.append("-DLegion_PRIVILEGE_CHECKS=ON")
|
||||
if "output_level" in spec:
|
||||
level = str.upper(spec.variants["output_level"].value)
|
||||
options.append("-DLegion_OUTPUT_LEVEL=%s" % level)
|
||||
if "+spy" in spec:
|
||||
|
||||
options.append(f"-DLegion_OUTPUT_LEVEL={str.upper(spec.variants['output_level'].value)}")
|
||||
|
||||
if spec.satisfies("+spy"):
|
||||
# default is off.
|
||||
options.append("-DLegion_SPY=ON")
|
||||
|
||||
if "+cuda" in spec:
|
||||
if spec.satisfies("+cuda"):
|
||||
cuda_arch = spec.variants["cuda_arch"].value
|
||||
options.append("-DLegion_USE_CUDA=ON")
|
||||
options.append("-DLegion_GPU_REDUCTIONS=ON")
|
||||
options.append("-DLegion_CUDA_ARCH=%s" % cuda_arch)
|
||||
if "+cuda_hijack" in spec:
|
||||
if spec.satisfies("+cuda_hijack"):
|
||||
options.append("-DLegion_HIJACK_CUDART=ON")
|
||||
else:
|
||||
options.append("-DLegion_HIJACK_CUDART=OFF")
|
||||
|
||||
if "+cuda_unsupported_compiler" in spec:
|
||||
if spec.satisfies("+cuda_unsupported_compiler"):
|
||||
options.append("-DCUDA_NVCC_FLAGS:STRING=--allow-unsupported-compiler")
|
||||
|
||||
if "+rocm" in spec:
|
||||
if spec.satisfies("+rocm"):
|
||||
options.append("-DLegion_USE_HIP=ON")
|
||||
options.append("-DLegion_GPU_REDUCTIONS=ON")
|
||||
options.append(from_variant("Legion_HIP_TARGET", "hip_target"))
|
||||
options.append(from_variant("Legion_HIP_ARCH", "amdgpu_target"))
|
||||
options.append(from_variant("Legion_HIJACK_HIP", "hip_hijack"))
|
||||
if "@23.03.0:23.12.0" in spec:
|
||||
if spec.satisfies("@23.03.0:23.12.0"):
|
||||
options.append(self.define("HIP_PATH", f"{spec['hip'].prefix}/hip"))
|
||||
else:
|
||||
options.append(self.define("ROCM_PATH", spec["hip"].prefix))
|
||||
|
||||
if "+fortran" in spec:
|
||||
if spec.satisfies("+fortran"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_Fortran=ON")
|
||||
|
||||
if "+hdf5" in spec:
|
||||
if spec.satisfies("+hdf5"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_HDF5=ON")
|
||||
|
||||
if "+hwloc" in spec:
|
||||
if spec.satisfies("+hwloc"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_HWLOC=ON")
|
||||
|
||||
if "+kokkos" in spec:
|
||||
if spec.satisfies("+kokkos"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_Kokkos=ON")
|
||||
os.environ["KOKKOS_CXX_COMPILER"] = spec["kokkos"].kokkos_cxx
|
||||
|
||||
if "+libdl" in spec:
|
||||
if spec.satisfies("+libdl"):
|
||||
# default is on.
|
||||
options.append("-DLegion_USE_LIBDL=ON")
|
||||
else:
|
||||
options.append("-DLegion_USE_LIBDL=OFF")
|
||||
|
||||
if "+openmp" in spec:
|
||||
if spec.satisfies("+openmp"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_OpenMP=ON")
|
||||
|
||||
if "+papi" in spec:
|
||||
if spec.satisfies("+papi"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_PAPI=ON")
|
||||
|
||||
if "+python" in spec:
|
||||
if spec.satisfies("+python"):
|
||||
# default is off.
|
||||
options.append("-DLegion_USE_Python=ON")
|
||||
|
||||
if "+zlib" in spec:
|
||||
if spec.satisfies("+zlib"):
|
||||
# default is on.
|
||||
options.append("-DLegion_USE_ZLIB=ON")
|
||||
else:
|
||||
options.append("-DLegion_USE_ZLIB=OFF")
|
||||
|
||||
if "+redop_complex" in spec:
|
||||
# default is off.
|
||||
options.append("-DLegion_REDOP_COMPLEX=ON")
|
||||
|
||||
if "+bindings" in spec:
|
||||
if spec.satisfies("+bindings"):
|
||||
# default is off.
|
||||
options.append("-DLegion_BUILD_BINDINGS=ON")
|
||||
options.append("-DLegion_REDOP_COMPLEX=ON") # required for bindings
|
||||
|
||||
if spec.variants["build_type"].value == "Debug":
|
||||
cmake_cxx_flags.extend(["-DDEBUG_REALM", "-DDEBUG_LEGION", "-ggdb"])
|
||||
if spec.satisfies("+redop_complex") or spec.satisfies("+bindings"):
|
||||
# default is off; required for bindings.
|
||||
options.append("-DLegion_REDOP_COMPLEX=ON")
|
||||
|
||||
maxdims = int(spec.variants["max_dims"].value)
|
||||
# TODO: sanity check if maxdims < 0 || > 9???
|
||||
@ -446,6 +448,13 @@ def cmake_args(self):
|
||||
# This disables Legion's CMake build system's logic for targeting the native
|
||||
# CPU architecture in favor of Spack-provided compiler flags
|
||||
options.append("-DBUILD_MARCH:STRING=")
|
||||
|
||||
if spec.satisfies("+openmp +sysomp"):
|
||||
options.append("-DLegion_OpenMP_SYSTEM_RUNTIME=ON")
|
||||
|
||||
if spec.satisfies("+gc"):
|
||||
options.append("-DCMAKE_CXX_FLAGS=-DLEGION_GC")
|
||||
|
||||
return options
|
||||
|
||||
def build(self, spec, prefix):
|
||||
|
Loading…
Reference in New Issue
Block a user