# Dockerfile for CI/CD pipeline (GitLab, GitHub Actions, etc.) FROM mcr.microsoft.com/devcontainers/cpp:dev-ubuntu24.04 WORKDIR /apps # Install prerequisites RUN apt-get update && \ apt-get install -y --no-install-recommends \ git python3 wget unzip \ cmake build-essential ninja-build \ doxygen graphviz \ iputils-ping \ apt-transport-https ca-certificates curl software-properties-common \ libx11-xcb1 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 \ libxcb-render-util0 libxcb-shape0 libxcb-sync1 libxcb-util1 \ libxcb-xfixes0 libxcb-xkb1 libxkbcommon-x11-0 libxkbcommon0 xkb-data \ python3-pip python3.12-venv \ && rm -rf /var/lib/apt/lists/* # Install ARM toolchain RUN wget https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v13.2.1-1.1/xpack-arm-none-eabi-gcc-13.2.1-1.1-linux-x64.tar.gz -O gcc-arm-none-eabi.tar.gz && \ mkdir /opt/gcc-arm-none-eabi-13.2.1-1.1 && \ tar -xvzf gcc-arm-none-eabi.tar.gz -C /opt/gcc-arm-none-eabi-13.2.1-1.1 --strip-components 1 && \ rm gcc-arm-none-eabi.tar.gz && \ ln -s /opt/gcc-arm-none-eabi-13.2.1-1.1/bin/* /usr/local/bin # Use the ARM gcov for coverage RUN rm /usr/bin/gcov && \ ln -s /opt/gcc-arm-none-eabi-13.2.1-1.1/bin/arm-none-eabi-gcov /usr/bin/gcov # Install SEGGER J-Link RUN curl -d "accept_license_agreement=accepted&submit=Download+software" -X POST -O "https://www.segger.com/downloads/jlink/JLink_Linux_V810g_x86_64.deb" && \ dpkg --unpack JLink_Linux_V810g_x86_64.deb && \ rm -f /var/lib/dpkg/info/jlink.postinst && \ dpkg --configure jlink && \ apt-get install -yf && \ rm JLink_Linux_V810g_x86_64.deb # Install Pico SDK RUN git clone https://github.com/raspberrypi/pico-sdk.git --branch master && \ cd pico-sdk && \ git checkout tags/2.0.0 && \ git submodule update --init ENV PICO_SDK_PATH=/apps/pico-sdk/ # Patch the SDK for semihosting file I/O (needed for gcov) COPY newlib_interface.c.patched ${PICO_SDK_PATH}/src/rp2_common/pico_clib_interface/newlib_interface.c # Build picotool RUN git clone https://github.com/raspberrypi/picotool.git --branch master && \ cd picotool && \ git checkout tags/2.0.0 && \ git submodule update --init && \ mkdir build && cd build && cmake ../ && make -j8 && \ cmake --install . # Default command (overridden by CI/CD) CMD ["bash"]