- Настроена отладка: работает если бинарник был предзагружен через (bootROM/booloader) - TODO: заливать бинарник с помощью программатора
91 lines
No EOL
4.2 KiB
Docker
91 lines
No EOL
4.2 KiB
Docker
# syntax=docker/dockerfile:1
|
||
|
||
# =============================================================================
|
||
# Stage 1 — toolchain
|
||
# Скачиваем ARM GCC тулчейн. Этот слой кэшируется надолго:
|
||
# инвалидируется только при изменении TOOLCHAIN_VERSION.
|
||
# =============================================================================
|
||
FROM ubuntu:22.04@sha256:3ba65aa20f86a0fad9df2b2c259c613df006b2e6d0bfcc8a146afb8c525a9751 AS toolchain
|
||
|
||
ARG TOOLCHAIN_VERSION=13.3.rel1
|
||
|
||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||
wget xz-utils ca-certificates \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
RUN set -eux && \
|
||
UNAME_ARCH="$(uname -m)" && \
|
||
case "${UNAME_ARCH}" in \
|
||
"x86_64") HOST_ARCH="x86_64" ;; \
|
||
"aarch64") HOST_ARCH="aarch64" ;; \
|
||
*) echo "Unsupported arch: ${UNAME_ARCH}" && exit 1 ;; \
|
||
esac && \
|
||
wget -qO- \
|
||
"https://developer.arm.com/-/media/Files/downloads/gnu/${TOOLCHAIN_VERSION}/binrel/arm-gnu-toolchain-${TOOLCHAIN_VERSION}-${HOST_ARCH}-arm-none-eabi.tar.xz" \
|
||
| tar -xJ -C /opt && \
|
||
ln -s /opt/arm-gnu-toolchain-${TOOLCHAIN_VERSION}-${HOST_ARCH}-arm-none-eabi /opt/arm-toolchain
|
||
|
||
|
||
# =============================================================================
|
||
# Stage 2 — dev
|
||
# Устанавливаем инструменты разработки поверх готового тулчейна.
|
||
# Этот слой меняется чаще (обновление clang, cmake и т.д.),
|
||
# но слой Stage 1 при этом не инвалидируется и берётся из кэша.
|
||
# =============================================================================
|
||
FROM toolchain AS dev
|
||
|
||
LABEL maintainer="von.akimov@gmail.com" \
|
||
version="0.1.1"
|
||
|
||
ENV DEBIAN_FRONTEND=noninteractive
|
||
|
||
ENV PATH="/opt/arm-toolchain/bin:${PATH}"
|
||
|
||
# Устанавливаем LLVM GPG ключ и репозиторий (llvm >= 16 для поддержки If в .clangd), затем все dev-инструменты
|
||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||
gnupg ca-certificates wget && \
|
||
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key \
|
||
| gpg --dearmor -o /usr/share/keyrings/llvm.gpg && \
|
||
echo "deb [signed-by=/usr/share/keyrings/llvm.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \
|
||
> /etc/apt/sources.list.d/llvm.list && \
|
||
apt-get update && apt-get install -y --no-install-recommends \
|
||
curl git cmake ninja-build bear \
|
||
python3 python3-pip \
|
||
clang-17 clangd-17 libclang-rt-17-dev clang-tidy-17 clang-format-17 \
|
||
gdb-multiarch \
|
||
build-essential \
|
||
libncurses5 \
|
||
&& update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-17 100 \
|
||
&& update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100 \
|
||
&& update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-17 100 \
|
||
&& update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-17 100 \
|
||
&& pip3 install --no-cache-dir cmake-format==0.6.13 \
|
||
&& ln -s /usr/bin/clangd /usr/local/bin/clangd \
|
||
&& ln -s /usr/bin/clang /usr/local/bin/clang \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
|
||
# uv — менеджер Python-окружений для spsdk и других host-инструментов.
|
||
# spsdk НЕ ставится через pip напрямую — версия фиксируется в tools/host/uv.lock.
|
||
# uv sync в postCreateCommand подтянет нужную версию автоматически.
|
||
ARG UV_VERSION=0.5.0
|
||
RUN curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR=/usr/local/bin sh
|
||
|
||
ARG JUST_VERSION=1.36.0
|
||
|
||
RUN curl -sSf https://just.systems/install.sh \
|
||
| bash -s -- --tag ${JUST_VERSION} --to /usr/local/bin
|
||
|
||
ARG USER_ID=1000
|
||
ARG GROUP_ID=1000
|
||
ARG WORKSPACE_PATH="/workspace"
|
||
|
||
# Создаем группу/пользователя с UID хоста
|
||
RUN groupadd --gid $GROUP_ID devgroup && \
|
||
useradd --uid $USER_ID --gid devgroup \
|
||
--create-home --shell /bin/bash devuser && \
|
||
mkdir -p $WORKSPACE_PATH && \
|
||
chown -R devuser:devgroup $WORKSPACE_PATH
|
||
|
||
USER devuser
|
||
WORKDIR $WORKSPACE_PATH |