# # Copyright © 2022-2023 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=20.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