From a99c7a5fdbb5d1003d76a50430a63178f8306db8 Mon Sep 17 00:00:00 2001 From: Eli Uriegas <1700823+seemethere@users.noreply.github.com> Date: Mon, 17 Aug 2020 10:38:19 -0700 Subject: [PATCH] llvm: Add llvm docker build (#491) To be used by upstream docker images, builds took too long in upstream Signed-off-by: Eli Uriegas --- llvm/Dockerfile | 31 +++++++++++++++++++++++++++++++ llvm/README.md | 21 +++++++++++++++++++++ llvm/build.sh | 11 +++++++++++ llvm/deploy.sh | 22 ++++++++++++++++++++++ llvm/env_vars.sh | 3 +++ 5 files changed, 88 insertions(+) create mode 100644 llvm/Dockerfile create mode 100644 llvm/README.md create mode 100755 llvm/build.sh create mode 100755 llvm/deploy.sh create mode 100644 llvm/env_vars.sh diff --git a/llvm/Dockerfile b/llvm/Dockerfile new file mode 100644 index 000000000..a2226992f --- /dev/null +++ b/llvm/Dockerfile @@ -0,0 +1,31 @@ +FROM ubuntu:xenial as dev +ARG LLVM_VERSION=9.0.1 +ENV LLVM_URL https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update && apt-get install -y \ + build-essential \ + curl \ + cmake \ + make \ + python3 \ + python3-dev \ + xz-utils + +RUN mkdir -p /opt/llvm /tmp/llvm/build +WORKDIR /tmp/llvm +RUN curl -fL -o llvm.tar.xz "${LLVM_URL}" && \ + tar -xf llvm.tar.xz --strip-components=1 +WORKDIR /tmp/llvm/build +RUN cmake -G "Unix Makefiles" \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_INSTALL_PREFIX=/opt/llvm \ + -DLLVM_TARGETS_TO_BUILD="host" \ + -DLLVM_BUILD_TOOLS=OFF \ + -DLLVM_BUILD_UTILS=OFF \ + -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ + ../ +RUN make -j"$(nproc --ignore=2)" && make install + +FROM scratch as final +COPY --from=dev /opt/llvm /opt/llvm diff --git a/llvm/README.md b/llvm/README.md new file mode 100644 index 000000000..93ba000f0 --- /dev/null +++ b/llvm/README.md @@ -0,0 +1,21 @@ +# llvm + +This contains the dockerfile used to build LLVM from source with assertions enabled. + +This is ultimately used by the main `pytorch/pytorch`'s base Docker images + +## How to build: + +```bash +./build.sh +``` + +## How to deploy: + +``` +./deploy.sh +``` + +## Updating LLVM + +Edit the LLVM_VERSION in `env_vars.sh` diff --git a/llvm/build.sh b/llvm/build.sh new file mode 100755 index 000000000..99a3fe7c4 --- /dev/null +++ b/llvm/build.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -eou pipefail + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +source "${DIR}/env_vars.sh" + +( + set -x + cat Dockerfile | DOCKER_BUILDKIT=1 docker build --build-arg "LLVM_VERSION=${LLVM_VERSION}" -t "pytorch/llvm:${LLVM_VERSION}" - +) diff --git a/llvm/deploy.sh b/llvm/deploy.sh new file mode 100755 index 000000000..2d494d72d --- /dev/null +++ b/llvm/deploy.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eou pipefail + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +source "${DIR}/env_vars.sh" + +FORCE_PUSH=${FORCE_PUSH:-no} +IMAGE="pytorch/llvm:${LLVM_VERSION}" + +if DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect "${IMAGE}" >/dev/null 2>/dev/null; then + if [[ ${FORCE_PUSH} = "no" ]]; then + echo "ERROR: ${IMAGE} already exists, run script with FORCE_PUSH=yes to forcefully push over the tag" + exit 1 + else + echo "WARNING: Overwriting existing ${IMAGE}" + fi +fi +( + set -x + docker push "pytorch/llvm:${LLVM_VERSION}" +) diff --git a/llvm/env_vars.sh b/llvm/env_vars.sh new file mode 100644 index 000000000..6c939746a --- /dev/null +++ b/llvm/env_vars.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +LLVM_VERSION="9.0.1"