# SPDX-License-Identifier: GPL-2.0+
# This Containerfile is used to build an image containing basic stuff to be used
# to build barebox and run our test suites.

FROM debian:trixie
MAINTAINER Sascha Hauer <s.hauer@pengutronix.de>
LABEL Description="This image is for building and testing barebox inside a container"

# Make sure apt is happy
ENV DEBIAN_FRONTEND=noninteractive

# Update and install things from apt now
RUN apt-get update && apt-get install -y --no-install-recommends \
	bison \
	build-essential \
	coreutils \
	flex \
	gawk \
	git \
	imagemagick \
	libc6-i386 \
	libgit2-dev \
	libguestfs-tools \
	lz4 \
	librsvg2-bin \
	libseccomp-dev \
	libssl-dev \
	libtool \
	libudev-dev \
	libusb-1.0-0-dev \
	lzma-alone \
	lzop \
	mount \
	musl-tools \
	openssl \
	pkg-config \
	util-linux \
	wget \
	qemu-system-arm \
	qemu-system-misc \
	qemu-system-mips \
	qemu-system-x86 \
	qemu-system-common \
	ovmf \
	python3 \
	python3-crcmod \
	python3-cryptography \
	python3-jsonschema \
	python3-libfdt \
	python3-pip \
	python3-setuptools \
	python3-virtualenv \
	python3-yaml \
	virtualenv \
	sudo \
	device-tree-compiler \
	u-boot-tools \
	yamllint \
	yq \
	&& apt-get clean \
	&& rm -rf /var/lib/apt/lists/*

ENV GCC_VERSION=15.2.0
ENV LLVM_VERSION=20

RUN apt-get update && apt-get install -y --no-install-recommends lsb-release gnupg \
	&& wget https://apt.llvm.org/llvm.sh \
	&& chmod +x llvm.sh && ./llvm.sh ${LLVM_VERSION} \
	&& apt-get remove -y lsb-release gnupg \
	&& apt-get autoremove -y --purge \
	&& apt-get clean \
	&& rm -rf llvm.sh /var/lib/apt/lists/*

# Manually install the kernel.org Crosstool based toolchains
RUN korg_crosstool_dl() { wget -nv -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/${1}/${2}/${1}-gcc-${2}-nolibc-${3}.tar.xz | tar -C /opt -xJ ; } && \
    korg_crosstool_dl x86_64 ${GCC_VERSION} arm-linux-gnueabi && \
    korg_crosstool_dl x86_64 ${GCC_VERSION} aarch64-linux     && \
    korg_crosstool_dl x86_64 ${GCC_VERSION} mips-linux        && \
    korg_crosstool_dl x86_64 ${GCC_VERSION} or1k-linux        && \
    korg_crosstool_dl x86_64 ${GCC_VERSION} powerpc-linux     && \
    korg_crosstool_dl x86_64 ${GCC_VERSION} riscv64-linux

RUN tgz_checksum_dl() { set -e; wget -nv -O archive.tgz "$1"; \
                        echo "$2 archive.tgz" | sha256sum --check --status; tar -C /opt -xzf archive.tgz; rm archive.tgz; } && \
    tgz_checksum_dl https://github.com/kalray/build-scripts/releases/download/v5.2.0/gcc-kalray-kvx-ubuntu-22.04-v5.2.0.tar.gz \
		    f59964cac188f1e5a8f628d0abef68e3b6ceebdae18dff51625472329fe6ec40

RUN wget -nv "https://github.com/qemu/qemu/blob/v10.1.0/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin?raw=true" -O /usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.bin

# Create our user/group
RUN useradd -m -U barebox
RUN echo barebox ALL=NOPASSWD: ALL > /etc/sudoers.d/barebox

# install labgrid
RUN pip3 install -q --no-cache-dir --break-system-packages \
    git+https://github.com/labgrid-project/labgrid.git@v25.0.1 && \
    ln -s $(which pytest) /usr/local/bin/labgrid-pytest

ENV CROSS_COMPILE_arm=/opt/gcc-${GCC_VERSION}-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-
ENV CROSS_COMPILE_arm64=/opt/gcc-${GCC_VERSION}-nolibc/aarch64-linux/bin/aarch64-linux-
ENV CROSS_COMPILE_mips=/opt/gcc-${GCC_VERSION}-nolibc/mips-linux/bin/mips-linux-
ENV CROSS_COMPILE_openrisc=/opt/gcc-${GCC_VERSION}-nolibc/or1k-linux/bin/or1k-linux-
ENV CROSS_COMPILE_powerpc=/opt/gcc-${GCC_VERSION}-nolibc/powerpc-linux/bin/powerpc-linux-
ENV CROSS_COMPILE_riscv=/opt/gcc-${GCC_VERSION}-nolibc/riscv64-linux/bin/riscv64-linux-
ENV CROSS_COMPILE_kvx=/opt/gcc-kalray-kvx-v5.2.0/bin/kvx-elf-

ENV CROSS_COMPILE_llvm=-${LLVM_VERSION}
# Workaround for https://github.com/llvm/llvm-project/issues/112458
RUN ln -Ts /usr/lib/llvm-${LLVM_VERSION}/lib/clang/${LLVM_VERSION}/lib/linux/ \
           /usr/lib/llvm-${LLVM_VERSION}/lib/clang/${LLVM_VERSION}/lib/x86_64-pc-linux-gnu

USER barebox:barebox
