Files
sprout/DEVELOPMENT.md

1.8 KiB

Sprout Development Guide

This guide is a work in progress.

Development Setup

You can use any Rust development environment to develop Sprout. Rustup is recommended as the Rust toolchain manager to manage Rust versions and targets. We currently only support x86_64-unknown-uefi and aarch64-unknown-uefi targets.

To test your changes in QEMU, please run ./hack/dev/boot.sh, you can specify x86_64 or aarch64 as an argument to boot.sh to boot the specified architecture.

Crate Structure

Sprout is split into multiple crates:

  • edera-sprout-boot as crates/boot: Bootloader entrypoint for Sprout.
  • edera-sprout-build at crates/build: Build logic for Sprout.
  • edera-sprout-config at crates/config: Serialization structures for the Sprout configuration file.
  • edera-sprout-eficore at crates/eficore: Core library for Sprout EFI code.

It is intended that overtime Sprout will be split into even more crates.

Hack Scripts

You can use the ./hack scripts to run common development tasks:

./hack/build.sh

Builds the Sprout binary for the target that would support your current machine.

./hack/assemble.sh

Builds both x86_64 and aarch64 binaries into target/assemble.

./hack/clean.sh

Cleans the target directory and any docker images that were built.

./hack/format.sh

Formats the code using rustfmt and shell scripts with shfmt.

./hack/autofix.sh

Applies Clippy and rustfmt fixes to the code, and formats shell scripts with shfmt.

Dev Scripts

./hack/dev/build.sh

Build Sprout as OCI images using Docker, including a kernel, initramfs, xen, and other supporting files.

./hack/dev/boot.sh

Boot Sprout's dev environment using QEMU for testing. This will let you test your changes in a real environment booting Alpine Linux with an initramfs.