summaryrefslogtreecommitdiff
path: root/util/docker/coreboot-sdk/Dockerfile
blob: 905af514b1c70dd9b3eec0e50de3f4605ab3c5d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# 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
MAINTAINER Martin Roth <martin@coreboot.org>

RUN \
	useradd -p locked -m coreboot && \
	apt-get -qq update && \
	apt-get -qqy install \
		bc \
		bison \
		bzip2 \
		ccache \
		cmake \
		cscope \
		curl \
		device-tree-compiler \
		dh-autoreconf \
		diffutils \
		doxygen \
		exuberant-ctags \
		flex \
		g++ \
		gawk \
		gcc \
		git \
		gnat \
		golang \
		graphviz \
		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

VOLUME /home/coreboot/.ccache

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

# 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 && \
  \
  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 && \
  \
  make -C coreboot doxygen -j && \
  make -C coreboot test-payloads&& \
  make -C coreboot test-tools -j && \
  make -C coreboot test-lint -j && \
  make -C coreboot test-cleanup -j && \
  make -C coreboot CPUS=$(nproc) crostools && \
  cd && \
  rm -rf /tmp/work/