60 lines
2.4 KiB
Plaintext
60 lines
2.4 KiB
Plaintext
# 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"] |