1FROM ubuntu:18.04 2ENV 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 \ 69 g++ \ 70 cmake && rm -rf /var/lib/apt/lists/* 71 72# Download the Android NDK and make a standalone toolchain 73RUN mkdir -p /home/armnn-devenv/toolchains && \ 74 cd /home/armnn-devenv/toolchains && \ 75 wget https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip && \ 76 unzip android-ndk-r17b-linux-x86_64.zip 77 78ENV NDK /home/armnn-devenv/toolchains/android-ndk-r17b 79 80RUN $NDK/build/tools/make_standalone_toolchain.py \ 81 --arch arm64 \ 82 --api 26 \ 83 --stl=libc++ \ 84 --install-dir=/home/armnn-devenv/toolchains/aarch64-android-r17b 85 86ENV PATH=/home/armnn-devenv/toolchains/aarch64-android-r17b/bin:$PATH 87 88# Build the Boost C++ libraries 89RUN mkdir /home/armnn-devenv/boost && \ 90 cd /home/armnn-devenv/boost && \ 91 wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.bz2 && \ 92 tar xvf boost_1_64_0.tar.bz2 93 94RUN echo "using gcc : arm : aarch64-linux-android-clang++ ;" > /home/armnn-devenv/boost/user-config.jam && \ 95 cd /home/armnn-devenv/boost/boost_1_64_0 && \ 96 ./bootstrap.sh --prefix=/home/armnn-devenv/boost/install && \ 97 ./b2 install --user-config=/home/armnn-devenv/boost/user-config.jam \ 98 toolset=gcc-arm link=static cxxflags=-fPIC --with-filesystem \ 99 --with-test --with-log --with-program_options -j8 100 101# Build the Compute Library 102RUN cd /home/armnn-devenv && \ 103 git clone https://github.com/ARM-software/ComputeLibrary.git && \ 104 cd ComputeLibrary && \ 105 scons arch=arm64-v8a neon=1 opencl=1 embed_kernels=1 extra_cxx_flags="-fPIC" \ 106 benchmark_tests=0 validation_tests=0 os=android -j8 107 108# RUN mkdir /home/armnn-devenv/google && \ 109RUN mkdir -p /home/armnn-devenv/google && \ 110 cd /home/armnn-devenv/google && \ 111 git clone https://github.com/google/protobuf.git && \ 112 cd protobuf && \ 113 git checkout -b v3.5.2 v3.5.2 && \ 114 ./autogen.sh && \ 115 mkdir x86_build && \ 116 cd x86_build && \ 117 ../configure --prefix=/home/armnn-devenv/google/x86_pb_install && \ 118 make install -j8 119 120RUN cd /home/armnn-devenv/google/protobuf && \ 121 mkdir arm64_build && cd arm64_build && \ 122 CC=aarch64-linux-android-clang \ 123 CXX=aarch64-linux-android-clang++ \ 124 CFLAGS="-fPIE -fPIC" LDFLAGS="-pie -llog" \ 125 ../configure --host=aarch64-linux-android \ 126 --prefix=/home/armnn-devenv/google/arm64_pb_install \ 127 --with-protoc=/home/armnn-devenv/google/x86_pb_install/bin/protoc && \ 128 make install -j8 129 130# clone Tensorflow 131RUN cd /home/armnn-devenv/google/ && \ 132 git clone https://github.com/tensorflow/tensorflow.git 133 134# Clone ARMNN 135RUN cd /home/armnn-devenv/ && \ 136 git clone https://github.com/ARM-software/armnn.git 137 138# Generate TensorFlow protobuf definitions 139RUN cd /home/armnn-devenv/google/tensorflow && \ 140 git checkout a0043f9262dc1b0e7dc4bdf3a7f0ef0bebc4891e && \ 141 /home/armnn-devenv/armnn/scripts/generate_tensorflow_protobuf.sh \ 142 /home/armnn-devenv/google/tf_pb /home/armnn-devenv/google/x86_pb_install 143 144ENV PATH=/home/armnn-devenv/toolchains/android-ndk-r17b:$PATH 145# Build Google Flatbuffers for ARMNN TFLite Parser 146RUN cd /home/armnn-devenv/ && \ 147 git clone https://github.com/google/flatbuffers.git && \ 148 cd flatbuffers && \ 149 cd android && cd jni && \ 150 rm -rf Application.mk && \ 151 echo "APP_STL := c++_static" >> Application.mk && \ 152 echo "NDK_TOOLCHAIN_VERSION" := clang >> Application.mk && \ 153 echo "APP_CPPFLAGS :=-std=c++11" >> Application.mk && \ 154 echo "APP_ABI := arm64-v8a" >> Application.mk && \ 155 echo "APP_PLATFORM := android-23" >> Application.mk && \ 156 echo "NDK_PLATFORM=android-23" >> Application.mk && \ 157 cd ../ && ndk-build -B 158 159COPY ./docker-entrypoint.sh /usr/bin 160RUN chmod +x /usr/bin/docker-entrypoint.sh 161ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] 162 163#To do: 164# 1. Flatbuffers build Application.mk hardcode value need to fix.