100 Commits
Author SHA1 Message Date
Daniel Golle 6917907d4d plymouth-theme-openwrt-demo: suit small hi-DPI panels
The theme was laid out and drawn with a 1080p screen in mind, and on a
small panel with a device scale above one it falls short.

The backdrop holding the logo, links and nodes is now allocated in
device pixels and drawn through a canvas scaled by the device scale, so
the static scene is as sharp as what is drawn on top of it. At scale 1
the texture matrix is the identity and plutovg keeps its plain blit.

The pictograms get a floor of 12 logical pixels and shrink only as far
as needed for the row to fit the screen width. The row is reserved for
that size and the logo and graph are laid out in the height left above
it; where the floor does not apply, the layout is unchanged.

In boot-up mode the backlight that the DRM panel references through its
backlight phandle is taken to zero before the first frame and faded in
over 1.5 s to 80% of its maximum, as full brightness lifts the black
background to grey. A panel carrying the bootloader-initialized
property already shows the bootloader's picture and is left alone. On
a backlight whose scale is not perceptual the ramp follows the CIE 1931
lightness curve pwm_bl uses for its own tables.

Nothing reports how far a system upgrade has got, so the upgrade modes
keep the whole graph and turn a spinner around the router node instead
of dismantling the graph on a timer, which would read as progress.
The pictograms stand for services coming up, so only boot-up mode
shows them. A router shuts down within a few seconds, so shutdown and
reboot take the graph down one level every 250 ms, leaves first, and
only the logo is left after three steps.

paint() walked every packet and pulse once per damaged rectangle, and
every packet and pulse damaged a rectangle of its own, so the cost of a
frame grew with the square of the packet count and was spent in script
loops rather than in pixels. A splash connecting to a running bus
received one packet per existing ubus object, without the cap
flow_spawn() observes, and dropped far below its frame rate. Damage is
now collected into one box per frame, paint() draws each packet once
with colours built when the packet is created, pulse rings are filled
as annuli where a stroke cost considerably more, and FLOW_CAP, lowered
to 8 as a handful of packets conveys activity as well as two dozen,
applies to packets launched by ubus objects too.

Fixes: 6aca04f334 ("plymouth-theme-openwrt-demo: add a demo theme for the ucode engine")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-11 18:23:56 +01:00
Daniel Golle 74c76563c7 plymouth-plugin-ucode: hand the display over and back
A splash shown by the plugin held the display until something told
plymouthd to let go, gave a waiting display client no way to know when
that happened, and crashed or lost its ubus link on changes of mode.

In boot-up mode, open the input event nodes present when the splash
starts and those procd announces later, and on the first key, button
or touch press send plymouthd the deactivate request over its own
socket. procd replaces /dev with a fresh tmpfs after preinit, where the
splash starts, so the nodes it creates cannot be watched for; its
hotplug.d scripts run for every input device once the node exists,
coldplugged ones included, and the one shipped here hands the node to
the plugin as a plymouth status update.

Publish a plymouth object whose status method reports whether the
splash holds the display, and hand procd a plymouth.release event
whenever it lets go, without waiting for the reply, so a service can
wait for it with a trigger; procd runs triggers for events it is
handed, not for broadcasts. Stop the frame timer on the way to idle
and start it again when plymouth redraws the splash after
reactivating, and drop the unused progress callback.

Clear the ucode VM after freeing it, as uc_vm_init() leaves
vm->registry pointing at the freed registry. Remove the object before
freeing the connection. Drop a connection whose ubusd went away from a
disconnect handler, since plymouth's event loop frees the watch
itself, keep the inotify wait on the ubus socket directory armed so a
restarted ubusd is picked up, and clear the ids libubus caches from
the previous ubusd before registering again.

Keep the splash up through sysupgrade: in stage2, copy plymouth's
files, plugins and ucode modules into the ramfs, take the display back
with plymouth-evict and switch to system-upgrade mode; in do_stage2,
start plymouthd from the ramfs. Schedule frames against a deadline
advancing by one interval, so a theme keeps its frame rate under load.

Fixes: 9ef83aa136 ("plymouth-plugin-ucode: add a scripted splash plugin for ucode")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-11 18:23:56 +01:00
Daniel Golle eb8e5b3614 plymouth: hand the display over and take it back
A deactivated splash kept flushing its displays from a timer. When the
shutdown sequence reactivated the daemon waiting since boot, whatever
had taken the display over still held DRM master, so the splash never
appeared, and the last frame gave way to the console during the final
kill. libudev-zero cannot tie a frame buffer device to its DRM card, so
every fbdev emulation of a DRM driver was driven as a second display.

Carry a patch that stops the frame timer while the splash is
deactivated. Add plymouth-evict, which stops every process holding a
KMS device other than plymouthd and waits until they are gone. A
process that belongs to a procd service is stopped through procd,
which applies the service's own term_timeout and does not respawn it,
and the wait ends on procd's instance.stop notifications; anything
else, and everything once ubus is gone as in sysupgrade's stage2, gets
SIGTERM directly. The shutdown action runs it, ignores rcS cancelling
the K script, and switches to shutdown mode before reactivating, so
the first frame back is already the shutdown splash.

Install plymouthd-fd-escrow, which keeps the last frame on the display
through the final kill, and install the DRM renderer alone, as the
splash is meant for devices with a KMS driver.

Fixes: 1a39b47dbd ("plymouth: add boot splash for KMS devices")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-11 18:23:56 +01:00
Daniel Golle 8d4551ceb2 kmscon: wait for the splash, add unifont, depend on evdev
Started while plymouth holds DRM master, kmscon retries taking it from
a timer and logs a failure on every attempt. Its built-in 8x16 font
covers the first 256 code points only, held in CP437 order while
kmscon looks glyphs up by Unicode code point, so box drawing, block and
braille characters come out wrong. The input event nodes it reads only
exist with the evdev handler, which nothing pulled in.

Do not start the instance while plymouth reports that it holds the
display, and start it on the plymouth.release event the splash hands
procd when it lets go. Build the GNU Unifont engine into a
kmscon-mod-unifont package; its generator genunifont is packaged as a
host build, and a patch lets meson use that one. The init script
passes --font-engine only when one is configured, so kmscon falls
through to unifont when the module is installed. GNU Unifont is
dual-licensed under GPL-2.0-or-later with a font embedding exception
and OFL-1.1; kmscon takes the font under OFL-1.1, so the module
package carries that licence besides MIT. Depend on kmod-input-evdev.

Fixes: 3c8ebee9b4 ("kmscon: depend on input-support for the evdev nodes")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-07 08:23:38 +01:00
Daniel Golle afb0a7453e kmscon: drop the enabled option
Whether a service runs at boot is already expressed by its rc.d symlink,
which service enable and service disable maintain. A UCI option saying
the same thing is a second source of truth that disagrees with the first
as soon as either is touched on its own.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-03 16:57:13 +01:00
Daniel Golle 42627cc499 kmscon: make the libseat backend activate its seat
The seat is enabled while libseat_open_seat() is still running, before
uterm_vt_allocate() has installed the callbacks an activation needs, and
whatever libseat has buffered is never dispatched because watching its fd
for readability yields nothing. kmscon therefore stayed asleep with
--libseat: no video device was initialised and the display stayed dark.

Carry patches that dispatch libseat once from an idle callback and replay
an enable that arrived too early, and that mark an unopened tty as -1 so
the backend stops issuing VT ioctls on file descriptor 0.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-03 16:57:13 +01:00
Daniel Golle 90b4a43150 seatd: deliver the enable event sent while opening a seat
seatd answers CLIENT_OPEN_SEAT by buffering the response and the enable
event together, so both reach libseat in one read. libseat parses only
the response and leaves the event in its connection buffer, with nothing
left on the socket for a client watching the fd to be woken by, so a
client that follows the documented contract never activates its seat.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-03 16:57:13 +01:00
Daniel Golle 656818e12b seatd: enable VT-less operation
Start seatd to manage physical consoles directly in case CONFIG_VT is
disabled by passing SEATD_VTBOUND=0 env variable.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-03 16:57:13 +01:00
Daniel Golle 816fa8fe0c plymouth-theme-openwrt-demo: fix the theme descriptor name
plymouth resolves a configured theme as themes/<name>/<name>.plymouth,
so the descriptor has to carry the name of its directory. Named
openwrt.plymouth it is never found, and plymouth walks its fallback
chain down to the built-in text splash, which draws nothing at all on a
board that has no text console.

Name the descriptor after the theme so the configured theme loads.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-02 08:56:57 +01:00
Daniel Golle cf4452f67a plymouth-plugin-ucode: start the splash without a console
The preinit hook asked for a splash by appending "splash" to a faked
kernel command line and told plymouth to ignore serial consoles, which
left it free to take the system console as its terminal anyway.

--graphical-boot covers both and keeps plymouth on KMS only.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-02 08:56:57 +01:00
Daniel Golle fd188acfb6 plymouth-plugin-ucode: honour the display device scale
ply_pixel_buffer_get_size() reports the logical area while
ply_pixel_buffer_get_argb32_data() points at the device pixel buffer.
Where the device scale is above one, the plutovg surface then describes
the buffer as too narrow and with too short a stride, so each odd
logical row lands in the right half of the panel and the image collapses
into a fraction of it. The damaged area is handed over in logical
coordinates as well, while ply_renderer_head_flush_area() reads it as
device pixels.

Size the surface in device pixels, scale the canvas by the device scale
so a theme keeps drawing in logical coordinates, and report the damaged
area in device pixels.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-02 08:56:57 +01:00
Daniel Golle 389a52b148 plymouth: keep the daemon off the system console
OpenWrt builds the kernel without CONFIG_VT, so BOOT_TTY never exists
and plymouth falls back to the first serial device it finds, which is
the system console. It opens that console, watches it for input, puts it
in raw mode and locks every termios bit, so a shell sharing it loses its
cursor keys, its interrupt character and a share of everything typed.
Forcing details mode along the way also costs the splash its renderer.

Carry a patch that makes --graphical-boot keep plymouth away from a
console altogether and pass it from both entry points. The faked
"splash" kernel argument and --ignore-serial-consoles go with it, both
implied now, as does --attach-to-session, which redirected the console
into plymouth's pty with TIOCCONS and stopped kernel messages reaching
the serial port.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-10-02 08:56:57 +01:00
Daniel Golle 2baec75e2c mesa: depend on accel-support in the hardware drivers
A hardware driver renders through /dev/dri/renderD*, which is 0600
root:root until accel-support allocates the render group and ships the
rule that puts the node into it.

The software rasterisers are the exception and keep no such dependency:
libmesa-softpipe, libmesa-llvmpipe and libvulkan-lvp run on the CPU and
open no device. Because the gate sits on each driver, an image built
around a software rasteriser stays out of the render group, while one
that picks a hardware driver pulls the group in with it.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-30 12:28:18 +01:00
Daniel Golle 3c8ebee9b4 kmscon: depend on input-support for the evdev nodes
kmscon reads its keyboard from /dev/input directly through libudev, so
it needs the input group and the hotplug rule that input-support ships.
It has no libevdev or libinput dependency to inherit that from, unlike
the compositors in this feed.

The DRM side already comes from libdrm.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-30 12:28:18 +01:00
Daniel Golle e5bbe28a27 libwpe: remove
Nothing depends on the libwpe API any more: wpewebkit is built against
WPEPlatform, and wpebackend-fdo and cog are gone.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-29 12:37:13 +01:00
Daniel Golle d4540d0ce9 wpebackend-fdo: remove
The only consumers were wpewebkit, which is now built with
ENABLE_WPE_LEGACY_API=OFF, and cog, which is gone.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-29 12:37:13 +01:00
Daniel Golle 7225a8673a cog: remove
Cog is a launcher built on the libwpe API and wpebackend-fdo, which
wpewebkit no longer provides now that it is built against WPEPlatform
only. MiniBrowser covers the testing role, and applications should use
the WPE API directly.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-29 12:37:13 +01:00
Daniel Golle 37a9a02168 wpewebkit: update to 2.54.0
Switch to WPEPlatform only: ENABLE_WPE_LEGACY_API=OFF drops the libwpe
API and with it the wpebackend-fdo backend, which served no other
package. MiniBrowser builds against WPEPlatform without them.

WPEWebKit now needs 128-bit atomics, so add libatomic. libstdcpp and
libxkbcommon used to arrive through libwpe and are linked directly, so
declare them.

Patch 122 is upstream and is dropped; 126 keeps only its DWARF register
mapping hunk. 138 and 147 are ported to the refactored atomic op macros,
where upstream hoisted 63 inline bodies out into named macros, and 147's
compare-exchange slow path gains the expected-value argument and the
result move it was missing.

Eight patches are new. The WebDriver log channel is read unguarded while
it is only declared when logging is compiled in. WPE reports
prefers-reduced-motion inverted, so animations are disabled by default.
WebKit cannot resolve a WebCore header that another WebCore header
includes by bare name, which stops the prefix header compiling as the
translation unit of its own that a precompiled header needs. libpas picks
a __uint128_t for pas_pair wherever the compiler is not Clang and the
target is not 32-bit ARM, which leaves 32-bit x86 without a type, and its
pair atomics then need the same unreachable stub that 32-bit ARM already
uses.

The remaining four are RISCV64. The offlineasm backend cannot lower a call
to a local label, nor a floating-point branch to a global label, both of
which the LLInt asm emits. B3 declares u64 inside the ARM64 and X86_64
arms of isValidFPImm64Form and reads it after the #endif, which no other
architecture compiles. The MacroAssembler is missing the
store64(TrustedImm32, BaseIndex) and immediate-valued moveConditionally32
forms that DFGSpeculativeJIT calls.

Add test-version.sh: nothing the packages install reports the version, so
the generic test cannot probe for it. The helper processes take no
arguments and print nothing, WPEWebDriver has no --version, and the .pc
file that carries the version belongs to Build/InstallDev.

Regenerate the whole series with git format-patch so every patch carries
a git-am header and a description, refresh it for the new line numbers,
and correct two descriptions that referred to WebKitGTK.

Link: https://wpewebkit.org/release/wpewebkit-2.54.0.html

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-29 12:37:13 +01:00
Daniel Golle 7dd5eba75d kmscon: split the OpenGL ES path into kmscon-mod-gl
kmscon depends on a libmesa provider, so every system with a KMS
console pulls in Mesa, but the main binary links none of it: the GL
code lives entirely in mod-drm3d.so and mod-gltex.so, which are
dlopened from a directory scan of the module directory. The software
renderer bbulk is built into the binary, the drm2d backend needs only
libdrm, and hwaccel is off by default, so Mesa is unused on a default
install and the modules are absent-tolerant by construction.

Ship those two modules as kmscon-mod-gl and build them only when it
is selected. A system that carries Mesa for other reasons installs
the package and starts kmscon with --hwaccel; everything else gets a
console with no Mesa in the build at all.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-29 00:17:38 +01:00
Daniel Golle 605d768782 kmscon: add terminal emulator for KMS devices
A system without a framebuffer console has no text console at all.
kmscon draws a terminal straight onto a DRM device, through OpenGL ES
where the GPU allows and in software on the same device otherwise.

Device access goes through libseat, so the seat owns the drm device and
the vt rather than kmscon reaching for both itself. That needs seatd,
which is a small daemon and already starts before this service. Built
without the fbdev backend and with the built-in PC screen font, so it
needs neither pango nor freetype. The service is off until enabled, so
it does not take the display from whatever else is using it.

Two patches are carried. The first keeps the unifont generator, a
native helper linked against zlib for the build machine, out of a build
that has the unifont backend disabled, which otherwise breaks cross
compilation. The second stops an error loop: a render-only drm node
answers NULL to drmModeGetResources, which the hotplug path treated as
an error and returned from the poll handler, so kmscon wrote 776 error
lines in eighty seconds on a board where the GPU enumerates before the
display controller.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-26 12:41:58 +01:00
Daniel Golle 9ab8f1fcaf libtsm: add terminal emulator state machine
State machine for a VT220 terminal emulator, with no rendering or input
handling of its own. kmscon builds on it.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-26 12:41:58 +01:00
Daniel Golle 6aca04f334 plymouth-theme-openwrt-demo: add a demo theme for the ucode engine
A worked example of what the ucode splash plugin can do, and the
default theme once it is installed: nothing here is meant to be the
last word on how an OpenWrt boot should look.

The scene is a network graph, laid out afresh on every boot, drawn from
one ucode program and one SVG with no rendered frames anywhere. It has
two phases because the splash does. Before ubusd exists there is
nothing true to report, so the graph simply grows, a node every second
or so, for however long preinit takes. Once the bus is up the rest of
the graph completes at once, the row of pictograms is built from
/etc/rc.d/S*, and the packets that move afterwards are driven by real
ubus activity rather than a timer.

A stage is shown only for a service that is actually enabled and has a
pictogram, dark until the service's own ubus object appears, so a box
without blockd never shows storage. sysntpd has no object and reports
its sync through /etc/hotplug.d/ntp instead, which is the general way
for a service with a hook but no object to light its stage. Shutdown,
reboot and sysupgrade take the graph apart rather than building it.

About 5 ms a frame at any resolution from 640x480 to 3840x2160 on a
Rock 5B, against 33 ms at the default frame rate.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-26 10:21:06 +01:00
Daniel Golle 9ef83aa136 plymouth-plugin-ucode: add a scripted splash plugin for ucode
Plymouth's own script plugin has its own little language and draws by
compositing prepared images, which means a theme arrives as a few
hundred PNGs. This plugin makes a theme one ucode program instead, with
a plutovg canvas over plymouth's pixel buffer, so a theme is source and
its artwork is SVG.

A theme returns setup, frame, paint and event. frame advances state and
declares what changed, paint draws one damaged rectangle, and nothing
reaches the screen that the theme did not ask for, which keeps a busy
scene at a couple of milliseconds a frame rather than repainting
everything. Themes are written against the contract in files/README.md
and can be measured offscreen, on any target, with the included
plymouth-theme-bench, which reports the package version it was built
from.

The plugin connects to ubus and passes events through, along with the
objects that already existed when it connected, so a theme can show
what the system is actually doing rather than animating a guess. It
starts the splash from a preinit hook, before the overlay is mounted,
and keeps it up through sysupgrade.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-26 10:21:06 +01:00
Daniel Golle 1a39b47dbd plymouth: add boot splash for KMS devices
Plymouth draws a boot splash straight onto a DRM device and holds the
display until whatever follows it takes over, so nothing of the boot is
visible between reset and the user interface. On a board with no
framebuffer console that is the only way to put anything on screen
early.

Built without the framebuffer backend, without systemd and upstart
integration, and without gtk, pango and freetype, so the runtime needs
only libpng and libdrm. msgfmt is needed at build time, for the themes
that are built and then not installed. Neither binary answers to
--version, so the CI version probe is answered by test-version.sh
instead. No theme is installed and none is named in
the daemon configuration: a theme is a package of its own and selects
itself when it is installed.

Four patches are carried. Two are build fixes for musl, which has
neither rpmatch() nor execinfo.h. The other two are bugs, both
submitted upstream. The drm renderer drops master immediately after
opening the device, so every connector probe runs as a client that is
not drm master; the kernel declines it a forced probe and returns a
cached status of "unknown", and the renderer gives up with "Could not
initialize heads", which leaves the splash able to light only a display
something else has already probed. The escape key tears the splash down
for a text view, guarded only on a VT existing, so on a kernel with
CONFIG_VT but no framebuffer console the dummy driver is bound, the
text goes nowhere and the screen turns black.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-26 10:21:06 +01:00
Daniel Golle 6968dd1804 xkeyboard-config: stage the pkg-config file
The package builds xkeyboard-config-2.pc and a compatibility symlink
to it, but installs neither into the staging directory, so anything
asking pkg-config for xkeyboard-config fails to configure. plymouth
does, for the xkb_base path.

Install both names; the symlink alone leaves a dangling link.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-26 10:21:06 +01:00
Daniel Golle e54dc4ed6b ucode-mod-plutosvg: add ucode binding for plutosvg
Make SVG documents loadable and renderable from ucode. A document is a
resource type that reports its intrinsic size, computes the extents of
the whole drawing or of one element by id, and renders either onto a
plutovg canvas or into a fresh surface. CSS currentColor is passed as
an ordinary colour value and colour variables resolve through a ucode
object or callback invoked during rendering.

Script data handed to the loader is copied because the parser keeps
pointers into it for the lifetime of the document; the copy is released
through the destroy callback. An element id is dereferenced in the
frame that owns the argument, as a short ucode string lives inside the
variable holding the value.

Surfaces returned by the renderer are plutovg resources, so the plutovg
module is loaded on demand when it is not already present.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-25 13:27:56 +01:00
Daniel Golle 63d2ac13cf ucode-mod-plutovg: add ucode binding for plutovg
Make the plutovg drawing API usable from ucode. Surfaces, canvases,
paths, paints and font faces become ucode resource types with method
tables, while colours, points, rectangles, matrices and gradient stops
cross the boundary as plain ucode objects or arrays, so a whole scene
can be built and mutated from script. Enumerations are spelled as
strings rather than opaque integers.

Each resource holds one plutovg reference and drops it from the type
destructor; getters that return a borrowed pointer take a reference
before wrapping it, so a canvas keeps its surface alive and nothing is
released twice at collection time.

The value conversion helpers live in a separate header installed into
the staging directory because the plutosvg binding needs the same
colour and rectangle marshalling.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-25 13:27:56 +01:00
Daniel Golle 128eaf286e plutosvg: add SVG rendering library
Parses SVG and draws it through plutovg, which lets a theme ship its
artwork as text rather than as rendered bitmaps. 33 KiB on aarch64, and
it needs nothing beyond plutovg and libc.

freetype is disabled: it only serves OpenType SVG glyphs, and pulling it
in for that would outweigh the library several times over. The bundled
plutovg wrap is refused so a failed dependency check cannot stage a
second copy over the packaged one.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-25 13:27:56 +01:00
Daniel Golle cb8954878d plutovg: add 2D vector graphics library
Software rasteriser for paths, strokes, gradients and transforms onto a
32-bit premultiplied ARGB surface, which it can create over memory the
caller already owns. Needed to draw a boot splash procedurally rather
than from a baked frame sequence.

Links against nothing but libc, and comes to 172 KiB on aarch64. The
font face cache is disabled along with the examples and tests, since
nothing here renders text.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-25 13:27:56 +01:00
Daniel Golle 11dae3ae49 weston: refuse meson subproject fallbacks
weston ships wrap files for aml, display-info, edid-decode, neatvnc
and perfetto. When a dependency check fails, meson quietly builds the
bundled copy, and Build/InstallDev then stages its library, headers
and pkg-config file over the ones of the real package, which broke
every later consumer of libdisplay-info. Pass --wrap-mode=nofallback
so a missing or unsuitable dependency fails the configure step.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-23 11:16:31 +01:00
Daniel Golle a7ca7540f9 weston: accept libdisplay-info 0.4
weston 16.0.0 requires libdisplay-info below 0.4.0 while the feed
ships 0.4.0, so meson silently fell back to the bundled 0.2.0
subproject. libweston uses no interface that 0.4.0 lacks; raise the
upper bound of the version constraint so the system library is used.

Fixes: 644a662612 ("weston: update to version 16.0.0")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-23 11:16:31 +01:00
Daniel Golle 938621437f llvm-mesa: update to 23.1.1 / SPIRV-LLVM-Translator 23.1.1
Update LLVM and SPIRV-LLVM-Translator, which are used for the Mesa
build, to the latest release. libclc is no longer a standalone LLVM
project and is no longer built either, as the Intel GPU drivers do not
need it any more. Give the refreshed ARC patch the git header the
OpenWrt patch guidelines require.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-18 16:16:45 +01:00
Daniel Golle b1f2e305d9 mesa: update to version 26.2.2
26.2.0 was a development release which upstream advised against using;
26.2.1 is the first stable point release on the 26.2 branch and 26.2.2
adds further bug fixes on top of it, among them the armhf build fix and
one potential security issue. Drop patch 400, whose fix is now present
upstream, and refresh the remaining patches. Add a new patch adapting
the gallivm ORCJIT object linking layer creator to the signature change
in LLVM 23, which targets without MCJIT support such as riscv64 need.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-18 16:16:45 +01:00
Daniel Golle aa4a28522c sdl3: add missing dependency on libffmpeg
Some of test programs packaged as sdl3-tests dynamically link against
some of FFmpeg's libraries in case their presence is detected.

In the case sdl3-tests fails to be packaged as the linker dependency
isn't reflected as a package dependency.

Add the missing dependency, so the tests for FFmpeg are always built,
and building sdl3-tests always succeeds.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-17 01:04:48 +01:00
Daniel Golle 2a19bbb57e llvm: use ATOMIC64_DEPENDS
The libraries depend on libatomic on every architecture, link it only
on mips through an open-coded LDFLAGS addition, and still name the
removed arc architecture in their dependencies. ATOMIC64_DEPENDS
restricts the dependency to the targets whose compiler calls libatomic
for 64-bit atomics, and the link flag follows the same symbol, which
also covers the ARMv5 targets.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-14 16:47:15 +01:00
Daniel Golle c421d1944c mesa: use ATOMIC64_DEPENDS
libatomic is only needed where the compiler does not inline 64-bit
atomics, but the package depends on it on every target.
ATOMIC64_DEPENDS restricts the dependency to those targets.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-14 16:47:15 +01:00
Daniel Golle 644a662612 weston: update to version 16.0.0
Removed fullscreen-shell entirely; deprecated (but not yet removed)
xdg-shell-v6, the GStreamer-based remoting plug-in and the old
Pipewire virtual-output plug-in in favour of the new first-class
backend-pipewire backend. Improved Perfetto traces with debug
annotations, further HDR/colour-management work (grayscale output
colour effect, better inversion documentation), new DRM connector
properties (color-format, underscan/margin), DRM state-reuse and
plane-handling rework, Vulkan renderer explicit-synchronisation and
non-axis-aligned rotation support, and a large number of memory-leak
and use-after-free fixes across the DRM/GL/Vulkan/xdg-shell code
paths.

The old 'pipewire' and 'remoting' meson options were renamed to
'deprecated-pipewire' and 'deprecated-remoting' upstream (migrating to
the first-class 'backend-pipewire' option, already explicitly disabled
here); updated accordingly, otherwise meson configure would fail with
"Unknown options". Verified every other MESON_ARGS option referenced
by this Makefile still exists unchanged in 16.0.0's meson_options.txt.

Also add an explicit PKG_RELEASE:=1 line (version bump resets it from
the prior package's PKG_RELEASE:=2).

No patches to refresh. Hash verified against the release download and
the official SHA256 published in the upstream release announcement
(wayland-devel mailing list).

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 17:47:11 +01:00
Daniel Golle 0de25e3bdd glslang: update to 16.4.0 (Vulkan SDK 1.4.357.0)
16.4.0 references the same commit as the vulkan-sdk-1.4.357.0 release
tag; use the semver tag as before to keep package-manager version
comparisons monotonic. Part of a joint bump across vulkan-headers/
loader/tools, spirv-headers/tools and glslang to LunarG's latest
released Vulkan SDK.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:51 +01:00
Daniel Golle 763da5a0d8 spirv-tools: update to Vulkan SDK 1.4.357.0
Track LunarG's latest released Vulkan SDK (1.4.357.0), part of a joint
bump across vulkan-headers/loader/tools, spirv-headers/tools and
glslang.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:51 +01:00
Daniel Golle 05d406ffc9 spirv-headers: update to Vulkan SDK 1.4.357.0
Track LunarG's latest released Vulkan SDK (1.4.357.0), part of a joint
bump across vulkan-headers/loader/tools, spirv-headers/tools and
glslang.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:51 +01:00
Daniel Golle 99934f8cf4 vulkan-tools: update to Vulkan SDK 1.4.357.0
Track LunarG's latest released Vulkan SDK (1.4.357.0), part of a joint
bump across vulkan-headers/loader/tools, spirv-headers/tools and
glslang.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:51 +01:00
Daniel Golle 5be6028993 vulkan-loader: update to Vulkan SDK 1.4.357.0
Track LunarG's latest released Vulkan SDK (1.4.357.0), part of a joint
bump across vulkan-headers/loader/tools, spirv-headers/tools and
glslang.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:51 +01:00
Daniel Golle 09a1a00ad4 vulkan-headers: update to Vulkan SDK 1.4.357.0
Track LunarG's latest released Vulkan SDK (1.4.357.0), part of a joint
bump across vulkan-headers/loader/tools, spirv-headers/tools and
glslang.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:51 +01:00
Daniel Golle b446792c1d cage: update to 0.3.1
- guard git version detection against a missing .git directory
- stop using DEFAULT_XCURSOR as a cursor theme name
- fix XDG-shell windows requesting fullscreen on startup

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:26:02 +01:00
Daniel Golle 4c5a3bb191 wlroots: update to version 0.20.2
Also add an explicit PKG_RELEASE line (was previously undefined).

Several Xwayland hardening fixes for handling malformed/malicious
client input: an out-of-bounds strndup() in read_surface_class(),
removed VLAs for MIME type atom lists, use of const pointers for
xcb_get_property_value(), no longer relying on the (removable)
xcb_get_property_reply_t.value_len field, a WM_TRANSIENT_FOR length
check, and checks against duplicate/mistyped WL_SURFACE_ID association
messages. Also: intersect the visible area with the output layout in
update_node_update_outputs(), don't send a new dmabuf feedback after a
scene node is disabled, set CLOEXEC on client FDs in
security_context_v1, emit set_parent when an Xwayland parent surface
is destroyed, and check the drag-and-drop action/accepted state on
touch-up.

No patches to refresh. Hash verified against the release archive and
an independent fresh git clone of the same tag (byte-identical tree
content after extraction).

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:25:40 +01:00
Daniel Golle e2214ddc0f libva: update to 2.24.1
2.24.0: added the VA_PICTURE_H264_NON_EXISTING flag; security hardening
(use secure_getenv instead of getenv in va_x11.c); expanded tracing/
logging for protected session operations (dump input/output data in
va_TraceProtectedSessionExecute); fixed the AV1 Doxygen documentation
link.

2.24.1: include <unistd.h> for getuid/getgid in the secure_getenv
fallback (build fix following the 2.24.0 secure_getenv change).

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:25:16 +01:00
Daniel Golle 029ccd91fa harfbuzz: update to 14.3.1
From 14.2.1, via minor point releases in between:
- fixed AAT insertion at the end of the text
- fixed various rendering bugs in the experimental GPU library
- the WASM shaper can now read user features
- various fuzzing, build and subsetting fixes

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:24:41 +01:00
Daniel Golle 694b1d532b pango: update to version 1.58.2
1.58.0: PangoFontDescription gained a width attribute (like stretch,
but allowing intermediate values); PangoRenderer can now render only
selected layout components (overlines/underlines/strikethrough/text).

1.58.1: raised minimum harfbuzz to 11 and glib to 2.88 (both already
satisfied by this feed/packages); CoreText variations and font
features from descriptions; renderer keeps over/under/through lines
in sync; assorted undefined-behaviour fixes.

1.58.2: no functional changes, version bump only.

Hash verified against two independent GNOME mirrors.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:23:36 +01:00
Daniel Golle 03c0664552 wayland: update to 1.26.0
Notable changes: added wl_fixes.ack_global_remove() and delivery of
wl_registry.global_remove to a global's offer list; added the
wl_pointer.warp event; added new wl_shm formats and a
wl_shm_pool::error enum; added server-side wl_display_remove_socket_fd();
fixed a use-after-free in for_each_helper; several scanner fixes
(dropped a redundant exit() after fail(), fixed the emitted types for
new_id arguments, removed an unused arg_count); protocol documentation
fixes.

001-fix-wayland-scanner-detect.patch refreshed cleanly, no hunk-offset
changes needed. Hash verified against the release tarball and
Debian's independently-hosted orig tarball for 1.26.0-1.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:23:17 +01:00
Daniel Golle 7f69452fb1 libdisplay-info: update to 0.4.0
From 0.3.0. Notable changes:
- added DisplayID v2 CTA-861 data block support (parsing and
  di-edid-decode printing), with CTA data now searchable from DisplayID
  v2 extensions
- added DisplayID type IV timing support
- regenerated the CTA VIC table for CTA-861-I and added a reverse
  timing-to-code lookup
- wrapped DMT/VIC codes in typed structs instead of bare uint8_t
- fixed a double free of cta_vics in displayid, an out-of-bounds VIC
  array access, a potential overflow in a shift operation, and several
  failed-allocation/uninitialised-variable issues (helped by adding
  gcc's static analyzer to CI)
- cta error handling switched from errno to negative error numbers,
  with several "do not fail on a single bad/erroring block" fixes
- disabled most v4l-utils build options by default

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-25 02:22:57 +01:00
Daniel Golle 869191848d sdl3: update to 3.4.14
3.4.12 (stable bugfix release):
- fixed an assert on Windows in SDL_SetWindowOpacity()
- improved support for external surfaces under Wayland
- fixed visual artifacts when switching render targets with the Vulkan
  renderer; fixed a crash rendering YUV textures on NVIDIA drivers with
  the Vulkan renderer
- added SDL_HINT_ENABLE_STEAM_SCREEN_KEYBOARD to customise behaviour on
  Steam Deck
- improved gamepad support under Emscripten; added hotplug detection
  for libusb-based HIDAPI controllers
- fixed flipped Xbox 360 controller axes on macOS
- fixed truncated long text input sequences when using sdl2-compat

3.4.14 (stable bugfix release):
- GPU buffers and textures can now have multiple read usages
- fixed an X11 crash if the IME service was shut down in the background
- fixed a hang when hiding an X11 window on some window managers
- fixed being unable to get clipboard text on older macOS versions
- fixed the 8BitDo Pro 3 controller showing up twice on macOS
- fixed Xbox controllers not being detected when SDL is built with
  GameInput support
- fixed pen input creating phantom mouse events in relative mode on
  Android

(3.4.11 and 3.4.13 also shipped between these but no further detail
was available from upstream's release notes.)

PKG_RELEASE reset to 1 with the version bump, per the previous commit's
PKG_BUILD_DEPENDS fix.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-24 12:40:15 +01:00
Daniel Golle e1a6983d34 sdl3: fix wrong PKG_BUILD_DEPENDS entry
PKG_BUILD_DEPENDS must reference the dependency's package directory
name (PKG_NAME), used for build-order resolution, not one of its
generated BuildPackage() sub-package names. wayland's own Makefile
(frameworks/wayland) has PKG_NAME:=wayland and builds two sub-packages,
libwayland and wayland-scanner; there is no package directory named
"libwayland". Fix the entry to reference the correct directory name.

Verified the dependency resolution itself: package/sdl3/compile now
correctly builds frameworks/wayland as part of the chain (confirmed in
the build log). sdl3's own final compile could not be verified end to
end in this environment due to an unrelated, pre-existing host
python3/ncurses build failure that blocks every meson-based package in
this feed (tracked separately, not caused by or related to this fix).

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-24 12:40:15 +01:00
Daniel Golle 33b5bc2b4f gdk-pixbuf: update to 2.44.8
2.44.7:
- xpm: fixed loading the xpm module if built-in
- glycin: fixed the build on 32-bit; use fwrite to avoid problems with
  saving; added a signature for webp; made filename tricks work in pid
  namespaces

2.44.8:
- glycin: support x-/y-dpi options for png, tiff and jpeg

Not build-verified end to end in this environment: blocked by an
unrelated, pre-existing host python3/ncurses build failure that
affects every meson-based package in this feed (tracked separately).

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-08-22 23:45:13 +01:00
Daniel Golle a951381b6c sdl3: keep SDL3_test from linking against libunwind
SDL3's CheckLibUnwind cmake macro autodetects libunwind for the
SDL3_test library and offers no option to disable it. On the buildbots
libunwind is present in staging, so the test programs end up linked
against it and packaging libsdl3-tests fails:

  Package libsdl3-tests is missing dependencies for the following libraries:
  libunwind-x86_64.so.8
  libunwind.so.8

This aborts the whole sdl3 build before anything is staged, taking
down every package depending on SDL3 or SDL2 (sdl2-compat, sdl2-image,
sdl2-mixer, sdl3-image, sdl3-mixer, sdl3-doom, gzdoom, vice).

Preseed the three detection cache variables to OFF so the result no
longer depends on whether libunwind happens to be staged; it is only
used for symbolised backtraces in test leak reports.

Fixes: 51549dadd5 ("sdl3: add SDL3 3.4.10")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-12 01:13:26 +01:00
Daniel Golle a022f83b56 vice: explicitly pin all configure knobs to fix missing library deps
The buildbot reported vice missing dependencies for libbsd.so.0,
libnet.so.9 and libusb-1.0.so.0. All three came from configure
autodetecting libraries that merely happened to be present in
staging_dir:

  - The NETPLAY_LIBS probes run AC_CHECK_LIB(bsd/net/..., gethostbyname)
    and AC_CHECK_LIB(bsd, gettimeofday). On musl these symbols live in
    libc, so every probe spuriously succeeds for any of those libraries
    that exists, appending -lbsd and -lnet.
  - The USBSID-Pico path adds -lusb-1.0 to LIBS whenever
    libusb-1.0/libusb.h is found; it is gated only by the unregistered
    $enable_usbsid shell variable.

Force the offending cache variables off and set enable_usbsid=no, and
pin every remaining dependency-affecting knob to an explicit value so
nothing is auto-detected. Also disable --enable-arch, which defaults to
on and injects -march=native, wrong under cross-compilation.

Verified on x86_64: the binaries no longer link libbsd, libnet or
libusb and the package builds cleanly.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:40:40 +01:00
Daniel Golle b59c3b510d sdl2-doom: drop in favour of sdl3-doom
The orphaned sdl2-doom port is superseded by sdl3-doom, which targets SDL3 directly.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle ed0ecdeb13 sdl3-doom: add SDL3 Doom
A source port of DOOM to SDL3 (raydelto/sdl3_doom), the first real SDL3
application in the feed, replacing the orphaned sdl2-doom. It builds
against libsdl3 and libsdl3-mixer and plays authentic OPL FM music from
the IWAD's GENMIDI lump, needing no soundfont.

The upstream port targets an early SDL3_mixer prerelease (Mix_* API,
removed in SDL_mixer 3.2.0) and had dropped the OPL music backend. Carry
nine patches: port both audio backends to the track-based MIX_* API,
share a single mixer device, link the exported SDL3 CMake targets, build
the sound-effect module (FEATURE_SOUND), restore the Chocolate DOOM OPL
backend for native FM music, fix a pre-existing status-bar crash and drop
the stale SDL2_mixer cmake module. These are also suitable to submit
upstream.

https://github.com/raydelto/sdl3_doom
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 6dc81a7a4d sdl3-mixer: add SDL3_mixer 3.2.4
SDL3-native audio mixer library (libSDL3_mixer), built directly against
SDL3 so it coexists with sdl2-mixer's libSDL2_mixer. MIDI, Opus, WavPack
and MOD support via libfluidsynth, libopusfile, libwavpack and libxmp.

https://github.com/libsdl-org/SDL_mixer/releases/tag/release-3.2.4
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 1d087895e9 sdl2-image: use system image libraries instead of the stb backend
Build PNG, JPEG, TIFF and WebP support against the libpng, libjpeg,
libtiff and libwebp packages rather than the bundled stb_image backend.
Listing them as dependencies ensures the cross-built target libraries
are picked up instead of host libraries.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 37de0f96e2 sdl3-image: add SDL3_image 3.4.4
SDL3-native image loading library (libSDL3_image), built directly
against SDL3 so it coexists with sdl2-image's libSDL2_image. PNG, JPEG,
TIFF and WebP are handled by the libpng, libjpeg, libtiff and libwebp
packages, listed as dependencies so the cross-built target libraries
are used instead of host libraries; the bundled stb backend is disabled.

https://github.com/libsdl-org/SDL_image/releases/tag/release-3.4.4
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 60bc630b15 sdl2-mixer: update to version 2.8.2
Stay on the SDL2 line (libSDL2_mixer), now built against the sdl2-compat
layer. 2.8.2 is the current latest SDL2-targeting SDL_mixer release; the
SDL3-native line is packaged separately as sdl3-mixer.

https://github.com/libsdl-org/SDL_mixer/releases/tag/release-2.8.2
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle d32c38a240 sdl2-compat: add SDL2 compatibility layer on SDL3
sdl2-compat implements the SDL2 API on top of SDL3, shipping the
libSDL2-2.0 shared library and SDL2 development files. The package is
named libsdl2-compat and only PROVIDES libsdl2, so existing SDL2
consumers resolve to it without a package name collision while the
single SDL3 build backs both APIs.

https://github.com/libsdl-org/sdl2-compat/releases/tag/release-2.32.70
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 1b663e7555 sdl2: drop standalone SDL2 in favour of sdl2-compat
The SDL2 library is now provided by the sdl2-compat package built on top
of SDL3, so the standalone SDL2 2.32.x package is no longer needed.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 51549dadd5 sdl3: add SDL3 3.4.10
Core Simple DirectMedia Layer 3 library, the base for the SDL2 to SDL3
transition. CMake build with the same backend selection as the SDL2
package (KMSDRM, Wayland, Vulkan, OpenGL/ES, ALSA and PulseAudio with
dlopen, HIDAPI, dummy video/audio; X11 and dbus off). Provides
libSDL3.so and the SDL3 development files, plus a libsdl3-tests package
with the upstream installed-tests (SDL_INSTALL_TESTS).

https://github.com/libsdl-org/SDL/releases/tag/release-3.4.10
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:09:25 +01:00
Daniel Golle 58f9510cfc wlroots: update to version 0.20.1
Bugfix point release on the 0.20 stable series.

https://gitlab.freedesktop.org/wlroots/wlroots/-/releases/0.20.1
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:08:18 +01:00
Daniel Golle 59344a8a6f pango: update to version 1.57.1
New 1.57 stable series.

https://gitlab.gnome.org/GNOME/pango/-/blob/1.57.1/NEWS
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 17:08:01 +01:00
Daniel Golle c04292defd zmusic: update to version 1.3.0
Drop 100-fix-endian-detect-with-musl.patch: upstream rewrote the bundled
game-music-emu endian detection (the __GLIBC__ / <endian.h> block is
gone, now defaulting to little-endian), so the musl workaround is
obsolete. Verified gzdoom, the only consumer, still builds against the
updated library.

https://github.com/ZDoom/ZMusic/releases/tag/1.3.0
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-11 00:32:34 +01:00
Daniel Golle 1eea39be15 vkmark: update to latest git HEAD
Update to upstream commit 83a128d (2025-09-08).

https://github.com/vkmark/vkmark
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 21:23:36 +01:00
Daniel Golle a422382c40 mesa: update to version 26.1.2
Bugfix point release on the 26.1 stable series.

https://docs.mesa3d.org/relnotes/26.1.2.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:52:17 +01:00
Daniel Golle 559cb9075e wayland-protocols: update to version 1.49
Adds new and updated Wayland protocol definitions.

https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/1.49
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:51:48 +01:00
Daniel Golle a5e8aecf2b libxkbcommon: update to version 1.13.2
Pass the xkb-config extensions path options explicitly: 1.13.2 adds
versioned and unversioned extensions directories, and tools/info.c
references DFLT_XKB_CONFIG_*_EXTENSIONS_PATH unconditionally while meson
only defines them when an xkeyboard-config root is detected, which broke
the build otherwise. Refresh 100-no-python.patch for the new source.

https://github.com/xkbcommon/libxkbcommon/blob/xkbcommon-1.13.2/NEWS.md
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:51:29 +01:00
Daniel Golle f3270beefa harfbuzz: update to version 14.2.1
Bugfix point release.

https://github.com/harfbuzz/harfbuzz/releases/tag/14.2.1
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:31 +01:00
Daniel Golle c8777c9fa0 vulkan-tools: update to 1.4.350.0 (Vulkan SDK 1.4.350)
Part of the coordinated Vulkan SDK 1.4.350 release (vulkan-sdk-1.4.350.0).

https://vulkan.lunarg.com/doc/sdk/1.4.350.0/linux/release_notes.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:14 +01:00
Daniel Golle 7654ea0957 vulkan-loader: update to 1.4.350.0 (Vulkan SDK 1.4.350)
Part of the coordinated Vulkan SDK 1.4.350 release (vulkan-sdk-1.4.350.0).

https://vulkan.lunarg.com/doc/sdk/1.4.350.0/linux/release_notes.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:14 +01:00
Daniel Golle 9d7f73ae3e vulkan-headers: update to 1.4.350.0 (Vulkan SDK 1.4.350)
Part of the coordinated Vulkan SDK 1.4.350 release (vulkan-sdk-1.4.350.0).

https://vulkan.lunarg.com/doc/sdk/1.4.350.0/linux/release_notes.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:14 +01:00
Daniel Golle 5861eeb090 glslang: update to 16.3.0 (Vulkan SDK 1.4.350)
Part of the coordinated Vulkan SDK 1.4.350 release (vulkan-sdk-1.4.350.0).

https://vulkan.lunarg.com/doc/sdk/1.4.350.0/linux/release_notes.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:14 +01:00
Daniel Golle 3344432395 spirv-tools: update to 1.4.350.0 (Vulkan SDK 1.4.350)
Part of the coordinated Vulkan SDK 1.4.350 release (vulkan-sdk-1.4.350.0).

https://vulkan.lunarg.com/doc/sdk/1.4.350.0/linux/release_notes.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:14 +01:00
Daniel Golle 076b6bd616 spirv-headers: update to 1.4.350.0 (Vulkan SDK 1.4.350)
Part of the coordinated Vulkan SDK 1.4.350 release (vulkan-sdk-1.4.350.0).

https://vulkan.lunarg.com/doc/sdk/1.4.350.0/linux/release_notes.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-10 04:50:14 +01:00
Daniel Golle d6cd95b81b vice: add package
Package the VICE Commodore emulator 3.10, built against SDL2 with ALSA
sound output.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-09 13:57:05 +01:00
Daniel Golle bb1cdf1439 sdl2-image: add package
Package libsdl2-image (SDL_image 2.8.12) using the bundled stb_image
backend, so it depends only on libsdl2. Required by the vice SDL2 UI.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-09 13:57:05 +01:00
Daniel Golle 5a17838a67 xa: add package
Package the xa65 6502/65816 cross-assembler with both a target build
and a host build. The host tool is required to assemble psiddrv during
the vice build.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-09 13:57:05 +01:00
Daniel Golle 54707e9c30 wpewebkit: fix build on ARMv7 soft-float targets
WebKit's JS JIT only supports ARMv7 with some kind of hard-float
support. Use the (slower) C-loop JS interpreter on soft-float ARMv7
to fix the build.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-06-09 04:03:00 +01:00
Daniel Golle d47edc891a vkmark: fix build if Vulkan is present on host
Make sure to not pick up host headers and libraries by setting
CMAKE_PREFIX_PATH.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-31 14:21:07 +01:00
Daniel Golle 0eb9f1b9ee vulkan-tools: add package
Add vulkan-tools source package providing only 'vulkaninfo' for now.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-31 14:20:28 +01:00
Daniel Golle 897356ac2f mesa: update to version 26.1.1
The first stable release of the Mesa 26.1 release branch comes with
countless new features and bugfixes since 26.0.6.

Link: https://docs.mesa3d.org/relnotes/26.1.0.html
Link: https://docs.mesa3d.org/relnotes/26.1.1.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-31 14:19:37 +01:00
Daniel Golle df0b899123 wpewebkit: update to version 2.52.3
Update WPEWebKit to the 2.52 stable major release branch.

Includes a pending patchset to get WASM BBQJIT working on RISCV64,
upstream PR https://github.com/WebKit/WebKit/pull/65621

Alltogether this brings acceptable performance (even with LLVMPipe
Mesa software renderer) on RISCV64.

Link: https://wpewebkit.org/release/wpewebkit-2.52.0.html
Link: https://wpewebkit.org/release/wpewebkit-2.52.1.html
Link: https://wpewebkit.org/release/wpewebkit-2.52.2.html
Link: https://wpewebkit.org/release/wpewebkit-2.52.3.html
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-27 19:27:26 +01:00
Daniel Golle be41d2f4dc wpebackend-fdo: update to version 1.16.1
* Support newer versions of Mesa where format/modifier events have
   been deprecated by implementing the needed parts of the DMA-BUF
   feedback protocol in the nested compositor.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-27 19:27:26 +01:00
Daniel Golle 393e8eac5b sdl2: update to 2.32.10
This is a stable bugfix release, with the following changes:

 * Fixed the dock occasionally showing on macOS when launching an SDL app

 * Report the correct device audio format when using Pipewire

 * Fixed signed 8-bit audio on Android

 * Support the "ambient" value for SDL_HINT_AUDIO_CATEGORY on iOS

 * Improved thumbstick range for Nintendo Switch Pro Controllers

 * Fixed loading user calibration for Nintendo Switch Pro Controllers

Patch 110-tests-no-libunwind.patch refreshed for the new upstream
context.

Add patch 120-tests-install-resources-to-datadir.patch which moves
the test resource files (.bmp, .hex, .txt, .dat, .wav) from
${libexecdir}/installed-tests/SDL2/ to
${datadir}/installed-tests/SDL2/, alongside the matching
${exe}.test descriptors. Upstream's install rule put them in
libexecdir, which is both inconsistent with the GNOME
installed-tests convention (data lives under datadir, only
binaries under libexecdir) and trips OpenWrt's package QA which
expects every regular file under /usr/libexec/ to carry the
executable bit. The patch also pins the install permissions to
0644 so the umask of the build host cannot influence the mode
of the installed files.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-20 00:28:53 +01:00
Daniel Golle 4fed050411 kmscube: update to GIT HEAD of 2025-10-24
Update PKG_SOURCE_VERSION to f60e50e887d3c49e91ac9b06d8199b36152632fa
to pick up upstream fixes accumulated since the 2024-11-06 snapshot.

Add libgst1gl to runtime DEPENDS - upstream now uses GstGL helpers.

kmscube has no tagged releases; track upstream master.

Link: https://gitlab.freedesktop.org/mesa/kmscube/-/commits/master
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-19 14:37:17 +01:00
Daniel Golle 751b350662 cage: update to 0.3.0
Bump from 0.2.0. Also fix PKG_SOURCE_URL to use $(PKG_VERSION)
instead of a hardcoded v0.2.0 path.

Link: https://github.com/cage-kiosk/cage/releases/tag/v0.3.0
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-19 14:36:11 +01:00
Daniel Golle ebb4860b96 harfbuzz: update to 14.2.0
Major release stream from 11.2.1 to 14.x. harfbuzz uses linear
versioning with each major bringing new shaping features and
improvements; 14.x is the current stable line.

Add PKG_BUILD_DEPENDS:=glib2/host: harfbuzz's meson.build pulls
glib_mkenums via the glib-2.0 pkg-config 'tool variable', and
OpenWrt's glib2 install rewrites gio-2.0.pc / glib-2.0.pc to point
at $(STAGING_DIR_HOSTPKG)/bin/glib-mkenums. That host binary is
only produced when glib2's host build runs, and without an
explicit dep on glib2/host the host build is skipped on clean CI
images that lack a system glib (failure message: "Program
/builder/staging_dir/hostpkg/bin/glib-mkenums found: NO -
Dependency 'glib-2.0' tool variable 'glib_mkenums' contains
erroneous value").

Link: https://github.com/harfbuzz/harfbuzz/releases/tag/14.2.0
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-19 10:59:51 +01:00
Daniel Golle 2e1072d4c7 gdk-pixbuf: update to 2.44.6
This series introduces the GLib-based gen-resources.py support
(new in 2.44) and other minor improvements over 2.42.12.

Add PKG_BUILD_DEPENDS:=glib2/host: gdk-pixbuf's meson.build now
calls find_program('glib-compile-resources') to invoke the GLib
host-side resource compiler during configure. The binary is
provided by glib2's host build at $(STAGING_DIR_HOSTPKG)/bin/,
so the dep is needed to make that host build actually run on
clean CI images (failure message: "Program glib-compile-resources
found: NO - ERROR: Program 'glib-compile-resources' not found or
not executable").

Drop the leftover '$(eval $(call HostBuild))' line: gdk-pixbuf
never included host-build.mk so the call was a no-op anyway.

Link: https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/blob/2.44.6/NEWS
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-19 10:59:00 +01:00
Daniel Golle 1b3744b6ab weston: update to 15.0.1
Major version update from 14.0.2.

Drop four downstream DRM backend patches (001-004) and the
100-timespec.patch that have all been merged upstream.

Drop the now-removed meson options:
  -Dbackend-drm-screencast-vaapi
  -Dscreenshare
  -Dshell-fullscreen (twice listed)

Add -Dshell-lua=false explicitly (default is auto, requires
Lua >= 5.4 which is not available on OpenWrt).

Add +vulkan-loader to runtime DEPENDS - libweston in 15.x links
against libvulkan unconditionally.

Link: https://gitlab.freedesktop.org/wayland/weston/-/releases/15.0.1
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-19 02:56:49 +01:00
Daniel Golle 5e90d40ce8 mesa: drop symmetric CONFLICTS between libteflon-rocket and libteflon-etnaviv
Make the CONFLICTS declaration asymmetric: only libteflon-rocket
declares CONFLICTS:=libteflon-etnaviv. That single side is
sufficient to force the mutual exclusion at Kconfig time
(selecting either disables the other) while breaking the cycle
that the symmetric form created.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-19 02:32:07 +01:00
Daniel Golle 691aa036dd graphene: update to GIT HEAD of 2025-12-19
Update PKG_SOURCE_VERSION to 98173e59a3d80d3dd5ad6e4eaab919b4649ac7e5
to pick up build-system fixes accumulated since the previous
2025-01-23 snapshot.

graphene has no tagged releases since 1.10.8 (2022); track upstream
master.

Switch Package/libgraphene/install from $(INSTALL_BIN) to $(CP):
INSTALL_BIN does not preserve symlinks, so the installed image was
ending up with three identical 148648-byte copies of the library
(libgraphene-1.0.so, libgraphene-1.0.so.0, libgraphene-1.0.so.0.1101.0)
instead of the upstream-installed symlink chain. The shlibs check
flagged this as "Library has SONAME 'libgraphene-1.0.so.0' but no
corresponding symlink was found in /usr/lib". $(CP), which expands
to "cp -fpR", preserves the symlinks correctly.

Link: https://gitlab.gnome.org/GNOME/graphene/-/commits/master
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-18 12:32:06 +01:00
Daniel Golle b68b93cd1d gtk: update to 4.22.4
Bump from 4.18.6 to current upstream stable.

GTK 4.22 highlights:
 * SVG support: built-in GtkSvg backend with native rendering
 * Updated GPU rendering with broader Vulkan adoption
 * Improved input methods, accessibility and DPI handling
 * Modernised GtkInscription, popovers and menus
 * Major-version glib requirement (>= 2.84)

Add -Dsysprof=disabled to MESON_ARGS - 4.22 pulls in libsysprof
which conflicts with the bundled glib subproject when sysprof
isn't available on the build host.

Drop the now-removed /usr/lib/gtk-4.0 directory copy from
Build/InstallDev (gtk no longer installs anything under that
path).

Link: https://gitlab.gnome.org/GNOME/gtk/-/tags/4.22.4
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-17 12:54:46 +01:00
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
Daniel Golle 26e03d11a0 llvm-mesa: update to 22.1.5 / SPIRV-LLVM-Translator 22.1.2
Bump the Mesa-internal LLVM (kept in feeds/video/libs/llvm/) from
21.1.3 to 22.1.5, and the matching SPIRV-LLVM-Translator from
21.1.1 to 22.1.2.

The SPIRV-LLVM-Translator's major version tracks LLVM's major,
so it caps which LLVM major we can move to. Khronos has now
shipped v22.1.2 (latest in the 22.x series), allowing the LLVM
major bump.

Mesa 26.0.6 sets only a minimum LLVM (>= 18 / 15 / 8 depending
on the requested driver set); no upper bound, so LLVM 22.x is
acceptable.

Two LLVM 22 build-system changes need adapting in the Makefile:

 1. LIBCLC_TARGETS_TO_BUILD got stricter target name validation:
    'amdgcn--amdhsa' is rejected in favour of 'amdgcn-amd-amdhsa',
    and the 32-bit nvptx ('nvptx--', 'nvptx--nvidiacl') targets
    were dropped (the 64-bit equivalents remain).

 2. libclc bytecode now installs under
    'usr/lib/clang/<major>/lib/libclc/' rather than the previous
    'usr/share/clc/'. Adjust the SPIR-V .spv copy in Build/Install
    to source from the new location (a glob on the major version
    avoids re-touching this on the next bump).

The downstream 100-allow-arc-target.patch still applies unchanged.

Link: https://github.com/llvm/llvm-project/releases/tag/llvmorg-22.1.5
Link: https://github.com/KhronosGroup/SPIRV-LLVM-Translator/releases/tag/v22.1.2
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-17 12:46:41 +01:00
Daniel Golle 0b52d667b8 pango: update to 1.56.4
Overview of changes in 1.56.4, 27-06-2025:

 * fontconfig: Improve the add_font_file implementation
 * fontconfig: Combine font features and style variants
 * fontconfig: Make sure font faces stay alive
 * win32: Drop some caching
 * win32: Make sure font faces stay alive
 * win32: Modernize and simplify the code
 * win32: Stop synthesizing fonts
 * win32: Implement list models
 * coretext: Support synthetic small caps
 * layout: Avoid assertions in line breaking
 * build: Require GLib 2.82

Link: https://gitlab.gnome.org/GNOME/pango/-/raw/1.56.4/NEWS
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-13 23:10:30 +01:00
Daniel Golle 060d917e70 wlroots: update to 0.20.0
Bump from 0.18.2 to current upstream stable.

Requires libdrm >= 2.4.129 and wayland-protocols 1.48+ with
the enum-header generator.

Link: https://gitlab.freedesktop.org/wlroots/wlroots/-/releases/0.20.0
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-11 12:30:30 +01:00