lift_indicator_suite/.devcontainer/Dockerfile
Ezra Maccabee ec2c02b957 # 8
- Настроена отладка: работает если бинарник был предзагружен через (bootROM/booloader)
- TODO: заливать бинарник с помощью программатора
2026-03-19 19:26:03 +03:00

91 lines
No EOL
4.2 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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