Add Containerfile for development
Add a command to create a Debian-based container with the coreboot toolchains, SDCC and Rust installed in order to minimize the setup time of a container-based workflow, such as CI. make -C containers podman run -it --rm \ -v $PWD:/workspace:Z \ -v ~/.ccache:/root/.ccache:Z \ system76/firmware-open:latest \ ./scripts/build.sh oryp8 A locally built image is 2.86 GiB. Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
parent
4b32a3e9f5
commit
0a8a2b9349
22
containers/Makefile
Normal file
22
containers/Makefile
Normal file
@ -0,0 +1,22 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
# Disable built-in rules and variables
|
||||
MAKEFLAGS += --no-builtin-rules --no-builtin-variables
|
||||
.SUFFIXES:
|
||||
|
||||
# Default to silent builds
|
||||
ifneq ($(VERBOSE),1)
|
||||
MAKEFLAGS += --silent
|
||||
.SILENT:
|
||||
endif
|
||||
|
||||
PODMAN := $(shell command -v podman)
|
||||
|
||||
CONTAINER_TAG := latest
|
||||
|
||||
.PHONY: firmware-open
|
||||
firmware-open:
|
||||
$(PODMAN) build \
|
||||
--tag system76/$@:$(CONTAINER_TAG) \
|
||||
--file Containerfile \
|
||||
$@
|
166
containers/firmware-open/Containerfile
Normal file
166
containers/firmware-open/Containerfile
Normal file
@ -0,0 +1,166 @@
|
||||
# Container for building System76 Open Firmware
|
||||
|
||||
ARG CONTAINER_IMAGE="docker.io/library/debian:12.5-slim"
|
||||
|
||||
ARG COREBOOT_REPO="https://github.com/coreboot/coreboot.git"
|
||||
ARG COREBOOT_COMMIT="24.02"
|
||||
|
||||
ARG SDCC_REPO="https://svn.code.sf.net/p/sdcc/code"
|
||||
ARG SDCC_REV="14648"
|
||||
ARG SDCC_VERSION="4.4.0"
|
||||
|
||||
ARG RUST_DEFAULT_TOOLCHAIN="1.77.2"
|
||||
ARG RUST_TOOLCHAIN="nightly-2023-09-07"
|
||||
|
||||
# Build coreboot toolchains
|
||||
FROM ${CONTAINER_IMAGE} as crossgcc-build
|
||||
ARG COREBOOT_COMMIT
|
||||
ARG COREBOOT_REPO
|
||||
WORKDIR /tmp
|
||||
|
||||
RUN apt-get --quiet update && \
|
||||
apt-get --quiet install --no-install-recommends --assume-yes \
|
||||
bash \
|
||||
bison \
|
||||
bzip2 \
|
||||
ca-certificates \
|
||||
curl \
|
||||
flex \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
gnat \
|
||||
libssl-dev \
|
||||
m4 \
|
||||
make \
|
||||
patch \
|
||||
pkgconf \
|
||||
python-is-python3 \
|
||||
python3 \
|
||||
tar \
|
||||
xz-utils \
|
||||
zlib1g-dev && \
|
||||
apt-get clean
|
||||
|
||||
RUN git clone ${COREBOOT_REPO} && \
|
||||
cd coreboot && \
|
||||
git checkout ${COREBOOT_COMMIT}
|
||||
|
||||
RUN make -C coreboot \
|
||||
CPUS=$(nproc) BUILD_LANGUAGES=ada,c,c++ DEST=/opt/xgcc \
|
||||
crossgcc-i386 crossgcc-x64 && \
|
||||
rm -rf coreboot
|
||||
|
||||
# Build SDCC
|
||||
FROM ${CONTAINER_IMAGE} as sdcc-build
|
||||
ARG SDCC_REPO
|
||||
ARG SDCC_REV
|
||||
ARG SDCC_VERSION
|
||||
WORKDIR /tmp
|
||||
|
||||
RUN apt-get --quiet update && \
|
||||
apt-get --quiet install --no-install-recommends --assume-yes \
|
||||
autoconf \
|
||||
automake \
|
||||
bison \
|
||||
ca-certificates \
|
||||
flex \
|
||||
g++ \
|
||||
gcc \
|
||||
libboost-dev \
|
||||
make \
|
||||
subversion \
|
||||
zlib1g-dev && \
|
||||
apt-get clean
|
||||
|
||||
RUN svn checkout \
|
||||
--depth infinity \
|
||||
--revision ${SDCC_REV} \
|
||||
${SDCC_REPO}/tags/sdcc-${SDCC_VERSION}/sdcc \
|
||||
sdcc
|
||||
|
||||
# Only the MCS-51 port is needed.
|
||||
RUN cd sdcc && \
|
||||
sh ./configure \
|
||||
--disable-z80-port \
|
||||
--disable-z180-port \
|
||||
--disable-r2k-port \
|
||||
--disable-r2ka-port \
|
||||
--disable-r3ka-port \
|
||||
--disable-sm83-port \
|
||||
--disable-tlcs90-port \
|
||||
--disable-ez80_z80-port \
|
||||
--disable-z80n-port \
|
||||
--disable-ds390-port \
|
||||
--disable-ds400-port \
|
||||
--disable-pic14-port \
|
||||
--disable-pic16-port \
|
||||
--disable-hc08-port \
|
||||
--disable-s08-port \
|
||||
--disable-stm8-port \
|
||||
--disable-pdk13-port \
|
||||
--disable-pdk14-port \
|
||||
--disable-pdk15-port \
|
||||
--disable-mos6502-port \
|
||||
--disable-ucsim \
|
||||
--disable-sdcdb \
|
||||
--disable-non-free \
|
||||
--prefix= && \
|
||||
make -j $(nproc) && \
|
||||
make install DESTDIR=/opt/sdcc
|
||||
|
||||
# Set up environment for building firmware-open
|
||||
FROM ${CONTAINER_IMAGE}
|
||||
ARG RUST_DEFAULT_TOOLCHAIN
|
||||
ARG RUST_TOOLCHAIN
|
||||
COPY --from=crossgcc-build /opt/xgcc /opt/xgcc
|
||||
COPY --from=sdcc-build /opt/sdcc /opt/sdcc
|
||||
ENV COREBOOT_COMMIT "${COREBOOT_COMMIT}"
|
||||
ENV XGCCPATH "/opt/xgcc/bin"
|
||||
ENV SDCC_PATH "/opt/sdcc"
|
||||
ENV SDCC_REV "${SDCC_REV}"
|
||||
ENV SDCC_VERSION "${SDCC_VERSION}"
|
||||
ENV CARGO_HOME "/root/.cargo"
|
||||
ENV PATH "$XGCCPATH:$SDCC_PATH/bin:$CARGO_HOME/bin:$PATH"
|
||||
|
||||
RUN apt-get --quiet update && \
|
||||
apt-get --quiet install --no-install-recommends --assume-yes \
|
||||
bash \
|
||||
binutils \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
cmake \
|
||||
curl \
|
||||
dosfstools \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
git-lfs \
|
||||
libnss3-dev \
|
||||
libssl-dev \
|
||||
make \
|
||||
mtools \
|
||||
parted \
|
||||
pkgconf \
|
||||
python-is-python3 \
|
||||
python3 \
|
||||
udev \
|
||||
uuid-dev \
|
||||
xxd \
|
||||
&& apt-get clean
|
||||
|
||||
RUN curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs \
|
||||
| sh -s -- -y --profile minimal --default-toolchain ${RUST_DEFAULT_TOOLCHAIN} && \
|
||||
rustup toolchain install \
|
||||
--profile minimal \
|
||||
--component=clippy,rust-src,rustfmt \
|
||||
${RUST_TOOLCHAIN}
|
||||
|
||||
# XXX: firmware-setup is stuck on 2023-01-21
|
||||
RUN rustup toolchain install \
|
||||
--profile minimal \
|
||||
--component=clippy,rust-src,rustfmt \
|
||||
nightly-2023-01-21
|
||||
|
||||
WORKDIR /workspace
|
||||
CMD ["bash"]
|
Loading…
x
Reference in New Issue
Block a user