4.3 KiB
UniversalisOS Canonical Test/Lint/Build Commands
Date: 2026-07-12
Status: ACTIVE
Location: kernel/uos-check.sh
Overview
The uos-check.sh script provides canonical commands for building, testing, and linting the UniversalisOS hypervisor. It replaces ad-hoc verification scripts with a standardized interface.
Quick Start
cd kernel/
./uos-check.sh help # Show all commands
./uos-check.sh build-core # Build core components (fast)
./uos-check.sh lint # Run lint checks
./uos-check.sh test # Build + boot smoke tests
Commands
build-core
Build core components only (for testing individual files). Fast, doesn't require full toolchain.
./uos-check.sh build-core
What it builds:
src/core/abi/uos_posix_abi.cppsrc/core/mm.cppsrc/core/scheduler.cpp
Exit codes:
- 0 = all components compile
- 1 = one or more components failed
build-all
Build all architectures (armv7, aarch64, riscv).
./uos-check.sh build-all
Note: May fail due to pre-existing issues in:
src/core/migration/device_state.cpp(unsupported architecture)src/core/adt/avl/adt_avl_common.c(type errors)
build-armv7 / build-aarch64 / build-riscv
Build a specific architecture.
./uos-check.sh build-armv7 # ARMv7 (qemu-arm-virt)
./uos-check.sh build-aarch64 # AArch64 (qemu-aarch64-virt)
./uos-check.sh build-riscv # RISC-V (polarfire)
test
Run all tests (build + boot smoke tests).
./uos-check.sh test
What it does:
- Builds all architectures
- Runs boot smoke tests for each architecture
- Verifies expected boot messages appear
Exit codes:
- 0 = all tests pass
- 1 = build failure
- 2 = test failure
lint
Run lint checks (format, static analysis).
./uos-check.sh lint
Checks:
- TODO/FIXME/HACK comments
- Trailing whitespace
- Tab characters
- Long lines (>120 chars)
Exit codes:
- 0 = lint checks completed (warnings allowed)
- 3 = lint failure
clean
Clean all build trees.
./uos-check.sh clean
Required Tools
ARMv7
arm-none-eabi-gccqemu-system-arm
AArch64
aarch64-linux-gnu-gccqemu-system-aarch64
RISC-V
riscv64-unknown-elf-gccqemu-system-riscv64
Installation (Fedora)
sudo dnf install gcc-arm-none-eabi gcc-aarch64-linux-gnu gcc-riscv64-unknown-elf \
qemu-system-arm qemu-system-aarch64 qemu-system-riscv
Pre-existing Build Issues
The following issues are not caused by recent changes and are documented here for reference:
1. device_state.cpp — Unsupported Architecture
src/core/migration/device_state.cpp:111:2: error: #error "migration/device_state: unsupported architecture"
Impact: ARMv7 full build fails
Workaround: Use build-core for component testing
2. adt_avl_common.c — Type Errors
src/core/adt/avl/adt_avl_common.c:71:5: error: unknown type name 'uos_adt_avl_t'
Impact: AArch64 full build fails
Workaround: Compile individual files directly
3. Missing RISC-V Toolchain
riscv64-unknown-elf-gcc: command not found
Impact: RISC-V builds fail
Workaround: Install toolchain or skip RISC-V builds
Integration with Development Workflow
Before Committing
./uos-check.sh lint # Check for style issues
./uos-check.sh build-core # Verify core components compile
After Major Changes
./uos-check.sh test # Full build + boot tests
Quick Verification
./uos-check.sh build-core # Fast component check
Ad-hoc Verification Scripts
For targeted verification of specific changes, use ad-hoc scripts in /tmp/hermes-verify-*.sh. These are temporary and should be cleaned up after use.
Example:
bash /tmp/hermes-verify-t812g.sh # Verify T8-1.2g changes
Future Improvements
- Add unit test framework
- Add code coverage reporting
- Add static analysis (clang-tidy, cppcheck)
- Add format checking (clang-format)
- Fix pre-existing build issues
- Add CI/CD integration
References
- Script:
kernel/uos-check.sh - Build System:
kernel/Makefile - Documentation:
kernel/README.md - AGENTS.md:
universalisos/AGENTS.md