Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 141 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,125 @@ jobs:
with:
driver: docker

- name: Build tinybuild-apks
uses: docker/build-push-action@v2
with:
context: ./tinybuild-base
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-apks:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-apks:${{ env.VERSION_TAG }}
build-args: |

- name: Build tinybuild-base
uses: docker/build-push-action@v2
with:
context: ./tinybuild-base
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-base:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-base:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build smallbuild-base
uses: docker/build-push-action@v2
with:
context: ./smallbuild-base
tags: |
${{ env.DOCKER_REGISTRY }}/smallbuild-base:latest
${{ env.DOCKER_REGISTRY }}/smallbuild-base:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build tinybuild-arm
uses: docker/build-push-action@v2
with:
context: ./tinybuild-arm
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-arm:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-arm:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build smallbuild-arm
uses: docker/build-push-action@v2
with:
context: ./smallbuild-arm
tags: |
${{ env.DOCKER_REGISTRY }}/smallbuild-arm:latest
${{ env.DOCKER_REGISTRY }}/smallbuild-arm:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build tinybuild-avr
uses: docker/build-push-action@v2
with:
context: ./tinybuild-avr
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-avr:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-avr:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build tinybuild-msp430
uses: docker/build-push-action@v2
with:
context: ./tinybuild-msp430
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-msp430:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-msp430:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build smallbuild-msp430
uses: docker/build-push-action@v2
with:
context: ./smallbuild-msp430
tags: |
${{ env.DOCKER_REGISTRY }}/smallbuild-msp430:latest
${{ env.DOCKER_REGISTRY }}/smallbuild-msp430:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build tinybuild-native64
uses: docker/build-push-action@v2
with:
context: ./tinybuild-native64
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-native64:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-native64:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build smallbuild-native64
uses: docker/build-push-action@v2
with:
context: ./smallbuild-native64
tags: |
${{ env.DOCKER_REGISTRY }}/smallbuild-native64:latest
${{ env.DOCKER_REGISTRY }}/smallbuild-native64:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build tinybuild-risc-v
uses: docker/build-push-action@v2
with:
context: ./tinybuild-risc-v
tags: |
${{ env.DOCKER_REGISTRY }}/tinybuild-risc-v:latest
${{ env.DOCKER_REGISTRY }}/tinybuild-risc-v:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build smallbuild-risc-v
uses: docker/build-push-action@v2
with:
context: ./smallbuild-risc-v
tags: |
${{ env.DOCKER_REGISTRY }}/smallbuild-risc-v:latest
${{ env.DOCKER_REGISTRY }}/smallbuild-risc-v:${{ env.VERSION_TAG }}
build-args: |
DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}

- name: Build riotdocker-base
uses: docker/build-push-action@v2
with:
Expand Down Expand Up @@ -184,6 +303,28 @@ jobs:
- name: Push Images
if: "${{ github.ref == 'refs/heads/master' }}"
run: |
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-base:latest
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-base:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-base:latest
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-base:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-arm:latest
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-arm:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-arm:latest
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-arm:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-avr:latest
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-avr:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-msp430:latest
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-msp430:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-msp430:latest
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-msp430:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-native64:latest
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-native64:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-native64:latest
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-native64:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-risc-v:latest
docker image push ${{ env.DOCKER_REGISTRY }}/tinybuild-risc-v:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-risc-v:latest
docker image push ${{ env.DOCKER_REGISTRY }}/smallbuild-risc-v:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/riotdocker-base:latest
docker image push ${{ env.DOCKER_REGISTRY }}/riotdocker-base:${{ env.VERSION_TAG }}
docker image push ${{ env.DOCKER_REGISTRY }}/static-test-tools:latest
Expand Down
39 changes: 39 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,41 @@
# riotbuild

Dockerfiles for creating build environment for building RIOT projects.

# `tinybuild-*`` and `smallbuild-*`` Containers

Compared to the full fledges `riotbuild` container, the `smallbuild-*`
containers only a single architecture. The `tinybuild-*` are trimmed down
even more by only supporting C code by dropping the C++ and rust toolchains.
(Except for AVR, which always provides C++ support.)

## Platform Support

| Image | Size | `native32` | `native64` | ARM7 Boards | Cortex M Boards | RISC-V Boards | AVR8 Boards | MSP430 Boards | ESP* Xtensa Boards | ESP* RISC-V Boards |
| `riotbuild` | ~ 13.5 GB | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| `smallbuild-arm` | ~ 4.3 GB | | | ✔ | ✔ | | | | | |
| `smallbuild-msp430` | ~ 0.5 GB | | | | | | |✔ | | |
| `smallbuild-native64` | ~ 2.4 GB | | ✔ | | | | | | | |
| `smallbuild-risc-v` | ~ 3.3 GB | | | | | ✔ | | | | |
| `tinybuild-arm` | ~ 1.2 GB | | | | | ✔ | | | | |
| `tinybuild-avr` | ~ 0.4 GB | | | | | | ✔ | | | |
| `tinybuild-msp430` | ~ 0.4 GB | | | | | | |✔ | | |
| `tinybuild-native64` | ~ 0.3 GB | | ✔ | | | | | | | |
| `tinybuild-risc-v` | ~ 1.1 GB | | | | | ✔ | | | | |

## Language Support

| Image | Size | C | C++ | rust |
| `riotbuild` | ~ 13.5 GB | ✔ | ✔ [1] | ✔ [2] |
| `smallbuild-arm` | ~ 4.3 GB | ✔ | ✔ | ✔ |
| `smallbuild-msp430` | ~ 0.5 GB | ✔ | ✔ | |
| `smallbuild-native64` | ~ 2.4 GB | ✔ | ✔ | ✔ |
| `smallbuild-risc-v` | ~ 3.3 GB | ✔ | ✔ | ✔ |
| `tinybuild-arm` | ~ 1.2 GB | ✔ | | |
| `tinybuild-avr` | ~ 0.4 GB | ✔ | ✔ [1] | |
| `tinybuild-msp430` | ~ 0.4 GB | ✔ | | |
| `tinybuild-native64` | ~ 0.3 GB | ✔ | | |
| `tinybuild-risc-v` | ~ 1.1 GB | ✔ | | |

1. On AVR, C++ is supported but libstdc++ is not
2. rust is not provided for some architectures
20 changes: 20 additions & 0 deletions smallbuild-arm/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
ARG DOCKER_REGISTRY="docker.io/riot"
FROM ${DOCKER_REGISTRY}/smallbuild-base:latest

LABEL maintainer="Marian Buschsieweke <[email protected]>"

RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
--mount=type=bind,target=/tinybuild-apks,source=/output,from=tinybuild-apks \
apk add \
newlib-arm-none-eabi \
picolibc-arm-none-eabi \
g++-arm-none-eabi && \
CARGO_HOME=/opt/rustup/.cargo sh -c "\
rustup target add thumbv7em-none-eabihf && \
rustup target add thumbv7em-none-eabi && \
rustup target add thumbv7m-none-eabi && \
rustup target add thumbv6m-none-eabi && \
rustup target add thumbv8m.main-none-eabihf && \
rustup target add thumbv8m.main-none-eabi && \
rustup target add thumbv8m.base-none-eabi"
18 changes: 18 additions & 0 deletions smallbuild-base/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ARG DOCKER_REGISTRY="docker.io/riot"
FROM ${DOCKER_REGISTRY}/tinybuild-base:latest
LABEL maintainer="Marian Buschsieweke <[email protected]>"

ENV \
RUSTUP_HOME=/opt/rustup/.rustup \
PATH=${PATH}:/opt/rustup/.cargo/bin

RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
--mount=type=bind,target=/tinybuild-apks,source=/output,from=tinybuild-apks \
apk add \
rustup \
musl-dev \
clang-libclang \
c2rust@riotapks && \
CARGO_HOME=/opt/rustup/.cargo rustup-init -y && \
cp /tinybuild-apks/rustc /opt/rustup/.cargo/bin
10 changes: 10 additions & 0 deletions smallbuild-msp430/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ARG DOCKER_REGISTRY="docker.io/riot"
FROM ${DOCKER_REGISTRY}/tinybuild-msp430:latest

LABEL maintainer="Marian Buschsieweke <[email protected]>"

RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
--mount=type=bind,target=/tinybuild-apks,source=/output,from=tinybuild-apks \
apk add \
g++-msp430-elf
14 changes: 14 additions & 0 deletions smallbuild-native64/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ARG DOCKER_REGISTRY="docker.io/riot"
FROM ${DOCKER_REGISTRY}/smallbuild-base:latest

LABEL maintainer="Marian Buschsieweke <[email protected]>"

RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
--mount=type=bind,target=/tinybuild-apks,source=/output,from=tinybuild-apks \
apk add \
libucontext-dev@riotapks \
gcc \
musl-dev \
linux-headers && \
CARGO_HOME=/opt/rustup/.cargo rustup target add x86_64-unknown-linux-gnu
13 changes: 13 additions & 0 deletions smallbuild-risc-v/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
ARG DOCKER_REGISTRY="docker.io/riot"
FROM ${DOCKER_REGISTRY}/smallbuild-base:latest

LABEL maintainer="Marian Buschsieweke <[email protected]>"

RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
--mount=type=bind,target=/tinybuild-apks,source=/output,from=tinybuild-apks \
apk add \
newlib-riscv-none-elf \
picolibc-riscv-none-elf \
g++-riscv-none-elf && \
CARGO_HOME=/opt/rustup/.cargo rustup target add riscv32imac-unknown-none-elf
35 changes: 35 additions & 0 deletions tinybuild-apks/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# This docker is not intended to be run, it is rather an intermediate step
# to create custom packages for consumption by other docker containers
FROM alpine:latest
LABEL maintainer="Marian Buschsieweke <[email protected]>"

# install all package needed for building apks
RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
apk add \
alpine-sdk \
doas \
findutils \
lua-aports

# setup a user and create keys needed to sign apks
RUN \
adduser -D builder && \
adduser builder abuild && \
echo "permit nopass builder as root" > /etc/doas.conf && \
su builder -c 'abuild-keygen -ian' && \
mkdir /output && \
chmod 777 /output -R && \
su builder -c 'cp ~/.abuild/*.rsa.pub /output/'

# create an output directory and build all packages from the aports folder
RUN \
--mount=type=cache,id=apk-cache,sharing=locked,target=/var/cache/apk \
--mount=type=bind,target=/var/aports,source=aports \
su builder -c 'mkdir -p ~/aports && cp /var/aports ~/aports/riotapks -r' && \
su builder -c 'buildrepo -d /output riotapks'

# built custom binaries that are not packaged
RUN \
--mount=type=bind,target=/var/src,source=src \
gcc -Os -Wall -Werror -Wpedantic -o /output/rustc /var/src/fixed-rustc.c
Loading