You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.8 KiB
80 lines
2.8 KiB
#
|
|
# Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
|
|
# Default build type is 'production'. Use 'dev' if supplying custom Arm NN / ACL repos from host
|
|
ARG BUILD_TYPE=production
|
|
|
|
ARG UBUNTU_VERSION=18.04
|
|
FROM ubuntu:${UBUNTU_VERSION} AS build-production
|
|
|
|
ENV DEBIAN_FRONTEND noninteractive
|
|
|
|
# Install basic packages for Docker container (not specific to Arm NN)
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
locales \
|
|
vim \
|
|
&& \
|
|
apt-get clean && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set locale for Docker container
|
|
RUN locale-gen en_GB.UTF-8 && \
|
|
update-locale LC_ALL=en_GB.UTF-8 LANG=en_GB.UTF-8
|
|
ENV LANG en_GB.UTF-8
|
|
ENV LC_ALL en_GB.UTF-8
|
|
|
|
WORKDIR /root
|
|
|
|
# Install system-wide packages specific to Arm NN
|
|
COPY ./scripts/install-packages.sh .
|
|
RUN ./install-packages.sh
|
|
|
|
# Define user for non-root processes (overwriteable during 'docker build' with --build-arg)
|
|
ARG USER_ID=1000
|
|
ARG GROUP_ID=1000
|
|
|
|
# Create non-root user 'arm-user' based on $USER_ID and $GROUP_ID above
|
|
RUN addgroup --gid $GROUP_ID arm-user
|
|
RUN useradd --create-home --shell /bin/bash --uid $USER_ID --gid $GROUP_ID arm-user
|
|
|
|
# Switch to non-root user
|
|
USER arm-user
|
|
WORKDIR /home/arm-user
|
|
|
|
# Copy scripts required by Setup into WORKDIR
|
|
COPY --chown=arm-user:arm-user ./scripts/validation.sh .
|
|
COPY --chown=arm-user:arm-user ./scripts/common.sh .
|
|
COPY --chown=arm-user:arm-user ./scripts/setup-armnn.sh .
|
|
|
|
# Run setup-armnn.sh: download and install Arm NN dependencies
|
|
ARG SETUP_ARGS=""
|
|
RUN echo "SETUP_ARGS: $SETUP_ARGS"
|
|
RUN ./setup-armnn.sh $SETUP_ARGS
|
|
|
|
# This build-dev stage (inherits 'build-production' stage) is only used in final image if $BUILD_TYPE is 'dev'
|
|
FROM build-production as build-dev
|
|
|
|
# Create directory for source repos in WORKDIR
|
|
RUN mkdir -p source/armnn source/acl
|
|
|
|
# Copy custom armnn/acl source repos from the build-tool directory on the host, if they exist (optional)
|
|
# The 'acl' repo must be provided if --neon-backend or --cl-backend is given in the BUILD_ARGS, otherwise only custom "armnn" is required
|
|
# If custom repos not provided, the build-armnn.sh script will automatically download the latest release branches of Arm NN and ACL
|
|
# Copies Dockerfile to ensure COPY works - at least one file must exist for COPY to work
|
|
COPY --chown=arm-user:arm-user ./docker/Dockerfile ./armnn* ./source/armnn/
|
|
COPY --chown=arm-user:arm-user ./docker/Dockerfile ./acl* ./source/acl/
|
|
|
|
# Final stage which inherits either 'build-production' or 'build-dev' stage
|
|
FROM build-${BUILD_TYPE} as final
|
|
|
|
# Copy build script into WORKDIR
|
|
COPY --chown=arm-user:arm-user ./scripts/build-armnn.sh .
|
|
|
|
# Run build-armnn.sh: build Arm NN and ACL
|
|
ARG BUILD_ARGS=""
|
|
RUN echo "BUILD_ARGS: $BUILD_ARGS"
|
|
RUN ./build-armnn.sh $BUILD_ARGS |