version = "21.1.6" revision = 1 description = "LLVM compiler infrastructure (target libLLVM for Mesa)" license = "Apache-2.0 WITH LLVM-exception" url = "https://llvm.org/" source = tarball( url=f"https://github.com/llvm/llvm-project/releases/download/llvmorg-{version}/llvm-project-{version}.src.tar.xz", sha256="ae67086eb04bed7ca11ab880349b5f1ab6f50e1b88cda376eaf8a845b935762b", ) host_deps = ["binutils", "gcc", "pkgconf"] # Pinned independently of the host LLVM (22.x): this must be a release that # Mesa 25.3 accepts. Provides target libLLVM for the llvmpipe/radeonsi gallium # drivers; X86 + AMDGPU backends cover software rendering and AMD GPUs. deps = [profile["libc"], "ncurses", "zlib", "zstd", "libffi", "libxml2"] def configure(self): p = self.options self.run( "cmake", "-S", self.source_dir / "llvm", "-B", self.build_dir, "-GNinja", "-DCMAKE_BUILD_TYPE=Release", f"-DCMAKE_INSTALL_PREFIX={p.get('prefix', '/usr')}", # Cross toolchain. CMAKE_CROSSCOMPILING triggers LLVM to build a native # llvm-tblgen under build/NATIVE with the default host compiler. "-DCMAKE_SYSTEM_NAME=Linux", f"-DCMAKE_SYSTEM_PROCESSOR={self.arch}", f"-DCMAKE_SYSROOT={self.sysroot}", f"-DCMAKE_C_COMPILER={self.triple}-gcc", f"-DCMAKE_CXX_COMPILER={self.triple}-g++", "-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER", "-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY", "-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY", "-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY", f"-DLLVM_HOST_TRIPLE={self.triple}", f"-DLLVM_DEFAULT_TARGET_TRIPLE={self.triple}", "-DLLVM_TARGETS_TO_BUILD=X86;AMDGPU", "-DLLVM_BUILD_LLVM_DYLIB=ON", "-DLLVM_LINK_LLVM_DYLIB=ON", "-DLLVM_ENABLE_RTTI=ON", "-DLLVM_ENABLE_FFI=ON", "-DLLVM_ENABLE_ZLIB=FORCE_ON", "-DLLVM_ENABLE_ZSTD=FORCE_ON", "-DLLVM_ENABLE_LIBXML2=FORCE_ON", "-DLLVM_ENABLE_TERMINFO=ON", "-DLLVM_INCLUDE_TESTS=OFF", "-DLLVM_INCLUDE_EXAMPLES=OFF", "-DLLVM_INCLUDE_BENCHMARKS=OFF", "-DLLVM_INCLUDE_DOCS=OFF", "-DLLVM_ENABLE_PROJECTS=", "-Wno-dev", env={ "CFLAGS": p.get("cflags", ""), "CXXFLAGS": p.get("cxxflags", ""), "LDFLAGS": p.get("ldflags", ""), }, ) def build(self): self.run("cmake", "--build", self.build_dir, f"-j{self.jobs}") def install(self): self.run("cmake", "--install", self.build_dir, env={"DESTDIR": str(self.dest_dir)}) # Runtime needs the shared libLLVM + headers/llvm-config; static archives are # large and unnecessary for Mesa. self.run("sh", "-c", f"rm -f {self.dest_dir}/usr/lib/*.a")