Step 03 of 13
Getting the code (submodules are not optional)
The Ada runtime is assembled from two git submodules. Clone without them and the first build fails with a message about XTENSA_GNU_CONFIG that will not obviously mean “you forgot --recurse-submodules”.
Clone it
cd ~
git clone --recurse-submodules \
https://github.com/rowsail/ada-bare-metal-esp32s3.git
cd ada-bare-metal-esp32s3
Already cloned it the ordinary way? Repair it in place:
git submodule update --init --recursive
What the two submodules are
bb-runtimes— AdaCore's bare-board runtime sources, forked here to add anesp32s3board. This is the raw material the Ada runtime is generated from.xtensa-dynconfig— the Xtensa core-configuration plugin that GNAT's Xtensa back end loads at runtime to learn the shape of this particular core. Building it is what needs the host C compiler, and it happens exactly once.
What is in the tree
crates/
esp32s3_rts/ the GNAT runtime crate (3 profiles) + gen_runtime.sh
bb-runtimes/ AdaCore bb-runtimes fork with the esp32s3 board (submodule)
xtensa-dynconfig/ the Xtensa core-config plugin the toolchain needs
libs/
esp32s3_hal/ the reusable peripheral HAL + pure-Ada ext4/FAT16
examples/ the flashable examples (each owns its board.ads)
common/bare/ the shared FreeRTOS-free boot (bootloader, start.S, glue)
book/ the long-form guide (LaTeX sources + main.pdf)
x, export.sh the ./x dispatcher and the esp32-ada launcher
Two entry points matter for now. ./x at the repository root
drives every example inside the clone. export.sh turns the
clone into an SDK you can build your own projects against from anywhere on disk
— that is step 10.
Nothing is downloaded at build time except the Alire toolchains
themselves. The one exception is the optional Wi-Fi driver, whose lower-MAC and
PHY blobs are Apache-2.0 binaries fetched (not committed) by
tools/fetch-wifi-blobs.sh, pinned to exact upstream commits and
verified by sha256.