Common issues and solutions for building, testing, and running OASIS_OS.
The desktop backend (oasis-backend-sdl) compiles SDL3 from bundled source via cmake. You need cmake, a C++ compiler, and platform development headers.
Debian / Ubuntu:
sudo apt install cmake g++ make libxtst-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxkbcommon-dev \
libwayland-dev libdecor-0-dev libasound2-dev libpulse-dev \
libdbus-1-dev libudev-devFedora:
sudo dnf install cmake gcc-c++ make libXtst-devel libX11-devel \
libXext-devel libXrandr-devel libXcursor-devel libXi-devel \
libXScrnSaver-devel libxkbcommon-devel wayland-devel \
libdecor-devel alsa-lib-devel pulseaudio-libs-devel \
dbus-devel systemd-develmacOS (Homebrew):
brew install cmakeArch Linux:
sudo pacman -S cmake base-devel libxtst libxrandr libxcursor libxi \
libxss libxkbcommon wayland libdecor alsa-lib libpulseIf cmake fails with Couldn't find dependency package for XTEST (or similar), install the missing X11 dev package (e.g. libxtst-dev on Debian/Ubuntu).
The PSP backend is excluded from the workspace and requires:
- Rust nightly toolchain -- the
mipsel-sony-psptarget uses-Z build-std. - cargo-psp --
cargo install cargo-psp.
Build the EBOOT:
cd crates/oasis-backend-psp
RUST_PSP_BUILD_STD=1 cargo +nightly psp --releaseBuild the kernel PRX plugin:
cd crates/oasis-plugin-psp
RUST_PSP_BUILD_STD=1 cargo +nightly psp --releaseLLVM on mipsel-sony-psp can emit calls to memcpy/memset inside their own implementations, causing infinite recursion. The workaround is manual byte-copy loops instead of slice copies in hot paths. If you see a stack overflow or hang on PSP startup, check for slice operations in unsafe blocks.
PPSSPP is used for headless screenshot testing in CI. The Docker Compose service handles setup automatically:
# Build the PPSSPP container (one-time)
docker compose --profile psp build ppsspp
# Run headless test
docker compose --profile psp run --rm -e PPSSPP_HEADLESS=1 ppsspp /roms/release/EBOOT.PBPThe PPSSPP container uses runtime: nvidia for GPU-accelerated rendering. Requirements:
- NVIDIA GPU with drivers installed on the host
nvidia-container-toolkitpackage installed- Docker configured to use the nvidia runtime
If you do not have an NVIDIA GPU, edit docker-compose.yml to remove runtime: nvidia and the NVIDIA_* environment variables. PPSSPP will fall back to software rendering (slower but functional for testing).
For GUI mode (non-headless), the container needs X11 access:
xhost +local:docker
docker compose --profile psp run --rm ppsspp /roms/release/EBOOT.PBPThe rust-ci container runs as ${USER_ID}:${GROUP_ID} (defaulting to 1000:1000). If your host UID differs, set the variables:
USER_ID=$(id -u) GROUP_ID=$(id -g) docker compose --profile ci run --rm rust-ci cargo build --workspaceThe CI container stores cargo artifacts in a Docker volume (cargo-registry-cache) mounted at /tmp/cargo. If you get stale dependency errors, prune the volume:
docker volume rm oasis-os_cargo-registry-cacheAfter changing dependencies in Cargo.toml or updating the Dockerfile:
docker compose --profile ci build rust-ciCMake Error: Couldn't find dependency package for XTEST
Install the missing X11/system development headers for your platform (see "SDL3 Build Dependencies" above). Common missing packages on Debian/Ubuntu: libxtst-dev, libasound2-dev, libpulse-dev.
CI runs cargo clippy --workspace -- -D warnings. Any warning fails the build. Fix all warnings before pushing:
cargo clippy --workspace -- -D warningsThis method requires Rust 1.91.0+. Update your toolchain:
rustup update stableerror: toolchain 'nightly' is not installed
Install it:
rustup toolchain install nightlySet RUST_LOG for debug output:
RUST_LOG=debug cargo run -p oasis-appLevels: error, warn, info, debug, trace. You can filter by crate:
RUST_LOG=oasis_core=debug,oasis_browser=trace cargo run -p oasis-appRun tests for one crate at a time to isolate failures:
cargo test -p oasis-core
cargo test -p oasis-terminal
cargo test -p oasis-browserRun a single test by name:
cargo test --workspace -- test_nameTake screenshots of all skins for visual regression:
cargo run -p oasis-app --bin oasis-screenshotScreenshots are saved to the screenshots/ directory.
If CI fails on formatting:
# Check what's wrong
cargo fmt --all -- --check
# Auto-fix
cargo fmt --all