- Replace Mesa-libEGL-devel and Mesa-libGLES-devel (do not exist on openSUSE) with libglvnd-devel (Khronos EGL/GLES dispatch headers) - Replace libseat-devel (does not exist on openSUSE) with seatd-devel Package names confirmed via rpmfind.net against Tumbleweed and Leap repositories.
2.8 KiB
Building WEFT OS
Prerequisites
Linux (x86_64 or aarch64). Building on Windows is supported for workspace validation only; runtime components require Linux kernel interfaces.
System packages (openSUSE):
sudo zypper install -y \
libwayland-devel libxkbcommon-devel \
libglvnd-devel libgbm-devel libdrm-devel \
libinput-devel seatd-devel libudev-devel systemd-devel \
pkg-config clang cmake python3
Rust toolchain: pinned in rust-toolchain.toml. Run rustup show to confirm the active toolchain matches.
Workspace crates (non-Servo)
cargo build --workspace \
--exclude weft-servo-shell \
--exclude weft-app-shell
These crates do not require Servo and build in under two minutes.
weft-compositor, weft-servo-shell, weft-app-shell (Linux)
cargo build -p weft-compositor
cargo build -p weft-servo-shell
cargo build -p weft-app-shell
Without --features servo-embed, the servo-shell and app-shell stubs compile and print READY without running an actual WebView. This is the default and the CI baseline.
Servo embedding (optional, slow)
cargo build -p weft-servo-shell --features servo-embed
cargo build -p weft-app-shell --features servo-embed
This fetches and compiles the Servo fork (github.com/marcoallegretti/servo, branch servo-weft). Expect 30–60 minutes on a clean build. Servo's dependencies include SpiderMonkey (C++), which requires clang and python3.
Demo apps (wasm32-wasip2)
Each demo is a standalone crate in examples/. Pre-built app.wasm binaries are committed. To rebuild:
rustup target add wasm32-wasip2
cd examples/org.weft.demo.counter
cargo build --release
# output: target/wasm32-wasip2/release/app.wasm
weft-runtime with Wasmtime
cargo build -p weft-runtime --features wasmtime-runtime,net-fetch
Without --features wasmtime-runtime, the runtime prints READY and exits (stub mode, used in CI on platforms without Linux system dependencies).
Signing packages
weft-pack generate-key ./keys
weft-pack sign ./examples/org.weft.demo.counter --key ./keys/weft-sign.key
weft-pack verify ./examples/org.weft.demo.counter --key ./keys/weft-sign.pub
NixOS VM (requires Nix with flakes)
Build the VM image:
bash infra/vm/build.sh
Run with QEMU:
bash infra/vm/run.sh
See infra/nixos/weft-packages.nix for the package derivations. The outputHashes entry for the Servo git dependency must be filled in before the servo-embed packages will build under Nix.
CI
Three jobs run on every push to main and on pull requests:
cross-platform— fmt, clippy, tests on Ubuntu and Windows (excludes Wayland crates)linux-only— clippy and tests forweft-compositor,weft-servo-shell,weft-app-shellservo-embed-linux—cargo check --features servo-embedfor servo-shell and app-shell