diff --git a/.github/workflows/registry.yml b/.github/workflows/registry.yml index 23daac0..a479f41 100644 --- a/.github/workflows/registry.yml +++ b/.github/workflows/registry.yml @@ -3,82 +3,46 @@ name: Docker Build & Push Action on: workflow_dispatch: push: - branches: - - main + branches: + - main -jobs: - build-rtems-6: - - name: Build and Push qemu-rtems-6 +jobs: + build-and-push: + name: Build and Push Docker Images runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Build and Push - uses: mr-smithers-excellent/docker-build-push@v5 - with: - image: qemu-rtems-6 - dockerfile: rtems-6/Dockerfile - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - tags: latest - - build-rtems-5: - - name: Build and Push qemu-rtems-5 - runs-on: ubuntu-latest - - steps: + steps: - name: Checkout code - uses: actions/checkout@v2 - - - name: Build and Push - uses: mr-smithers-excellent/docker-build-push@v5 + uses: actions/checkout@v4 + + - name: Verify repo structure + run: | + echo "=== Repo root ===" + ls -la + echo "=== Dockerfile locations ===" + find . -name "Dockerfile" | sort + echo "=== docker-executor contents ===" + ls -la docker-executor/ + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 with: - image: qemu-rtems-5 - dockerfile: rtems-5/Dockerfile registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - tags: latest - - build-rtems-4-11: - - name: Build and Push qemu-rtems-4-11 - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Build and Push - uses: mr-smithers-excellent/docker-build-push@v5 - with: - image: qemu-rtems-4-11 - dockerfile: rtems-4.11/Dockerfile - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - tags: latest - - mcdc: - - name: Build and Push mcdc - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Build and Push - uses: mr-smithers-excellent/docker-build-push@v5 - with: - image: mcdc - dockerfile: mcdc/Dockerfile - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - tags: latest \ No newline at end of file + - name: Build All Images + run: | + make \ + TGT_REPO=ghcr.io/${{ github.repository_owner }} \ + REPO_TAG=latest \ + LOCAL_TAG=ci \ + all + + - name: Push All Images + run: | + make \ + TGT_REPO=ghcr.io/${{ github.repository_owner }} \ + REPO_TAG=latest \ + LOCAL_TAG=ci \ + push \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..17e0d36 --- /dev/null +++ b/Makefile @@ -0,0 +1,148 @@ +# Example makefile for building all the images locally +# This is useful when debugging, so as to not REQUIRE the use of CI/CD to build + +LOCAL_TAG ?= test +TGT_REPO ?= ghcr.io/core-flight-system/containers +REPO_TAG ?= latest + +# The option --no-cache can be specified on command line if desired +EXTRA_BUILDARGS += --progress=plain + +BASIC_IMAGE_SET += docker-executor +BASIC_IMAGE_SET += cfsexec-qemu +# BASIC_IMAGE_SET += yocto-sdk +BASIC_IMAGE_SET += gaisler-sparc-rcc-sdk +BASIC_IMAGE_SET += arm-linux-sdk +ALL_IMAGE_SET += $(BASIC_IMAGE_SET) + +BUILDENV_IMAGE_SET += cfsbuildenv-doxygen +BUILDENV_IMAGE_SET += cfsbuildenv-mcdc +BUILDENV_IMAGE_SET += cfsbuildenv-linux +BUILDENV_IMAGE_SET += cfsbuildenv-rtems5 +BUILDENV_IMAGE_SET += cfsbuildenv-rtems6 +BUILDENV_IMAGE_SET += cfsbuildenv-el9 +BUILDENV_IMAGE_SET += cfsbuildenv-el8 +# BUILDENV_IMAGE_SET += cfsbuildenv-yocto +BUILDENV_IMAGE_SET += cfsbuildenv-arm-linux +BUILDENV_IMAGE_SET += cfsbuildenv-gaisler-sparc-rcc +ALL_IMAGE_SET += $(BUILDENV_IMAGE_SET) + +# The rest of the images each need a custom rule with custom deps +ALL_IMAGE_SET += rtems5-tools +ALL_IMAGE_SET += rtems6-tools +ALL_IMAGE_SET += rtems5-rtos +ALL_IMAGE_SET += rtems6-rtos + +BASIC_IMAGE_TARGETS := $(addsuffix .image,$(BASIC_IMAGE_SET)) +BUILDENV_IMAGE_TARGETS := $(addsuffix .image,$(BUILDENV_IMAGE_SET)) +ALL_IMAGE_TARGETS := $(addsuffix .image,$(ALL_IMAGE_SET)) +ALL_PUSH_TARGETS := $(addsuffix .push,$(ALL_IMAGE_SET)) +ALL_PULL_TARGETS := $(addsuffix .pull,$(ALL_IMAGE_SET)) + +$(ALL_IMAGE_TARGETS) $(ALL_PUSH_TARGETS) $(ALL_PULL_TARGETS): IMAGE_NAME = $(basename $(@)) + +#$(BUILDENV_IMAGE_TARGETS): $(BASIC_IMAGE_TARGETS) + +$(BASIC_IMAGE_TARGETS): + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f $(subst rtems5-,rtems-,$(subst rtems6-,rtems-,$(IMAGE_NAME)))/Dockerfile . + +# RTEMS 5 Tools +rtems5-tools.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg RTEMS_VER=5 \ + -f rtems-tools/Dockerfile . + +# RTEMS 6 Tools +rtems6-tools.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg RTEMS_VER=6 \ + -f rtems-tools/Dockerfile . + +# RTEMS 5 RTOS +rtems5-rtos.image: rtems5-tools.image + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg TOOLS_IMAGE=rtems5-tools:$(LOCAL_TAG) \ + --build-arg RTEMS_VER=5 \ + -f rtems-rtos/Dockerfile . + +# RTEMS 6 RTOS +rtems6-rtos.image: rtems6-tools.image + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg TOOLS_IMAGE=rtems6-tools:$(LOCAL_TAG) \ + --build-arg RTEMS_VER=6 \ + -f rtems-rtos/Dockerfile . + +# cFS Build Environment - RTEMS 5 +cfsbuildenv-rtems5.image: rtems5-rtos.image + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg RTEMS_RTOS_IMAGE=rtems5-rtos:$(LOCAL_TAG) \ + -f cfsbuildenv-rtems/Dockerfile . + +# cFS Build Environment - RTEMS 6 +cfsbuildenv-rtems6.image: rtems6-rtos.image + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg RTEMS_RTOS_IMAGE=rtems6-rtos:$(LOCAL_TAG) \ + -f cfsbuildenv-rtems/Dockerfile . + +cfsbuildenv-doxygen.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-doxygen/Dockerfile . + +cfsbuildenv-mcdc.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-mcdc/Dockerfile . + +cfsbuildenv-linux.image cfsbuildenv-ubuntu22.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-dpkg/Dockerfile . + +cfsbuildenv-el8.image cfsbuildenv-el9.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsbuildenv-rpm/Dockerfile . + +cfsbuildenv-yocto.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg YOCTO_SDK_IMAGE=yocto-sdk:$(LOCAL_TAG) \ + -f cfsbuildenv-yocto/Dockerfile . + +cfsbuildenv-arm-linux.image: arm-linux-sdk.image cfsbuildenv-linux.image + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg BASE_IMAGE=cfsbuildenv-linux:$(LOCAL_TAG) \ + --build-arg SDK_IMAGE=arm-linux-sdk:$(LOCAL_TAG) \ + -f cfsbuildenv-arm-linux/Dockerfile . + +cfsbuildenv-gaisler-sparc-rcc.image: gaisler-sparc-rcc-sdk.image cfsbuildenv-linux.image + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) \ + --build-arg BASE_IMAGE=cfsbuildenv-linux:$(LOCAL_TAG) \ + --build-arg SDK_IMAGE=gaisler-sparc-rcc-sdk:$(LOCAL_TAG) \ + -f cfsbuildenv-gaisler-sparc-rcc/Dockerfile . + +cfsexec-linux.image cfsexec-ubuntu22.image: + docker build $(EXTRA_BUILDARGS) -t $(IMAGE_NAME):$(LOCAL_TAG) -f cfsexec-dpkg/Dockerfile . + +$(ALL_PUSH_TARGETS): + docker tag $(IMAGE_NAME):$(LOCAL_TAG) $(TGT_REPO)/$(IMAGE_NAME):$(REPO_TAG) + docker push $(TGT_REPO)/$(IMAGE_NAME):$(REPO_TAG) + +$(ALL_PULL_TARGETS): + docker pull $(TGT_REPO)/$(IMAGE_NAME):$(REPO_TAG) + +push: $(ALL_PUSH_TARGETS) +pull: $(ALL_PULL_TARGETS) +all: $(ALL_IMAGE_TARGETS) + +BASE_IMAGE_TGTS += arm-linux-sdk.image +BASE_IMAGE_TGTS += cfsbuildenv-doxygen.image +BASE_IMAGE_TGTS += docker-executor.image +BASE_IMAGE_TGTS += gaisler-sparc-rcc-sdk.image +BASE_IMAGE_TGTS += rtems5-rtos.image +BASE_IMAGE_TGTS += rtems5-tools.image +BASE_IMAGE_TGTS += rtems6-rtos.image +BASE_IMAGE_TGTS += rtems6-tools.image +BASE_IMAGE_TGTS += cfsbuildenv-rtems5.image +BASE_IMAGE_TGTS += cfsbuildenv-rtems6.image +BASE_IMAGE_TGTS += cfsbuildenv-linux.image +BASE_IMAGE_TGTS += cfsexec-linux.image + +$(BASE_IMAGE_TGTS): EXTRA_BUILDARGS += --build-arg BASE_IMAGE=debian:bookworm + +cfsbuildenv-el8.image: EXTRA_BUILDARGS += --build-arg BASE_IMAGE=rockylinux:8 +cfsbuildenv-el9.image: EXTRA_BUILDARGS += --build-arg BASE_IMAGE=rockylinux:9 + +cfsbuildenv-ubuntu22.image cfsexec-ubuntu22.image: EXTRA_BUILDARGS += --build-arg BASE_IMAGE=ubuntu:jammy diff --git a/arm-linux-sdk/Dockerfile b/arm-linux-sdk/Dockerfile new file mode 100644 index 0000000..62500c1 --- /dev/null +++ b/arm-linux-sdk/Dockerfile @@ -0,0 +1,19 @@ +######################################################### +# Build the ARM SDK image - contains the reference toolchain from the ARM developer website +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS arm-linux-sdk + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + tar xz-utils curl ca-certificates \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +# Fetch SDK binary packages +RUN curl -fsL -o /root/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz 'https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz?rev=65520e9cdf324eca9c02f5302c904fa4&hash=0A1256D118EB7077B4BAA5B2A44FFB72' + +# Install SDK +RUN mkdir -p /opt && \ + tar Jxf /root/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz -C /opt && \ + chown -R root:root /opt/ diff --git a/cfsbuildenv-arm-linux/Dockerfile b/cfsbuildenv-arm-linux/Dockerfile new file mode 100644 index 0000000..ba7bb38 --- /dev/null +++ b/cfsbuildenv-arm-linux/Dockerfile @@ -0,0 +1,13 @@ +######################################################### +# This adds all the needed packages to build CFS +# for an embedded Linux target using Yocto +######################################################### + +ARG SDK_IMAGE=arm-linux-sdk:test +ARG BASE_IMAGE=cfsbuildenv-linux:test + +FROM ${SDK_IMAGE} AS arm-linux-sdk +FROM ${BASE_IMAGE} AS cfsbuildenv-arm-linux + +# Bring the SDK entirely from the sdk image, +COPY --from=arm-linux-sdk /opt /opt diff --git a/cfsbuildenv-doxygen/Dockerfile b/cfsbuildenv-doxygen/Dockerfile new file mode 100644 index 0000000..7f8c374 --- /dev/null +++ b/cfsbuildenv-doxygen/Dockerfile @@ -0,0 +1,15 @@ +######################################################### +# This adds all the needed packages to build CFS +# documentation and guides using Doxygen +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS cfsbuildenv-doxygen + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo build-essential git cmake curl lsb-release software-properties-common rsync jq \ + doxygen graphviz texlive texlive-plain-generic texlive-fonts-extra texlive-latex-extra \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt \ No newline at end of file diff --git a/cfsbuildenv-doxygen/README.md b/cfsbuildenv-doxygen/README.md new file mode 100644 index 0000000..19586f7 --- /dev/null +++ b/cfsbuildenv-doxygen/README.md @@ -0,0 +1,13 @@ +# cfsbuildenv-ubuntu22 container + +This container is intended to host containerized jobs in workflows + +It is not started or built directly from this docker compose because +it would only be started via workflow jobs when needed. + +It must be built separately using `docker build`, for example: + +``` +docker build -t cfsbuildenv-ubuntu22:latest . +``` + diff --git a/cfsbuildenv-dpkg/Dockerfile b/cfsbuildenv-dpkg/Dockerfile new file mode 100644 index 0000000..b590fb3 --- /dev/null +++ b/cfsbuildenv-dpkg/Dockerfile @@ -0,0 +1,20 @@ +######################################################### +# This adds all the needed packages to build CFS +# in the native configurations +# +# This variant of the container may be built on a Debian-style base +# that uses dpkg and apt as the package management system +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS cfsbuildenv-dpkg + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo ca-certificates curl lsb-release software-properties-common \ + build-essential gcc g++ gawk cmake lcov xsltproc rsync jq \ + python3 python3-venv python3-dev python3-pip openssh-client \ + libexpat-dev liblua5.3-dev libjson-c-dev xz-utils cppcheck clang-format-19 wget git \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt \ No newline at end of file diff --git a/cfsbuildenv-gaisler-sparc-rcc/Dockerfile b/cfsbuildenv-gaisler-sparc-rcc/Dockerfile new file mode 100644 index 0000000..8fe77ac --- /dev/null +++ b/cfsbuildenv-gaisler-sparc-rcc/Dockerfile @@ -0,0 +1,13 @@ +######################################################### +# This adds all the needed packages to build CFS +# for an embedded Linux target using Yocto +######################################################### + +ARG SDK_IMAGE=gaisler-sparc-rcc:test +ARG BASE_IMAGE=cfsbuildenv-linux:test + +FROM ${SDK_IMAGE} AS gaisler-sparc-rcc-sdk +FROM ${BASE_IMAGE} AS cfsbuildenv-gaisler-sparc-rcc + +# Bring the SDK entirely from the sdk image, +COPY --from=gaisler-sparc-rcc-sdk /opt /opt diff --git a/cfsbuildenv-mcdc/Dockerfile b/cfsbuildenv-mcdc/Dockerfile new file mode 100644 index 0000000..5b9115a --- /dev/null +++ b/cfsbuildenv-mcdc/Dockerfile @@ -0,0 +1,17 @@ +######################################################### +# Image capable of building CFS and providing MC/DC coverage analysis +# This requires use of a very recent GCC version +######################################################### + +ARG BASE_IMAGE=docker.io/gcc:14 +FROM ${BASE_IMAGE} AS gcc14-build + +ARG EXTRA_PKGS="" + +# Install the basic CFS build environment +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo curl lsb-release apt-transport-https \ + git gawk cmake lcov xsltproc rsync jq \ + python3 python3-venv python3-dev libexpat-dev liblua5.3-dev libjson-c-dev \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt \ No newline at end of file diff --git a/cfsbuildenv-rpm/Dockerfile b/cfsbuildenv-rpm/Dockerfile new file mode 100644 index 0000000..7ca8bfd --- /dev/null +++ b/cfsbuildenv-rpm/Dockerfile @@ -0,0 +1,28 @@ +######################################################### +# This adds all the needed packages to build CFS +# in the native configurations +# +# This variant of the container may be built on a RHEL-style base +# that uses rpm and dnf as the package management system +######################################################### + +ARG BASE_IMAGE=rockylinux:9 +FROM ${BASE_IMAGE} AS cfsbuildenv-rpm + +ARG EXTRA_PKGS="" + +# Add the EPEL key so the next dnf command does not fail +RUN export KEYFILE=$(. /etc/os-release && echo "RPM-GPG-KEY-EPEL-${VERSION_ID%%.*}") && \ + rpmkeys --import https://dl.fedoraproject.org/pub/epel/${KEYFILE} + +# Note that there are no strict dependencies on EPEL packages, but +# historically it also offered a newer version of CMake where the version in RHEL was obsolete. +RUN export EL_VERSION=$(. /etc/os-release && echo "${VERSION_ID%%.*}") && \ + dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-${EL_VERSION}.noarch.rpm && \ + /usr/bin/crb enable && \ + dnf install -y --allowerasing \ + ca-certificates curl jq openssl git rsync \ + glibc-devel libstdc++-devel gawk gcc gcc-c++ make cmake \ + python3 python3-pip python3-devel expat-devel json-c-devel lua-devel \ + ${EXTRA_PKGS} && \ + dnf clean all \ No newline at end of file diff --git a/cfsbuildenv-rtems/Dockerfile b/cfsbuildenv-rtems/Dockerfile new file mode 100644 index 0000000..7ab6d96 --- /dev/null +++ b/cfsbuildenv-rtems/Dockerfile @@ -0,0 +1,27 @@ +######################################################### +# This adds all the needed packages to build CFS +# for the the RTEMS operating system +######################################################### + +ARG RTEMS_RTOS_IMAGE=rtems-rtos +ARG BASE_IMAGE=debian:latest + +FROM ${RTEMS_RTOS_IMAGE} AS rtems-rtos +FROM ${BASE_IMAGE} AS cfsbuildenv-rtems + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + ca-certificates curl lsb-release software-properties-common jq \ + build-essential gawk cmake lcov python3 python3-venv python3-dev \ + python3-pip parted dosfstools mtools bsdextrautils \ + qemu-utils qemu-system-x86 \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +# This just creates a normal user without sudo privileges +RUN useradd -m -c "Docker user" -U docker + +# Bring the RTEMS tree entirely from the rtems-rtos image, +COPY --chown=docker:docker --from=rtems-rtos /opt /opt +ENV PATH=/opt/rtems/bin:$PATH \ No newline at end of file diff --git a/cfsbuildenv-yocto/Dockerfile b/cfsbuildenv-yocto/Dockerfile new file mode 100644 index 0000000..c36bfcb --- /dev/null +++ b/cfsbuildenv-yocto/Dockerfile @@ -0,0 +1,24 @@ +######################################################### +# This adds all the needed packages to build CFS +# for an embedded Linux target using Yocto +######################################################### + +ARG YOCTO_SDK_IMAGE=yocto-sdk +ARG BASE_IMAGE=debian:trixie + +FROM ${YOCTO_SDK_IMAGE} AS yocto-sdk +FROM ${BASE_IMAGE} AS cfsbuildenv-yocto + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo ca-certificates curl lsb-release \ + build-essential gcc g++ gawk cmake git xsltproc jq \ + python3 python3-venv python3-dev python3-pip \ + libexpat-dev liblua5.4-dev libjson-c-dev xz-utils \ + qemu-utils bsdextrautils e2fsprogs \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +# Bring the SDK entirely from the yocto-sdk image, +COPY --from=yocto-sdk /opt /opt diff --git a/cfsexec-dpkg/Dockerfile b/cfsexec-dpkg/Dockerfile new file mode 100644 index 0000000..56c278e --- /dev/null +++ b/cfsexec-dpkg/Dockerfile @@ -0,0 +1,19 @@ +######################################################### +# This adds all the needed packages to execute a cFS build in QEMU +# +# This variant of the container may be built on a Debian-style base +# that uses dpkg and apt as the package management system +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS cfsexec-ubuntu22 + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo ca-certificates curl lsb-release dumb-init jq \ + python3-minimal liblua5.3 libexpat1 libjson-c5 xz-utils \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +ENTRYPOINT ["/usr/bin/dumb-init", "--" ] diff --git a/cfsexec-qemu/Dockerfile b/cfsexec-qemu/Dockerfile new file mode 100644 index 0000000..58498e9 --- /dev/null +++ b/cfsexec-qemu/Dockerfile @@ -0,0 +1,21 @@ +######################################################### +# This adds all the needed packages to execute a cFS build in QEMU +# +# This variant of the container may be built on a Debian-style base +# that uses dpkg and apt as the package management system +######################################################### + +ARG BASE_IMAGE=debian:trixie +FROM ${BASE_IMAGE} AS cfsexec-qemu + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo ca-certificates curl lsb-release dumb-init jq \ + qemu-system-x86 qemu-system-mips qemu-system-riscv qemu-system-arm qemu-system-ppc qemu-system-sparc \ + qemu-efi-riscv64 qemu-efi-arm qemu-efi-aarch64 \ + qemu-utils qemu-block-extra openssh-client \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +ENTRYPOINT ["/usr/bin/dumb-init", "--" ] diff --git a/cfsexec-ubuntu22/Dockerfile b/cfsexec-ubuntu22/Dockerfile new file mode 100644 index 0000000..0970109 --- /dev/null +++ b/cfsexec-ubuntu22/Dockerfile @@ -0,0 +1,19 @@ +######################################################### +# This adds all the needed packages to execute a cFS build in QEMU +# +# This variant of the container may be built on a Debian-style base +# that uses dpkg and apt as the package management system +######################################################### + +ARG BASE_IMAGE=ubuntu:22.04 +FROM ${BASE_IMAGE} AS cfsexec-ubuntu22 + +ARG EXTRA_PKGS="" + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + sudo ca-certificates curl lsb-release dumb-init jq \ + python3-minimal liblua5.3 libexpat1 libjson-c5 xz-utils \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +ENTRYPOINT ["/usr/bin/dumb-init", "--" ] \ No newline at end of file diff --git a/docker-executor/Dockerfile b/docker-executor/Dockerfile new file mode 100644 index 0000000..8f5865b --- /dev/null +++ b/docker-executor/Dockerfile @@ -0,0 +1,25 @@ +######################################################### +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS gitlab-docker-executor + +# Install docker repo +RUN install -m 0755 -d /etc/apt/keyrings +COPY --chmod=0644 docker-executor/docker.asc /etc/apt/keyrings/docker.asc + +RUN apt-get update && \ + env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + curl openssl ca-certificates && \ + echo "deb [arch=$(dpkg --print-architecture) \ + signed-by=/etc/apt/keyrings/docker.asc] \ + $(. /etc/os-release && echo "https://download.docker.com/linux/${ID} ${UBUNTU_CODENAME:-$VERSION_CODENAME}") \ + stable" | tee /etc/apt/sources.list.d/docker.list && \ + apt-get update && \ + env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + docker-ce-cli docker-buildx-plugin && \ + apt-get autoclean && \ + apt-get autoremove && \ + rm -rf /var/cache/apt + +RUN /usr/sbin/update-ca-certificates -v diff --git a/docker-executor/docker.asc b/docker-executor/docker.asc new file mode 100644 index 0000000..ee7872e --- /dev/null +++ b/docker-executor/docker.asc @@ -0,0 +1,62 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFit2ioBEADhWpZ8/wvZ6hUTiXOwQHXMAlaFHcPH9hAtr4F1y2+OYdbtMuth +lqqwp028AqyY+PRfVMtSYMbjuQuu5byyKR01BbqYhuS3jtqQmljZ/bJvXqnmiVXh +38UuLa+z077PxyxQhu5BbqntTPQMfiyqEiU+BKbq2WmANUKQf+1AmZY/IruOXbnq +L4C1+gJ8vfmXQt99npCaxEjaNRVYfOS8QcixNzHUYnb6emjlANyEVlZzeqo7XKl7 +UrwV5inawTSzWNvtjEjj4nJL8NsLwscpLPQUhTQ+7BbQXAwAmeHCUTQIvvWXqw0N +cmhh4HgeQscQHYgOJjjDVfoY5MucvglbIgCqfzAHW9jxmRL4qbMZj+b1XoePEtht +ku4bIQN1X5P07fNWzlgaRL5Z4POXDDZTlIQ/El58j9kp4bnWRCJW0lya+f8ocodo +vZZ+Doi+fy4D5ZGrL4XEcIQP/Lv5uFyf+kQtl/94VFYVJOleAv8W92KdgDkhTcTD +G7c0tIkVEKNUq48b3aQ64NOZQW7fVjfoKwEZdOqPE72Pa45jrZzvUFxSpdiNk2tZ +XYukHjlxxEgBdC/J3cMMNRE1F4NCA3ApfV1Y7/hTeOnmDuDYwr9/obA8t016Yljj +q5rdkywPf4JF8mXUW5eCN1vAFHxeg9ZWemhBtQmGxXnw9M+z6hWwc6ahmwARAQAB +tCtEb2NrZXIgUmVsZWFzZSAoQ0UgZGViKSA8ZG9ja2VyQGRvY2tlci5jb20+iQI3 +BBMBCgAhBQJYrefAAhsvBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEI2BgDwO +v82IsskP/iQZo68flDQmNvn8X5XTd6RRaUH33kXYXquT6NkHJciS7E2gTJmqvMqd +tI4mNYHCSEYxI5qrcYV5YqX9P6+Ko+vozo4nseUQLPH/ATQ4qL0Zok+1jkag3Lgk +jonyUf9bwtWxFp05HC3GMHPhhcUSexCxQLQvnFWXD2sWLKivHp2fT8QbRGeZ+d3m +6fqcd5Fu7pxsqm0EUDK5NL+nPIgYhN+auTrhgzhK1CShfGccM/wfRlei9Utz6p9P +XRKIlWnXtT4qNGZNTN0tR+NLG/6Bqd8OYBaFAUcue/w1VW6JQ2VGYZHnZu9S8LMc +FYBa5Ig9PxwGQOgq6RDKDbV+PqTQT5EFMeR1mrjckk4DQJjbxeMZbiNMG5kGECA8 +g383P3elhn03WGbEEa4MNc3Z4+7c236QI3xWJfNPdUbXRaAwhy/6rTSFbzwKB0Jm +ebwzQfwjQY6f55MiI/RqDCyuPj3r3jyVRkK86pQKBAJwFHyqj9KaKXMZjfVnowLh +9svIGfNbGHpucATqREvUHuQbNnqkCx8VVhtYkhDb9fEP2xBu5VvHbR+3nfVhMut5 +G34Ct5RS7Jt6LIfFdtcn8CaSas/l1HbiGeRgc70X/9aYx/V/CEJv0lIe8gP6uDoW +FPIZ7d6vH+Vro6xuWEGiuMaiznap2KhZmpkgfupyFmplh0s6knymuQINBFit2ioB +EADneL9S9m4vhU3blaRjVUUyJ7b/qTjcSylvCH5XUE6R2k+ckEZjfAMZPLpO+/tF +M2JIJMD4SifKuS3xck9KtZGCufGmcwiLQRzeHF7vJUKrLD5RTkNi23ydvWZgPjtx +Q+DTT1Zcn7BrQFY6FgnRoUVIxwtdw1bMY/89rsFgS5wwuMESd3Q2RYgb7EOFOpnu +w6da7WakWf4IhnF5nsNYGDVaIHzpiqCl+uTbf1epCjrOlIzkZ3Z3Yk5CM/TiFzPk +z2lLz89cpD8U+NtCsfagWWfjd2U3jDapgH+7nQnCEWpROtzaKHG6lA3pXdix5zG8 +eRc6/0IbUSWvfjKxLLPfNeCS2pCL3IeEI5nothEEYdQH6szpLog79xB9dVnJyKJb +VfxXnseoYqVrRz2VVbUI5Blwm6B40E3eGVfUQWiux54DspyVMMk41Mx7QJ3iynIa +1N4ZAqVMAEruyXTRTxc9XW0tYhDMA/1GYvz0EmFpm8LzTHA6sFVtPm/ZlNCX6P1X +zJwrv7DSQKD6GGlBQUX+OeEJ8tTkkf8QTJSPUdh8P8YxDFS5EOGAvhhpMBYD42kQ +pqXjEC+XcycTvGI7impgv9PDY1RCC1zkBjKPa120rNhv/hkVk/YhuGoajoHyy4h7 +ZQopdcMtpN2dgmhEegny9JCSwxfQmQ0zK0g7m6SHiKMwjwARAQABiQQ+BBgBCAAJ +BQJYrdoqAhsCAikJEI2BgDwOv82IwV0gBBkBCAAGBQJYrdoqAAoJEH6gqcPyc/zY +1WAP/2wJ+R0gE6qsce3rjaIz58PJmc8goKrir5hnElWhPgbq7cYIsW5qiFyLhkdp +YcMmhD9mRiPpQn6Ya2w3e3B8zfIVKipbMBnke/ytZ9M7qHmDCcjoiSmwEXN3wKYI +mD9VHONsl/CG1rU9Isw1jtB5g1YxuBA7M/m36XN6x2u+NtNMDB9P56yc4gfsZVES +KA9v+yY2/l45L8d/WUkUi0YXomn6hyBGI7JrBLq0CX37GEYP6O9rrKipfz73XfO7 +JIGzOKZlljb/D9RX/g7nRbCn+3EtH7xnk+TK/50euEKw8SMUg147sJTcpQmv6UzZ +cM4JgL0HbHVCojV4C/plELwMddALOFeYQzTif6sMRPf+3DSj8frbInjChC3yOLy0 +6br92KFom17EIj2CAcoeq7UPhi2oouYBwPxh5ytdehJkoo+sN7RIWua6P2WSmon5 +U888cSylXC0+ADFdgLX9K2zrDVYUG1vo8CX0vzxFBaHwN6Px26fhIT1/hYUHQR1z +VfNDcyQmXqkOnZvvoMfz/Q0s9BhFJ/zU6AgQbIZE/hm1spsfgvtsD1frZfygXJ9f +irP+MSAI80xHSf91qSRZOj4Pl3ZJNbq4yYxv0b1pkMqeGdjdCYhLU+LZ4wbQmpCk +SVe2prlLureigXtmZfkqevRz7FrIZiu9ky8wnCAPwC7/zmS18rgP/17bOtL4/iIz +QhxAAoAMWVrGyJivSkjhSGx1uCojsWfsTAm11P7jsruIL61ZzMUVE2aM3Pmj5G+W +9AcZ58Em+1WsVnAXdUR//bMmhyr8wL/G1YO1V3JEJTRdxsSxdYa4deGBBY/Adpsw +24jxhOJR+lsJpqIUeb999+R8euDhRHG9eFO7DRu6weatUJ6suupoDTRWtr/4yGqe +dKxV3qQhNLSnaAzqW/1nA3iUB4k7kCaKZxhdhDbClf9P37qaRW467BLCVO/coL3y +Vm50dwdrNtKpMBh3ZpbB1uJvgi9mXtyBOMJ3v8RZeDzFiG8HdCtg9RvIt/AIFoHR +H3S+U79NT6i0KPzLImDfs8T7RlpyuMc4Ufs8ggyg9v3Ae6cN3eQyxcK3w0cbBwsh +/nQNfsA6uu+9H7NhbehBMhYnpNZyrHzCmzyXkauwRAqoCbGCNykTRwsur9gS41TQ +M8ssD1jFheOJf3hODnkKU+HKjvMROl1DK7zdmLdNzA1cvtZH/nCC9KPj1z8QC47S +xx+dTZSx4ONAhwbS/LN3PoKtn8LPjY9NP9uDWI+TWYquS2U+KHDrBDlsgozDbs/O +jCxcpDzNmXpWQHEtHU7649OXHP7UeNST1mCUCH5qdank0V1iejF6/CfTFU4MfcrG +YT90qFF93M3v01BbxP+EIY2/9tiIPbrd +=0YYh +-----END PGP PUBLIC KEY BLOCK----- diff --git a/gaisler-sparc-rcc-sdk/Dockerfile b/gaisler-sparc-rcc-sdk/Dockerfile new file mode 100644 index 0000000..0a444db --- /dev/null +++ b/gaisler-sparc-rcc-sdk/Dockerfile @@ -0,0 +1,19 @@ +######################################################### +# Build the Yocto SDK image - contains QEMU riscv64 and mips toolchains +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS gaisler-sparc-rcc-sdk + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + curl tar xz-utils \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + +# Fetch SDK binary packages +RUN curl -fsL -o /root/sparc-rtems-5-gcc-10.5.0-1.3.2-linux.txz 'https://download.gaisler.com/anonftp/rcc/rcc-1.3/1.3.2/sparc-rtems-5-gcc-10.5.0-1.3.2-linux.txz' + +# Install SDK +RUN mkdir -p /opt && \ + tar Jxf /root/sparc-rtems-5-gcc-10.5.0-1.3.2-linux.txz -C /opt && \ + chown -R root:root /opt/ diff --git a/mcdc/Dockerfile b/mcdc/Dockerfile deleted file mode 100644 index 566e58a..0000000 --- a/mcdc/Dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:22.04 -ENV DEBIAN_FRONTEND=noninteractive - -# Install dependencies -RUN apt-get update && apt-get install -y \ - build-essential \ - libgmp-dev \ - libmpfr-dev \ - libmpc-dev \ - wget \ - tar \ - gcc \ - g++ \ - make \ - git \ - cmake \ - lcov \ - python3 \ - jq \ - && rm -rf /var/lib/apt/lists/* - -# Configure dynamic linker to include /usr/local/lib (for GCC libraries) -RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/gcc.conf && ldconfig - -# Download and build GCC -RUN wget http://ftp.gnu.org/gnu/gcc/gcc-14.1.0/gcc-14.1.0.tar.gz && \ - tar -xf gcc-14.1.0.tar.gz && \ - cd gcc-14.1.0 && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-14.1.0 --enable-languages=c,c++ --disable-multilib && \ - make -j$(nproc) && \ - make install && \ - ln -sf /usr/local/gcc-14.1.0/bin/gcc /usr/bin/gcc && \ - ln -sf /usr/local/gcc-14.1.0/bin/g++ /usr/bin/g++ && \ - rm -rf /var/lib/apt/lists/* && \ - rm -rf /gcc-14.1.0 - -# Set the GCC binary path globally for the build process -ENV PATH=/usr/local/gcc-14.1.0/bin:$PATH \ No newline at end of file diff --git a/rtems-4.11/Dockerfile b/rtems-4.11/Dockerfile deleted file mode 100644 index b1289b7..0000000 --- a/rtems-4.11/Dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -from ubuntu:22.04 -ENV DEBIAN_FRONTEND=noninteractive - -# Basic dependencies -run apt-get update && apt-get install -y git make curl - -# rtems dependencies -run apt-get install -y flex bison texinfo python2-dev g++ unzip libgmp-dev libmpfr-dev bzip2 xz-utils - -# Make python2 the default python -run ln -s /usr/bin/python2 /usr/bin/python - -# QEMU dependencies -run apt-get install -y qemu-system-i386 - -# setup and compile RTEMS BSP -run mkdir -p ${HOME}/rtems-4.11 \ - && cd ${HOME} \ - && git clone -b 4.11 https://gitlab.rtems.org/rtems/tools/rtems-source-builder.git \ - && cd rtems-source-builder/rtems \ -# Download gnu mpc before source builder will fail to download it - && mkdir sources \ - && curl https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz --output sources/mpc-1.0.3.tar.gz \ - && ../source-builder/sb-set-builder --prefix=$HOME/rtems-4.11 4.11/rtems-i386 \ - -# clone and bootstrap RTEMS source tree - && cd ${HOME} \ - && git clone -b 4.11 https://gitlab.rtems.org/rtems/rtos/rtems.git \ - && export PATH=$HOME/rtems-4.11/bin:$PATH \ - && cd rtems && ./bootstrap \ - -# Build and install RTEMS pc686 BSP - && cd ${HOME} \ - && mkdir b-pc686 \ - && cd b-pc686 \ - && ../rtems/configure --target=i386-rtems4.11 \ - --enable-rtemsbsp=pc686 \ - --prefix=${HOME}/rtems-4.11 \ - --enable-networking \ - --enable-cxx \ - --disable-posix \ - --disable-deprecated \ - BSP_ENABLE_VGA=0 \ - CLOCK_DRIVER_USE_TSC=1 \ - USE_COM1_AS_CONSOLE=1 \ - BSP_PRESS_KEY_FOR_RESET=0 \ - BSP_RESET_BOARD_AT_EXIT=1 \ - && make \ - && make install - -# install git from source for updated version -run apt-get install -y libz-dev libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext cmake -run curl -o git.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.2.tar.gz -run tar -zxf git.tar.gz && rm git.tar.gz -run cd git-* && make prefix=/usr/local && make prefix=/usr/local install - -# Delete unnecessary directories now that rtems is built -run cd ${HOME} \ - && rm -rf rtems-source-builder b-pc686 rtems - -# Additional dependencies -run apt-get install -y -f mtools parted udev bsdmainutils - -# Install dosfstools from source release -run curl -o dosfstools.tar.gz http://deb.debian.org/debian/pool/main/d/dosfstools/dosfstools_4.2.orig.tar.gz -run tar -zxf dosfstools.tar.gz && rm dosfstools.tar.gz -run cd dosfstools-* && ./configure && make && make prefix=/usr/local install - -# Remove unecessary dependencies now that rtems is built -run apt-get purge -y libz-dev libssl-dev libexpat1-dev gettext unzip git flex bison texinfo curl \ - libgmp-dev libmpfr-dev bzip2 xz-utils -run apt-get autoremove -y \ No newline at end of file diff --git a/rtems-5/Dockerfile b/rtems-5/Dockerfile deleted file mode 100644 index 9db06e1..0000000 --- a/rtems-5/Dockerfile +++ /dev/null @@ -1,62 +0,0 @@ -from ubuntu:22.04 -ENV DEBIAN_FRONTEND=noninteractive - -# Basic dependencies -run apt-get update && apt-get install -y git make - -# rtems dependencies -run apt-get install -y flex bison texinfo python3-dev g++ unzip libgmp-dev libmpfr-dev bzip2 xz-utils - -# Make python3 the default python -run ln -s /usr/bin/python3 /usr/bin/python - -# QEMU dependencies -run apt-get install -y qemu-system-i386 - -# setup and compile RTEMS BSP -run mkdir -p ${HOME}/rtems-5 \ - && cd ${HOME} \ - && git clone -b 5 https://gitlab.rtems.org/rtems/tools/rtems-source-builder.git \ - && cd rtems-source-builder/rtems \ - && ../source-builder/sb-set-builder --prefix=$HOME/rtems-5 5/rtems-i386 \ -# clone and bootstrap RTEMS source tree - && cd ${HOME} \ - && git clone -b 5 https://gitlab.rtems.org/rtems/rtos/rtems.git \ - && export PATH=$HOME/rtems-5/bin:$PATH \ - && cd rtems && ./bootstrap \ -# Build and install RTEMS pc686 BSP - && cd ${HOME} \ - && mkdir b-pc686 \ - && cd b-pc686 \ - && ../rtems/configure --target=i386-rtems5 \ - --enable-rtemsbsp=pc686 \ - --prefix=${HOME}/rtems-5 \ - --enable-networking \ - --enable-cxx \ - --disable-posix \ - --disable-deprecated \ - && make \ - && make install - -# install git from source for updated version -run apt-get install -y libz-dev libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext cmake -run curl -o git.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.2.tar.gz -run tar -zxf git.tar.gz && rm git.tar.gz -run cd git-* && make prefix=/usr/local && make prefix=/usr/local install - -# Delete unnecessary directories now that rtems is built -run cd ${HOME} \ - && rm -rf rtems-source-builder b-pc686 rtems - -# Additional dependencies -run apt-get install -y -f mtools parted udev bsdmainutils - -# Install dosfstools from source release -run curl -o dosfstools.tar.gz http://deb.debian.org/debian/pool/main/d/dosfstools/dosfstools_4.2.orig.tar.gz -run tar -zxf dosfstools.tar.gz && rm dosfstools.tar.gz -run cd dosfstools-* && ./configure && make && make prefix=/usr/local install - -# Remove unecessary dependencies now that rtems is built -run apt-get purge -y libz-dev libssl-dev libexpat1-dev gettext unzip git flex bison texinfo curl \ - libgmp-dev libmpfr-dev bzip2 xz-utils -run apt-get autoremove -y diff --git a/rtems-6/Dockerfile b/rtems-6/Dockerfile deleted file mode 100644 index 3068bf4..0000000 --- a/rtems-6/Dockerfile +++ /dev/null @@ -1,71 +0,0 @@ -from ubuntu:22.04 -ENV DEBIAN_FRONTEND=noninteractive - -# Basic dependencies -run apt-get update && apt-get install -y git make - -# rtems dependencies -run apt-get install -y flex bison texinfo python3-dev g++ unzip libgmp-dev libmpfr-dev bzip2 xz-utils - -# Make python3 the default python -run ln -s /usr/bin/python3 /usr/bin/python - -# Added: Python development package installation for RTEMS build dependencies -run apt-get install -y python3-dev libpython3-dev - -# QEMU dependencies -run apt-get install -y qemu-system-i386 - -# Copy config.ini file - Note that the environment variable HOME will not work here -copy rtems-6/config.ini /config.ini - -# Temporary fix for legacy network stack -copy rtems-6/testbusy.c /testbusy.c - -# Setup and compile RTEMS BSP -run mkdir -p ${HOME}/rtems-6 \ - && cd ${HOME} \ - && git clone -b 6 https://gitlab.rtems.org/rtems/tools/rtems-source-builder.git \ - && cd rtems-source-builder/rtems \ - && ../source-builder/sb-set-builder --prefix=$HOME/rtems-6 6/rtems-i386 -# clone RTEMS source tree -run cd ${HOME} \ - && git clone -b 6 https://gitlab.rtems.org/rtems/rtos/rtems.git \ - && export PATH=$HOME/rtems-6/bin:$PATH \ -# Build RTEMS BSP - && cd rtems \ - && mv /config.ini . \ - && ./waf configure --prefix=${HOME}/rtems-6 \ - && ./waf \ - && ./waf install -# Get and build the legacy network stack -run cd ${HOME} \ - && git clone -b 6 https://gitlab.rtems.org/rtems/pkg/rtems-net-legacy.git \ - && cd rtems-net-legacy \ - && git submodule update --init \ - && mv /testbusy.c libtest/testbusy.c \ - && ./waf configure --prefix=$HOME/rtems-6 \ - && ./waf build install - -# install git from source for updated version -run apt-get install -y libz-dev libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext cmake -run curl -o git.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.2.tar.gz -run tar -zxf git.tar.gz && rm git.tar.gz -run cd git-* && make prefix=/usr/local && make prefix=/usr/local install - -# Delete unnecessary directories now that rtems is built -run cd ${HOME} \ - && rm -rf rtems-source-builder rtems rtems-net-legacy - -# Additional dependencies -run apt-get install -y -f mtools parted udev bsdmainutils - -# Install dosfstools from source release -run curl -o dosfstools.tar.gz http://deb.debian.org/debian/pool/main/d/dosfstools/dosfstools_4.2.orig.tar.gz -run tar -zxf dosfstools.tar.gz && rm dosfstools.tar.gz -run cd dosfstools-* && ./configure && make && make prefix=/usr/local install - -# Remove unecessary dependencies now that rtems is built -run apt-get purge -y libz-dev libssl-dev libexpat1-dev gettext unzip git flex bison texinfo curl \ - libgmp-dev libmpfr-dev bzip2 xz-utils -run apt-get autoremove -y diff --git a/rtems-6/config.ini b/rtems-6/config.ini deleted file mode 100644 index 3d2b71e..0000000 --- a/rtems-6/config.ini +++ /dev/null @@ -1,3 +0,0 @@ -[i386/pc686] -RTEMS_POSIX_API = True -BUILD_TESTS = False diff --git a/rtems-6/testbusy.c b/rtems-6/testbusy.c deleted file mode 100644 index 51c6a71..0000000 --- a/rtems-6/testbusy.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Dornierstr. 4 - * 82178 Puchheim - * Germany - * - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -void rtems_test_busy_cpu_usage( time_t seconds, long nanoseconds ) -{ - Thread_Control *executing; - Timestamp_Control busy; - Timestamp_Control start; - Timestamp_Control now; - - executing = _Thread_Get_executing(); - start = _Thread_Get_CPU_time_used( executing ); - _Timestamp_Set( &busy, seconds, nanoseconds ); - - do { - now = _Thread_Get_CPU_time_used( executing ); - } while ( now - start < busy ); -} diff --git a/rtems-rtos/Dockerfile b/rtems-rtos/Dockerfile new file mode 100644 index 0000000..46c1d70 --- /dev/null +++ b/rtems-rtos/Dockerfile @@ -0,0 +1,63 @@ +######################################################### +# Build the RTEMS BSP - pc686 by default (version configurable) +######################################################### + +ARG TOOLS_IMAGE=rtems-tools +ARG BASE_IMAGE=debian:latest + +FROM ${TOOLS_IMAGE} AS rtems-tools +FROM ${BASE_IMAGE} AS rtems-rtos + +ARG RTEMS_VER=5 # Default, gets overridden by CI +ARG RTEMS_BSP=pc686 + +# Basic dependencies +RUN apt-get update && env DEBIAN_FRONTEND=noninteractive apt-get install -y curl sudo \ + build-essential g++ git flex bison texinfo python3 unzip bzip2 xz-utils \ + python-is-python3 python3-dev && \ + rm -rf /var/cache/apt + +# Copy the RTEMS tools from the /opt +COPY --from=rtems-tools /opt /opt + +# Create a non-root user to do the RTOS build +RUN useradd -m -c "Docker user" -U -G sudo docker && \ + echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers + +USER docker +WORKDIR /home/docker +ENV PATH=/opt/rtems/bin:$PATH + +# Clone RTEMS source +RUN . /opt/rtems/rtems-tools-info && \ + git clone -b ${RTEMS_VER} --depth 1 https://gitlab.rtems.org/rtems/rtos/rtems.git + +# Conditional build based on RTEMS version +RUN . /opt/rtems/rtems-tools-info && \ + cd rtems && \ + if [ "${RTEMS_VER}" = "6" ]; then \ + echo "Building RTEMS 6 with waf..."; \ + echo "[${RTEMS_ARCH}/${RTEMS_BSP}]" > config.ini && \ + echo "BUILD_NETWORKING = True" >> config.ini && \ + echo "BUILD_TESTS = False" >> config.ini && \ + echo "BUILD_SAMPLES = False" >> config.ini && \ + python3 ./waf configure \ + --prefix=/opt/rtems-${RTEMS_VER} && \ + python3 ./waf build && \ + sudo python3 ./waf install; \ + else \ + echo "Building RTEMS 5 with autotools..."; \ + ./bootstrap && \ + cd .. && \ + mkdir b-${RTEMS_BSP} && \ + cd b-${RTEMS_BSP} && \ + ../rtems/configure --target=${RTEMS_ARCH}-rtems${RTEMS_VER} \ + --enable-rtemsbsp=${RTEMS_BSP} \ + --prefix=/opt/rtems-${RTEMS_VER} \ + --enable-networking \ + --enable-cxx \ + --disable-posix \ + --disable-deprecated && \ + make && \ + sudo make install; \ + fi diff --git a/rtems-tools/Dockerfile b/rtems-tools/Dockerfile new file mode 100644 index 0000000..fd49d9b --- /dev/null +++ b/rtems-tools/Dockerfile @@ -0,0 +1,27 @@ +######################################################### +# Build the RTEMS toolchain (version configurable) +######################################################### + +ARG BASE_IMAGE=debian:latest +FROM ${BASE_IMAGE} AS rtems-tools + +ARG RTEMS_VER=5 # Default, gets overridden by CI +ARG RTEMS_ARCH=i386 + +# Basic dependencies +RUN apt-get update && env DEBIAN_FRONTEND=noninteractive apt-get install -y curl \ + build-essential g++ git cmake flex bison texinfo python3 unzip bzip2 xz-utils \ + python-is-python3 python3-dev libgmp-dev libmpfr-dev && \ + rm -rf /var/cache/apt + +# Build the RTEMS toolchains +RUN git clone -b ${RTEMS_VER} --depth 1 https://gitlab.rtems.org/rtems/tools/rtems-source-builder.git && \ + cd rtems-source-builder/rtems && \ + ../source-builder/sb-set-builder --prefix=/opt/rtems-${RTEMS_VER} ${RTEMS_VER}/rtems-${RTEMS_ARCH} && \ + cd ${HOME} && rm -rf rtems-source-builder + +RUN ln -s /opt/rtems-${RTEMS_VER} /opt/rtems +RUN echo "\nRTEMS_VER=${RTEMS_VER}" \ + "\nRTEMS_ARCH=${RTEMS_ARCH}" \ + "\n" \ + > /opt/rtems-${RTEMS_VER}/rtems-tools-info diff --git a/yocto-sdk/Dockerfile b/yocto-sdk/Dockerfile new file mode 100644 index 0000000..7b3a23e --- /dev/null +++ b/yocto-sdk/Dockerfile @@ -0,0 +1,39 @@ +######################################################### +# Build the Yocto SDK image - contains QEMU riscv64 and mips toolchains +######################################################### + +ARG BASE_IMAGE=debian:trixie +FROM ${BASE_IMAGE} AS yocto-sdk-installer + + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + python3-minimal python3-venv python3-pip file \ + ${EXTRA_PKGS} && \ + rm -rf /var/cache/apt + + +FROM yocto-sdk-installer AS yocto-sdk-qemuriscv64 + +# Fetch SDK binary packages +ADD https://developer.nasa.gov/cFS/yocto-sandbox/releases/download/v0.0.1-testing/poky-glibc-x86_64-core-image-cfecfs-riscv64-qemuriscv64-toolchain-5.0.12.sh /root/qemuriscv64-toolchain.sh + +RUN chmod a+x root/qemuriscv64-toolchain.sh + +# Install SDK +RUN /root/qemuriscv64-toolchain.sh -y + + +FROM yocto-sdk-installer AS yocto-sdk-qemumips + +# Fetch SDK binary packages +ADD https://developer.nasa.gov/cFS/yocto-sandbox/releases/download/v0.0.1-testing/poky-glibc-x86_64-core-image-cfecfs-mips32r2-qemumips-toolchain-5.0.12.sh /root/qemumips-toolchain.sh + +RUN chmod a+x root/qemumips-toolchain.sh + +# Install SDK +RUN /root/qemumips-toolchain.sh -y + +FROM scratch AS yocto-sdk + +COPY --from=yocto-sdk-qemuriscv64 /opt /opt +COPY --from=yocto-sdk-qemumips /opt /opt