# This dockerfile is not meant to be used directly by docker.  The
# {{}} variables are replaced with values by the makefile.  Please generate
# the docker image for this file by running:
#
#   make coreboot-sdk
#
# Variables can be updated on the make command line or left blank to use
# the default values set by the makefile.
#
#  SDK_VERSION is used to name the version of the coreboot sdk to use.
#              Typically, this corresponds to the toolchain version.  This
#              is used to identify this docker image.
#  DOCKER_COMMIT is the coreboot Commit-ID to build the toolchain from.

FROM debian:sid AS coreboot-sdk
MAINTAINER Martin Roth <martin@coreboot.org>

RUN \
	useradd -p locked -m coreboot && \
	apt-get -qq update && \
	apt-get -qqy install \
		bc \
		bison \
		bsdextrautils \
		bzip2 \
		ccache \
		cmake \
		cscope \
		curl \
		device-tree-compiler \
		dh-autoreconf \
		diffutils \
		doxygen \
		exuberant-ctags \
		flex \
		g++ \
		gawk \
		gcc \
		git \
		gnat \
		golang \
		graphviz \
		lcov \
		libcrypto++-dev \
		libcurl4 \
		libcurl4-openssl-dev \
		libelf-dev \
		libfreetype6-dev \
		libftdi-dev \
		libftdi1-dev \
		libglib2.0-dev \
		libgmp-dev \
		libjaylink-dev \
		liblzma-dev \
		libncurses5-dev \
		libpci-dev \
		libreadline-dev \
		libssl-dev \
		libusb-1.0-0-dev \
		libusb-dev \
		libxml2-dev \
		libyaml-dev \
		m4 \
		make \
		msitools \
		nasm \
		openssl \
		patch \
		pbzip2 \
		pkg-config \
		python2 \
		python3 \
		qemu \
		rsync \
		shellcheck \
		subversion \
		unifont \
		uuid-dev \
		vim-common \
		wget \
		xz-utils \
		zlib1g-dev \
	&& apt-get clean \
	&& update-alternatives --install /usr/bin/python python /usr/bin/python2 1 \
	&& ln -s /usr/bin/automake /usr/bin/automake-1.15 \
	&& ln -s /usr/bin/aclocal /usr/bin/aclocal-1.15

RUN \
	cd /tmp && \
	git clone https://review.coreboot.org/coreboot && \
	cd coreboot && \
	git checkout {{DOCKER_COMMIT}}; \
	if echo {{CROSSGCC_PARAM}} | grep -q ^all; then \
		make -C /tmp/coreboot/util/crossgcc/ build_clang \
			BUILD_LANGUAGES=c,ada CPUS=$(nproc) DEST=/opt/xgcc; \
	fi; \
	make -C /tmp/coreboot/util/crossgcc/ {{CROSSGCC_PARAM}} \
		BUILD_LANGUAGES=c,ada CPUS=$(nproc) DEST=/opt/xgcc && \
	rm -rf /tmp/coreboot

RUN mkdir /home/coreboot/.ccache && \
	chown coreboot:coreboot /home/coreboot/.ccache && \
	mkdir /home/coreboot/cb_build && \
	chown coreboot:coreboot /home/coreboot/cb_build && \
	echo "export PATH=$PATH:/opt/xgcc/bin" >> /home/coreboot/.bashrc && \
	echo "export SDK_VERSION={{SDK_VERSION}}" >> /home/coreboot/.bashrc && \
	echo "export SDK_COMMIT={{DOCKER_COMMIT}}" >> /home/coreboot/.bashrc

ENV PATH $PATH:/opt/xgcc/bin
ENV SDK_VERSION={{SDK_VERSION}}
ENV SDK_COMMIT={{DOCKER_COMMIT}}
USER coreboot

FROM coreboot-sdk
# Test the built image
RUN mkdir -p /tmp/work && \
  cd /tmp/work && \
  git clone https://review.coreboot.org/bios_extract.git && \
  make -C bios_extract && \
  git clone https://review.coreboot.org/memtest86plus.git && \
  make -C memtest86plus && \
  git clone https://review.coreboot.org/flashrom.git && \
  CONFIG_EVERYTHING=yes make -C flashrom && \
  git clone https://review.coreboot.org/em100.git && \
  make -C em100 && \
  git clone https://review.coreboot.org/coreboot.git && \
  (cd coreboot && git submodule update --init --checkout ) && \
  make -C coreboot CPUS=$(nproc) test-abuild

RUN \
  cd /tmp/work && \
  make -C coreboot olddefconfig && \
  make -C coreboot all -j && \
  make -C coreboot printall && \
  make -C coreboot filelist && \
  make -C coreboot ctags-project && \
  make -C coreboot cscope-project

RUN \
  cd /tmp/work && \
  make -C coreboot doxygen -j

RUN \
  cd /tmp/work && \
  make -C coreboot test-payloads&& \
  make -C coreboot test-tools -j && \
  make -C coreboot test-lint -j && \
  make -C coreboot test-cleanup -j && \
  cd && \
  rm -rf /tmp/work/

FROM coreboot-sdk
VOLUME /home/coreboot/.ccache
