Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
fed1476
Initial plan
Copilot Feb 1, 2026
5170eed
Add XLibre X server and X11 library packages
Copilot Feb 1, 2026
256c1d2
Add xterm and additional X11 library dependencies
Copilot Feb 1, 2026
8a6d62a
Fix code review issues in libxtrans and libxmu
Copilot Feb 1, 2026
3291efd
Set empty PKG_MAINTAINER for all X11 packages
Copilot Feb 1, 2026
2512d17
Add GitHub Actions CI workflow for building X11 packages with OpenWrt…
Copilot Feb 1, 2026
08e6651
python3-setuptools
probonopd Feb 1, 2026
4ea2a25
Fix package hashes and build configuration for X11 libraries
Copilot Feb 1, 2026
d642d98
Fix libx11 cross-compilation with host makekeys tool
Copilot Feb 1, 2026
7c49b53
Fix cross-compilation for libxext and libxt packages
Copilot Feb 1, 2026
1e652de
Add missing base libraries: zlib, libpng, freetype, libbz2, libfonten…
Copilot Feb 1, 2026
c30cfd8
Changes before error encountered
Copilot Feb 1, 2026
be08765
XLibre X server builds successfully, add nettle and fix cross-compile…
Copilot Feb 1, 2026
d5ebbd6
Add input device libraries: libmtdev, libevdev, eudev
Copilot Feb 1, 2026
910de64
XLibre and all input drivers build successfully
Copilot Feb 1, 2026
e42f5d2
Address code review comments: fix host toolchain, xcbgen paths, secur…
Copilot Feb 1, 2026
3c5ff1c
Fix xcb-proto sed pattern escaping for ${pc_sysrootdir}
Copilot Feb 1, 2026
10db6b8
Fix CI workflow: build host Python and xkeyboard-config separately to…
Copilot Feb 2, 2026
2cc489a
Fix CI: remove xkeyboard-config dependency and install only X11 packages
Copilot Feb 2, 2026
2a7331d
Fix CI: create custom X11 feed with only our packages to avoid broken…
Copilot Feb 2, 2026
ea52abd
Fix CI: ignore defconfig exit code as it may warn about missing menus
Copilot Feb 2, 2026
d9464fa
Fix CI: use set +e to ignore defconfig exit code
Copilot Feb 2, 2026
a1685d1
Enhance feed update process with retries and git config
probonopd Feb 2, 2026
afba637
Simplify configure feeds
probonopd Feb 2, 2026
6643355
Update feeds.conf.default with GitHub sources
probonopd Feb 3, 2026
f09f11b
Update build-x11-packages.yml to configure feeds
probonopd Feb 3, 2026
f499604
Disable xterm build in build-x11-packages.yml
probonopd Feb 3, 2026
25ac323
PKG_MIRROR_HASH:= was wrong
probonopd Feb 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
223 changes: 223 additions & 0 deletions .github/workflows/build-x11-packages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
name: Build X11 Packages

on:
push:
branches:
- master
- 'copilot/**'
pull_request:
branches:
- master
workflow_dispatch:

jobs:
build:
name: Build X11 packages (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- target: x86-generic
sdk_url: https://downloads.openwrt.org/releases/24.10.5/targets/x86/generic/openwrt-sdk-24.10.5-x86-generic_gcc-13.3.0_musl.Linux-x86_64.tar.zst
sdk_name: openwrt-sdk-24.10.5-x86-generic_gcc-13.3.0_musl.Linux-x86_64
- target: bcm27xx-bcm2711
sdk_url: https://downloads.openwrt.org/releases/24.10.5/targets/bcm27xx/bcm2711/openwrt-sdk-24.10.5-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64.tar.zst
sdk_name: openwrt-sdk-24.10.5-bcm27xx-bcm2711_gcc-13.3.0_musl.Linux-x86_64

steps:
- name: Checkout video feed
uses: actions/checkout@v4
with:
path: video

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python3 python3-setuptools \
rsync unzip wget xsltproc zlib1g-dev zstd

- name: Download and extract OpenWrt SDK
run: |
wget -q "${{ matrix.sdk_url }}" -O sdk.tar.zst
zstd -d sdk.tar.zst -o sdk.tar
tar -xf sdk.tar
mv "${{ matrix.sdk_name }}" sdk

- name: Configure feeds
run: |
cd sdk
# Clear the existing feeds.conf.default to avoid duplicates
echo "" > feeds.conf.default

# Add the video feed (our local checkout)
echo "src-link video $GITHUB_WORKSPACE/video" >> feeds.conf.default
# Add feeds from GitHub
echo "src-git base https://github.com/openwrt/openwrt.git" >> feeds.conf.default
echo "src-git packages https://github.com/openwrt/packages.git" >> feeds.conf.default

# Update and install feeds
./scripts/feeds update -a
./scripts/feeds install -a -p video
shell: /usr/bin/bash -e {0}


- name: Build X11 core libraries
run: |
set +e # Don't exit on error for defconfig
cd sdk
# Enable packages for build
# Protocol and build infrastructure
# Note: defconfig may warn about missing menu items but this is OK
make defconfig
set -e # Re-enable exit on error

# Build core X11 protocol packages first
echo "Building xorgproto..."
make package/xorgproto/compile V=s

echo "Building xorg-macros..."
make package/xorg-macros/compile V=s

echo "Building libxtrans..."
make package/libxtrans/compile V=s

echo "Building xcb-proto..."
make package/xcb-proto/compile V=s

- name: Build X11 authentication libraries
run: |
cd sdk
echo "Building libxau..."
make package/libxau/compile V=s

echo "Building libxdmcp..."
make package/libxdmcp/compile V=s

- name: Build XCB and X11 libraries
run: |
cd sdk
echo "Building libxcb..."
make package/libxcb/compile V=s

echo "Building libx11..."
make package/libx11/compile V=s

- name: Build X11 extension libraries
run: |
cd sdk
echo "Building libxext..."
make package/libxext/compile V=s

echo "Building libxfixes..."
make package/libxfixes/compile V=s

echo "Building libxrender..."
make package/libxrender/compile V=s

echo "Building libxrandr..."
make package/libxrandr/compile V=s

echo "Building libxi..."
make package/libxi/compile V=s

echo "Building libxinerama..."
make package/libxinerama/compile V=s

echo "Building libxshmfence..."
make package/libxshmfence/compile V=s

- name: Build X11 session libraries
run: |
cd sdk
echo "Building libice..."
make package/libice/compile V=s

echo "Building libsm..."
make package/libsm/compile V=s

- name: Build X11 toolkit libraries
run: |
cd sdk
echo "Building libxt..."
make package/libxt/compile V=s

echo "Building libxmu..."
make package/libxmu/compile V=s

echo "Building libxpm..."
make package/libxpm/compile V=s

echo "Building libxaw..."
make package/libxaw/compile V=s

- name: Build X11 font and misc libraries
run: |
cd sdk
echo "Building libxfont2..."
make package/libxfont2/compile V=s

echo "Building libxkbfile..."
make package/libxkbfile/compile V=s

echo "Building libxft..."
make package/libxft/compile V=s

echo "Building libpciaccess..."
make package/libpciaccess/compile V=s

echo "Building libxcvt..."
make package/libxcvt/compile V=s

- name: Build XLibre X server
run: |
cd sdk
echo "Building xlibre..."
make package/xlibre/compile V=s

- name: Build X11 input drivers
run: |
cd sdk
echo "Building xf86-input-evdev..."
make package/xf86-input-evdev/compile V=s

echo "Building xf86-input-libinput..."
make package/xf86-input-libinput/compile V=s

- name: Build X11 utilities
run: |
cd sdk
echo "Building xkbcomp..."
make package/xkbcomp/compile V=s

echo "Building xauth..."
make package/xauth/compile V=s

echo "Building xinit..."
make package/xinit/compile V=s

echo "Building xrandr..."
make package/xrandr/compile V=s

# echo "Building xterm..."
# make package/xterm/compile V=s

- name: Collect build results
run: |
cd sdk
echo "=== Build Results ==="
echo "Listing built packages:"
find bin/packages -name "*.ipk" -type f 2>/dev/null | sort || echo "No packages built"
echo ""
echo "=== Package count ==="
find bin/packages -name "*.ipk" -type f 2>/dev/null | wc -l || echo "0"

- name: Upload built packages
uses: actions/upload-artifact@v4
if: always()
with:
name: x11-packages-${{ matrix.target }}
path: sdk/bin/packages/
if-no-files-found: warn
108 changes: 108 additions & 0 deletions frameworks/xlibre/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=xlibre
PKG_VERSION:=25.1.1
PKG_RELEASE:=1

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/X11Libre/xserver.git
PKG_SOURCE_VERSION:=de8eb403aa30a0201b6c1787ce377e5f4aaf331a
PKG_MIRROR_HASH:=

PKG_MAINTAINER:=
PKG_LICENSE:=MIT
Comment on lines +12 to +13
Copy link

Copilot AI Feb 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PKG_MAINTAINER is left empty. This feed generally sets a maintainer field (e.g. libs/cairo/Makefile:11). Please populate it (or remove the field entirely if that’s the project convention) to keep package metadata consistent.

Copilot uses AI. Check for mistakes.
PKG_LICENSE_FILES:=COPYING

PKG_INSTALL:=1

PKG_BUILD_DEPENDS:=xorgproto libxtrans

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/meson.mk

define Package/xlibre
SECTION:=video-frameworks
CATEGORY:=Video
SUBMENU:=Frameworks and Toolkits
TITLE:=XLibre X server
URL:=https://github.com/X11Libre/xserver
DEPENDS:=+libdrm +libpciaccess +libx11 +libxau \
+libxcb +libxcvt +libxdmcp +libxext +libxfixes +libxfont2 +libxkbfile \
+libxshmfence +pixman +libnettle +xkbcomp
endef

define Package/xlibre/description
XLibre is a display server implementation of the X Window System Protocol
Version 11. It has been forked from the X.Org Server to clean up and
strengthen the existing code base while maintaining backward compatibility
to make X11 a viable choice for the future.
endef

MESON_ARGS += \
-Dxorg=true \
-Dxephyr=false \
-Dxfbdev=false \
-Dxnest=false \
-Dxvfb=false \
-Dxwin=false \
-Dxquartz=false \
-Dglamor=false \
-Dglx=false \
-Ddri1=false \
-Ddri2=false \
-Ddri3=false \
-Ddrm=true \
-Dudev=false \
-Dudev_kms=false \
-Dhal=false \
-Dsystemd_logind=false \
-Dsystemd_notify=false \
-Dseatd_libseat=false \
-Dxdmcp=true \
-Dxdm-auth-1=true \
-Dipv6=auto \
-Ddpms=true \
-Dscreensaver=true \
-Dxres=true \
-Dxinerama=true \
-Dxv=true \
-Dxvmc=false \
-Ddga=false \
-Dxf86bigfont=false \
-Dsha1=libnettle \
-Ddefault_font_path=/usr/share/fonts/X11/misc,/usr/share/fonts/X11/TTF,/usr/share/fonts/X11/OTF,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi \
-Dxkb_dir=/usr/share/X11/xkb \
-Dxkb_output_dir=/tmp/xkb \
-Dxkb_default_rules=evdev \
Comment on lines +73 to +76
Copy link

Copilot AI Feb 1, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The server is configured to use -Dxkb_dir=/usr/share/X11/xkb, but the package doesn’t depend on xkeyboard-config (which provides that directory via /usr/share/X11/xkb) and likely also needs xkbcomp at runtime for keymap compilation. Without these runtime deps, Xorg startup and/or keyboard handling can fail on a minimal install.

Copilot uses AI. Check for mistakes.
-Dxkb_default_model=pc105 \
-Dxkb_default_layout=us \
-Dlog_dir=/var/log \
-Dmodule_dir=/usr/lib/xorg/modules \
-Ddocs=false \
-Ddevel-docs=false

define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/xorg
$(CP) $(PKG_INSTALL_DIR)/usr/include/xorg/*.h $(1)/usr/include/xorg/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* $(1)/usr/lib/ 2>/dev/null || true
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/*.pc $(1)/usr/lib/pkgconfig/
$(INSTALL_DIR) $(1)/usr/share/aclocal
$(CP) $(PKG_INSTALL_DIR)/usr/share/aclocal/*.m4 $(1)/usr/share/aclocal/ 2>/dev/null || true
endef

define Package/xlibre/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/X $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/Xorg $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* $(1)/usr/lib/ 2>/dev/null || true
$(INSTALL_DIR) $(1)/usr/lib/xorg/modules
$(CP) $(PKG_INSTALL_DIR)/usr/lib/xorg/modules/* $(1)/usr/lib/xorg/modules/
$(INSTALL_DIR) $(1)/usr/share/X11/xorg.conf.d
$(CP) $(PKG_INSTALL_DIR)/usr/share/X11/xorg.conf.d/* $(1)/usr/share/X11/xorg.conf.d/ 2>/dev/null || true
$(INSTALL_DIR) $(1)/var/log
endef

$(eval $(call BuildPackage,xlibre))
58 changes: 58 additions & 0 deletions libs/freetype/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=freetype
PKG_VERSION:=2.13.3
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@SF/freetype
PKG_HASH:=0550350666d427c74daeb85d5ac7bb353acba5f76956395995311a9c6f063289

PKG_MAINTAINER:=
PKG_LICENSE:=FTL GPL-2.0-or-later
PKG_LICENSE_FILES:=LICENSE.TXT

PKG_INSTALL:=1

PKG_BUILD_DEPENDS:=zlib

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/meson.mk

define Package/libfreetype
SECTION:=libs
CATEGORY:=Libraries
SUBMENU:=Video
TITLE:=FreeType font rendering library
URL:=https://freetype.org/
DEPENDS:=+zlib
endef

define Package/libfreetype/description
FreeType is a freely available software library to render fonts.
endef

MESON_ARGS += \
-Dzlib=enabled \
-Dbzip2=disabled \
-Dpng=disabled \
-Dharfbuzz=disabled \
-Dbrotli=disabled \
-Dmmap=enabled \
-Dtests=disabled

define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/freetype2
$(CP) $(PKG_INSTALL_DIR)/usr/include/freetype2/* $(1)/usr/include/freetype2/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfreetype.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/libfreetype/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libfreetype.so.* $(1)/usr/lib/
endef

$(eval $(call BuildPackage,libfreetype))
Loading