xserver/abi
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Joseph Crowell 82909ceadf ci: check-symbols: find server libraries, don't cancel driver jobs
ldd now searches the server's libdir, so libraries installed with the
server (libdrm in CI) are not reported as missing server symbols, and a
library still not found exits 2. One failing driver job no longer
cancels the others.

Signed-off-by: Joseph Crowell <joseph.w.crowell@gmail.com>
2026-11-15 13:21:53 +10:00
..
abigail-compare.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
build-driver.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
build-server.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
check-private-includes.py abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
check-symbols.sh ci: check-symbols: find server libraries, don't cancel driver jobs 2026-11-15 13:21:53 +10:00
common.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
gate-driver.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
meson.build abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
README.md abi: check-symbols: fail BIND_NOW modules that need other modules 2026-11-15 07:28:35 +10:00
run-matrix.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00
staged-pc.sh abi: install driver ABI check tools with the SDK 2026-11-15 04:48:56 +10:00

Driver ABI check tools

Scripts that let any Xorg module check itself against staged XLibre servers. They are installed with the server SDK; find them with:

pkg-config --variable=abi_tools_dir xorg-server

Each server is built with debug info and staged under ABI_WORK with DESTDIR, so nothing is installed into the system.

Script What it checks
run-matrix.sh Builds the module against every server in ABI_SERVERS and checks that every server symbol it needs is exported by each of them (built for one release, loaded into another).
gate-driver.sh Builds the committed tree (BEFORE_REF, default HEAD) and the working tree against each server, and fails if libabigail reports a changed layout of a server type the module uses.
check-symbols.sh One module against one staged server, or with --prefix <dir> one installed in <dir>; also fails a module linked with BIND_NOW that needs symbols only other modules define.
abigail-compare.sh One libabigail comparison; added types pass, removed symbols and changed layouts fail; --allow TYPE accepts a known change.
check-private-includes.py For meson modules: every server-internal header a source file includes must be needed by it.

build-server.sh, build-driver.sh, staged-pc.sh and common.sh are the helpers the scripts above use.

Environment

  • ABI_WORK: work directory (required); put it on disk, the servers take a few hundred MB each.
  • ABI_MODULE: the module inside a build directory, for run-matrix.sh and gate-driver.sh: src/<name>_drv.so for meson, src/.libs/<name>_drv.so for autotools.
  • ABI_DRIVER_SRC: the module's source tree (default: the git top level of the current directory).
  • ABI_SERVERS: server branches or tags (default: release/25.0 release/25.1 release/25.2 master).
  • XSERVER_SRC: a local xserver clone to take sources from instead of cloning from GitHub; XSERVER_REMOTE names its upstream remote.

Example, from a meson driver's source tree:

tools=$(pkg-config --variable=abi_tools_dir xorg-server)
ABI_WORK=$HOME/abi-work ABI_MODULE=src/amdgpu_drv.so "$tools/run-matrix.sh"
ABI_WORK=$HOME/abi-work ABI_MODULE=src/amdgpu_drv.so "$tools/gate-driver.sh"

Needs meson, ninja, git, pkg-config, binutils (nm) and libabigail (abidiff); autotools modules also need autoconf, automake and libtool.