Files
RedBear-OS/local/recipes/kde/kwin/recipe.toml
T
vasilito 741f144c79 feat: VirtIO GPU driver, libdrm DRM ioctls, KWin/KF6 build fixes, display stack additions
- Add full VirtIO GPU driver with command submission, resource management,
  VirtQueue implementation, and transport layer; includes diagnostic probes
  for resource_create_2d ERR_INVALID_RESOURCE_ID investigation
- Expand libdrm Redox support with DRM ioctl wrappers (ADDFB, RMFB,
  CREATE_DUMB, MAP_DUMB, DESTROY_DUMB, GET_RESOURCES, GET_CONNECTOR,
  GET_CRTC, SET_CRTC, MODE_OBJ_GET_PROPERTIES, etc.) and xf86drm_redox.h
- Add redox-drm scheme handlers for VirtIO GPU-specific DRM ioctls
  (VIRTGPU_RESOURCE_CREATE, VIRTGPU_MAP, VIRTGPU_WAIT, VIRTGPU_INFO, etc.)
- Add display stack recipes: freetype2, lcms2, libdisplay-info, libepoxy,
  libxcvt
- Fix KWin build (recipe.toml expanded, kf6-ksvg added)
- Fix KF6 CMakeLists for cross-compilation (attica, kcmutils, kcolorscheme,
  kcompletion, kconfigwidgets, kdeclarative, kiconthemes, kitemmodels,
  kitemviews, kjobwidgets, ktextwidgets, kwayland, kxmlgui, kpty, solid)
- Add Qt6 futex support patch
- Add relibc patches: P3 strtold, P3 ld-so search path, P5 DRM ioctl removal
- Add base P4 pcid config scheme patch
- Update driver-manager hotplug/config, PCI config in redox-driver-sys
- Update greeter compositor and KDE session scripts
- Update AGENTS.md with zero-tolerance stubs policy and project knowledge
2026-05-14 10:31:13 +01:00

188 lines
7.6 KiB
TOML

#TODO: KWin — full build with Qt6Quick/QML. Effect frames, scripted effects, OSD overlay, outline overlay all enabled.
[source]
tar = "https://invent.kde.org/plasma/kwin/-/archive/v6.3.4/kwin-v6.3.4.tar.gz"
blake3 = "2aa1e234a75b0aa94f0da3a74d93e2a8e49b30a3afb12dc24b2ecd3abaa94e7f"
[build]
template = "custom"
dependencies = [
"qtbase",
"qtdeclarative",
"qt5compat",
"kf6-extra-cmake-modules",
"kf6-kauth",
"kf6-kcolorscheme",
"kf6-kcompletion",
"kf6-kconfig",
"kf6-kconfigwidgets",
"kf6-kcoreaddons",
"kf6-kcrash",
"kf6-kdbusaddons",
"kf6-kglobalaccel",
"kf6-kguiaddons",
"kf6-ki18n",
"kf6-kidletime",
"kf6-kpackage",
"kf6-kservice",
"kf6-ksvg",
"kf6-kwayland",
"kf6-kwidgetsaddons",
"kf6-kwindowsystem",
"kf6-kxmlgui",
"kf6-kiconthemes",
"kf6-kcmutils",
"kf6-kdeclarative",
"kf6-knotifications",
"kf6-kio",
"kf6-kitemmodels",
"kf6-kitemviews",
"kf6-kjobwidgets",
"kf6-ktextwidgets",
"kdecoration",
"plasma-wayland-protocols",
"libepoxy",
"libdisplay-info",
"libxcvt",
"lcms2",
"wayland-protocols",
"redbear-compositor",
"libxkbcommon",
"libinput",
"libudev-stub",
"libxcb",
]
script = """
DYNAMIC_INIT
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
STAGE="${COOKBOOK_STAGE}/usr"
source "${COOKBOOK_ROOT}/local/scripts/lib/qt-sysroot.sh"
redbear_qt_link_sysroot_dirs "${COOKBOOK_SYSROOT}" plugins mkspecs metatypes modules
if [ -d "${COOKBOOK_SYSROOT}/plugins" ] && [ ! -L "${COOKBOOK_SYSROOT}/plugins" ]; then
if [ -d "${COOKBOOK_SYSROOT}/usr/plugins" ]; then
cp -an "${COOKBOOK_SYSROOT}/plugins/." "${COOKBOOK_SYSROOT}/usr/plugins/" 2>/dev/null || true
rm -rf "${COOKBOOK_SYSROOT}/plugins"
ln -s usr/plugins "${COOKBOOK_SYSROOT}/plugins"
fi
fi
cp -a "${COOKBOOK_ROOT}/recipes/libs/freetype2/target/x86_64-unknown-redox/stage/usr/." "${COOKBOOK_SYSROOT}/" 2>/dev/null || true
cp -a "${COOKBOOK_ROOT}/recipes/dev/fontconfig/target/x86_64-unknown-redox/stage/usr/." "${COOKBOOK_SYSROOT}/" 2>/dev/null || true
cp -rn "${HOST_BUILD}/include/QtGui/6.11.0/QtGui/private/." "${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/QtGui/private/" 2>/dev/null || true
FT2_DIR="${COOKBOOK_ROOT}/recipes/libs/freetype2/target/x86_64-unknown-redox/stage/usr"
FC_DIR="${COOKBOOK_ROOT}/recipes/dev/fontconfig/target/x86_64-unknown-redox/stage/usr"
CROSS_PKGCONFIG="${COOKBOOK_ROOT}/bin/x86_64-unknown-redox-pkg-config"
sed -i 's/Canberra::Canberra/$<IF:$<BOOL:${Canberra_FOUND}>,Canberra::Canberra,>/' \
"${COOKBOOK_SOURCE}/src/plugins/systembell/CMakeLists.txt" 2>/dev/null || true
sed -i '/^[[:space:]]*UiTools$/d' "${COOKBOOK_SOURCE}/CMakeLists.txt"
sed -i 's/find_package(Canberra REQUIRED)/find_package(Canberra QUIET)/' "${COOKBOOK_SOURCE}/CMakeLists.txt"
sed -i 's/add_subdirectory(killer)/#add_subdirectory(killer) # disabled: X11-only/' "${COOKBOOK_SOURCE}/src/helpers/CMakeLists.txt"
printf '%s\n' '#ifndef SUN_LEN' '#define SUN_LEN(s) (sizeof(*(s)) - sizeof((s)->sun_path) + strnlen((s)->sun_path, sizeof((s)->sun_path)))' '#endif' | cat - "${COOKBOOK_SOURCE}/src/helpers/wayland_wrapper/wl-socket.c" > /tmp/wlsocket.tmp && mv /tmp/wlsocket.tmp "${COOKBOOK_SOURCE}/src/helpers/wayland_wrapper/wl-socket.c"
python3 -c "
path = '$COOKBOOK_SOURCE/src/cursor.cpp'
with open(path) as f: t = f.read()
t = t.replace('#include <xcb/xcb_cursor.h>', '')
with open(path, 'w') as f: f.write(t)
"
sed -i 's/message(FATAL_ERROR "Compiler does not support C++20 ranges")/message(WARNING "C++20 ranges test skipped strtold toolchain issue")/' "${COOKBOOK_SOURCE}/CMakeLists.txt"
sed -i '/#include "tabletmodemanager.h"/a #include <libudev.h>' \
"${COOKBOOK_SOURCE}/src/tabletmodemanager.cpp" 2>/dev/null || true
sed -i '/#include "device.h"/a #include <libudev.h>' \
"${COOKBOOK_SOURCE}/src/backends/libinput/device.cpp" 2>/dev/null || true
sed -i 's/accept4(socketDescriptor, nullptr, nullptr, SOCK_CLOEXEC)/accept(socketDescriptor, nullptr, nullptr)/' \
"${COOKBOOK_SOURCE}/src/wayland/display.cpp" 2>/dev/null || true
echo '#ifndef F_ADD_SEALS
#define F_ADD_SEALS 1033
#define F_GET_SEALS 1034
#define F_SEAL_SEAL 0x0001
#define F_SEAL_SHRINK 0x0002
#define F_SEAL_GROW 0x0004
#define F_SEAL_WRITE 0x0008
#endif' >> "${COOKBOOK_SYSROOT}/include/fcntl.h"
printf '%s\n' '#define F_ADD_SEALS 1033' '#define F_GET_SEALS 1034' '#define F_SEAL_SEAL 0x0001' '#define F_SEAL_SHRINK 0x0002' '#define F_SEAL_GROW 0x0004' '#define F_SEAL_WRITE 0x0008' | cat - "${COOKBOOK_SOURCE}/src/utils/ramfile.cpp" > /tmp/ramfile.tmp && mv /tmp/ramfile.tmp "${COOKBOOK_SOURCE}/src/utils/ramfile.cpp"
rm -f CMakeCache.txt
rm -rf CMakeFiles
rm -rf "${COOKBOOK_SOURCE}/po"
HOST_SCANNER="${COOKBOOK_ROOT}/local/recipes/kde/kwin/target/qtwaylandscanner-host/qtwaylandscanner_kde"
HOST_SCANNER_BUILD="${COOKBOOK_ROOT}/local/recipes/kde/kwin/target/qtwaylandscanner-host"
mkdir -p "${HOST_SCANNER_BUILD}"
env -u LDFLAGS -u LIBRARY_PATH -u PKG_CONFIG_PATH -u PKG_CONFIG_LIBDIR \
/usr/bin/pkg-config --exists Qt6Core 2>/dev/null && \
env -u LDFLAGS -u LIBRARY_PATH -u PKG_CONFIG_PATH -u PKG_CONFIG_LIBDIR \
g++ -std=c++20 -fPIC -o "${HOST_SCANNER_BUILD}/qtwaylandscanner_kde" \
"${COOKBOOK_SOURCE}/src/wayland/tools/qtwaylandscanner.cpp" \
$(env -u LDFLAGS -u LIBRARY_PATH -u PKG_CONFIG_PATH -u PKG_CONFIG_LIBDIR /usr/bin/pkg-config --cflags --libs Qt6Core) || \
env -u LDFLAGS -u LIBRARY_PATH g++ -std=c++20 -fPIC -o "${HOST_SCANNER_BUILD}/qtwaylandscanner_kde" \
"${COOKBOOK_SOURCE}/src/wayland/tools/qtwaylandscanner.cpp" \
-I"${HOST_BUILD}/include" -I"${HOST_BUILD}/include/QtCore" \
-DQT_CORE_LIB -L"${HOST_BUILD}/lib" -lQt6Core -Wl,-rpath,"${HOST_BUILD}/lib"
cp -f /usr/bin/wayland-scanner "${COOKBOOK_SYSROOT}/bin/wayland-scanner"
grep -q "strtold" "${COOKBOOK_SYSROOT}/include/stdlib.h" 2>/dev/null || sed -i '/^#endif/ i long double strtold(const char *nptr, char **endptr);' "${COOKBOOK_SYSROOT}/include/stdlib.h"
cmake "${COOKBOOK_SOURCE}" \
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
-DQT_HOST_PATH="${HOST_BUILD}" \
-DKF6_HOST_TOOLING="${HOST_BUILD}/lib/cmake" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
-DPKG_CONFIG_EXECUTABLE="${CROSS_PKGCONFIG}" \
-DFREETYPE_LIBRARY="${FT2_DIR}/lib/libfreetype.so" \
-DFREETYPE_INCLUDE_DIRS="${FT2_DIR}/include/freetype2" \
-DFontconfig_LIBRARY="${FC_DIR}/lib/libfontconfig.so" \
-DFontconfig_INCLUDE_DIR="${FC_DIR}/include" \
-DBUILD_TESTING=OFF \
-DBUILD_QCH=OFF \
-DKWIN_BUILD_AUTO_ROTATION=OFF \
-DKWIN_BUILD_X11=OFF \
-DKWIN_BUILD_X11_BACKEND=OFF \
-DKWIN_BUILD_KCMS=OFF \
-DKWIN_BUILD_SCREENLOCKER=OFF \
-DKWIN_BUILD_TABBOX=OFF \
-DKWIN_BUILD_GLOBALSHORTCUTS=OFF \
-DKWIN_BUILD_RUNNERS=OFF \
-DKWIN_BUILD_NOTIFICATIONS=OFF \
-DKWIN_BUILD_ACTIVITIES=OFF \
-DKWIN_BUILD_EIS=OFF \
-DQt6GuiPrivate_DIR="${COOKBOOK_SYSROOT}/lib/cmake/Qt6GuiPrivate" \
-DQt6CorePrivate_DIR="${COOKBOOK_SYSROOT}/lib/cmake/Qt6CorePrivate" \
-DQT_FIND_PRIVATE_MODULES=ON \
-DQTWAYLANDSCANNER_KDE_EXECUTABLE="${HOST_SCANNER}" \
-DPLASMA_WAYLAND_PROTOCOLS_DIR="${COOKBOOK_SYSROOT}/usr/share/plasma-wayland-protocols" \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \
-DCMAKE_INSTALL_RPATH="/usr/lib" \
-Wno-dev
cmake --build . -j${COOKBOOK_MAKE_JOBS}
cmake --install . --prefix "${STAGE}"
for bin in "${STAGE}/bin/"* "${STAGE}/lib/"lib*.so.*; do
[ -f "${bin}" ] || continue
patchelf --set-rpath "/usr/lib" "${bin}" 2>/dev/null || true
done
"""
[package]
dependencies = [
"redbear-compositor",
]