From 29da71ead0475c6ce3f7a19dcf39a6d976cc53b4 Mon Sep 17 00:00:00 2001 From: Alexandru Ciobotaru Date: Thu, 3 Nov 2022 13:51:02 +0200 Subject: [PATCH] build: improve the build time * Use explicit parallel build jobs * Remove test builds for dependencies since this file consumes validated tags and we do not run such tests in the first place Tested with 16 vCPUs host: build time from ~15 min to ~8 min. Signed-off-by: Alexandru Ciobotaru --- containers/Dockerfile.al2 | 79 +++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/containers/Dockerfile.al2 b/containers/Dockerfile.al2 index 6806310..37a1a0d 100644 --- a/containers/Dockerfile.al2 +++ b/containers/Dockerfile.al2 @@ -1,77 +1,82 @@ -FROM amazonlinux as builder +# Copyright 2020-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +FROM amazonlinux:2 as builder + +RUN yum install -y \ + cmake3 \ + gcc \ + git \ + tar \ + make \ + gcc-c++ \ + go \ + ninja-build \ + doxygen -RUN yum upgrade -y -RUN amazon-linux-extras enable epel -RUN yum clean -y metadata && yum install -y epel-release -RUN yum install -y cmake3 gcc git tar make RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal --default-toolchain 1.60 -RUN yum install -y gcc-c++ -RUN yum install -y go -RUN yum install -y ninja-build - # We keep the build artifacts in the -build directory WORKDIR /tmp/crt-builder -RUN git clone -b v1.0.2 https://github.com/awslabs/aws-lc.git aws-lc # -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-lc -B aws-lc/build . +RUN git clone -b v1.0.2 https://github.com/awslabs/aws-lc.git aws-lc +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -DBUILD_TESTING=0 -S aws-lc -B aws-lc/build . RUN go env -w GOPROXY=direct -RUN cmake3 --build aws-lc/build --target install +RUN cmake3 --build aws-lc/build --parallel $(nproc) --target install RUN git clone -b v1.3.20 https://github.com/aws/s2n-tls.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -S s2n-tls -B s2n-tls/build -RUN cmake3 --build s2n-tls/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -S s2n-tls -B s2n-tls/build +RUN cmake3 --build s2n-tls/build --parallel $(nproc) --target install RUN git clone -b v0.8.0 https://github.com/awslabs/aws-c-common.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-common -B aws-c-common/build -RUN cmake3 --build aws-c-common/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-common -B aws-c-common/build +RUN cmake3 --build aws-c-common/build --parallel $(nproc) --target install RUN git clone -b v0.1.2 https://github.com/awslabs/aws-c-sdkutils.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-sdkutils -B aws-c-sdkutils/build -RUN cmake3 --build aws-c-sdkutils/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-sdkutils -B aws-c-sdkutils/build +RUN cmake3 --build aws-c-sdkutils/build --parallel $(nproc) --target install RUN git clone -b v0.5.18 https://github.com/awslabs/aws-c-cal.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-cal -B aws-c-cal/build -RUN cmake3 --build aws-c-cal/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-cal -B aws-c-cal/build +RUN cmake3 --build aws-c-cal/build --parallel $(nproc) --target install RUN git clone -b v0.11.0 https://github.com/awslabs/aws-c-io.git -RUN cmake3 -DUSE_VSOCK=1 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-io -B aws-c-io/build -RUN cmake3 --build aws-c-io/build --target install +RUN cmake3 -DUSE_VSOCK=1 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-io -B aws-c-io/build +RUN cmake3 --build aws-c-io/build --parallel $(nproc) --target install RUN git clone -b v0.2.14 http://github.com/awslabs/aws-c-compression.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-compression -B aws-c-compression/build -RUN cmake3 --build aws-c-compression/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-compression -B aws-c-compression/build +RUN cmake3 --build aws-c-compression/build --parallel $(nproc) --target install RUN git clone -b v0.6.19 https://github.com/awslabs/aws-c-http.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-http -B aws-c-http/build -RUN cmake3 --build aws-c-http/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-http -B aws-c-http/build +RUN cmake3 --build aws-c-http/build --parallel $(nproc) --target install RUN git clone -b v0.6.15 https://github.com/awslabs/aws-c-auth.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-auth -B aws-c-auth/build -RUN cmake3 --build aws-c-auth/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -GNinja -S aws-c-auth -B aws-c-auth/build +RUN cmake3 --build aws-c-auth/build --parallel $(nproc) --target install RUN git clone -b json-c-0.16-20220414 https://github.com/json-c/json-c.git -RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_SHARED_LIBS=OFF -GNinja -S json-c -B json-c/build -RUN cmake3 --build json-c/build --target install +RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DBUILD_TESTING=0 -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_SHARED_LIBS=OFF -GNinja -S json-c -B json-c/build +RUN cmake3 --build json-c/build --parallel $(nproc) --target install RUN git clone -b v0.2.1 https://github.com/aws/aws-nitro-enclaves-nsm-api.git -RUN source $HOME/.cargo/env && cd aws-nitro-enclaves-nsm-api && cargo build --release -p nsm-lib +RUN source $HOME/.cargo/env && cd aws-nitro-enclaves-nsm-api && cargo build --release --jobs $(nproc) -p nsm-lib RUN mv aws-nitro-enclaves-nsm-api/target/release/libnsm.so /usr/lib64 RUN mv aws-nitro-enclaves-nsm-api/target/release/nsm.h /usr/include -RUN yum install -y doxygen COPY . aws-nitro-enclaves-sdk-c RUN cmake3 -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -GNinja \ -S aws-nitro-enclaves-sdk-c -B aws-nitro-enclaves-sdk-c/build -RUN cmake3 --build aws-nitro-enclaves-sdk-c/build --target install -RUN cmake3 --build aws-nitro-enclaves-sdk-c/build --target docs +RUN cmake3 --build aws-nitro-enclaves-sdk-c/build --parallel $(nproc) --target install +RUN cmake3 --build aws-nitro-enclaves-sdk-c/build --parallel $(nproc) --target docs # Test FROM builder as test RUN cmake3 --build aws-nitro-enclaves-sdk-c/build --target test # kmstool-enclave -FROM amazonlinux as kmstool-enclave +FROM amazonlinux:2 as kmstool-enclave # TODO: building packages statically instead of cleaning up unwanted packages from amazonlinux RUN rpm -e python python-libs python-urlgrabber python2-rpm pygpgme pyliblzma python-iniparse pyxattr python-pycurl amazon-linux-extras yum yum-metadata-parser yum-plugin-ovl yum-plugin-priorities @@ -84,7 +89,7 @@ ENV ENDPOINT=${ENDPOINT} CMD ["/kmstool_enclave"] # kmstool-instance -FROM amazonlinux as kmstool-instance +FROM amazonlinux:2 as kmstool-instance # TODO: building packages statically instead of cleaning up unwanted packages from amazonlinux RUN rpm -e python python-libs python-urlgrabber python2-rpm pygpgme pyliblzma python-iniparse pyxattr python-pycurl amazon-linux-extras yum yum-metadata-parser yum-plugin-ovl yum-plugin-priorities @@ -93,7 +98,7 @@ COPY --from=builder /usr/bin/kmstool_instance /kmstool_instance CMD ["/kmstool_instance"] # kmstool-enclave-cli -FROM amazonlinux as kmstool-enclave-cli +FROM amazonlinux:2 as kmstool-enclave-cli # TODO: building packages statically instead of cleaning up unwanted packages from amazonlinux RUN rpm -e python python-libs python-urlgrabber python2-rpm pygpgme pyliblzma python-iniparse pyxattr python-pycurl amazon-linux-extras yum yum-metadata-parser yum-plugin-ovl yum-plugin-priorities