forked from z4yx/petalinux-docker
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dockerfile
149 lines (135 loc) · 4.33 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
ARG UBUNTU_VERSION=18.04
FROM ubuntu:${UBUNTU_VERSION}
MAINTAINER gerstl <gerstl@ece.utexas.edu>
ARG UBUNTU_VERSION
ARG UBUNTU_MIRROR
ARG INSTALL_ROOT=/opt
ARG SYSTEMC_VERSION=2.3.4
ARG SYSTEMC_ARCHIVE=systemc-2.3.4.tar.gz
ARG PETA_VERSION=2022.2
ARG PETA_RELEASE=10141622
ARG PETA_RUN_FILE=petalinux-v${PETA_VERSION}-${PETA_RELEASE}-installer.run
ARG PETA_PLATFORM=
# build with "docker build --build-arg PETA_RELEASE=<release> -t petalinux-systemc:2022.2 ."
# install dependencies:
RUN [ -z "${UBUNTU_MIRROR}" ] || sed -i.bak s/archive.ubuntu.com/${UBUNTU_MIRROR}/g /etc/apt/sources.list
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
build-essential \
sudo \
tofrodos \
iproute2 \
gawk \
net-tools \
expect \
libncurses5-dev \
tftpd \
update-inetd \
libssl-dev \
flex \
bison \
libselinux1 \
gnupg \
wget \
socat \
gcc-multilib \
libidn11 \
libsdl1.2-dev \
libglib2.0-dev \
lib32z1-dev \
libgtk2.0-0 \
libtinfo5 \
xxd \
screen \
pax \
diffstat \
xvfb \
xterm \
texinfo \
gzip \
unzip \
cpio \
chrpath \
autoconf \
lsb-release \
libtool \
libtool-bin \
locales \
kmod \
git \
rsync \
bc \
u-boot-tools \
python \
vim-tiny \
`case ${UBUNTU_VERSION} in \
18*) echo xxd \
;; \
20*) echo libtinfo5 xxd \
;; \
esac` \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN dpkg --add-architecture i386 && apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y -q \
zlib1g:i386 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN locale-gen en_US.UTF-8 && update-locale
# make /bin/sh symlink to bash instead of dash:
RUN echo "dash dash/sh boolean false" | debconf-set-selections
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
# make a xilinx user
RUN adduser --disabled-password --gecos '' xilinx && \
usermod -aG sudo xilinx && \
echo "xilinx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
# run the SystemC install
# NOTE: 2.3.4 version requires automake to create missing Makefiles
COPY ${SYSTEMC_ARCHIVE} /home/xilinx/
RUN cd /home/xilinx && \
tar xzf ${SYSTEMC_ARCHIVE} && \
cd systemc-${SYSTEMC_VERSION} && \
aclocal && automake --add-missing && automake && \
mkdir objdir && \
cd objdir && \
../configure --prefix=${INSTALL_ROOT}/systemc-${SYSTEMC_VERSION} && \
make && \
make install && \
cd /home/xilinx && \
rm -f ${SYSTEMC_ARCHIVE} && \
rm -rf systemc-${SYSTEMC_VERSION}
# run the petalinux install
COPY sed.sh accept-eula.sh ${PETA_RUN_FILE} /home/xilinx/
RUN chmod a+rx /home/xilinx/${PETA_RUN_FILE} && \
chmod a+rx /home/xilinx/accept-eula.sh && \
chmod a+rx /home/xilinx/sed.sh && \
mv /home/xilinx/sed.sh /home/xilinx/sed && \
mkdir -p ${INSTALL_ROOT}/xilinx && \
chown xilinx.xilinx ${INSTALL_ROOT}/xilinx && \
cd /tmp && \
sudo -u xilinx -i /home/xilinx/accept-eula.sh /home/xilinx/${PETA_RUN_FILE} ${INSTALL_ROOT}/xilinx/petalinux "${PETA_PLATFORM}" && \
rm -f /home/xilinx/${PETA_RUN_FILE} /home/xilinx/accept-eula.sh /home/xilinx/sed /home/xilinx/petalinux_installation_log
USER xilinx
ENV HOME /home/xilinx
ENV LANG en_US.UTF-8
WORKDIR /home/xilinx
# add Petalinux tools and SystemC to path
RUN echo "" >> /home/xilinx/.bashrc && \
echo "export LD_LIBRARY_PATH=${INSTALL_ROOT}/systemc-${SYSTEMC_VERSION}/lib-linux64" >> /home/xilinx/.bashrc && \
echo "source ${INSTALL_ROOT}/xilinx/petalinux/settings.sh" >> /home/xilinx/.bashrc
# clone the Xilinx SystemC co-simulation demo
# NOTE: disable Versal demos (and library modules), they need newest g++
RUN cd /home/xilinx && \
git clone --depth 1 https://github.com/Xilinx/systemctlm-cosim-demo.git && \
cd systemctlm-cosim-demo && \
git submodule update --init libsystemctlm-soc && \
sed -i -e 's|/usr/local/systemc-2.3.2|'${INSTALL_ROOT}'/systemc-'${SYSTEMC_VERSION}'|g' Makefile && \
sed -i -e 's|\(^SC_OBJS += .*/mcdma.o\)|#\1|g' Makefile && \
sed -i -e 's|\(^SC_OBJS += .*/mrmac.o\)|#\1|g' Makefile && \
make zynq_demo zynqmp_demo && \
make TARGETS= clean
# clone the device trees for co-simulation
RUN cd /home/xilinx && \
source ${INSTALL_ROOT}/xilinx/petalinux/settings.sh && \
git clone -b xlnx_rel_v${PETA_VERSION} --depth 1 https://github.com/Xilinx/qemu-devicetrees && \
cd qemu-devicetrees && \
make