From de6c41a6717da47d251aad28146178b6d7f48881 Mon Sep 17 00:00:00 2001 From: Mike Aizatsky Date: Fri, 7 Oct 2016 12:05:55 -0700 Subject: [PATCH] [infra] building clang with a single RUN command. Each RUN command creates an overlay layer. This results in keeeping all intermediate files. By consolidating all work in a single script, the size of base-clang image is decreased from 3G to 1G. --- infra/base-images/base-clang/Dockerfile | 50 ++----------------- .../base-clang/checkout_build_install_llvm.sh | 47 +++++++++++++++++ 2 files changed, 52 insertions(+), 45 deletions(-) create mode 100755 infra/base-images/base-clang/checkout_build_install_llvm.sh diff --git a/infra/base-images/base-clang/Dockerfile b/infra/base-images/base-clang/Dockerfile index fbf843ae5..4d3c2a4de 100644 --- a/infra/base-images/base-clang/Dockerfile +++ b/infra/base-images/base-clang/Dockerfile @@ -19,33 +19,13 @@ FROM ossfuzz/base MAINTAINER mike.aizatsky@gmail.com -ENV LLVM_DEP_PACKAGES "build-essential make cmake ninja-build git python2.7" -RUN apt-get install -y $LLVM_DEP_PACKAGES - RUN mkdir /src /work -# Checkout -RUN cd /src && git clone --depth 1 http://llvm.org/git/llvm.git -RUN cd /src/llvm/tools && git clone --depth 1 http://llvm.org/git/clang.git -RUN cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/compiler-rt.git -RUN cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/libcxx.git -RUN cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/libcxxabi.git -RUN cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/lld.git - -# Build & Install -RUN mkdir -p /work/llvm -WORKDIR /work/llvm -RUN cmake -G "Ninja" \ - -DLIBCXX_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ - -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" \ - /src/llvm -RUN ninja -RUN ninja install -RUN rm -rf /work/llvm - -# Copy libfuzzer sources -RUN mkdir /src/libfuzzer -RUN cp -r /src/llvm/lib/Fuzzer/* /src/libfuzzer/ +COPY checkout_build_install_llvm.sh /root/ +# Keep all steps in the same script to decrease the number of intermediate +# layes in docker file. +RUN /root/checkout_build_install_llvm.sh +RUN rm /root/checkout_build_install_llvm.sh # Setup the environment. ENV CC "clang" @@ -55,23 +35,3 @@ ENV CCC "clang++" ENV CFLAGS "-g" ENV CXXFLAGS_EXTRA "-stdlib=libc++" ENV CXXFLAGS "$CFLAGS $CXXFLAGS_EXTRA" - -# Build MSan libraries -RUN mkdir -p /work/llvm-msan -WORKDIR /work/llvm-msan -RUN cmake -G "Ninja" \ - -DLIBCXX_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ - -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_SANITIZER=Memory \ - /src/llvm -# RUN ninja cxx cxxabi -# RUN mkdir /usr/local/lib/msan -# RUN cp lib/*.so /usr/local/lib/msan -# RUN cp lib/*.a /usr/local/lib/msan -RUN rm -rf /work/llvm-msan - -# Cleanup -RUN rm -rf /src/llvm -RUN apt-get remove --purge -y $LLVM_DEP_PACKAGES -RUN apt-get autoremove -y - - diff --git a/infra/base-images/base-clang/checkout_build_install_llvm.sh b/infra/base-images/base-clang/checkout_build_install_llvm.sh new file mode 100755 index 000000000..6175e668e --- /dev/null +++ b/infra/base-images/base-clang/checkout_build_install_llvm.sh @@ -0,0 +1,47 @@ +#!/bin/bash -eux +# Copyright 2016 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +LLVM_DEP_PACKAGES="build-essential make cmake ninja-build git python2.7" +apt-get install -y $LLVM_DEP_PACKAGES + +# Checkout +cd /src && git clone --depth 1 http://llvm.org/git/llvm.git +cd /src/llvm/tools && git clone --depth 1 http://llvm.org/git/clang.git +cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/compiler-rt.git +cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/libcxx.git +cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/libcxxabi.git +cd /src/llvm/projects && git clone --depth 1 http://llvm.org/git/lld.git + +# Build & Install +mkdir -p /work/llvm +cd /work/llvm +cmake -G "Ninja" \ + -DLIBCXX_ENABLE_SHARED=OFF -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ + -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" \ + /src/llvm +ninja +ninja install +rm -rf /work/llvm + +# Copy libfuzzer sources +mkdir /src/libfuzzer +cp -r /src/llvm/lib/Fuzzer/* /src/libfuzzer/ + +# Cleanup +rm -rf /src/llvm +apt-get remove --purge -y $LLVM_DEP_PACKAGES +apt-get autoremove -y