-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
344 lines (269 loc) · 13.2 KB
/
Dockerfile
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
ARG DEBIAN_FRONTEND="noninteractive"
ARG INSTALLATION_PREFIX=/opt/bsc
ARG BUILD_ONLY
ARG RELEASE_TAG
FROM ubuntu:18.04 AS base
ARG INSTALLATION_PREFIX
ARG RELEASE_TAG
LABEL AUTHOR="Programming Models Group at BSC <ompss-fpga-support@bsc.es> (https://pm.bsc.es/ompss-at-fpga)"
#ARG INSTALLATION_PREFIX
RUN apt update && apt install -y autoconf \
automake \
binutils-dev \
bison \
build-essential \
ca-certificates \
curl \
flex \
gfortran \
gperf \
git \
libboost-all-dev \
libiberty-dev \
libltdl-dev \
libsqlite3-dev \
libtool \
libxml2-dev \
pkg-config \
python \
python3.7 \
python3-pip \
sudo \
vim \
wget \
# Needed by Xilinx tools
libgtk2.0-0 \
libncurses5 \
libx11-6 \
libxext6 \
libxrender1 \
libxtst6 \
procps \
# Needed by Petalinux tools
bc \
chrpath \
cpio \
diffstat \
gawk \
gnupg \
gnupg-agent \
libncurses5-dev \
libtool-bin \
locales \
lsb-release \
net-tools \
rsync \
socat \
texinfo \
unzip \
xterm \
zlib1g-dev \
# Extra tools
openssh-client
RUN python3.7 -m pip install pip --upgrade
RUN python3.7 -m pip install wheel --upgrade
RUN python3.7 -m pip install setuptools --upgrade
# Install and configure tzdata
RUN export DEBIAN_FRONTEND=noninteractive; \
export DEBCONF_NONINTERACTIVE_SEEN=true; \
echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \
echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \
apt-get install --no-install-recommends tzdata
#if is arm64
RUN if [ \"`arch`\" = \"aarch64\" ] || [ \"`arch`\" = \"arm64\" ] ; then \
dpkg --add-architecture amd64 && apt-get update && apt-get install -y\
crossbuild-essential-amd64 \
gfortran-x86-64-linux-gnu \
g++-multilib-x86-64-linux-gnu \
gcc-multilib-x86-64-linux-gnu ; \
elif [ \"`arch`\" = \"x86_64\" ]; then \
apt-get install -y \
crossbuild-essential-arm64 \
gfortran-aarch64-linux-gnu; \
else \
false; \
fi;
RUN apt-get update \
&& apt-get install -y -q \
crossbuild-essential-armhf \
gfortran-arm-linux-gnueabihf
RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen \
&& update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
FROM base as installed_pkg
FROM installed_pkg as build
ARG INSTALLATION_PREFIX
ARG RELEASE_TAG
WORKDIR /tmp/work/
#INSTALL PAPI
ENV CFLAGS=-Wno-format-truncation
ENV CXXFLAGS=-Wno-format-truncation
RUN wget http://icl.utk.edu/projects/papi/downloads/papi-6.0.0.tar.gz && tar -zxf papi-6.0.0.tar.gz && rm papi-6.0.0.tar.gz
WORKDIR /tmp/work/papi-6.0.0/src
#ARM64
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm64/papi --host=aarch64-linux-gnu --with-arch=aarch64 \
--with-CPU=arm --with-ffsll --with-walltimer=cycle -with-tls=__thread \
--with-virtualtimer=perfctr --with-perf-events --with-tests=""
RUN make -j && make install
RUN make distclean
#ARM32
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm32/papi --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --with-arch=arm \
--with-CPU=arm --with-ffsll --with-walltimer=cycle -with-tls=__thread \
--with-virtualtimer=perfctr --with-perf-events --with-tests=""
RUN make -j && make install
RUN make distclean
#X86_64
RUN ./configure --prefix=$INSTALLATION_PREFIX/x86_64/papi --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-perf-events \
--with-CPU=core --with-ffsll --with-walltimer=cycle -with-tls=__thread \
--with-virtualtimer=perfctr --with-perf-events --with-tests=""
RUN make -j && make install
RUN make distclean
#BINUTILS
WORKDIR /tmp/work/
RUN wget https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.gz \
&& tar -zxf binutils-2.37.tar.gz \
&& rm binutils-2.37.tar.gz
WORKDIR /tmp/work/binutils-2.37
#ARM64
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm64/binutils --host=aarch64-linux-gnu --enable-shared \
--enable-install-libiberty \
&& make tooldir=$INSTALLATION_PREFIX/arm64/binutils && make tooldir=$INSTALLATION_PREFIX/arm64/binutils install && make distclean
#ARM32
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm32/binutils --host=arm-linux-gnueabihf --enable-shared \
--enable-install-libiberty \
&& make tooldir=$INSTALLATION_PREFIX/arm32/binutils && make tooldir=$INSTALLATION_PREFIX/arm32/binutils install && make distclean
#X86_64
RUN ./configure --prefix=$INSTALLATION_PREFIX/x86_64/binutils --host=x86_64-linux-gnu --enable-shared \
--enable-install-libiberty \
&& make tooldir=$INSTALLATION_PREFIX/x86_64/binutils && make tooldir=$INSTALLATION_PREFIX/x86_64/binutils install && make distclean
#ZLIB
WORKDIR /tmp/work/
RUN wget https://zlib.net/zlib-1.2.13.tar.gz && tar -zxf zlib-1.2.13.tar.gz && rm zlib-1.2.13.tar.gz
WORKDIR /tmp/work/zlib-1.2.13
#ARM64
RUN CHOST=aarch64-linux-gnu ./configure --prefix=$INSTALLATION_PREFIX/arm64/libz && CHOST=aarch64-linux-gnu make install && make distclean
#ARM32
RUN CHOST=arm-linux-gnueabihf ./configure --prefix=$INSTALLATION_PREFIX/arm32/libz && CHOST=arm-linux-gnueabihf make install && make distclean
#X86_64
RUN CHOST=x86_64-linux-gnu ./configure --prefix=$INSTALLATION_PREFIX/x86_64/libz && CHOST=x86_64-linux-gnu make install && make distclean
#LIBXML2
WORKDIR /tmp/work/
RUN wget https://gitlab.gnome.org/GNOME/libxml2/-/archive/v2.9.12/libxml2-v2.9.12.tar.gz \
&& tar -zxf libxml2-v2.9.12.tar.gz \
&& rm libxml2-v2.9.12.tar.gz
WORKDIR /tmp/work/libxml2-v2.9.12
RUN autoreconf -ifv
#ARM64
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm64/libxml2 --host=aarch64-linux-gnu --with-zlib=$INSTALLATION_PREFIX/arm64/libz --without-python \
&& make install && make distclean
#ARM32
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm32/libxml2 --host=arm-linux-gnueabihf --with-zlib=$INSTALLATION_PREFIX/arm32/libz --without-python \
&& make install && make distclean
#X86_64
RUN ./configure --prefix=$INSTALLATION_PREFIX/x86_64/libxml2 --host=x86_64-linux-gnu --with-zlib=$INSTALLATION_PREFIX/x86_64/libz --without-python \
&& make install && make distclean
#ONLY COMPILE PARAVER FOR LOCAL MACHINE
WORKDIR /tmp/work/
RUN git clone https://github.com/bsc-performance-tools/paraver-kernel
WORKDIR /tmp/work/paraver-kernel
RUN ./bootstrap
RUN ./configure --with-boost-libdir=/usr/lib/$(gcc -dumpmachine) --prefix=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/paraver
RUN make && make install
WORKDIR /tmp/work
RUN apt install -y libwxgtk3.0-gtk3-dev libssl-dev
RUN git clone https://github.com/bsc-performance-tools/wxparaver
WORKDIR /tmp/work/wxparaver
RUN ./bootstrap
RUN ./configure --with-boost-libdir=/usr/lib/$(gcc -dumpmachine) --prefix=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/paraver
RUN make && make install
WORKDIR /tmp/work/
ADD Makefile ./
ADD ait ./ait
ADD extrae ./extrae
ADD mcxx ./mcxx
ADD nanox ./nanox
ADD ompss-at-fpga-kernel-module ./ompss-at-fpga-kernel-module
ADD xdma ./xdma
ADD xtasks ./xtasks
#EXTRAE
WORKDIR /tmp/work/extrae
ENV CFLAGS=-lpthread
ENV CXXFLAGS=-lpthread
ENV LDFLAGS=-lpthread
RUN ./bootstrap
#ARM64
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm64/ompss/${RELEASE_TAG}/extrae --host=aarch64-linux-gnu --enable-arm64 \
--without-mpi --without-unwind --without-dyninst --with-papi=$INSTALLATION_PREFIX/arm64/papi \
--with-libz=$INSTALLATION_PREFIX/arm64/libz --with-binutils=$INSTALLATION_PREFIX/arm64/binutils \
--with-xml-prefix=$INSTALLATION_PREFIX/arm64/libxml2
RUN make -j && make install && make distclean
#ARM32
RUN ./configure --prefix=$INSTALLATION_PREFIX/arm32/ompss/${RELEASE_TAG}/extrae --host=arm-linux-gnueabihf --enable-arm \
--without-mpi --without-unwind --without-dyninst --with-papi=$INSTALLATION_PREFIX/arm32/papi \
--with-libz=$INSTALLATION_PREFIX/arm32/libz --with-binutils=$INSTALLATION_PREFIX/arm32/binutils \
--with-xml-prefix=$INSTALLATION_PREFIX/arm32/libxml2
RUN make -j && make install && make distclean
#X86_64
RUN ./configure --prefix=$INSTALLATION_PREFIX/x86_64/ompss/${RELEASE_TAG}/extrae --host=x86_64-linux-gnu --enable-amd64 \
--without-mpi --without-unwind --without-dyninst --with-papi=$INSTALLATION_PREFIX/x86_64/papi \
--with-libz=$INSTALLATION_PREFIX/x86_64/libz --with-binutils=$INSTALLATION_PREFIX/x86_64/binutils \
--with-xml-prefix=$INSTALLATION_PREFIX/x86_64/libxml2
RUN make -j && make install && make distclean
ENV CFLAGS=
ENV CXXFLAGS=
ENV LDFLAGS=
#INSTALL TOOLCHAIN
WORKDIR /tmp/work
#X86_64
RUN make -j PREFIX_TARGET=$INSTALLATION_PREFIX/x86_64/ompss/${RELEASE_TAG} PREFIX_HOST=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG} TARGET=$(test $(arch) != x86_64 && echo x86_64-linux-gnu) PLATFORM=qdma \
EXTRAE_HOME=$INSTALLATION_PREFIX/x86_64/ompss/${RELEASE_TAG}/extrae MCXX_NAME=mcxx-x86_64 \
all
RUN make mrproper
#ARM64
RUN make -j PREFIX_TARGET=$INSTALLATION_PREFIX/arm64/ompss/${RELEASE_TAG} PREFIX_HOST=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG} TARGET=$(test $(arch) != aarch64 && echo aarch64-linux-gnu) \
EXTRAE_HOME=$INSTALLATION_PREFIX/arm64/ompss/${RELEASE_TAG}/extrae MCXX_NAME=mcxx-arm64 \
all
RUN make mrproper
#ARM32
#Assuming no one will compile from an arm32 platform => always setting TARGET
RUN make -j PREFIX_TARGET=$INSTALLATION_PREFIX/arm32/ompss/${RELEASE_TAG} PREFIX_HOST=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG} TARGET=arm-linux-gnueabihf \
EXTRAE_HOME=$INSTALLATION_PREFIX/arm32/ompss/${RELEASE_TAG}/extrae MCXX_NAME=mcxx-arm32 \
all
RUN make mrproper
FROM installed_pkg AS dist_img
ARG INSTALLATION_PREFIX
ARG RELEASE_TAG
ARG INSTALLATION_PREFIX
COPY --from=build $INSTALLATION_PREFIX $INSTALLATION_PREFIX
LABEL AUTHOR="Programming Models Group at BSC <ompss-fpga-support@bsc.es> (https://pm.bsc.es/ompss-at-fpga)"
ARG BUILD_ONLY
RUN if [ "$BUILD_ONLY" = "true" ]; \
then true; \
else apt update && apt install -y sudo libwxgtk3.0-gtk3-dev build-essential libsqlite3-dev crossbuild-essential-armhf && rm -rf /var/lib/apt/lists/* && apt clean; \
if [ \"`arch`\" = \"aarch64\" ] || [ \"`arch`\" = \"arm64\" ]; then \
apt install crossbuild-essential-amd64; \
fi; \
fi
RUN adduser --disabled-password --gecos '' ompss \
&& adduser ompss sudo \
&& echo 'ompss:ompss' | chpasswd \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/mcxx-arm64/bin" >>$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/environment_ompss_fpga.sh \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/mcxx-arm32/bin" >>$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/environment_ompss_fpga.sh \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/mcxx-x86_64/bin" >>$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/environment_ompss_fpga.sh \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/ait/bin" >>$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/environment_ompss_fpga.sh \
&& echo "export PYTHONPATH=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/ait" >>$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/environment_ompss_fpga.sh
ADD ./dockerImageFiles/welcome_ompss_fpga.txt $INSTALLATION_PREFIX
WORKDIR /home/ompss/
USER ompss
ADD --chown=ompss:ompss ./dockerImageFiles/example ./example/
#RUN ln -s $INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/nanox/share/doc/nanox/paraver_configs/ompss ./example/paraver_configs \
RUN echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/wxparaver/bin" >>.bashrc \
&& echo "cat $INSTALLATION_PREFIX/welcome_ompss_fpga.txt" >>.bashrc \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/mcxx-arm64/bin" >>.bashrc \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/mcxx-arm32/bin" >>.bashrc \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/mcxx-x86_64/bin" >>.bashrc \
&& echo "export PATH=\$PATH:$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/ait/bin" >>.bashrc \
&& echo "export PYTHONPATH=$INSTALLATION_PREFIX/$(arch | sed 's/aarch64/arm64/g' | sed 's/armhf/arm32/g')/ompss/${RELEASE_TAG}/ait" >>.bashrc
CMD ["bash"]