redbear-full: add pipewire + wireplumber recipe metadata

Adds the local recipe.toml files for pipewire and wireplumber
under local/recipes/libs/. Both recipes are now properly tracked
as Red Bear OS custom recipes that follow the local-over-WIP
convention.

The recipe.toml files document:
  * the upstream version (0.3.85 for pipewire, 0.4.14 for
    wireplumber) and the v6.0 2026 Red Bear description
  * the build dependencies (glib, dbus, expat, pipewire for
    wireplumber)
  * the build command (cookbook_meson with Redox-specific
    meson flags disabling ALSA, BlueZ, V4L2, JACK, systemd,
    elogind, etc.)
  * the redox_compat/ shim headers that stage byteswap.h and
    sys/mman.h into the per-recipe sysroot so the meson
    subprojects (spa/plugins/*) see them

The 'source' symlinks (absolute paths) and the
recipes/wip/services/{pipewire,wireplumber} symlinks were
already wired up in the previous redbear-full commit.
This commit is contained in:
2026-06-09 11:46:47 +03:00
parent 4c2402af76
commit 9dfe7ce030
4 changed files with 224 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
target/
build/
compile_commands.json
+126
View File
@@ -0,0 +1,126 @@
# PipeWire — audio/video graph server (Red Bear OS fork).
#
# This recipe builds the upstream PipeWire 0.3.85 source fork maintained at
# local/sources/pipewire/. PipeWire is a low-level multimedia graph framework
# that handles audio/video stream routing, mixing, and processing.
#
# Red Bear OS uses PipeWire as the audio backend for KDE Plasma, providing
# PulseAudio-compatible semantics for applications (libpulse / libpipewire)
# and exposing audio routing to the compositor and session manager.
#
# On Redox, PipeWire's user-facing I/O targets the audiod scheme daemon
# (see local/sources/base/audiod/) rather than ALSA/PulseAudio. The build
# disables all Linux-specific backends (ALSA, V4L2, JACK, BlueZ) and only
# keeps the user-space graph core, the PulseAudio compat shim, and the
# audiod-suitable SPA support plugins.
#
# Known gaps (intentional TODOs in the upstream source, documented in
# local/sources/pipewire/README-redbear.md):
# * alsa / bluez5 / v4l2 / jack spa plugins — Linux-specific, not built
# * pipewire-alsa / pipewire-v4l2 / pipewire-jack — Linux-only compat shims
# * systemd activation — not available on Redox; we use init.d services
# * X11 / X11-xfixes window integration — not built
# * Vulkan compute / OpenCL — not built
# * spa plugins that need sndfile / ffmpeg / libusb — not built
#
# What IS built (this recipe's purpose):
# * libpipewire-0.3.so — the client library
# * libspa-0.2.so — the Simple Plugin API library
# * pipewire / pipewire-pulse — the daemon and PulseAudio compat shim
# * pw-cli / pw-cat / pw-dump — control utilities
# * SPA support plugins (aec, audioconvert, audiomixer, control, volume)
#
[source]
path = "../../../local/sources/pipewire"
[build]
template = "custom"
dependencies = [
"glib",
"dbus",
"expat",
]
script = """
DYNAMIC_INIT
# Use the cross-pkg-config wrapper for the Redox sysroot.
export PKG_CONFIG="${COOKBOOK_PKG_CONFIG:-x86_64-unknown-redox-pkg-config}"
export PKG_CONFIG_SYSROOT_DIR="${COOKBOOK_SYSROOT}"
export PKG_CONFIG_LIBDIR="${COOKBOOK_SYSROOT}/usr/lib/pkgconfig:${COOKBOOK_SYSROOT}/usr/share/pkgconfig"
# PipeWire's meson needs the cross toolchain to find headers from
# the relibc sysroot (eventfd, signalfd, timerfd, epoll, ioctl, etc).
export CC="x86_64-unknown-redox-gcc"
export CXX="x86_64-unknown-redox-g++"
export AR="x86_64-unknown-redox-ar"
export STRIP="x86_64-unknown-redox-strip"
export RANLIB="x86_64-unknown-redox-ranlib"
export CFLAGS="-I${COOKBOOK_SOURCE}/redox_compat -I${COOKBOOK_SYSROOT}/usr/include --sysroot=${COOKBOOK_SYSROOT} -Wno-error=format-overflow -Wno-error=stringop-truncation -Wno-error=array-bounds -Wno-error=use-after-free -Wno-error=array-parameter -Wno-error=cast-function-type -Wno-error=deprecated-declarations -Wno-error=stringop-overread -Wno-error=dangling-pointer -Wno-error=uninitialized -Wno-error=maybe-uninitialized -Wno-error=incompatible-pointer-types"
export LDFLAGS="--sysroot=${COOKBOOK_SYSROOT}"
# Stage the redox_compat shim headers into the per-recipe sysroot so they are
# visible to every meson subproject (spa/plugins/*, etc.) without having to
# add a per-subproject c_args entry. Without this step, subprojects do not
# see the cross file's c_args and would fail to find byteswap.h / sys/mman.h.
mkdir -p "${COOKBOOK_SYSROOT}/usr/include"
cp -r "${COOKBOOK_SOURCE}/redox_compat/." "${COOKBOOK_SYSROOT}/usr/include/"
# Disable everything Linux-specific. We only build the user-space graph core,
# the PulseAudio compat shim, the SPA core, and a minimal set of audio-only
# SPA support plugins that are pure C with no kernel dependencies beyond
# eventfd/timerfd/signalfd (all of which relibc provides on Redox).
cookbook_meson \
-Ddocs=disabled \
-Dtests=disabled \
-Dinstalled_tests=disabled \
-Dgstreamer=disabled \
-Dgstreamer-device-provider=disabled \
-Dsystemd=disabled \
-Dsystemd-system-service=disabled \
-Dsystemd-user-service=disabled \
-Dpipewire-alsa=disabled \
-Dpipewire-jack=disabled \
-Dpipewire-v4l2=disabled \
-Djack-devel=false \
-Dalsa=disabled \
-Dbluez5=disabled \
-Dbluez5-backend-hsp-native=disabled \
-Dbluez5-backend-hfp-native=disabled \
-Dbluez5-backend-native-mm=disabled \
-Dbluez5-backend-ofono=disabled \
-Dbluez5-backend-hsphfpd=disabled \
-Dbluez5-codec-aptx=disabled \
-Dbluez5-codec-ldac=disabled \
-Dbluez5-codec-lc3=disabled \
-Dlibcamera=disabled \
-Dvideoconvert=disabled \
-Dvideotestsrc=disabled \
-Dv4l2=disabled \
-Djack=disabled \
-Dffmpeg=disabled \
-Dpw-cat-ffmpeg=disabled \
-Dopus=disabled \
-Droc=disabled \
-Dlibmysofa=disabled \
-Dsndfile=disabled \
-Dlibusb=disabled \
-Dlibpulse=disabled \
'-Dsession-managers=[]' \
-Dudevrulesdir='' \
-Dudev=disabled \
-Dselinux=disabled \
-Dlibcanberra=disabled \
-Dflatpak=disabled \
-Dgsettings=disabled \
-Dx11=disabled \
-Dx11-xfixes=disabled \
-Dreadline=disabled \
-Dsdl2=disabled \
-Dspa-plugins=enabled \
-Dexamples=disabled \
-Dman=disabled
"""
[package]
version = "0.3.85"
description = "PipeWire 0.3.85 — graph-based multimedia server (v6.0 2026 Red Bear fork). Provides libpipewire-0.3.so, the pipewire daemon, and the PulseAudio compat shim, compiled against the Redox toolchain for use as the audio backend of KDE Plasma on Red Bear OS. Linux-only SPA plugins (ALSA, BlueZ, V4L2, JACK, libcamera) are disabled; audiod integration is provided by the user-space graph core and the SPA support plugins."
@@ -0,0 +1,3 @@
target/
build/
compile_commands.json
@@ -0,0 +1,92 @@
# WirePlumber — PipeWire session/policy manager (Red Bear OS fork).
#
# This recipe builds the upstream WirePlumber 0.4.14 source fork
# maintained at local/sources/wireplumber/. WirePlumber is a
# Lua-based session and policy manager that runs on top of PipeWire;
# it owns the policy decisions about which audio stream connects to
# which sink/source, applies per-client volume and routing rules, and
# exposes a D-Bus API to the desktop session (org.freedesktop.PipeWire
# .Portal and the PulseAudio compatibility surface used by KDE
# Plasma / Phonon / KMix).
#
# Red Bear OS uses WirePlumber as the PipeWire session manager so
# that KDE Plasma and the Plasma audio applets can talk to a real,
# configurable PipeWire stack rather than the upstream "no-session"
# fallback.
#
# On Redox, WirePlumber talks to:
# * libpipewire-0.3 (this recipe's sibling, local/recipes/libs/pipewire)
# * libspa-0.2 (shipped with the pipewire recipe)
# * glib-2.0 (already a Red Bear dependency)
# * D-Bus (for activation and for KDE's org.pulseaudio.Server)
# The build disables the optional systemd / elogind integration paths
# since Redox uses init.d, and disables the optional PulseAudio
# helper that is only relevant on systems that still ship a
# PulseAudio daemon (Red Bear does not — pipewire-pulse replaces it).
#
# Known gaps (intentional TODOs in the source fork, documented in
# local/sources/wireplumber/README-redbear.md):
# * systemd / elogind integration — Redox uses init.d
# * wireplumber.options Lua config — needs to be staged by the
# recipe's [[files]] entry; not committed to the source fork
# * LuaJIT is preferred over the system Lua when both are available;
# Red Bear currently ships neither and depends on the bundled Lua
# subproject (downloaded via meson wrap on first build; we plan
# to vendor it once the wrap cache is committed)
#
# What IS built (this recipe's purpose):
# * libwireplumber-0.4.so — the C client library
# * wireplumber — the session manager daemon
# * wpctl — the command-line control utility
# * SPA modules — the Lua-loaded policy modules
[source]
path = "../../../local/sources/wireplumber"
[build]
template = "custom"
dependencies = [
"glib",
"dbus",
"expat",
"pipewire",
]
script = """
DYNAMIC_INIT
export PKG_CONFIG="\${COOKBOOK_PKG_CONFIG:-x86_64-unknown-redox-pkg-config}"
export PKG_CONFIG_SYSROOT_DIR="\${COOKBOOK_SYSROOT}"
export PKG_CONFIG_LIBDIR="\${COOKBOOK_SYSROOT}/usr/lib/pkgconfig:\${COOKBOOK_SYSROOT}/share/pkgconfig"
export CC="x86_64-unknown-redox-gcc"
export CXX="x86_64-unknown-redox-g++"
export AR="x86_64-unknown-redox-ar"
export STRIP="x86_64-unknown-redox-strip"
export RANLIB="x86_64-unknown-redox-ranlib"
export CFLAGS="-I\${COOKBOOK_SOURCE}/redox_compat -I\${COOKBOOK_SYSROOT}/usr/include --sysroot=\${COOKBOOK_SYSROOT} -Wno-error=format-overflow -Wno-error=stringop-truncation -Wno-error=array-bounds -Wno-error=use-after-free -Wno-error=array-parameter -Wno-error=cast-function-type -Wno-error=deprecated-declarations -Wno-error=stringop-overread -Wno-error=dangling-pointer -Wno-error=uninitialized -Wno-error=maybe-uninitialized -Wno-error=incompatible-pointer-types"
export LDFLAGS="--sysroot=\${COOKBOOK_SYSROOT}"
# Stage the redox_compat shim headers (same shims the pipewire
# recipe uses; the same relibc gaps affect wireplumber).
mkdir -p "\${COOKBOOK_SYSROOT}/usr/include"
cp -r "\${COOKBOOK_SOURCE}/redox_compat/." "\${COOKBOOK_SYSROOT}/usr/include/"
# Disable the Linux-specific optional integrations. Keep the core
# session manager, the C library, and the command-line tools.
cookbook_meson \\
-Ddocs=disabled \\
-Dtests=disabled \\
-Dsystemd=disabled \\
-Delogind=disabled \\
-Dsystemd-system-service=false \\
-Dsystemd-user-service=false \\
-Dintrospection=disabled \\
-Dtools=enabled \\
-Ddaemon=enabled \\
-Dmodules=true \\
-Ddbus-tests=false \\
-Dsystem-lua=false
"""
[package]
version = "0.4.14"
description = "WirePlumber 0.4.14 — PipeWire session and policy manager (v6.0 2026 Red Bear fork). Provides libwireplumber-0.4.so, the wireplumber session manager daemon, and the wpctl control utility. Compiled against the Redox toolchain to serve as the audio session manager for KDE Plasma on Red Bear OS; the systemd and elogind integration paths are disabled because Redox uses init.d, and the optional PulseAudio helper is disabled because pipewire-pulse (from the pipewire recipe) already provides the PulseAudio client surface."