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:
		| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Teo
					Teo