blob: e96b1e9e3d900f5aa8343c06d0b7971883b8309a [file] [log] [blame]
James Conroy3c6e9ed2021-11-24 15:17:49 +00001FROM ubuntu:18.04
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +05302ENV TERM linux
3ENV DEBIAN_FRONTEND noninteractive
4
5# Forward system proxy setting
6# ARG proxy
7# ENV http_proxy $proxy
8# ENV https_proxy $proxy
9
10# Basic apt update
11RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends locales ca-certificates && rm -rf /var/lib/apt/lists/*
12
13# Set the locale to en_US.UTF-8, because the Yocto build fails without any locale set.
14RUN locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
15ENV LANG en_US.UTF-8
16ENV LC_ALL en_US.UTF-8
17
18# Again, off the certificare
19RUN echo "check_certificate = off" >> ~/.wgetrc
20RUN echo "[global] \n\
21trusted-host = pypi.python.org \n \
22\t pypi.org \n \
23\t files.pythonhosted.org" >> /etc/pip.conf
24
25# Get basic packages
26RUN apt-get update && apt-get install -y \
27 apparmor \
28 aufs-tools \
29 automake \
30 bash-completion \
31 btrfs-tools \
32 build-essential \
33 cmake \
34 createrepo \
35 curl \
36 dpkg-sig \
37 g++ \
38 gcc \
39 git \
40 iptables \
41 jq \
42 libapparmor-dev \
43 libc6-dev \
44 libcap-dev \
45 libsystemd-dev \
46 libyaml-dev \
47 mercurial \
48 net-tools \
49 parallel \
50 pkg-config \
51 python-dev \
52 python-mock \
53 python-pip \
54 python-setuptools \
55 python-websocket \
56 golang-go \
57 iproute2 \
58 iputils-ping \
59 vim-common \
60 vim \
61 wget \
62 libtool \
63 unzip \
64 scons \
65 curl \
66 autoconf \
67 libtool \
68 build-essential \
James Conroy3aa29852021-12-24 14:46:23 +000069 libssl-dev \
70 g++ && rm -rf /var/lib/apt/lists/*
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053071
72# Install Cross-compiling ToolChain
Elham8f5042f2022-04-05 13:19:10 -040073RUN apt-get update && apt-get install -y crossbuild-essential-arm64 crossbuild-essential-armhf
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053074
James Conroy3aa29852021-12-24 14:46:23 +000075# Install Cmake 3.19
76RUN cd $HOME && \
77 wget -O cmake-3.19.0.tar.gz https://cmake.org/files/v3.19/cmake-3.19.0.tar.gz && \
78 tar -xzf cmake-3.19.0.tar.gz && \
79 cd $HOME/cmake-3.19.0 && \
80 ./bootstrap && \
81 make && \
82 make install
83
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053084# Build and install Google's Protobuf library
85# Download and Extract
86RUN mkdir -p $HOME/google && \
87 cd $HOME/google && \
Keith Mok34b9aba2021-03-18 21:42:16 -070088 wget https://github.com/protocolbuffers/protobuf/releases/download/v3.12.0/protobuf-all-3.12.0.tar.gz && \
89 tar -zxvf protobuf-all-3.12.0.tar.gz
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053090
91# Build a native (x86_64) version
Keith Mok34b9aba2021-03-18 21:42:16 -070092RUN cd $HOME/google/protobuf-3.12.0 && \
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053093 mkdir x86_build && cd x86_build && \
94 ../configure --prefix=$HOME/armnn-devenv/google/x86_64_pb_install && \
Keith Mok34b9aba2021-03-18 21:42:16 -070095 make install -j$(nproc)
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053096
97# Build the arm64 version of the protobuf libraries
Keith Mok34b9aba2021-03-18 21:42:16 -070098RUN cd $HOME/google/protobuf-3.12.0 && \
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +053099 mkdir arm64_build && cd arm64_build && \
100 export CC=aarch64-linux-gnu-gcc && \
101 export CXX=aarch64-linux-gnu-g++ && \
102 ../configure --host=aarch64-linux \
103 --prefix=$HOME/armnn-devenv/google/arm64_pb_install \
104 --with-protoc=$HOME/armnn-devenv/google/x86_64_pb_install/bin/protoc && \
Keith Mok34b9aba2021-03-18 21:42:16 -0700105 make install -j$(nproc)
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530106
Elham8f5042f2022-04-05 13:19:10 -0400107# Build the arm32 version of the protobuf libraries
108RUN cd $HOME/google/protobuf-3.12.0 && \
109 mkdir arm32_build && cd arm32_build && \
110 export CC=arm-linux-gnueabihf-gcc && \
111 export CXX=arm-linux-gnueabihf-g++ && \
112 ../configure --host=arm-linux \
113 --prefix=$HOME/armnn-devenv/google/arm32_pb_install \
114 --with-protoc=$HOME/armnn-devenv/google/x86_64_pb_install/bin/protoc && \
115 make install -j$(nproc)
116
117# Dep Error - Bug ARMNN
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530118RUN apt-get update && apt-get install -y \
119 python-numpy
120
121# Setup Env
122# ENV PATH=$HOME/armnn-devenv/google/x86_64_pb_install/bin/:$PATH
123# ENV LD_LIBRARY_PATH=$HOME/armnn-devenv/google/x86_64_pb_install/lib/:$LD_LIBRARY_PATH
124
Elham8f5042f2022-04-05 13:19:10 -0400125# Download ArmNN 64-bit
James Conroy3c6e9ed2021-11-24 15:17:49 +0000126RUN cd $HOME/armnn-devenv && git clone "https://review.mlplatform.org/ml/armnn" && \
Elham8f5042f2022-04-05 13:19:10 -0400127 cd armnn/ && git checkout master
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530128
Elham8f5042f2022-04-05 13:19:10 -0400129# Download ArmNN 32-bit
130RUN cd $HOME/armnn-devenv && git clone "https://review.mlplatform.org/ml/armnn" armnn-32 && \
131 cd armnn-32/ && git checkout master
132
133# Build 64-bit Compute Library
Keith Mok34b9aba2021-03-18 21:42:16 -0700134RUN cd $HOME/armnn-devenv/ && git clone https://review.mlplatform.org/ml/ComputeLibrary && \
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530135 cd ComputeLibrary && \
Keith Mok34b9aba2021-03-18 21:42:16 -0700136 git checkout $($HOME/armnn-devenv/armnn/scripts/get_compute_library.sh -p) && \
James Conroy3aa29852021-12-24 14:46:23 +0000137 scons Werror=0 arch=arm64-v8a neon=1 opencl=1 embed_kernels=1 extra_cxx_flags="-fPIC" -j$(nproc)
Keith Mok34b9aba2021-03-18 21:42:16 -0700138
Elham8f5042f2022-04-05 13:19:10 -0400139# Build 32-bit Compute Library
140RUN cd $HOME/armnn-devenv/ && mkdir ComputeLibrary_32 && git clone https://review.mlplatform.org/ml/ComputeLibrary ComputeLibrary_32 && \
141 cd ComputeLibrary_32 &&\
142 git checkout $($HOME/armnn-devenv/armnn/scripts/get_compute_library.sh -p) && \
143 scons Werror=0 arch=armv7a neon=1 opencl=1 embed_kernels=1 extra_cxx_flags="-fPIC" -j$(nproc)
144
James Conroy3aa29852021-12-24 14:46:23 +0000145# Download Tensorflow (Checkout latest tested version of TF using get_tensorflow.sh)
146RUN cd $HOME/armnn-devenv && \
147 git clone https://github.com/tensorflow/tensorflow.git && \
Keith Mok34b9aba2021-03-18 21:42:16 -0700148 cd tensorflow && \
James Conroy3aa29852021-12-24 14:46:23 +0000149 git checkout $($HOME/armnn-devenv/armnn/scripts/get_tensorflow.sh -p)
Keith Mok34b9aba2021-03-18 21:42:16 -0700150
Elham8f5042f2022-04-05 13:19:10 -0400151# Build 64-bit TF Lite
James Conroy3aa29852021-12-24 14:46:23 +0000152RUN cd $HOME/armnn-devenv && \
153 curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz && \
Elham8f5042f2022-04-05 13:19:10 -0400154 mkdir tflite-toolchains &&\
James Conroy3aa29852021-12-24 14:46:23 +0000155 tar xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C tflite-toolchains && \
156 mkdir -p tflite/build && \
157 cd tflite/build && \
158 ARMCC_PREFIX=$HOME/armnn-devenv/tflite-toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu- && \
159 ARMCC_FLAGS="-funsafe-math-optimizations" && \
160 cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
161 -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
162 -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
163 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_SYSTEM_NAME=Linux \
164 -DTFLITE_ENABLE_XNNPACK=OFF \
165 -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
166 $HOME/armnn-devenv/tensorflow/tensorflow/lite/ && \
167 cmake --build .
168
Elham8f5042f2022-04-05 13:19:10 -0400169# Build 32-bit TF Lite
170RUN cd $HOME/armnn-devenv && \
171 curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz && \
172 mkdir tflite-toolchains-32 && \
173 tar xf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C tflite-toolchains-32 && \
174 mkdir -p tflite-32/build && \
175 cd tflite-32/build && \
176 ARMCC_PREFIX=$HOME/armnn-devenv/tflite-toolchains-32/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- && \
177 ARMCC_FLAGS="-funsafe-math-optimizations" && \
178 cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
179 -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
180 -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
181 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_SYSTEM_NAME=Linux \
182 -DTFLITE_ENABLE_XNNPACK=OFF \
183 -DCMAKE_SYSTEM_PROCESSOR=armv7a \
184 $HOME/armnn-devenv/tensorflow/tensorflow/lite/ && \
185 cmake --build .
186
James Conroy3aa29852021-12-24 14:46:23 +0000187# Download Flatbuffers
Keith Mok34b9aba2021-03-18 21:42:16 -0700188RUN cd $HOME/armnn-devenv && \
189 wget -O flatbuffers-1.12.0.tar.gz https://github.com/google/flatbuffers/archive/v1.12.0.tar.gz && \
190 tar xf flatbuffers-1.12.0.tar.gz && \
191 cd flatbuffers-1.12.0 && \
192 rm -f CMakeCache.txt
193
James Conroy3aa29852021-12-24 14:46:23 +0000194# Build native x86_64 version of Flatbuffers
Keith Mok34b9aba2021-03-18 21:42:16 -0700195RUN cd $HOME/armnn-devenv && cd flatbuffers-1.12.0 && \
196 mkdir build && \
197 cd build && \
198 cmake .. -DFLATBUFFERS_BUILD_FLATC=1 \
199 -DCMAKE_INSTALL_PREFIX:PATH=$HOME/armnn-devenv/flatbuffers \
200 -DFLATBUFFERS_BUILD_TESTS=0 && \
201 make all install -j$(nproc)
202
James Conroy3aa29852021-12-24 14:46:23 +0000203# Build arm64 version of Flatbuffers
Elham8f5042f2022-04-05 13:19:10 -0400204RUN cd $HOME/armnn-devenv && cd flatbuffers-1.12.0 && \
Keith Mok34b9aba2021-03-18 21:42:16 -0700205 mkdir build-arm64 && \
206 cd build-arm64 && \
207 CXXFLAGS="-fPIC" cmake .. -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc \
208 -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ \
209 -DFLATBUFFERS_BUILD_FLATC=1 \
210 -DCMAKE_INSTALL_PREFIX:PATH=$HOME/armnn-devenv/flatbuffers-arm64 \
211 -DFLATBUFFERS_BUILD_TESTS=0 && \
212 make all install -j$(nproc)
213
Elham8f5042f2022-04-05 13:19:10 -0400214# Build arm32 version of Flatbuffers
215RUN cd $HOME/armnn-devenv && cd flatbuffers-1.12.0 && \
216 mkdir build-arm32 && \
217 cd build-arm32 && \
218 CXXFLAGS="-fPIC" cmake .. -DCMAKE_C_COMPILER=/usr/bin/arm-linux-gnueabihf-gcc \
219 -DCMAKE_CXX_COMPILER=/usr/bin/arm-linux-gnueabihf-g++ \
220 -DFLATBUFFERS_BUILD_FLATC=1 \
221 -DCMAKE_INSTALL_PREFIX:PATH=$HOME/armnn-devenv/flatbuffers-arm32 \
222 -DFLATBUFFERS_BUILD_TESTS=0 && \
223 make all install -j$(nproc)
224
Keith Mok34b9aba2021-03-18 21:42:16 -0700225# Build onnx
226RUN cd $HOME/armnn-devenv && git clone https://github.com/onnx/onnx.git && \
227 cd onnx && \
228 git fetch https://github.com/onnx/onnx.git 553df22c67bee5f0fe6599cff60f1afc6748c635 && git checkout FETCH_HEAD && \
229 LD_LIBRARY_PATH=$HOME/armnn-devenv/google/x86_64_pb_install/lib:$LD_LIBRARY_PATH \
230 $HOME/armnn-devenv/google/x86_64_pb_install/bin/protoc \
231 onnx/onnx.proto --proto_path=. --proto_path=../google/x86_64_pb_install/include --cpp_out $HOME/armnn-devenv/onnx
232
Elham8f5042f2022-04-05 13:19:10 -0400233# Generate TF Lite Schema 64-bit
Keith Mok34b9aba2021-03-18 21:42:16 -0700234RUN cd $HOME/armnn-devenv && \
Keith Mok34b9aba2021-03-18 21:42:16 -0700235 cd tflite && \
236 cp ../tensorflow/tensorflow/lite/schema/schema.fbs . && \
237 ../flatbuffers-1.12.0/build/flatc -c --gen-object-api --reflect-types --reflect-names schema.fbs
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530238
Elham8f5042f2022-04-05 13:19:10 -0400239# Generate TF Lite Schema 32-bit
240RUN cd $HOME/armnn-devenv && \
241 cd tflite-32 && \
242 cp ../tensorflow/tensorflow/lite/schema/schema.fbs . && \
243 ../flatbuffers-1.12.0/build/flatc -c --gen-object-api --reflect-types --reflect-names schema.fbs
244
245# Build 64-bit ArmNN
Keith Mok34b9aba2021-03-18 21:42:16 -0700246RUN cd $HOME/armnn-devenv && \
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530247 cd armnn && mkdir build && cd build && \
248 export CXX=aarch64-linux-gnu-g++ && \
249 export CC=aarch64-linux-gnu-gcc && \
250 cmake .. \
Keith Mok34b9aba2021-03-18 21:42:16 -0700251 -DCMAKE_CXX_FLAGS=-w \
252 -DBUILD_TESTS=1 \
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530253 -DARMCOMPUTE_ROOT=$HOME/armnn-devenv/ComputeLibrary \
254 -DARMCOMPUTE_BUILD_DIR=$HOME/armnn-devenv/ComputeLibrary/build/ \
Jegathesan Shanmugambdba2722020-03-26 22:47:37 +0530255 -DARMCOMPUTENEON=1 -DARMCOMPUTECL=1 -DARMNNREF=1 \
Keith Mok34b9aba2021-03-18 21:42:16 -0700256 -DONNX_GENERATED_SOURCES=$HOME/armnn-devenv/onnx \
257 -DBUILD_ONNX_PARSER=1 \
Keith Mok34b9aba2021-03-18 21:42:16 -0700258 -DBUILD_TF_LITE_PARSER=1 \
James Conroy3aa29852021-12-24 14:46:23 +0000259 -DBUILD_ARMNN_TFLITE_DELEGATE=1 \
260 -DTENSORFLOW_ROOT=$HOME/armnn-devenv/tensorflow \
261 -DTFLITE_LIB_ROOT=$HOME/armnn-devenv/tflite/build \
262 -DTF_LITE_SCHEMA_INCLUDE_PATH=$HOME/armnn-devenv/tflite \
Keith Mok34b9aba2021-03-18 21:42:16 -0700263 -DFLATBUFFERS_ROOT=$HOME/armnn-devenv/flatbuffers-arm64 \
264 -DFLATC_DIR=$HOME/armnn-devenv/flatbuffers-1.12.0/build \
265 -DPROTOBUF_ROOT=$HOME/armnn-devenv/google/x86_64_pb_install \
266 -DPROTOBUF_LIBRARY_DEBUG=$HOME/armnn-devenv/google/arm64_pb_install/lib/libprotobuf.so.23.0.0 \
267 -DPROTOBUF_LIBRARY_RELEASE=$HOME/armnn-devenv/google/arm64_pb_install/lib/libprotobuf.so.23.0.0 && \
268 make -j$(nproc)
Elham8f5042f2022-04-05 13:19:10 -0400269
270# Build 32-bit ArmNN
271RUN cd $HOME/armnn-devenv && \
272 cd armnn-32 && mkdir build && cd build && \
273 export CXX=arm-linux-gnueabihf-g++ && \
274 export CC=arm-linux-gnueabihf-gcc && \
275 cmake .. \
276 -DCMAKE_CXX_FLAGS=-w \
277 -DBUILD_TESTS=1 \
278 -DARMCOMPUTE_ROOT=$HOME/armnn-devenv/ComputeLibrary_32 \
279 -DARMCOMPUTE_BUILD_DIR=$HOME/armnn-devenv/ComputeLibrary_32/build/ \
280 -DARMCOMPUTENEON=1 -DARMCOMPUTECL=1 -DARMNNREF=1 \
281 -DONNX_GENERATED_SOURCES=$HOME/armnn-devenv/onnx \
282 -DBUILD_ONNX_PARSER=1 \
283 -DBUILD_TF_LITE_PARSER=1 \
284 -DBUILD_ARMNN_TFLITE_DELEGATE=1 \
285 -DTENSORFLOW_ROOT=$HOME/armnn-devenv/tensorflow \
286 -DTFLITE_LIB_ROOT=$HOME/armnn-devenv/tflite-32/build \
287 -DTF_LITE_SCHEMA_INCLUDE_PATH=$HOME/armnn-devenv/tflite-32 \
288 -DFLATBUFFERS_ROOT=$HOME/armnn-devenv/flatbuffers-arm32 \
289 -DFLATC_DIR=$HOME/armnn-devenv/flatbuffers-1.12.0/build \
290 -DPROTOBUF_ROOT=$HOME/armnn-devenv/google/x86_64_pb_install \
291 -DPROTOBUF_LIBRARY_DEBUG=$HOME/armnn-devenv/google/arm32_pb_install/lib/libprotobuf.so.23.0.0 \
292 -DPROTOBUF_LIBRARY_RELEASE=$HOME/armnn-devenv/google/arm32_pb_install/lib/libprotobuf.so.23.0.0 \
293 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON && \
294 make -j$(nproc)
295