|
| 1 | +FROM ubuntu:24.04 |
| 2 | + |
| 3 | +ARG DEBIAN_FRONTEND=noninteractive |
| 4 | +ARG HPM_TOOLCHAIN_VERSION="v0.1.0" |
| 5 | +ARG HPM_TOOLCHAIN_ARCHIVE_BASENAME="hpm-riscv32-unknown-elf-linux-x64" |
| 6 | +ARG HPM_TOOLCHAIN_URL="" |
| 7 | +ARG HPM_TOOLCHAIN_SHA256="6a14d30ac29da5a23185db249d5f7b1f9e20bb2deb8d26302ba2baff0442f108" |
| 8 | + |
| 9 | +LABEL maintainer="2592509183@qq.com" \ |
| 10 | + description="Docker Image for XRobot HPM builds with the published mainline riscv32-unknown-elf GNU toolchain." \ |
| 11 | + org.opencontainers.image.version="${HPM_TOOLCHAIN_VERSION}" |
| 12 | + |
| 13 | +RUN apt-get update && \ |
| 14 | + apt-get upgrade -y --no-install-recommends && \ |
| 15 | + apt-get install -y --no-install-recommends \ |
| 16 | + ca-certificates \ |
| 17 | + xz-utils \ |
| 18 | + git \ |
| 19 | + curl \ |
| 20 | + sudo \ |
| 21 | + wget \ |
| 22 | + zip \ |
| 23 | + make \ |
| 24 | + net-tools \ |
| 25 | + usbutils \ |
| 26 | + nano \ |
| 27 | + gdb \ |
| 28 | + cmake \ |
| 29 | + ninja-build \ |
| 30 | + file \ |
| 31 | + clang-18 \ |
| 32 | + clangd \ |
| 33 | + clang-tidy \ |
| 34 | + gcc \ |
| 35 | + g++ \ |
| 36 | + python3 \ |
| 37 | + python3-tk \ |
| 38 | + python3-venv \ |
| 39 | + libgpiod-dev && \ |
| 40 | + rm -rf /var/lib/apt/lists/* |
| 41 | + |
| 42 | +RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100 && \ |
| 43 | + update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 100 |
| 44 | + |
| 45 | +RUN mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bk || true |
| 46 | + |
| 47 | +RUN ln -sf /usr/bin/python3 /usr/bin/python && \ |
| 48 | + curl -sS https://bootstrap.pypa.io/get-pip.py | python3 |
| 49 | + |
| 50 | +ENV XR_HPM_TOOLCHAIN_ROOT=/opt/hpm-riscv32-unknown-elf |
| 51 | +ENV PATH=${XR_HPM_TOOLCHAIN_ROOT}/bin:${PATH} |
| 52 | + |
| 53 | +RUN set -eux; \ |
| 54 | + toolchain_url="${HPM_TOOLCHAIN_URL:-https://github.com/Jiu-xiao/hpm-linux-gcc-release/releases/download/${HPM_TOOLCHAIN_VERSION}/${HPM_TOOLCHAIN_ARCHIVE_BASENAME}.tar.xz}"; \ |
| 55 | + archive="/tmp/${HPM_TOOLCHAIN_ARCHIVE_BASENAME}.tar.xz"; \ |
| 56 | + curl -L --fail --retry 3 -o "${archive}" "${toolchain_url}"; \ |
| 57 | + echo "${HPM_TOOLCHAIN_SHA256} ${archive}" | sha256sum -c -; \ |
| 58 | + tar -xf "${archive}" -C /opt; \ |
| 59 | + rm -f "${archive}"; \ |
| 60 | + mv "/opt/${HPM_TOOLCHAIN_ARCHIVE_BASENAME}" "${XR_HPM_TOOLCHAIN_ROOT}"; \ |
| 61 | + test -x "${XR_HPM_TOOLCHAIN_ROOT}/bin/riscv32-unknown-elf-gcc"; \ |
| 62 | + test -x "${XR_HPM_TOOLCHAIN_ROOT}/bin/riscv32-unknown-elf-g++"; \ |
| 63 | + test -x "${XR_HPM_TOOLCHAIN_ROOT}/bin/riscv32-unknown-elf-gdb"; \ |
| 64 | + for exe in "${XR_HPM_TOOLCHAIN_ROOT}"/bin/*; do \ |
| 65 | + ln -sf "$exe" "/usr/bin/$(basename "$exe")"; \ |
| 66 | + done; \ |
| 67 | + riscv32-unknown-elf-gcc --version | head -n 1; \ |
| 68 | + riscv32-unknown-elf-g++ --version | head -n 1; \ |
| 69 | + riscv32-unknown-elf-gdb --version | head -n 1 |
0 commit comments