ebuild is a unified embedded build system written in Python. You describe a
project in a single build.yaml; ebuild resolves the dependency and toolchain
graph and drives an underlying build backend, then extends into firmware and
system-image workflows for embedded targets. It is part of the
EmbeddedOS (EoS) ecosystem. (ebuild here
is the EoS build tool and is unrelated to Gentoo's ebuild format.)
New here? See demo.md — a 5-minute, self-contained walkthrough
that lists the prerequisites (Python, gcc, and the ninja pip package),
then builds and runs a tiny "thermostat" C program end-to-end via ebuild build. A troubleshooting appendix covers no-root / PEP 668 environments and
building without a system compiler.
Observed in the source tree:
- Backend dispatch — auto-detects the project's build system and dispatches
to CMake, Make, Meson, Cargo, or Kbuild, or generates a Ninja build
(
ebuild/build/dispatch.py,ebuild/build/ninja_backend.py). Per the package metadata, its target scope also includes Buildroot, Zephyr, FreeRTOS, and NuttX. - Package graph — install and list project packages
(
ebuild add,ebuild list-packages). - Firmware & flashing — build RTOS firmware and flash images to targets
(
ebuild firmware,ebuild flash;ebuild/firmware/). - System images — root filesystem, kernel, and disk-image assembly
(
ebuild system;ebuild/system/). - Project scaffolding — generate projects and boards from templates
(
ebuild new,ebuild generate-project,ebuild generate-board,ebuild generate-boot). - Layers & recipes — reusable board/OS composition under
layers/andrecipes/.
| Path | Contents |
|---|---|
ebuild/ |
The Python package: cli/, build/, core/, system/, firmware/, deps/, packages/, plugins/, eos_ai/ |
core/ |
Native support components (e.g. eboot/) |
examples/ |
hello_world, linux_image, multi_target, rtos_firmware, cortex_r5_safety, eradar360, with_packages |
templates/ |
Project/board templates used by the generators |
recipes/, layers/ |
Reusable build recipes and board/OS layers |
hardware/ |
Board/hardware definitions |
sdk/ |
SDK generation support |
tools/ |
Helper scripts |
docs/ |
Documentation (published with MkDocs) |
Requires Python 3.8+.
pip install -e . # from the repo root
# or:
./install.sh # puts the 'ebuild' command on your PATH
./install.sh --check # verify the installationRuntime dependencies (click, pyyaml, ninja) are installed automatically.
Note the ninja pip package is required — a system ninja binary alone is
not enough, because ebuild invokes python -m ninja.
ebuild info # show what ebuild parsed from build.yaml
ebuild build # resolve and build (auto-detects the backend)
ebuild clean # remove build artifacts
ebuild --versionAdditional commands: configure, install, add, list-packages,
pipeline, system, firmware, flash, new, generate-project,
generate-board, generate-boot, analyze, setup, and the repos group
(status, update, set-url, set-branch, link, unlink). Run
ebuild --help for the full list.
pip install -e ".[dev]"
pytest # configuration in pytest.iniDocs live under docs/ and are published with MkDocs (mkdocs.yml):
https://embeddedos-org.github.io/ebuild/.
MIT — see LICENSE.
Part of embeddedos-org.