Skip to content

Commit 74490fa

Browse files
committed
containers: Provide SDCC as a separate image
Requires building the SDCC image before the EC development image. Updates base image to debian:trixie-20251208-slim. Signed-off-by: Tim Crawford <tcrawford@system76.com>
1 parent a0b5f93 commit 74490fa

3 files changed

Lines changed: 92 additions & 80 deletions

File tree

tools/containers/Makefile

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,35 @@ MAKEFLAGS += --silent
1111
endif
1212

1313
PODMAN := $(shell command -v podman)
14-
CONTAINER_TAG := $(shell git describe --always --abbrev=12)
14+
15+
.PHONY: all
16+
all: sdcc ec
17+
18+
# SDCC toolchain container
19+
20+
SDCC_REPO := https://svn.code.sf.net/p/sdcc/code
21+
SDCC_REV := 14648
22+
SDCC_VERSION := 4.4.0
23+
24+
.PHONY: sdcc
25+
sdcc:
26+
$(PODMAN) build \
27+
--tag system76/$@:$(SDCC_VERSION) \
28+
--build-arg=SDCC_REPO="$(SDCC_REPO)" \
29+
--build-arg=SDCC_REV="$(SDCC_REV)" \
30+
--build-arg=SDCC_VERSION="$(SDCC_VERSION)" \
31+
--file Containerfile \
32+
$@
33+
34+
# EC development container
35+
36+
DEVCONTAINER_TAG := $(shell git describe --always --abbrev=12)
37+
RUST_TOOLCHAIN := 1.85.0
1538

1639
.PHONY: ec
1740
ec:
1841
$(PODMAN) build \
19-
--tag system76/$@:$(CONTAINER_TAG) \
42+
--tag system76/$@:$(DEVCONTAINER_TAG) \
43+
--build-arg=RUST_TOOLCHAIN="$(RUST_TOOLCHAIN)" \
2044
--file Containerfile \
2145
$@

tools/containers/ec/Containerfile

Lines changed: 2 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,12 @@
11
# SPDX-License-Identifier: CC0-1.0
22
# SPDX-FileCopyrightText: NONE
33

4-
# A container for 8051 development using Small Device C Compiler.
5-
# SDCC: https://sdcc.sourceforge.net/
4+
# A container for System76 EC development.
65

7-
# NOTE: The repository is specified in the image name to make it explicit
8-
# which source is being trusted to provide the image.
9-
ARG CONTAINER_IMAGE="docker.io/library/debian:trixie-20250520-slim"
6+
ARG CONTAINER_IMAGE="localhost/system76/sdcc:4.4.0"
107

11-
ARG SDCC_REPO="https://svn.code.sf.net/p/sdcc/code"
12-
ARG SDCC_REV="14648"
13-
ARG SDCC_VERSION="4.4.0"
14-
15-
ARG RUST_TOOLCHAIN="1.85.0"
16-
17-
# Build SDCC toolchain
18-
FROM ${CONTAINER_IMAGE} as sdcc-build
19-
ARG SDCC_REPO
20-
ARG SDCC_REV
21-
ARG SDCC_VERSION
22-
WORKDIR /tmp
23-
24-
RUN apt-get --quiet update \
25-
&& apt-get --quiet install --no-install-recommends --assume-yes \
26-
autoconf \
27-
automake \
28-
bison \
29-
ca-certificates \
30-
flex \
31-
g++ \
32-
gcc \
33-
libboost-dev \
34-
make \
35-
subversion \
36-
zlib1g-dev \
37-
&& apt-get clean
38-
39-
RUN svn checkout \
40-
--depth infinity \
41-
--revision ${SDCC_REV} \
42-
${SDCC_REPO}/tags/sdcc-${SDCC_VERSION}/sdcc \
43-
sdcc
44-
45-
# Only the MCS-51 port is needed.
46-
RUN cd sdcc \
47-
&& sh ./configure \
48-
--disable-z80-port \
49-
--disable-z180-port \
50-
--disable-r2k-port \
51-
--disable-r2ka-port \
52-
--disable-r3ka-port \
53-
--disable-sm83-port \
54-
--disable-tlcs90-port \
55-
--disable-ez80_z80-port \
56-
--disable-z80n-port \
57-
--disable-ds390-port \
58-
--disable-ds400-port \
59-
--disable-pic14-port \
60-
--disable-pic16-port \
61-
--disable-hc08-port \
62-
--disable-s08-port \
63-
--disable-stm8-port \
64-
--disable-pdk13-port \
65-
--disable-pdk14-port \
66-
--disable-pdk15-port \
67-
--disable-mos6502-port \
68-
--disable-ucsim \
69-
--disable-sdcdb \
70-
--disable-non-free \
71-
--prefix= \
72-
&& make -j $(nproc) \
73-
&& make install DESTDIR=/opt/sdcc
74-
75-
# EC development environment
768
FROM ${CONTAINER_IMAGE}
77-
ARG SDCC_REV
78-
ARG SDCC_VERSION
799
ARG RUST_TOOLCHAIN
80-
COPY --from=sdcc-build /opt/sdcc /opt/sdcc
81-
ENV SDCC_REV "${SDCC_REV}"
82-
ENV SDCC_VERSION "${SDCC_VERSION}"
83-
ENV SDCC_PATH "/opt/sdcc"
84-
ENV PATH "${SDCC_PATH}/bin:$PATH"
8510

8611
RUN apt-get --quiet update \
8712
&& apt-get --quiet install --no-install-recommends --assume-yes \
@@ -104,7 +29,6 @@ RUN apt-get --quiet update \
10429
# a comma separated list as an argument with a space.
10530
# Ref: https://github.com/rust-lang/rustup/issues/4073
10631
RUN rustup toolchain install \
107-
--no-self-update \
10832
--target x86_64-unknown-linux-gnu,x86_64-unknown-uefi \
10933
--profile minimal \
11034
--component=clippy,rustfmt \
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# SPDX-License-Identifier: CC0-1.0
2+
# SPDX-FileCopyrightText: NONE
3+
4+
# A container for the Small Device C Compiler.
5+
# SDCC: https://sdcc.sourceforge.net/
6+
7+
ARG CONTAINER_IMAGE="docker.io/library/debian:trixie-20251208-slim"
8+
9+
# Build the SDCC toolchain.
10+
FROM ${CONTAINER_IMAGE} as sdcc-build
11+
ARG SDCC_REPO
12+
ARG SDCC_REV
13+
ARG SDCC_VERSION
14+
WORKDIR /tmp
15+
16+
# Install compile-time dependencies.
17+
# NOTE: SDCC 4.4.0 does not build with the default GCC (gcc-14).
18+
RUN apt-get update \
19+
&& apt-get install --no-install-recommends --assume-yes \
20+
automake \
21+
bison \
22+
ca-certificates \
23+
flex \
24+
g++-13 \
25+
gcc-13 \
26+
gputils \
27+
libboost-dev \
28+
make \
29+
subversion \
30+
zlib1g-dev \
31+
&& apt-get clean \
32+
&& rm -rf /var/lib/apt/lists/* \
33+
&& update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 50 \
34+
&& update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 50
35+
36+
RUN svn checkout \
37+
--depth infinity \
38+
--revision ${SDCC_REV} \
39+
${SDCC_REPO}/tags/sdcc-${SDCC_VERSION}/sdcc \
40+
sdcc
41+
42+
RUN cd sdcc \
43+
&& sh ./configure \
44+
--disable-non-free \
45+
--prefix= \
46+
&& make --jobs=4 \
47+
&& make install DESTDIR=/opt/sdcc
48+
49+
FROM ${CONTAINER_IMAGE}
50+
ARG SDCC_REV
51+
ARG SDCC_VERSION
52+
COPY --from=sdcc-build /opt/sdcc /opt/sdcc
53+
ENV SDCC_REV "${SDCC_REV}"
54+
ENV SDCC_VERSION "${SDCC_VERSION}"
55+
ENV SDCC_PATH "/opt/sdcc"
56+
ENV PATH "${SDCC_PATH}/bin:$PATH"
57+
58+
# Install run-time dependencies.
59+
RUN apt-get update \
60+
&& apt-get install --no-install-recommends --assume-yes \
61+
libc6 \
62+
libstdc++6 \
63+
&& apt-get clean \
64+
&& rm -rf /var/lib/apt/lists/*

0 commit comments

Comments
 (0)