Files
video/libs/mesa/Makefile
T
Daniel Golle 9e78fb7a91 mesa: update to 26.0.6, add virtio + teflon (rocket / etnaviv)
Bump mesa from 25.2.4 to latest stable point release in the 26.0.x
series.

Drop 001-gallivm-support-LLVM-21.patch which has been merged
upstream. Refresh the remaining downstream patches
(100-meson-allow-using-LLVM-as-embedded-project,
200-panfrost-Enable-cross-compilation-of-precompilers-on) for
the new upstream context.

Add +libdisplay-info to the DEPENDS of every libvulkan-* package
(broadcom, imagination, intel, intel-hasvk, lvp, panfrost, radeon,
virtio): Mesa 26.0 unconditionally pulls libdisplay-info into the
WSI Vulkan path on Linux (gated only by host_machine.system() ==
'windows'), so every ICD now NEEDED-links libdisplay-info.so.3
and OpenWrt's shlibs check rejects packages without the explicit
dependency. libvulkan-nouveau is @BROKEN (needs Rust) so it does
not get touched.

The 'imagination-experimental' vulkan-drivers value got renamed to
plain 'imagination' in Mesa 26; update the VULKAN_DRIVERS entry
accordingly.

Add 'imagination' to the host build's -Dtools= list so the
PowerVR pco_clc precompiler is built and installed into
$(STAGING_DIR_HOSTPKG)/bin/ during the host-build stage. The
target vulkan variant uses -Dprecomp-compiler=system and looks
the binary up there via find_program('pco_clc', native:true);
without this, the target configure stage fails with
"Program 'pco_clc' not found or not executable" as soon as the
imagination vulkan driver enters the gallium tree.

New packages:

* libvulkan-virtio: the venus virtio-gpu Vulkan ICD, useful for
  VM/container guests forwarding Vulkan to a host GPU. Mirrors the
  libvulkan-lvp install pattern. Wired via VULKAN_DRIVERS+=virtio.

* libteflon-rocket and libteflon-etnaviv: two flavours of mesa's
  "teflon" TensorFlow Lite delegate. teflon links one or more NPU
  back-ends from gallium into a libteflon.so that TFLite loads as
  an external delegate. The two variants here cover the NPU silicon
  found on OpenWrt-supported hardware:

  - rocket: Rockchip RKNPU on RK3566 / RK3568 / RK3588(s)
    (rockchip/armv8 target).
  - etnaviv: VeriSilicon VIP9000-class NPU on NXP i.MX 8M Plus and
    i.MX 95 (imx/cortexa53 target).

  The Arm Ethos-U back-end is omitted; it targets Cortex-M55 MCUs
  which OpenWrt does not run on.

  Each variant is its own VARIANT= mesa build with
  -Dgallium-drivers=<rocket|etnaviv> -Dteflon=true; both produce
  /usr/lib/libteflon.so so the two packages declare each other as
  CONFLICTS (typical OpenWrt mesa-variant pattern).

A small downstream patch (300-teflon-conditional-npu-drivers.patch)
adjusts src/gallium/targets/teflon/meson.build so that the
driver_etnaviv / driver_rocket / driver_ethosu link_with entries
are conditional on with_gallium_<X> instead of unconditional.
Without it, building libteflon with only one back-end fails because
the other driver_X meson variables are undefined when the
corresponding gallium-driver is not selected.

Add 400-gallivm-lp-bld-misc-auto-iter-llvm22.patch to fix the
32-bit ARM build with the new LLVM 22. lp_bld_misc.cpp's
DETECT_ARCH_ARM branch (only reached on ARM-32) iterates the
feature StringMap with an explicit 'llvm::StringMapIterator<bool>'
type, which LLVM 22 renamed to 'llvm::StringMapIterBase<T, bool>'.
Use 'auto' for the iterator declaration so the code works
regardless of the LLVM major. Other targets (aarch64, x86,
x86_64, mips, ppc, riscv) are unaffected because the failing
loop is gated on DETECT_ARCH_ARM.

Disable -Dllvm and -Ddraw-use-llvm in the per-variant MESON_ARGS
for the gallium drivers where the aux 'draw' module is *dead
code*: softpipe, broadcom (vc4/v3d), lima, etnaviv,
teflon-rocket and teflon-etnaviv. Confirmed by inspecting
26.0.6 source: each of v3d, vc4, lima, etnaviv, panfrost (and
the NPU-only rocket/etnaviv teflon paths) registers its own
pipe_context->draw_vbo and never calls any draw_* aux-module
function (0 draw_create, 0 draw_set_so_targets, 0
draw_set_indirect_buffer, 0 draw_*_geometry, 0 src includes of
draw/*.h apart from one unused header in pan_screen.c).
Transform feedback, geometry shaders and indirect draws are
handled either in hardware or via the driver's own compute path,
never through the aux-draw module. softpipe and llvmpipe are the
only consumers of the aux-draw module; mesa.meson.build also
forces draw-use-llvm=true for llvmpipe/lavapipe/i915/r300-x86.

Net effect on libgallium-26.0.6.so, measured on
arm_cortex-a7+neon-vfpv4 (mediatek/mt7623):

  variant   libgallium before    libgallium after    .apk after
  ----------------------------------------------------------------
  softpipe        57.7 MB             16 MB           2.9 MB
  broadcom        57.7 MB             16 MB           3.2 MB
  lima            57.7 MB             16 MB           3.0 MB
  etnaviv         57.7 MB             16 MB           2.9 MB
  teflon-rocket   ~57 MB             ~16 MB           varies
  teflon-etnaviv  ~57 MB             ~16 MB           varies
  llvmpipe        57.9 MB             55-56 MB        15 MB    (unchanged - keeps LLVM)

LLVM-related strings in the LLVM-disabled variants drop from
208/220 to 5 (just stub strings that survive in the no-LLVM
draw path). The 41 MB removed from each was statically-linked
LLVM JIT that no code path in those drivers ever executed.

Relax the build-time dependency on llvm-mesa: a user who
selects only LLVM-free Mesa variants (softpipe/broadcom/lima/
etnaviv/teflon-*) no longer needs to build the entire llvm-mesa
package (which can take 30+ minutes from source). MESA_USE_LLVM
remains a user-visible toggle (defaults y for backward compat).
With CONFIG_MESA_USE_LLVM=n:

 * HOST_BUILD_DEPENDS drops the unconditional 'llvm' (now
   MESA_USE_LLVM:llvm), matching PKG_BUILD_DEPENDS.
 * MESON_HOST_ARGS skips -Dllvm/-Dmesa-clc/-Dprecomp-compiler/
   -Dstatic-libclc/-Dinstall-mesa-clc/-Dinstall-precomp-compiler
   and trims -Dtools to just 'nir'.
 * Host/Configure factors its LLVM-subproject linkage into a
   Host/Configure/LLVMMesa hook, mirroring the existing
   Build/Configure/LLVMMesa pattern.

Tested locally on arm_cortex-a7+neon-vfpv4 (mediatek/mt7623):

 * MESA_USE_LLVM=y, libmesa-softpipe + libmesa-llvmpipe: builds
   llvm-mesa, then mesa softpipe (38s, no-LLVM libgallium) and
   llvmpipe (42s, LLVM-linked libgallium 56 MB). All correct.

 * MESA_USE_LLVM=n, libmesa-softpipe only: 0 llvm/compile
   invocations, 0 mesa/host-compile invocations, total mesa
   build time 38s. libmesa-softpipe .apk identical (2.9 MB) to
   the MESA_USE_LLVM=y case.

Link: https://docs.mesa3d.org/relnotes/26.0.6.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-17 12:46:41 +01:00

870 lines
26 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
include $(TOPDIR)/rules.mk
PKG_NAME:=mesa
PKG_VERSION:=26.0.6
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://archive.mesa3d.org/
PKG_HASH:=1d3c3b8a8363b8cc354175bb4a684ad8b035211cc1d6fa17aeb9b9623c513f89
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=BSD-3-Clause
PKG_INSTALL:=1
PKG_BUILD_DEPENDS:=glslang/host python3/host libva vulkan-headers \
MESA_USE_LLVM:llvm MESA_USE_LLVM:mesa/host
HOST_BUILD_DEPENDS:=python3/host spirv-tools/host MESA_USE_LLVM:llvm
PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_libmesa-amd \
CONFIG_PACKAGE_libmesa-intel \
CONFIG_PACKAGE_libmesa-tegra \
CONFIG_PACKAGE_libmesa-etnaviv \
CONFIG_PACKAGE_libmesa-broadcom \
CONFIG_PACKAGE_libmesa-nouveau \
CONFIG_PACKAGE_libmesa-lima \
CONFIG_PACKAGE_libmesa-panfrost \
CONFIG_PACKAGE_libmesa-virgl \
CONFIG_PACKAGE_libmesa-zink \
CONFIG_PACKAGE_libmesa-softpipe \
CONFIG_PACKAGE_libmesa-llvmpipe \
CONFIG_PACKAGE_libvulkan-broadcom \
CONFIG_PACKAGE_libvulkan-imagination \
CONFIG_PACKAGE_libvulkan-intel \
CONFIG_PACKAGE_libvulkan-intel-hasvk \
CONFIG_PACKAGE_libvulkan-lvp \
CONFIG_PACKAGE_libvulkan-nouveau \
CONFIG_PACKAGE_libvulkan-panfrost \
CONFIG_PACKAGE_libvulkan-radeon \
CONFIG_PACKAGE_libvulkan-virtio \
CONFIG_PACKAGE_libteflon-rocket \
CONFIG_PACKAGE_libteflon-etnaviv
TARGET_CPPFLAGS+=-Wno-format -Wno-format-security
PYTHON3_PKG_BUILD:=0
MESON_USE_STAGING_PYTHON:=1
HOST_PYTHON3_PACKAGE_BUILD_DEPENDS:=./host-pip-requirements.txt
include $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
include $(TOPDIR)/feeds/packages/lang/python/python3-package.mk
include $(INCLUDE_DIR)/meson.mk
MESON_HOST_VARS += PYTHONPATH="$(HOST_PYTHON3PATH)"
MESON_VARS += PYTHONPATH="$(HOST_PYTHON3PATH)"
TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed
define Package/mesa/Default
SECTION:=libs
CATEGORY:=Libraries
SUBMENU:=Video
DEPENDS:=+libatomic
TITLE:=Mesa3D
URL:=https://www.mesa3d.org
endef
define Package/mesa3d
$(call Package/mesa/Default)
HIDDEN:=1
endef
define Package/mesa3d/config
config HAVE_MESA
bool
default y
config MESA_USE_LLVM
bool "Use LLVM to build MESA"
depends on aarch64||arm||i386||i686||loongarch64||mips||mipsel||mips64||mips64el||riscv64||x86_64
default y
help
Build LLVM (the heavy 'llvm-mesa' static archive) and link it
into the LLVM-using Mesa variants (amd, intel, tegra, nouveau,
panfrost, virgl, zink, llvmpipe and all libvulkan-*). When
disabled, only the LLVM-free variants (softpipe, broadcom,
lima, etnaviv, libteflon-*) are buildable, but the llvm-mesa
build is skipped entirely - much faster source builds at the
cost of losing the LLVM-using variants.
endef
define Package/libmesa/Default
$(call Package/mesa/Default)
DEPENDS+=+libstdcpp +zlib +libdrm +libsensors +libwayland +libzstd \
+wayland-protocols
PROVIDES:=libmesa
TITLE+= OpenGL and friends
endef
define Package/libmesa-amd
$(call Package/libmesa/Default)
TITLE+= (AMD)
DEPENDS+=+libdrm-amdgpu +libdrm-radeon +libelf @MESA_USE_LLVM
VARIANT:=amd
endef
define Package/libmesa-amd/description
A collection of drivers for AMD Radeon dedicated GPUs.
AMD R300
The R300 driver supports AMD's Radeon R300 GPU series.
AMD R600
The R600 driver supports AMD's Radeon HD 2000 GPU series. It's
officially supported by AMD.
AMD RadeonSI
The RadeonSI OpenGL driver supports AMD's Southern Island GPUs and
later. It's officially supported by AMD.
endef
define Package/libmesa-intel
$(call Package/libmesa/Default)
DEPENDS+=+libdrm-intel @(i386||i686||x86_64) @MESA_USE_LLVM
TITLE+= (Intel)
VARIANT:=intel
endef
define Package/libmesa-intel/description
A collection of drivers for GPUs embedded in Intel's CPUs.
Intel Iris
The Iris driver supports Intel's Gen 8 hardware and later. It's
officially supported by Intel and is their next-generation Linux OpenGL
driver.
Intel Crocus
The Crocus driver supports Intel's Gen 7 hardware and earlier. It's
based on Iris and the former i965 driver, but is not officially
supported or endorsed by Intel.
Intel i915
The i915 driver supports older Intel i915 and i945 chipsets.
endef
define Package/libmesa-tegra
$(call Package/libmesa/Default)
DEPENDS+=+libdrm-tegra @(aarch64||arm) @MESA_USE_LLVM
TITLE+= (NVIDIA Tegra)
VARIANT:=tegra
endef
define Package/libmesa-tegra/description
The Nouveau driver built for GPUs embedded in the Tegra SoC family. It's
a reverse-engineered, community-developed driver, and is not endorsed by
NVIDIA.
endef
define Package/libmesa-etnaviv
$(call Package/libmesa/Default)
DEPENDS+=+libdrm-etnaviv @(aarch64||arm||mips||mips64||mipsel||mips64el||riscv64)
TITLE+= (Vivante)
VARIANT:=etnaviv
endef
define Package/libmesa-etnaviv/description
The Etnaviv driver supports the Vivante GCxxx series of embedded GPUs.
It's a reverse-engineered, community-developed driver, and is not
endorsed by Vivante.
endef
define Package/libmesa-nouveau
$(call Package/libmesa/Default)
DEPENDS+=+libdrm-nouveau @MESA_USE_LLVM
TITLE+= (NVIDIA)
VARIANT:=nouveau
endef
define Package/libmesa-nouveau/description
The Nouveau drivers supports a large set of NVIDIA chips, ranging from
NV04 found in the Riva TNT card to NVF0 found in the GeForce GTX 780.
It's a reverse-engineered, community-developed driver, and is not
endorsed by NVIDIA.
endef
define Package/libmesa-broadcom
$(call Package/libmesa/Default)
TITLE+= (Broadcom)
VARIANT:=broadcom
DEPENDS+=+libarchive @(aarch64||arm) @HAS_FPU
endef
define Package/libmesa-broadcom/description
Mesas VC4 graphics driver supports multiple implementations of
Broadcom's VideoCore IV GPU. It is notably used in the Raspberry Pi 0
through Raspberry Pi 3 hardware.
Along with GLES 2.0, the Mesa driver also exposes OpenGL 2.1, which is
mostly correct but with a few caveats.
Mesas V3D graphics driver stack includes a conformant GLES3.1 driver
called V3D, notably used on the Raspberry Pi 4 and Raspberry Pi 5.
This package contains both, VC4 and V3D drivers and covers all
RaspberryPi boards.
endef
define Package/libmesa-lima
$(call Package/libmesa/Default)
TITLE+= (ARM Mali Utgard)
VARIANT:=lima
DEPENDS+=@(aarch64||arm)
endef
define Package/libmesa-lima/description
Lima is an open source graphics driver which supports Mali Utgard
(Mali-4xx) embedded GPUs from ARM. It's a reverse-engineered,
community-developed driver, and is not endorsed by ARM. Lima was
upstreamed in Mesa 19.1 and Linux kernel 5.2.
Product Architecture Status
Mali-400 Utgard Supported
Mali-450 Utgard Supported
Mali-470 Utgard Unsupported
Newer Mali chips based on the Midgard/Bifrost architectures (Mali T or G
series) are handled by the Panfrost driver, not Lima.
endef
define Package/libmesa-panfrost
$(call Package/libmesa/Default)
TITLE+= (ARM Mali Midgard and later)
VARIANT:=panfrost
DEPENDS+=@(aarch64||arm) @MESA_USE_LLVM
endef
define Package/libmesa-panfrost/description
The Panfrost driver stack includes an OpenGL ES implementation for Arm
Mali GPUs based on the Midgard, Bifrost and Valhall microarchitectures.
It is conformant on Mali-G52, Mali-G57 and Mali-G610, but non-conformant
on other GPUs. The following hardware is currently supported:
Models Architecture OpenGL ES OpenGL
T600, T620, T720 Midgard (v4) 2.0 2.1
T760, T820, T830 T860, T880 Midgard (v5) 3.1 3.1
G72 Bifrost (v6) 3.1 3.1
G31, G51, G52, G76 Bifrost (v7) 3.1 3.1
G57 Valhall (v9) 3.1 3.1
G310, G610 Valhall (v10) 3.1 3.1
Other Midgard and Bifrost chips (e.g. G71) are not yet supported.
endef
define Package/libmesa-virgl
$(call Package/libmesa/Default)
TITLE+= (VirtIO GL)
VARIANT:=virgl
endef
define Package/libmesa-virgl/description
VirGL is a virtual 3D GPU for use inside QEMU virtual machines, that
allows the guest operating system to use the capabilities of the host
GPU to accelerate 3D rendering. The plan is to have a guest GPU that is
fully independent of the host GPU.
endef
define Package/libmesa-zink
$(call Package/libmesa/Default)
TITLE+= (Zink GL via Vulkan)
VARIANT:=vulkan
DEPENDS+=@MESA_USE_LLVM
endef
define Package/libmesa-zink/description
The Zink driver is a Gallium driver that emits Vulkan API calls instead
of targeting a specific GPU architecture. This can be used to get full
desktop OpenGL support on devices that only support Vulkan.
endef
define Package/libmesa-softpipe
$(call Package/libmesa/Default)
TITLE+= (Softpipe)
VARIANT:=softpipe
DEFAULT_VARIANT:=1
endef
define Package/libmesa-softpipe/description
The Softpipe driver is a reference software rasterizer; it's slow but
accurate. It's mostly useful for testing, and on systems that lack
support for LLVM.
endef
define Package/libmesa-llvmpipe
$(call Package/libmesa/Default)
TITLE+= (LLVMpipe)
DEPENDS+=@MESA_USE_LLVM
VARIANT:=llvmpipe
endef
define Package/libmesa-llvmpipe/description
The Gallium LLVMpipe driver is a software rasterizer that uses LLVM to
do runtime code generation. Shaders, point/line/triangle rasterization
and vertex processing are implemented with LLVM IR which is translated
to native CPU machine code. Also, the driver is multithreaded to take
advantage of multiple CPU cores (up to 32 at this time). It's the
fastest software rasterizer for Mesa.
endef
define Package/libvulkan-broadcom
$(call Package/mesa/Default)
DEPENDS+=+libdisplay-info +libdrm +libexpat +libstdcpp +libudev +libwayland +libzstd +zlib \
@(arm||aarch64) @HAS_FPU
TITLE+= Broadcom Vulkan driver
VARIANT:=vulkan
endef
define Package/libvulkan-broadcom/description
V3DV Vulkan graphics driver, notably used on the Raspberry Pi 4 and
Raspberry Pi 5.
endef
define Package/libvulkan-imagination
$(call Package/mesa/Default)
DEPENDS+=+libatomic +libdisplay-info +libdrm +libexpat +libstdcpp +libudev +libwayland +libzstd \
+zlib @(aarch64||arm||mips||mips64||mipsel||mips64el||riscv64)
TITLE+= Imagination PowerVR driver (EXPERIMENTAL)
VARIANT:=vulkan
endef
define Package/libvulkan-imagination/description
PowerVR is a Vulkan driver for Imagination Technologies PowerVR GPUs,
starting with those based on the Rogue architecture.
The driver is not yet fully conformant so it requires exporting
PVR_I_WANT_A_BROKEN_VULKAN_DRIVER=1 to the environment before running
any Vulkan content.
The following hardware is currently in active development:
Product Series B.V.N.C Vulkan Conformant
GX6250 Series 6XT 4.40.2.51 1.0 No
AXE-1-16M A-Series 33.15.11.3 1.0 No
BXS-4-64 B-Series 36.53.104.796 1.0 No
endef
define Package/libvulkan-intel
$(call Package/mesa/Default)
DEPENDS+=+libdisplay-info +libdrm-intel +libexpat +libstdcpp +libudev +libwayland +libzstd +zlib \
@(i386||i686||x86_64) @MESA_USE_LLVM
TITLE+= Intel Gen9+ Vulkan driver
VARIANT:=vulkan
endef
define Package/libvulkan-intel/description
Intel ANV for Skylake "Gen9" and newer graphics. It's officially
supported by Intel and is their official Vulkan driver for Linux.
endef
define Package/libvulkan-intel-hasvk
$(call Package/mesa/Default)
DEPENDS+=+libdisplay-info +libdrm-intel +libexpat +libstdcpp +libudev +libwayland +libzstd +zlib \
@(i386||i686||x86_64) @MESA_USE_LLVM
TITLE+= Intel Gen7/Gen8 Vulkan driver
VARIANT:=vulkan
endef
define Package/libvulkan-intel-hasvk/description
The ANV vulkan driver supports Intel's Gen 7/8 hardware. It's officially
supported by Intel and is their official Vulkan driver for Linux.
endef
define Package/libvulkan-lvp
$(call Package/mesa/Default)
DEPENDS+=+libatomic +libdisplay-info +libdrm +libstdcpp +libudev +libwayland +libzstd +zlib @MESA_USE_LLVM
TITLE+= LLVM JIT CPU rendering Vulkan driver
VARIANT:=vulkan
endef
define Package/libvulkan-lvp/description
The Vulkan LLVMpipe driver is a software rasterizer that uses LLVM to do
runtime code generation.
endef
define Package/libvulkan-nouveau
$(call Package/mesa/Default)
TITLE+= nouveau Vulkan driver for nVidia GPUs
DEPENDS+=$(RUST_ARCH_DEPENDS) @MESA_USE_LLVM @BROKEN
VARIANT:=vulkan
# needs rust-bindgen which currently can't be built
endef
define Package/libvulkan-nouveau/description
NVK is a Vulkan driver for NVIDIA GPUs.
NVK currently supports Turing (RTX 20XX and GTX 16XX) and later GPUs.
Eventually, we plan to support as far back as Kepler (GeForce 600 and
700 series) GPUs but anything pre-Turing is currently disabled by
default.
endef
define Package/libvulkan-panfrost
$(call Package/mesa/Default)
DEPENDS+=+libdisplay-info +libdrm +libexpat +libstdcpp +libudev +libwayland +libzstd +zlib \
@(arm||aarch64) @MESA_USE_LLVM
TITLE+= ARM Mali Midgard/Bifrost/Valhall Vulkan driver
VARIANT:=vulkan
endef
define Package/libvulkan-panfrost/description
The PanVk driver is an Open Source Vulkan driver for ARM Mali Midgard
and Bifrost GPUs.
endef
define Package/libvulkan-radeon
$(call Package/mesa/Default)
TITLE+= AMD Radeon Vulkan driver
DEPENDS+=+libdisplay-info +libdrm-amdgpu +libelf +libexpat +libstdcpp +libudev +libwayland \
+libzstd +zlib @MESA_USE_LLVM
VARIANT:=vulkan
endef
define Package/libvulkan-radeon/description
RADV is a Vulkan driver for AMD GCN/RDNA GPUs.
endef
define Package/libvulkan-virtio
$(call Package/mesa/Default)
TITLE+= virtio-gpu Vulkan driver (venus)
DEPENDS+=+libdisplay-info +libdrm +libstdcpp +libudev +libwayland +libzstd +zlib
VARIANT:=vulkan
endef
define Package/libvulkan-virtio/description
Venus is a Vulkan driver for virtio-gpu, used inside virtual machines
to forward Vulkan API calls to a Vulkan-capable GPU on the host via
the virtio-gpu transport.
endef
define Package/libteflon-rocket
$(call Package/mesa/Default)
TITLE+= TFLite delegate for Rockchip RKNPU (rocket)
DEPENDS+=+libdrm +libexpat @aarch64
VARIANT:=teflon-rocket
CONFLICTS:=libteflon-etnaviv
endef
define Package/libteflon-rocket/description
Mesa's "teflon" TensorFlow Lite delegate, built with the Rockchip
RKNPU (rocket) backend. Provides hardware-accelerated TFLite
inference on Rockchip RK3566 / RK3568 / RK3588(s) NPUs.
endef
define Package/libteflon-etnaviv
$(call Package/mesa/Default)
TITLE+= TFLite delegate for VeriSilicon NPU (etnaviv)
DEPENDS+=+libdrm-etnaviv +libexpat +libzstd +zlib @aarch64
VARIANT:=teflon-etnaviv
CONFLICTS:=libteflon-rocket
endef
define Package/libteflon-etnaviv/description
Mesa's "teflon" TensorFlow Lite delegate, built with the etnaviv
backend for VeriSilicon VIP9000-class NPUs (e.g. NXP i.MX 8M Plus,
i.MX 95).
endef
ifneq ($(CONFIG_PACKAGE_libvulkan-broadcom),)
VULKAN_DRIVERS+=broadcom
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-imagination),)
VULKAN_DRIVERS+=imagination
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-intel),)
VULKAN_DRIVERS+=intel
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-intel-hasvk),)
VULKAN_DRIVERS+=intel_hasvk
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-lvp),)
VULKAN_DRIVERS+=swrast
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-nouveau),)
VULKAN_DRIVERS+=nouveau
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-panfrost),)
VULKAN_DRIVERS+=panfrost
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-radeon),)
VULKAN_DRIVERS+=amd
endif
ifneq ($(CONFIG_PACKAGE_libvulkan-virtio),)
VULKAN_DRIVERS+=virtio
endif
MESON_HOST_ARGS += \
-Dplatforms= \
-Dglx=disabled \
-Degl=disabled \
-Dgbm=disabled \
-Dgles1=disabled \
-Dgles2=disabled \
-Dglvnd=disabled \
-Dopengl=false \
-Dandroid-stub=false \
-Dlibunwind=disabled \
-Dvalgrind=disabled \
-Dgallium-drivers= \
-Dvulkan-drivers= \
-Dshared-llvm=disabled \
-Ddraw-use-llvm=false \
-Dintel-elk=true
ifneq ($(CONFIG_MESA_USE_LLVM),)
MESON_HOST_ARGS += \
-Dtools=nir,imagination \
-Dllvm=enabled \
-Dmesa-clc=enabled \
-Dprecomp-compiler=enabled \
-Dstatic-libclc=all \
-Dinstall-mesa-clc=true \
-Dinstall-precomp-compiler=true
else
MESON_HOST_ARGS += \
-Dtools=nir \
-Dllvm=disabled \
-Dmesa-clc=disabled \
-Dprecomp-compiler=disabled
endif
MESON_ARGS += \
-Dplatforms=wayland \
-Dglx=disabled \
-Degl=enabled \
-Dgbm=enabled \
-Dgles1=enabled \
-Dgles2=enabled \
-Dglvnd=disabled \
-Dopengl=true \
-Dandroid-stub=false \
-Dlibunwind=disabled \
-Dvalgrind=disabled \
-Dtools= \
-Dllvm=$(if $(CONFIG_MESA_USE_LLVM),en,dis)abled \
-Ddraw-use-llvm=$(if $(CONFIG_MESA_USE_LLVM),true,false) \
-Dmesa-clc=$(if $(CONFIG_MESA_USE_LLVM),system,auto) \
-Dprecomp-compiler=system \
-Dlegacy-wayland=bind-wayland-display
ifeq ($(BUILD_VARIANT),amd)
MESON_ARGS += \
-Dgallium-drivers=r300,r600,radeonsi
endif
ifeq ($(BUILD_VARIANT),intel)
MESON_ARGS += \
-Dgallium-drivers=crocus,i915,iris \
-Dintel-rt=$(if $(CONFIG_TARGET_x86_64),en,dis)abled
endif
ifeq ($(BUILD_VARIANT),tegra)
MESON_ARGS += \
-Dgallium-drivers=tegra,nouveau
endif
ifeq ($(BUILD_VARIANT),etnaviv)
MESON_ARGS += \
-Dgallium-drivers=etnaviv \
-Dllvm=disabled \
-Ddraw-use-llvm=false
endif
ifeq ($(BUILD_VARIANT),broadcom)
MESON_ARGS += \
-Dgallium-drivers=vc4,v3d \
-Dllvm=disabled \
-Ddraw-use-llvm=false
endif
ifeq ($(BUILD_VARIANT),nouveau)
MESON_ARGS += \
-Dgallium-drivers=nouveau
endif
ifeq ($(BUILD_VARIANT),lima)
MESON_ARGS += \
-Dgallium-drivers=lima \
-Dllvm=disabled \
-Ddraw-use-llvm=false
endif
ifeq ($(BUILD_VARIANT),panfrost)
MESON_ARGS += \
-Dgallium-drivers=panfrost
endif
ifeq ($(BUILD_VARIANT),virgl)
MESON_ARGS += \
-Dgallium-drivers=virgl
endif
ifeq ($(BUILD_VARIANT),llvmpipe)
MESON_ARGS += \
-Dgallium-drivers=llvmpipe
endif
ifeq ($(BUILD_VARIANT),softpipe)
MESON_ARGS += \
-Dgallium-drivers=softpipe \
-Dllvm=disabled \
-Ddraw-use-llvm=false
endif
ifeq ($(BUILD_VARIANT),teflon-rocket)
MESON_ARGS += \
-Dgallium-drivers=rocket \
-Dteflon=true \
-Dllvm=disabled \
-Ddraw-use-llvm=false
endif
ifeq ($(BUILD_VARIANT),teflon-etnaviv)
MESON_ARGS += \
-Dgallium-drivers=etnaviv \
-Dteflon=true \
-Dllvm=disabled \
-Ddraw-use-llvm=false
endif
ifeq ($(BUILD_VARIANT),vulkan)
MESON_ARGS += \
-Dgallium-drivers=zink \
-Dvulkan-drivers=$(subst $(space),$(comma),$(strip $(VULKAN_DRIVERS)))
else
MESON_ARGS += \
-Dvulkan-drivers=
endif
ifneq ($(CONFIG_BUILD_PATENTED),)
MESON_ARGS += -Dvideo-codecs=all
else
MESON_ARGS += -Dvideo-codecs=all_free
endif
TARGET_CFLAGS += -I$(MESON_BUILD_DIR)/src/broadcom/
ifneq ($(CONFIG_MESA_USE_LLVM),)
define Host/Configure/LLVMMesa
$(INSTALL_DIR) $(HOST_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR_HOST)/llvm-mesa/bin $(HOST_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR_HOST)/llvm-mesa/include $(HOST_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR_HOST)/llvm-mesa/lib $(HOST_BUILD_DIR)/subprojects/llvm
$(CP) ./llvm-meson.build.in $(HOST_BUILD_DIR)/subprojects/llvm/meson.build
LLVM_BUILDDIR=$(lastword $(wildcard $(BUILD_DIR_HOST)/llvm-mesa/llvm-project-*)) ; LLVM_VER=$$$${LLVM_BUILDDIR##*llvm-project-} ; LLVM_VER=$$$${LLVM_VER%%.src} ;\
$(SED) "s%@LLVM_VERSION@%$$$${LLVM_VER}%" $(HOST_BUILD_DIR)/subprojects/llvm/meson.build
LLVM_LIBS=$$$$( next_comma='' ; for lib in $(STAGING_DIR_HOST)/llvm-mesa/lib/*.a; do \
lib=$$$${lib##*/lib} ; \
lib=$$$${lib##*/} ; \
lib=$$$${lib%%.a} ; \
echo -n "$$$${next_comma}'$$$${lib}'" ; \
next_comma=', ' ; \
done ) ; $(SED) "s%@LLVM_LIBS@%$$$${LLVM_LIBS}%" $(HOST_BUILD_DIR)/subprojects/llvm/meson.build
$(INSTALL_DATA) \
$(STAGING_DIR_HOST)/llvm-mesa/lib/clang/*/include/opencl-c.h \
$(STAGING_DIR_HOST)/llvm-mesa/lib/clang/*/include/opencl-c-base.h \
$(HOST_BUILD_DIR)/src/compiler/clc
endef
else
define Host/Configure/LLVMMesa
endef
endif
define Host/Configure
$(call Py3Build/InstallBuildDepends)
$(call Host/Configure/LLVMMesa)
$(call Host/Configure/Meson)
endef
ifneq ($(CONFIG_MESA_USE_LLVM),)
define Build/Configure/LLVMMesa
$(INSTALL_DIR) $(PKG_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR)/usr/bin $(PKG_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR)/usr/include $(PKG_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR)/usr/lib $(PKG_BUILD_DIR)/subprojects/llvm
$(LN) $(STAGING_DIR)/usr/share $(PKG_BUILD_DIR)/subprojects/llvm
$(CP) ./llvm-meson.build.in $(PKG_BUILD_DIR)/subprojects/llvm/meson.build
LLVM_BUILDDIR=$(wildcard $(BUILD_DIR)/llvm-mesa/llvm-project-*) ; LLVM_VER=$$$${LLVM_BUILDDIR##*llvm-project-} ; LLVM_VER=$$$${LLVM_VER%%.src} ;\
$(SED) "s%@LLVM_VERSION@%$$$${LLVM_VER}%" $(PKG_BUILD_DIR)/subprojects/llvm/meson.build
LLVM_LIBS=$$$$( next_comma='' ; for lib in $(STAGING_DIR)/usr/lib/libclang*.a $(STAGING_DIR)/usr/lib/libLLVM*.a; do \
lib=$$$${lib##*/lib} ; \
lib=$$$${lib##*/} ; \
lib=$$$${lib%%.a} ; \
echo -n "$$$${next_comma}'$$$${lib}'" ; \
next_comma=', ' ; \
done ) ; $(SED) "s%@LLVM_LIBS@%$$$${LLVM_LIBS}%" $(PKG_BUILD_DIR)/subprojects/llvm/meson.build
endef
else
define Build/Configure/LLVMMesa
endef
endif
define Build/Configure
$(call Build/Configure/LLVMMesa)
$(call Py3Build/InstallBuildDepends)
$(call Build/Configure/Meson)
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig
endef
define Package/libmesa/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*GL*.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgbm.so* $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgallium*.so* $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/lib/gbm
$(CP) $(PKG_INSTALL_DIR)/usr/lib/gbm/*.so $(1)/usr/lib/gbm
if [ -e "$(PKG_INSTALL_DIR)/usr/lib/dri" ]; then \
$(INSTALL_DIR) $(1)/usr/lib/dri ; \
$(CP) $(PKG_INSTALL_DIR)/usr/lib/dri/*.so $(1)/usr/lib/dri ; \
fi
$(INSTALL_DIR) $(1)/usr/share/drirc.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/drirc.d/* $(1)/usr/share/drirc.d
endef
define Package/libvulkan-radeon/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_radeon.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/radeon_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-broadcom/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_broadcom.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/broadcom_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-imagination/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_powervr_mesa.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/powervr_mesa_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-intel/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_intel.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/intel_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-intel-hasvk/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_intel_hasvk.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/intel_hasvk_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-lvp/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_lvp.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/lvp_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-nouveau/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_nouveau.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/nouveau_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-panfrost/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_panfrost.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/panfrost_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libvulkan-virtio/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libvulkan_virtio.so $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/share/vulkan/icd.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/vulkan/icd.d/virtio_icd.*.json $(1)/usr/share/vulkan/icd.d
endef
define Package/libteflon/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libteflon.so $(1)/usr/lib
endef
Package/libteflon-rocket/install = $(Package/libteflon/install)
Package/libteflon-etnaviv/install = $(Package/libteflon/install)
Package/libmesa-intel/install = $(Package/libmesa/install)
Package/libmesa-amd/install = $(Package/libmesa/install)
Package/libmesa-tegra/install = $(Package/libmesa/install)
Package/libmesa-etnaviv/install = $(Package/libmesa/install)
Package/libmesa-broadcom/install = $(Package/libmesa/install)
Package/libmesa-lima/install = $(Package/libmesa/install)
Package/libmesa-panfrost/install = $(Package/libmesa/install)
Package/libmesa-nouveau/install = $(Package/libmesa/install)
Package/libmesa-virgl/install = $(Package/libmesa/install)
Package/libmesa-zink/install = $(Package/libmesa/install)
Package/libmesa-softpipe/install = $(Package/libmesa/install)
Package/libmesa-llvmpipe/install = $(Package/libmesa/install)
$(eval $(call BuildPackage,mesa3d))
$(eval $(call BuildPackage,libmesa-amd))
$(eval $(call BuildPackage,libmesa-intel))
$(eval $(call BuildPackage,libmesa-tegra))
$(eval $(call BuildPackage,libmesa-etnaviv))
$(eval $(call BuildPackage,libmesa-broadcom))
$(eval $(call BuildPackage,libmesa-nouveau))
$(eval $(call BuildPackage,libmesa-lima))
$(eval $(call BuildPackage,libmesa-panfrost))
$(eval $(call BuildPackage,libmesa-virgl))
$(eval $(call BuildPackage,libmesa-zink))
$(eval $(call BuildPackage,libmesa-softpipe))
$(eval $(call BuildPackage,libmesa-llvmpipe))
$(eval $(call BuildPackage,libvulkan-broadcom))
$(eval $(call BuildPackage,libvulkan-imagination))
$(eval $(call BuildPackage,libvulkan-intel))
$(eval $(call BuildPackage,libvulkan-intel-hasvk))
$(eval $(call BuildPackage,libvulkan-lvp))
$(eval $(call BuildPackage,libvulkan-nouveau))
$(eval $(call BuildPackage,libvulkan-panfrost))
$(eval $(call BuildPackage,libvulkan-radeon))
$(eval $(call BuildPackage,libvulkan-virtio))
$(eval $(call BuildPackage,libteflon-rocket))
$(eval $(call BuildPackage,libteflon-etnaviv))
$(eval $(call HostBuild))