# Base image: Ubuntu 24.04 provides a stable environment for the ARM cross-compilation toolchain FROM ubuntu:24.04 # Install all dependencies required to cross-compile C code for the Raspberry Pi Pico (RP2040): # - cmake: build system generator used by the Pico SDK # - gcc-arm-none-eabi: ARM cross-compiler that produces binaries for the Pico's Cortex-M0+ CPU # - libnewlib-arm-none-eabi: C standard library implementation for bare-metal ARM targets # - build-essential: provides make and other essential build utilities # - git: needed to clone the Pico SDK and its submodules # - python3: required by the Pico SDK build scripts for UF2 generation and other tooling # - clangd: C/C++ language server used by the VS Code Dev Container for # intellisense (go-to-definition, hover types, autocomplete) - # must live INSIDE the container so it can resolve Pico SDK # headers under /opt/pico-sdk at their real paths RUN apt-get update && apt-get install -y \ cmake \ gcc-arm-none-eabi \ libnewlib-arm-none-eabi \ build-essential \ git \ python3 \ clangd \ && rm -rf /var/lib/apt/lists/* # Clone the official Raspberry Pi Pico SDK into the container. # The SDK provides hardware abstraction libraries, startup code, and linker scripts # needed to build firmware for the RP2040 microcontroller. # Submodules include tinyusb (USB stack) and other vendor-specific dependencies. RUN git clone https://github.com/raspberrypi/pico-sdk.git /opt/pico-sdk \ && cd /opt/pico-sdk \ && git submodule update --init # Tell CMake where to find the Pico SDK. The SDK's CMake scripts look for this # environment variable to locate platform files, toolchain config, and libraries. ENV PICO_SDK_PATH=/opt/pico-sdk # All build commands will run from /project, which is where the host source code # gets mounted via docker-compose volumes WORKDIR /project