Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

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

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.

Getting the code (submodules are not optional) · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

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

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.

Getting the code (submodules are not optional) · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

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

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.

Getting the code (submodules are not optional) · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

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

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.

Getting the code (submodules are not optional) · Bare-Metal Ada on the ESP32-S3
Bare-Metal Ada on the ESP32-S3 A step-by-step guide to running Ada on the ESP32-S3 with no ESP-IDF, no FreeRTOS, and no Python.

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

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.