mirror of
https://github.com/marcoallegretti/WEFT_OS.git
synced 2026-03-27 01:13:09 +00:00
98 lines
2.8 KiB
Markdown
98 lines
2.8 KiB
Markdown
|
|
# 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 (Ubuntu/Debian):
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
sudo apt-get install -y \
|
|||
|
|
libwayland-dev libxkbcommon-dev \
|
|||
|
|
libegl-dev libgles2-mesa-dev libgbm-dev libdrm-dev \
|
|||
|
|
libinput-dev libseat-dev libudev-dev libsystemd-dev \
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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:
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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:
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
bash infra/vm/build.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Run with QEMU:
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
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 for `weft-compositor`, `weft-servo-shell`, `weft-app-shell`
|
|||
|
|
- `servo-embed-linux` — `cargo check --features servo-embed` for servo-shell and app-shell
|