xref: /aosp_15_r20/external/armnn/build-tool/docker/Dockerfile (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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