Halide: new variants and bug fixes (#35495)
* Update package.py Initial new stuff * Update package.py * Update package.py * Update package.py * fix targets * non-llvm backends * ooops * fix style * Somehow that was not caught? Somehow that was not caught? * style * Last fix make capitalization consistent with Halide not LLVM...
This commit is contained in:
parent
b278a02406
commit
b935809948
@ -26,15 +26,44 @@ class Halide(CMakePackage, PythonExtension):
|
|||||||
variant("tutorials", default=False, description="Install the Halide Tutorials.")
|
variant("tutorials", default=False, description="Install the Halide Tutorials.")
|
||||||
variant("utils", default=False, description="Install the Halide Utilities.")
|
variant("utils", default=False, description="Install the Halide Utilities.")
|
||||||
variant("tests", default=False, description="Build and Run Halide Tests and Apps.")
|
variant("tests", default=False, description="Build and Run Halide Tests and Apps.")
|
||||||
|
variant("opencl", default=False, description="Build Non-llvm based OpenCl-C backend.")
|
||||||
|
variant("metal", default=False, description="Build Non-llvm based Metal backend.")
|
||||||
|
variant(
|
||||||
|
"d3d12", default=False, description="Build Non-llvm based Direct3D 12 Compute backend."
|
||||||
|
)
|
||||||
extends("python", when="+python")
|
extends("python", when="+python")
|
||||||
|
_values = (
|
||||||
|
"aarch64",
|
||||||
|
"amdgpu",
|
||||||
|
"arm",
|
||||||
|
"hexagon",
|
||||||
|
"nvptx",
|
||||||
|
"powerpc",
|
||||||
|
"riscv",
|
||||||
|
"webassembly",
|
||||||
|
"x86",
|
||||||
|
)
|
||||||
|
variant(
|
||||||
|
"targets",
|
||||||
|
default="arm,x86,nvptx,aarch64,hexagon,webassembly",
|
||||||
|
description=("What targets to build. Spack's target family is always added "),
|
||||||
|
values=_values,
|
||||||
|
multi=True,
|
||||||
|
)
|
||||||
|
variant("sharedllvm", default=False, description="Link to the shared version of LLVM.")
|
||||||
|
|
||||||
_targets = " targets=arm,x86,nvptx,aarch64,hexagon,webassembly "
|
|
||||||
depends_on("cmake@3.22:", type="build")
|
depends_on("cmake@3.22:", type="build")
|
||||||
depends_on("ninja", type="build")
|
depends_on("ninja", type="build")
|
||||||
depends_on(
|
depends_on(
|
||||||
"llvm@14.0.0:14+clang+lld" + _targets + " build_type=Release",
|
"llvm@14.0.0:14+clang+lld build_type=Release",
|
||||||
type=("link", "run"),
|
type=("link", "run"),
|
||||||
)
|
)
|
||||||
|
for v in _values:
|
||||||
|
depends_on(
|
||||||
|
"llvm targets={0}".format(v), type=("link", "run"), when="targets={0}".format(v)
|
||||||
|
)
|
||||||
|
depends_on("llvm+llvm_dylib", type=("link", "run"), when="+sharedllvm")
|
||||||
|
|
||||||
depends_on("libjpeg", type=("build", "link", "run"))
|
depends_on("libjpeg", type=("build", "link", "run"))
|
||||||
depends_on("libpng", type=("build", "link", "run"))
|
depends_on("libpng", type=("build", "link", "run"))
|
||||||
|
|
||||||
@ -55,24 +84,68 @@ def libs(self):
|
|||||||
return find_libraries("libHalide", root=self.prefix, recursive=True)
|
return find_libraries("libHalide", root=self.prefix, recursive=True)
|
||||||
|
|
||||||
def cmake_args(self):
|
def cmake_args(self):
|
||||||
|
# See https://github.com/halide/Halide/blob/main/README_cmake.md#building-halide-with-cmake
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
llvm_config = Executable(spec["llvm"].prefix.bin.join("llvm-config"))
|
llvm_config = Executable(spec["llvm"].prefix.bin.join("llvm-config"))
|
||||||
llvmdir = llvm_config("--cmakedir", output=str)
|
llvmdir = llvm_config("--cmakedir", output=str)
|
||||||
args = [
|
args = [
|
||||||
self.define("Python3_EXECUTABLE", spec["python"].command.path),
|
|
||||||
self.define("PYBIND11_USE_FETCHCONTENT", False),
|
|
||||||
self.define("LLVM_DIR", llvmdir),
|
self.define("LLVM_DIR", llvmdir),
|
||||||
self.define_from_variant("WITH_TESTS", "tests"),
|
self.define_from_variant("WITH_TESTS", "tests"),
|
||||||
self.define_from_variant("WITH_TUTORIALS", "tutorials"),
|
self.define_from_variant("WITH_TUTORIALS", "tutorials"),
|
||||||
self.define_from_variant("WITH_UTILS", "utils"),
|
self.define_from_variant("WITH_UTILS", "utils"),
|
||||||
self.define_from_variant("WITH_PYTHON_BINDINGS", "python"),
|
self.define_from_variant("WITH_PYTHON_BINDINGS", "python"),
|
||||||
|
self.define_from_variant("Halide_SHARED_LLVM", "sharedllvm"),
|
||||||
self.define("WITH_WABT", False),
|
self.define("WITH_WABT", False),
|
||||||
|
self.define_from_variant("TARGET_OPENCL", "opencl"),
|
||||||
|
self.define_from_variant("TARGET_METAL", "metal"),
|
||||||
|
self.define_from_variant("TARGET_D3D12COMPUTE", "d3d12"),
|
||||||
]
|
]
|
||||||
|
llvm_targets = get_llvm_targets_to_build(spec)
|
||||||
|
for target in llvm_targets:
|
||||||
|
args += [self.define("TARGET_{0}".format(target[0]), target[1])]
|
||||||
|
|
||||||
if "+python" in spec:
|
if "+python" in spec:
|
||||||
args += [
|
args += [
|
||||||
|
self.define("Python3_EXECUTABLE", spec["python"].command.path),
|
||||||
|
self.define("PYBIND11_USE_FETCHCONTENT", False),
|
||||||
self.define(
|
self.define(
|
||||||
"Halide_INSTALL_PYTHONDIR",
|
"Halide_INSTALL_PYTHONDIR",
|
||||||
python_platlib,
|
python_platlib,
|
||||||
)
|
),
|
||||||
]
|
]
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def get_llvm_targets_to_build(spec):
|
||||||
|
targets = spec.variants["targets"].value
|
||||||
|
llvm_targets = set()
|
||||||
|
# Convert targets variant values to CMake LLVM_TARGETS_TO_BUILD array.
|
||||||
|
spack_to_cmake = {
|
||||||
|
"aarch64": "AARCH64",
|
||||||
|
"amdgpu": "AMDGPU",
|
||||||
|
"arm": "ARM",
|
||||||
|
"hexagon": "HEXAGON",
|
||||||
|
"nvptx": "NVPTX",
|
||||||
|
"powerpc": "POWERPC",
|
||||||
|
"riscv": "RISCV",
|
||||||
|
"webassembly": "WEBASSEMBLY",
|
||||||
|
"x86": "X86",
|
||||||
|
}
|
||||||
|
for t in targets:
|
||||||
|
llvm_targets.add((spack_to_cmake[t], True))
|
||||||
|
|
||||||
|
if spec.target.family in ("x86", "x86_64"):
|
||||||
|
llvm_targets.add(("X86", True))
|
||||||
|
elif spec.target.family == "arm":
|
||||||
|
llvm_targets.add(("ARM", True))
|
||||||
|
elif spec.target.family == "aarch64":
|
||||||
|
llvm_targets.add(("AARCH64", True))
|
||||||
|
elif spec.target.family in ("ppc64", "ppc64le", "ppc", "ppcle"):
|
||||||
|
llvm_targets.add(("POWERPC", True))
|
||||||
|
|
||||||
|
# for everything not represented, we add False
|
||||||
|
for v in spack_to_cmake.values():
|
||||||
|
if (v, True) not in llvm_targets:
|
||||||
|
llvm_targets.add((v, False))
|
||||||
|
|
||||||
|
return list(llvm_targets)
|
||||||
|
Loading…
Reference in New Issue
Block a user