1*89c4ff92SAndroid Build Coastguard Worker# 2*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2022 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker# 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker# Default build type is 'production'. Use 'dev' if supplying custom Arm NN / ACL repos from host 7*89c4ff92SAndroid Build Coastguard WorkerARG BUILD_TYPE=production 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard WorkerARG UBUNTU_VERSION=18.04 10*89c4ff92SAndroid Build Coastguard WorkerFROM ubuntu:${UBUNTU_VERSION} AS build-production 11*89c4ff92SAndroid Build Coastguard Worker 12*89c4ff92SAndroid Build Coastguard WorkerENV DEBIAN_FRONTEND noninteractive 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker# Install basic packages for Docker container (not specific to Arm NN) 15*89c4ff92SAndroid Build Coastguard WorkerRUN apt-get update && \ 16*89c4ff92SAndroid Build Coastguard Worker apt-get install -y --no-install-recommends \ 17*89c4ff92SAndroid Build Coastguard Worker ca-certificates \ 18*89c4ff92SAndroid Build Coastguard Worker locales \ 19*89c4ff92SAndroid Build Coastguard Worker vim \ 20*89c4ff92SAndroid Build Coastguard Worker && \ 21*89c4ff92SAndroid Build Coastguard Worker apt-get clean && \ 22*89c4ff92SAndroid Build Coastguard Worker rm -rf /var/lib/apt/lists/* 23*89c4ff92SAndroid Build Coastguard Worker 24*89c4ff92SAndroid Build Coastguard Worker# Set locale for Docker container 25*89c4ff92SAndroid Build Coastguard WorkerRUN locale-gen en_GB.UTF-8 && \ 26*89c4ff92SAndroid Build Coastguard Worker update-locale LC_ALL=en_GB.UTF-8 LANG=en_GB.UTF-8 27*89c4ff92SAndroid Build Coastguard WorkerENV LANG en_GB.UTF-8 28*89c4ff92SAndroid Build Coastguard WorkerENV LC_ALL en_GB.UTF-8 29*89c4ff92SAndroid Build Coastguard Worker 30*89c4ff92SAndroid Build Coastguard WorkerWORKDIR /root 31*89c4ff92SAndroid Build Coastguard Worker 32*89c4ff92SAndroid Build Coastguard Worker# Install system-wide packages specific to Arm NN 33*89c4ff92SAndroid Build Coastguard WorkerCOPY ./scripts/install-packages.sh . 34*89c4ff92SAndroid Build Coastguard WorkerRUN ./install-packages.sh 35*89c4ff92SAndroid Build Coastguard Worker 36*89c4ff92SAndroid Build Coastguard Worker# Define user for non-root processes (overwriteable during 'docker build' with --build-arg) 37*89c4ff92SAndroid Build Coastguard WorkerARG USER_ID=1000 38*89c4ff92SAndroid Build Coastguard WorkerARG GROUP_ID=1000 39*89c4ff92SAndroid Build Coastguard Worker 40*89c4ff92SAndroid Build Coastguard Worker# Create non-root user 'arm-user' based on $USER_ID and $GROUP_ID above 41*89c4ff92SAndroid Build Coastguard WorkerRUN addgroup --gid $GROUP_ID arm-user 42*89c4ff92SAndroid Build Coastguard WorkerRUN useradd --create-home --shell /bin/bash --uid $USER_ID --gid $GROUP_ID arm-user 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker# Switch to non-root user 45*89c4ff92SAndroid Build Coastguard WorkerUSER arm-user 46*89c4ff92SAndroid Build Coastguard WorkerWORKDIR /home/arm-user 47*89c4ff92SAndroid Build Coastguard Worker 48*89c4ff92SAndroid Build Coastguard Worker# Copy scripts required by Setup into WORKDIR 49*89c4ff92SAndroid Build Coastguard WorkerCOPY --chown=arm-user:arm-user ./scripts/validation.sh . 50*89c4ff92SAndroid Build Coastguard WorkerCOPY --chown=arm-user:arm-user ./scripts/common.sh . 51*89c4ff92SAndroid Build Coastguard WorkerCOPY --chown=arm-user:arm-user ./scripts/setup-armnn.sh . 52*89c4ff92SAndroid Build Coastguard Worker 53*89c4ff92SAndroid Build Coastguard Worker# Run setup-armnn.sh: download and install Arm NN dependencies 54*89c4ff92SAndroid Build Coastguard WorkerARG SETUP_ARGS="" 55*89c4ff92SAndroid Build Coastguard WorkerRUN echo "SETUP_ARGS: $SETUP_ARGS" 56*89c4ff92SAndroid Build Coastguard WorkerRUN ./setup-armnn.sh $SETUP_ARGS 57*89c4ff92SAndroid Build Coastguard Worker 58*89c4ff92SAndroid Build Coastguard Worker# This build-dev stage (inherits 'build-production' stage) is only used in final image if $BUILD_TYPE is 'dev' 59*89c4ff92SAndroid Build Coastguard WorkerFROM build-production as build-dev 60*89c4ff92SAndroid Build Coastguard Worker 61*89c4ff92SAndroid Build Coastguard Worker# Create directory for source repos in WORKDIR 62*89c4ff92SAndroid Build Coastguard WorkerRUN mkdir -p source/armnn source/acl 63*89c4ff92SAndroid Build Coastguard Worker 64*89c4ff92SAndroid Build Coastguard Worker# Copy custom armnn/acl source repos from the build-tool directory on the host, if they exist (optional) 65*89c4ff92SAndroid Build Coastguard Worker# The 'acl' repo must be provided if --neon-backend or --cl-backend is given in the BUILD_ARGS, otherwise only custom "armnn" is required 66*89c4ff92SAndroid Build Coastguard Worker# If custom repos not provided, the build-armnn.sh script will automatically download the latest release branches of Arm NN and ACL 67*89c4ff92SAndroid Build Coastguard Worker# Copies Dockerfile to ensure COPY works - at least one file must exist for COPY to work 68*89c4ff92SAndroid Build Coastguard WorkerCOPY --chown=arm-user:arm-user ./docker/Dockerfile ./armnn* ./source/armnn/ 69*89c4ff92SAndroid Build Coastguard WorkerCOPY --chown=arm-user:arm-user ./docker/Dockerfile ./acl* ./source/acl/ 70*89c4ff92SAndroid Build Coastguard Worker 71*89c4ff92SAndroid Build Coastguard Worker# Final stage which inherits either 'build-production' or 'build-dev' stage 72*89c4ff92SAndroid Build Coastguard WorkerFROM build-${BUILD_TYPE} as final 73*89c4ff92SAndroid Build Coastguard Worker 74*89c4ff92SAndroid Build Coastguard Worker# Copy build script into WORKDIR 75*89c4ff92SAndroid Build Coastguard WorkerCOPY --chown=arm-user:arm-user ./scripts/build-armnn.sh . 76*89c4ff92SAndroid Build Coastguard Worker 77*89c4ff92SAndroid Build Coastguard Worker# Run build-armnn.sh: build Arm NN and ACL 78*89c4ff92SAndroid Build Coastguard WorkerARG BUILD_ARGS="" 79*89c4ff92SAndroid Build Coastguard WorkerRUN echo "BUILD_ARGS: $BUILD_ARGS" 80*89c4ff92SAndroid Build Coastguard WorkerRUN ./build-armnn.sh $BUILD_ARGS