From 0c35da6a6b1a921435f41d420365e52b56a29568 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 21:57:12 +0000 Subject: [PATCH 01/21] Add mariner build images --- .../2.0/cross/amd64-alpine/Dockerfile | 4 + src/cbl-mariner/2.0/cross/amd64/Dockerfile | 9 ++ .../2.0/cross/arm-alpine/Dockerfile | 4 + src/cbl-mariner/2.0/cross/arm/Dockerfile | 40 +++++ .../2.0/cross/arm64-alpine/Dockerfile | 4 + src/cbl-mariner/2.0/cross/arm64/Dockerfile | 42 +++++ src/cbl-mariner/2.0/cross/x86/Dockerfile | 43 +++++ .../2.0/crossdeps-amd64/Dockerfile | 6 + src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 28 ++++ .../2.0/crossdeps-artifacts/Dockerfile | 14 ++ src/cbl-mariner/2.0/crossdeps/Dockerfile | 45 ++++++ .../2.0/crossdeps/mariner-extended.repo | 29 ++++ src/cbl-mariner/manifest.json | 147 ++++++++++++++++++ 13 files changed, 415 insertions(+) create mode 100644 src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile create mode 100644 src/cbl-mariner/2.0/cross/amd64/Dockerfile create mode 100644 src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile create mode 100644 src/cbl-mariner/2.0/cross/arm/Dockerfile create mode 100644 src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile create mode 100644 src/cbl-mariner/2.0/cross/arm64/Dockerfile create mode 100644 src/cbl-mariner/2.0/cross/x86/Dockerfile create mode 100644 src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile create mode 100644 src/cbl-mariner/2.0/crossdeps-arm/Dockerfile create mode 100644 src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile create mode 100644 src/cbl-mariner/2.0/crossdeps/Dockerfile create mode 100644 src/cbl-mariner/2.0/crossdeps/mariner-extended.repo diff --git a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile new file mode 100644 index 000000000..8212c22c0 --- /dev/null +++ b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile @@ -0,0 +1,4 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x64 + +RUN /scripts/eng/common/cross/build-rootfs.sh x64 alpine3.13 --skipunmount \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/amd64/Dockerfile b/src/cbl-mariner/2.0/cross/amd64/Dockerfile new file mode 100644 index 000000000..5fe31cbac --- /dev/null +++ b/src/cbl-mariner/2.0/cross/amd64/Dockerfile @@ -0,0 +1,9 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x64 + +RUN tdnf install -y debootstrap + +RUN /scripts/eng/common/cross/build-rootfs.sh x64 xenial --skipunmount + +RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ + cp /usr/lib/clang/12.0.1/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile new file mode 100644 index 000000000..276ae3b5e --- /dev/null +++ b/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile @@ -0,0 +1,4 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm + +RUN /scripts/eng/common/cross/build-rootfs.sh arm alpine3.13 --skipunmount \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/arm/Dockerfile b/src/cbl-mariner/2.0/cross/arm/Dockerfile new file mode 100644 index 000000000..a9e50440d --- /dev/null +++ b/src/cbl-mariner/2.0/cross/arm/Dockerfile @@ -0,0 +1,40 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm + +RUN tdnf install -y debootstrap + +RUN /scripts/eng/common/cross/build-rootfs.sh arm xenial --skipunmount + +# Build compiler-rt profile library for PGO instrumentation +COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ + /llvm-project-12.0.1.src.tar.xz . +RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ + rm llvm-project-12.0.1.src.tar.xz && \ + mkdir compiler-rt_build && cd compiler-rt_build && \ + BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ + TARGET_TRIPLE=arm-linux-gnueabihf && \ + cmake ../llvm-project-12.0.1.src/compiler-rt \ + -DCOMPILER_RT_BUILD_PROFILE=ON \ + -DCOMPILER_RT_BUILD_BUILTINS=OFF \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DLLVM_CONFIG_PATH=llvm-config \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ + -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ + -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ + make -j $(getconf _NPROCESSORS_ONLN) && \ + make install + +RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ + cp ./compiler-rt_build/lib/linux/libclang_rt.profile-armhf.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ + +RUN rm -r compiler-rt_build llvm-project-12.0.1.src \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile new file mode 100644 index 000000000..ec712b709 --- /dev/null +++ b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile @@ -0,0 +1,4 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm64 + +RUN /scripts/eng/common/cross/build-rootfs.sh arm64 alpine3.13 --skipunmount \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile new file mode 100644 index 000000000..5abf3337b --- /dev/null +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -0,0 +1,42 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm64 + +RUN tdnf install -y debootstrap + +RUN /scripts/eng/common/cross/build-rootfs.sh arm64 xenial --skipunmount + +# Build compiler-rt profile library for PGO instrumentation +COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ + /llvm-project-12.0.1.src.tar.xz . +RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ + rm llvm-project-12.0.1.src.tar.xz && \ + mkdir compiler-rt_build && cd compiler-rt_build && \ + BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ + TARGET_TRIPLE=aarch64-linux-gnu && \ + cmake ../llvm-project-12.0.1.src/compiler-rt \ + -DCOMPILER_RT_BUILD_PROFILE=ON \ + -DCOMPILER_RT_BUILD_BUILTINS=OFF \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DLLVM_CONFIG_PATH=llvm-config \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ + -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ + -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ + make -j $(getconf _NPROCESSORS_ONLN) && \ + make install + +# Copy into rootfs +RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ + cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ + +# Remove LLVM build dependencies +RUN rm -r compiler-rt_build llvm-project-12.0.1.src \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile new file mode 100644 index 000000000..a9c657dbc --- /dev/null +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -0,0 +1,43 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local AS rootfsbuild +ARG ROOTFS_DIR=/crossrootfs/x86 + +RUN tdnf install -y \ + debootstrap \ + # Provides LLVMConfig.cmake, needed to build compiler-rt. Only needed on x86. + # x64 doesn't need this because we use compiler-rt from the mariner package. + # arm/arm64 don't need this because LLVMConfig.cmake is provided by the LLVM we build from source. + llvm-devel + +RUN /scripts/eng/common/cross/build-rootfs.sh x86 xenial --skipunmount + +# Build compiler-rt profile library for PGO instrumentation +COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ + /llvm-project-12.0.1.src.tar.xz . +RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ + rm llvm-project-12.0.1.src.tar.xz && \ + mkdir compiler-rt_build && cd compiler-rt_build && \ + BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ + TARGET_TRIPLE=i386-linux-gnu && \ + cmake ../llvm-project-12.0.1.src/compiler-rt \ + -DCOMPILER_RT_BUILD_PROFILE=ON \ + -DCOMPILER_RT_BUILD_BUILTINS=OFF \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_XRAY=OFF \ + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} \ + -DLLVM_CONFIG_PATH=llvm-config \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ + -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ + -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ + make -j $(getconf _NPROCESSORS_ONLN) && \ + make install && echo hi + +RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ + cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile new file mode 100644 index 000000000..b2e1a0590 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile @@ -0,0 +1,6 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +RUN tdnf install -y \ + clang \ + lld \ + compiler-rt \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile new file mode 100644 index 000000000..2d49b9c87 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +# Install LLVM-only build dependencies +RUN tdnf install -y \ + texinfo \ + diffutils \ + binutils + +# Build LLVM cross-toolchain (with support for targeting arm architectures) +COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ + /llvm-project-12.0.1.src.tar.xz . +RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ + rm llvm-project-12.0.1.src.tar.xz && \ + mkdir build && cd build && \ + cmake ../llvm-project-12.0.1.src/llvm \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_TARGETS_TO_BUILD="host;AArch64;ARM" \ + -Wno-dev \ + -DLLVM_ENABLE_PROJECTS="clang;lld" && \ + make -j $(getconf _NPROCESSORS_ONLN) && \ + make install + +RUN rm -r build llvm-project-12.0.1.src + +RUN tdnf remove -y \ + texinfo \ + diffutils \ + binutils \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile new file mode 100644 index 000000000..0f835edf7 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile @@ -0,0 +1,14 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +# 1. Obtain signing keys used to sign llvm sources +RUN wget https://releases.llvm.org/release-keys.asc && \ + echo "f181a90697e3ea4b7782f1ee48314a570aef058505b4f3a0ab0611094ec13241 release-keys.asc" | sha256sum -c && \ + gpg --output release-keys.gpg --dearmor release-keys.asc && \ + rm release-keys.asc && \ +# 2. Download llvm sources and signature, and verify signature + wget https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz.sig && \ + echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project-12.0.1.src.tar.xz.sig" | sha256sum -c && \ + wget https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz && \ + echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project-12.0.1.src.tar.xz" | sha256sum -c && \ + gpg --keyring /release-keys.gpg --verify llvm-project-12.0.1.src.tar.xz.sig && \ + rm llvm-project-12.0.1.src.tar.xz.sig \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps/Dockerfile b/src/cbl-mariner/2.0/crossdeps/Dockerfile new file mode 100644 index 000000000..a0717c843 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps/Dockerfile @@ -0,0 +1,45 @@ +FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 + +# TODO: remove this once debootstrap is available in the base repos. +COPY mariner-extended.repo /etc/yum.repos.d/ + +RUN tdnf update -y && \ + tdnf install -y \ + wget \ + ca-certificates \ + git \ + # Common runtime build dependencies + cmake \ + awk \ + icu \ + tar \ + # Crosscomponents build dependencies + glibc-devel \ + lttng-ust-devel \ + kernel-headers + +# Obtain arcade scripts used to build rootfs +RUN git config --global user.email builder@dotnet-buildtools-prereqs-docker && \ + git clone --depth 1 --single-branch https://github.com/dotnet/arcade /scripts + +# Obtain ubuntu package signing key (for use by debootstrap) +# 1. Add public key used to sign the ubuntu keyring +RUN echo -e \ +"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\ +\n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\nWvrYM8oNhL8aJoiVU2Z5NeRPwfQ0ZZdzbwD2\n=Y9Bf\n\ +-----END PGP PUBLIC KEY BLOCK-----\n" | gpg --output dimitri_john_ledkov.gpg --dearmor && \ +# 2. Download the ubuntu keyrings + wget https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ + echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ + tar xf ubuntu-keyring_2021.03.26.tar.gz && \ + rm ubuntu-keyring_2021.03.26.tar.gz && \ +# 3. Verify keyrings + pushd ubuntu-keyring-2021.03.26 && \ + gpg --keyring /dimitri_john_ledkov.gpg --output SHA512SUMS.txt --decrypt SHA512SUMS.txt.asc && \ + rm /dimitri_john_ledkov.gpg && \ + sha512sum -c SHA512SUMS.txt && \ +# 4. Install the needed keyring and delete the rest + mkdir -p /usr/share/keyrings && \ + mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ + popd && \ + rm -r ubuntu-keyring-2021.03.26 \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps/mariner-extended.repo b/src/cbl-mariner/2.0/crossdeps/mariner-extended.repo new file mode 100644 index 000000000..c45e4a74b --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps/mariner-extended.repo @@ -0,0 +1,29 @@ +[mariner-official-extended] +name=CBL-Mariner Official Extended $releasever $basearch +baseurl=https://packages.microsoft.com/cbl-mariner/$releasever/prod/extended/$basearch +gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY file:///etc/pki/rpm-gpg/MICROSOFT-METADATA-GPG-KEY +gpgcheck=1 +repo_gpgcheck=1 +enabled=1 +skip_if_unavailable=True +sslverify=1 + +[mariner-official-extended-debuginfo] +name=CBL-Mariner Official Extended $releasever $basearch Debuginfo +baseurl=https://packages.microsoft.com/cbl-mariner/$releasever/prod/extended/debuginfo/$basearch +gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY file:///etc/pki/rpm-gpg/MICROSOFT-METADATA-GPG-KEY +gpgcheck=1 +repo_gpgcheck=1 +enabled=0 +skip_if_unavailable=True +sslverify=1 + +[mariner-official-extended-source] +name=CBL-Mariner Official Extended $releasever Source +baseurl=https://packages.microsoft.com/cbl-mariner/$releasever/prod/extended/srpms +gpgkey=file:///etc/pki/rpm-gpg/MICROSOFT-RPM-GPG-KEY file:///etc/pki/rpm-gpg/MICROSOFT-METADATA-GPG-KEY +gpgcheck=1 +repo_gpgcheck=1 +enabled=0 +skip_if_unavailable=True +sslverify=1 diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index 7ea93c4da..03c48e642 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -42,6 +42,153 @@ } ] }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps-amd64", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-amd64-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps-arm", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-arm-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/crossdeps-artifacts", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-crossdeps-artifacts-local": { + "isLocal": true + } + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/amd64", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-amd64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-amd64$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/amd64-alpine", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-amd64-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-amd64-alpine$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/arm", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-arm-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-arm$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/arm-alpine", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-arm-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-arm-alpine$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/arm64", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-arm64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-arm64$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/arm64-alpine", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-arm64-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-arm64-alpine$(FloatingTagSuffix)": {} + } + } + ] + }, + { + "platforms": [ + { + "dockerfile": "src/cbl-mariner/2.0/cross/x86", + "os": "linux", + "osVersion": "cbl-mariner2.0", + "tags": { + "cbl-mariner-2.0-cross-x86-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-cross-x86$(FloatingTagSuffix)": {} + } + } + ] + }, { "platforms": [ { From 3b86c3686c571a29c8c8b4436f5eeb947d08ccaf Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 22:02:46 +0000 Subject: [PATCH 02/21] Don't inline long signing key --- src/cbl-mariner/2.0/crossdeps/Dockerfile | 7 +- .../2.0/crossdeps/dimitri_john_ledkov.asc | 400 ++++++++++++++++++ 2 files changed, 403 insertions(+), 4 deletions(-) create mode 100644 src/cbl-mariner/2.0/crossdeps/dimitri_john_ledkov.asc diff --git a/src/cbl-mariner/2.0/crossdeps/Dockerfile b/src/cbl-mariner/2.0/crossdeps/Dockerfile index a0717c843..6b53bfeb5 100644 --- a/src/cbl-mariner/2.0/crossdeps/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps/Dockerfile @@ -24,10 +24,9 @@ RUN git config --global user.email builder@dotnet-buildtools-prereqs-docker && \ # Obtain ubuntu package signing key (for use by debootstrap) # 1. Add public key used to sign the ubuntu keyring -RUN echo -e \ -"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\ -\n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\nWvrYM8oNhL8aJoiVU2Z5NeRPwfQ0ZZdzbwD2\n=Y9Bf\n\ ------END PGP PUBLIC KEY BLOCK-----\n" | gpg --output dimitri_john_ledkov.gpg --dearmor && \ +COPY dimitri_john_ledkov.asc . +RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ + rm dimitri_john_ledkov.asc && \ # 2. Download the ubuntu keyrings wget https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ diff --git a/src/cbl-mariner/2.0/crossdeps/dimitri_john_ledkov.asc b/src/cbl-mariner/2.0/crossdeps/dimitri_john_ledkov.asc new file mode 100644 index 000000000..c36cc66e7 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps/dimitri_john_ledkov.asc @@ -0,0 +1,400 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: Hockeypuck 2.1.0-189-g15ebf24 +Comment: Hostname: + +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 +WvrYM8oNhL8aJoiVU2Z5NeRPwfQ0ZZdzbwD2 +=Y9Bf +-----END PGP PUBLIC KEY BLOCK----- From 33548d5704d02b74c39c4175c443d0444bd4b428 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 22:05:57 +0000 Subject: [PATCH 03/21] Add trailing newlines --- src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/amd64/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/arm/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/x86/Dockerfile | 2 +- src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile | 2 +- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 2 +- src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile | 2 +- src/cbl-mariner/2.0/crossdeps/Dockerfile | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile index 8212c22c0..26052ce61 100644 --- a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile @@ -1,4 +1,4 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local ARG ROOTFS_DIR=/crossrootfs/x64 -RUN /scripts/eng/common/cross/build-rootfs.sh x64 alpine3.13 --skipunmount \ No newline at end of file +RUN /scripts/eng/common/cross/build-rootfs.sh x64 alpine3.13 --skipunmount diff --git a/src/cbl-mariner/2.0/cross/amd64/Dockerfile b/src/cbl-mariner/2.0/cross/amd64/Dockerfile index 5fe31cbac..240213151 100644 --- a/src/cbl-mariner/2.0/cross/amd64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/amd64/Dockerfile @@ -6,4 +6,4 @@ RUN tdnf install -y debootstrap RUN /scripts/eng/common/cross/build-rootfs.sh x64 xenial --skipunmount RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ - cp /usr/lib/clang/12.0.1/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ \ No newline at end of file + cp /usr/lib/clang/12.0.1/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ diff --git a/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile index 276ae3b5e..1cf0d4dcc 100644 --- a/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile @@ -1,4 +1,4 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local ARG ROOTFS_DIR=/crossrootfs/arm -RUN /scripts/eng/common/cross/build-rootfs.sh arm alpine3.13 --skipunmount \ No newline at end of file +RUN /scripts/eng/common/cross/build-rootfs.sh arm alpine3.13 --skipunmount diff --git a/src/cbl-mariner/2.0/cross/arm/Dockerfile b/src/cbl-mariner/2.0/cross/arm/Dockerfile index a9e50440d..23eb53f95 100644 --- a/src/cbl-mariner/2.0/cross/arm/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm/Dockerfile @@ -37,4 +37,4 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ cp ./compiler-rt_build/lib/linux/libclang_rt.profile-armhf.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ -RUN rm -r compiler-rt_build llvm-project-12.0.1.src \ No newline at end of file +RUN rm -r compiler-rt_build llvm-project-12.0.1.src diff --git a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile index ec712b709..b2f82c1b1 100644 --- a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile @@ -1,4 +1,4 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local ARG ROOTFS_DIR=/crossrootfs/arm64 -RUN /scripts/eng/common/cross/build-rootfs.sh arm64 alpine3.13 --skipunmount \ No newline at end of file +RUN /scripts/eng/common/cross/build-rootfs.sh arm64 alpine3.13 --skipunmount diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index 5abf3337b..570138624 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -39,4 +39,4 @@ RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ # Remove LLVM build dependencies -RUN rm -r compiler-rt_build llvm-project-12.0.1.src \ No newline at end of file +RUN rm -r compiler-rt_build llvm-project-12.0.1.src diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index a9c657dbc..28a37cc98 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -40,4 +40,4 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ make install && echo hi RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ - cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ \ No newline at end of file + cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ diff --git a/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile index b2e1a0590..7fbf5aef9 100644 --- a/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile @@ -3,4 +3,4 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local RUN tdnf install -y \ clang \ lld \ - compiler-rt \ No newline at end of file + compiler-rt diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index 2d49b9c87..e63a3fe4a 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -25,4 +25,4 @@ RUN rm -r build llvm-project-12.0.1.src RUN tdnf remove -y \ texinfo \ diffutils \ - binutils \ No newline at end of file + binutils diff --git a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile index 0f835edf7..fe633c6c1 100644 --- a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile @@ -11,4 +11,4 @@ RUN wget https://releases.llvm.org/release-keys.asc && \ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz && \ echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project-12.0.1.src.tar.xz" | sha256sum -c && \ gpg --keyring /release-keys.gpg --verify llvm-project-12.0.1.src.tar.xz.sig && \ - rm llvm-project-12.0.1.src.tar.xz.sig \ No newline at end of file + rm llvm-project-12.0.1.src.tar.xz.sig diff --git a/src/cbl-mariner/2.0/crossdeps/Dockerfile b/src/cbl-mariner/2.0/crossdeps/Dockerfile index 6b53bfeb5..ec954a86e 100644 --- a/src/cbl-mariner/2.0/crossdeps/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps/Dockerfile @@ -41,4 +41,4 @@ RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ mkdir -p /usr/share/keyrings && \ mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ popd && \ - rm -r ubuntu-keyring-2021.03.26 \ No newline at end of file + rm -r ubuntu-keyring-2021.03.26 From b3c33734e21bfcae3234c73260c9ff45167cb362 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 22:09:02 +0000 Subject: [PATCH 04/21] Remove arm and arm-alpine images for now Still need to investigate numa header dependency. --- .../2.0/cross/arm-alpine/Dockerfile | 4 -- src/cbl-mariner/2.0/cross/arm/Dockerfile | 40 ------------------- src/cbl-mariner/manifest.json | 26 ------------ 3 files changed, 70 deletions(-) delete mode 100644 src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile delete mode 100644 src/cbl-mariner/2.0/cross/arm/Dockerfile diff --git a/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile deleted file mode 100644 index 1cf0d4dcc..000000000 --- a/src/cbl-mariner/2.0/cross/arm-alpine/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local -ARG ROOTFS_DIR=/crossrootfs/arm - -RUN /scripts/eng/common/cross/build-rootfs.sh arm alpine3.13 --skipunmount diff --git a/src/cbl-mariner/2.0/cross/arm/Dockerfile b/src/cbl-mariner/2.0/cross/arm/Dockerfile deleted file mode 100644 index 23eb53f95..000000000 --- a/src/cbl-mariner/2.0/cross/arm/Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local -ARG ROOTFS_DIR=/crossrootfs/arm - -RUN tdnf install -y debootstrap - -RUN /scripts/eng/common/cross/build-rootfs.sh arm xenial --skipunmount - -# Build compiler-rt profile library for PGO instrumentation -COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project-12.0.1.src.tar.xz . -RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ - rm llvm-project-12.0.1.src.tar.xz && \ - mkdir compiler-rt_build && cd compiler-rt_build && \ - BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ - TARGET_TRIPLE=arm-linux-gnueabihf && \ - cmake ../llvm-project-12.0.1.src/compiler-rt \ - -DCOMPILER_RT_BUILD_PROFILE=ON \ - -DCOMPILER_RT_BUILD_BUILTINS=OFF \ - -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ - -DCOMPILER_RT_BUILD_XRAY=OFF \ - -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ - \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ - -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} \ - -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} \ - -DLLVM_CONFIG_PATH=llvm-config \ - -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ - -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ - -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install - -RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ - cp ./compiler-rt_build/lib/linux/libclang_rt.profile-armhf.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ - -RUN rm -r compiler-rt_build llvm-project-12.0.1.src diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index 03c48e642..3c9ca828f 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -124,32 +124,6 @@ } ] }, - { - "platforms": [ - { - "dockerfile": "src/cbl-mariner/2.0/cross/arm", - "os": "linux", - "osVersion": "cbl-mariner2.0", - "tags": { - "cbl-mariner-2.0-cross-arm-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "cbl-mariner-2.0-cross-arm$(FloatingTagSuffix)": {} - } - } - ] - }, - { - "platforms": [ - { - "dockerfile": "src/cbl-mariner/2.0/cross/arm-alpine", - "os": "linux", - "osVersion": "cbl-mariner2.0", - "tags": { - "cbl-mariner-2.0-cross-arm-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "cbl-mariner-2.0-cross-arm-alpine$(FloatingTagSuffix)": {} - } - } - ] - }, { "platforms": [ { From 59c407bb42128f55e49da9fad8e00afaa1975d67 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 22:40:23 +0000 Subject: [PATCH 05/21] Cleanup --- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 1 - src/cbl-mariner/2.0/cross/x86/Dockerfile | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index 570138624..3850d3a9a 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -38,5 +38,4 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ -# Remove LLVM build dependencies RUN rm -r compiler-rt_build llvm-project-12.0.1.src diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index 28a37cc98..b503e5024 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -37,7 +37,7 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ make -j $(getconf _NPROCESSORS_ONLN) && \ - make install && echo hi + make install RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ From b88433f73ba9de414b35ef02a15c678b582da7ea Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 22:54:15 +0000 Subject: [PATCH 06/21] Reduce llvm version duplication, remove sources on x86 --- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 10 +++++----- src/cbl-mariner/2.0/cross/x86/Dockerfile | 10 ++++++---- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 11 ++++++----- src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile | 12 ++++++------ 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index 3850d3a9a..3ab61f43e 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -7,13 +7,13 @@ RUN /scripts/eng/common/cross/build-rootfs.sh arm64 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project-12.0.1.src.tar.xz . -RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ - rm llvm-project-12.0.1.src.tar.xz && \ + /llvm-project.src.tar.xz . +RUN tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ + rm llvm-project.src.tar.xz && \ mkdir compiler-rt_build && cd compiler-rt_build && \ BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ TARGET_TRIPLE=aarch64-linux-gnu && \ - cmake ../llvm-project-12.0.1.src/compiler-rt \ + cmake ../llvm-project.src/compiler-rt \ -DCOMPILER_RT_BUILD_PROFILE=ON \ -DCOMPILER_RT_BUILD_BUILTINS=OFF \ -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ @@ -38,4 +38,4 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ -RUN rm -r compiler-rt_build llvm-project-12.0.1.src +RUN rm -r compiler-rt_build llvm-project.src diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index b503e5024..f579c504d 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -12,13 +12,13 @@ RUN /scripts/eng/common/cross/build-rootfs.sh x86 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project-12.0.1.src.tar.xz . -RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ - rm llvm-project-12.0.1.src.tar.xz && \ + /llvm-project.src.tar.xz . +RUN tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ + rm llvm-project.src.tar.xz && \ mkdir compiler-rt_build && cd compiler-rt_build && \ BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ TARGET_TRIPLE=i386-linux-gnu && \ - cmake ../llvm-project-12.0.1.src/compiler-rt \ + cmake ../llvm-project.src/compiler-rt \ -DCOMPILER_RT_BUILD_PROFILE=ON \ -DCOMPILER_RT_BUILD_BUILTINS=OFF \ -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ @@ -41,3 +41,5 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ + +RUN rm -r compiler-rt_build llvm-project.src \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index e63a3fe4a..f42cc9017 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -8,11 +8,12 @@ RUN tdnf install -y \ # Build LLVM cross-toolchain (with support for targeting arm architectures) COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project-12.0.1.src.tar.xz . -RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ - rm llvm-project-12.0.1.src.tar.xz && \ + /llvm-project.src.tar.xz . +RUN mkdir -p llvm-project.src && \ + tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ + rm llvm-project.src.tar.xz && \ mkdir build && cd build && \ - cmake ../llvm-project-12.0.1.src/llvm \ + cmake ../llvm-project.src/llvm \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGETS_TO_BUILD="host;AArch64;ARM" \ -Wno-dev \ @@ -20,7 +21,7 @@ RUN tar -xf llvm-project-12.0.1.src.tar.xz && \ make -j $(getconf _NPROCESSORS_ONLN) && \ make install -RUN rm -r build llvm-project-12.0.1.src +RUN rm -r build llvm-project.src RUN tdnf remove -y \ texinfo \ diff --git a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile index fe633c6c1..054fab2c0 100644 --- a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile @@ -6,9 +6,9 @@ RUN wget https://releases.llvm.org/release-keys.asc && \ gpg --output release-keys.gpg --dearmor release-keys.asc && \ rm release-keys.asc && \ # 2. Download llvm sources and signature, and verify signature - wget https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz.sig && \ - echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project-12.0.1.src.tar.xz.sig" | sha256sum -c && \ - wget https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz && \ - echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project-12.0.1.src.tar.xz" | sha256sum -c && \ - gpg --keyring /release-keys.gpg --verify llvm-project-12.0.1.src.tar.xz.sig && \ - rm llvm-project-12.0.1.src.tar.xz.sig + wget -O llvm-project.src.tar.xz.sig https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz.sig && \ + echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project.src.tar.xz.sig" | sha256sum -c && \ + wget -O llvm-project.src.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz && \ + echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project.src.tar.xz" | sha256sum -c && \ + gpg --keyring /release-keys.gpg --verify llvm-project.src.tar.xz.sig && \ + rm llvm-project.src.tar.xz.sig From 5d962aaffeee27384d601dceb697be12bbaf45c6 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Fri, 24 Mar 2023 23:34:42 +0000 Subject: [PATCH 07/21] Extract llm version to variable --- src/cbl-mariner/2.0/cross/amd64/Dockerfile | 5 +++-- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 6 +++--- src/cbl-mariner/2.0/cross/x86/Dockerfile | 5 +++-- src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile | 5 +++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/amd64/Dockerfile b/src/cbl-mariner/2.0/cross/amd64/Dockerfile index 240213151..f99370f42 100644 --- a/src/cbl-mariner/2.0/cross/amd64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/amd64/Dockerfile @@ -5,5 +5,6 @@ RUN tdnf install -y debootstrap RUN /scripts/eng/common/cross/build-rootfs.sh x64 xenial --skipunmount -RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ - cp /usr/lib/clang/12.0.1/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ +RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ + mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ + cp /usr/lib/clang/${LLVM_VERSION}/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index 3ab61f43e..a1dea24c2 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -34,8 +34,8 @@ RUN tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-compone make -j $(getconf _NPROCESSORS_ONLN) && \ make install -# Copy into rootfs -RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ - cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ +RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ + mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ + cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ RUN rm -r compiler-rt_build llvm-project.src diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index f579c504d..e71958a45 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -39,7 +39,8 @@ RUN tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-compone make -j $(getconf _NPROCESSORS_ONLN) && \ make install -RUN mkdir -p $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ && \ - cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-12/lib/clang/12.0.1/lib/linux/ +RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ + mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ + cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ RUN rm -r compiler-rt_build llvm-project.src \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile index 054fab2c0..59014fffa 100644 --- a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile @@ -6,9 +6,10 @@ RUN wget https://releases.llvm.org/release-keys.asc && \ gpg --output release-keys.gpg --dearmor release-keys.asc && \ rm release-keys.asc && \ # 2. Download llvm sources and signature, and verify signature - wget -O llvm-project.src.tar.xz.sig https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz.sig && \ + LLVM_VERSION=12.0.1 && \ + wget -O llvm-project.src.tar.xz.sig https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz.sig && \ echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project.src.tar.xz.sig" | sha256sum -c && \ - wget -O llvm-project.src.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz && \ + wget -O llvm-project.src.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project.src.tar.xz" | sha256sum -c && \ gpg --keyring /release-keys.gpg --verify llvm-project.src.tar.xz.sig && \ rm llvm-project.src.tar.xz.sig From 4dc2a9fd6171b8ef295155efb7bc78617ac306b4 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Sun, 26 Mar 2023 17:20:48 +0000 Subject: [PATCH 08/21] Fix tar extraction --- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 3 ++- src/cbl-mariner/2.0/cross/x86/Dockerfile | 3 ++- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index a1dea24c2..a04d585fe 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -8,7 +8,8 @@ RUN /scripts/eng/common/cross/build-rootfs.sh arm64 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ /llvm-project.src.tar.xz . -RUN tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ +RUN mkdir llvm-project.src && \ + tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ rm llvm-project.src.tar.xz && \ mkdir compiler-rt_build && cd compiler-rt_build && \ BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index e71958a45..0639c33d4 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -13,7 +13,8 @@ RUN /scripts/eng/common/cross/build-rootfs.sh x86 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ /llvm-project.src.tar.xz . -RUN tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ +RUN mkdir llvm-project.src && \ + tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ rm llvm-project.src.tar.xz && \ mkdir compiler-rt_build && cd compiler-rt_build && \ BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index f42cc9017..b0dfc5304 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -9,7 +9,7 @@ RUN tdnf install -y \ # Build LLVM cross-toolchain (with support for targeting arm architectures) COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ /llvm-project.src.tar.xz . -RUN mkdir -p llvm-project.src && \ +RUN mkdir llvm-project.src && \ tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ rm llvm-project.src.tar.xz && \ mkdir build && cd build && \ From 82b4b4550d573c40c9959f07d9a9ef8ae7544627 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Mon, 27 Mar 2023 22:42:06 +0000 Subject: [PATCH 09/21] Fix newline --- src/cbl-mariner/2.0/cross/x86/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index 0639c33d4..73bba3f0f 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -44,4 +44,4 @@ RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ -RUN rm -r compiler-rt_build llvm-project.src \ No newline at end of file +RUN rm -r compiler-rt_build llvm-project.src From a54d50d7a6251fdc23af3cec576a6dcfcbde8308 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 28 Mar 2023 15:37:28 +0000 Subject: [PATCH 10/21] Try defining separate stage for artifacts --- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 5 +++-- src/cbl-mariner/2.0/cross/x86/Dockerfile | 5 +++-- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index a04d585fe..ba06ee743 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -1,3 +1,5 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local as artifacts + FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local ARG ROOTFS_DIR=/crossrootfs/arm64 @@ -6,8 +8,7 @@ RUN tdnf install -y debootstrap RUN /scripts/eng/common/cross/build-rootfs.sh arm64 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation -COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project.src.tar.xz . +COPY --from=artifacts /llvm-project.src.tar.xz . RUN mkdir llvm-project.src && \ tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ rm llvm-project.src.tar.xz && \ diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index 73bba3f0f..6413877be 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -1,3 +1,5 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local as artifacts + FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local AS rootfsbuild ARG ROOTFS_DIR=/crossrootfs/x86 @@ -11,8 +13,7 @@ RUN tdnf install -y \ RUN /scripts/eng/common/cross/build-rootfs.sh x86 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation -COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project.src.tar.xz . +COPY --from=artifacts /llvm-project.src.tar.xz . RUN mkdir llvm-project.src && \ tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ rm llvm-project.src.tar.xz && \ diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index b0dfc5304..508894b17 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -1,3 +1,5 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local as artifacts + FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local # Install LLVM-only build dependencies @@ -7,8 +9,7 @@ RUN tdnf install -y \ binutils # Build LLVM cross-toolchain (with support for targeting arm architectures) -COPY --from=mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local \ - /llvm-project.src.tar.xz . +COPY --from=artifacts /llvm-project.src.tar.xz . RUN mkdir llvm-project.src && \ tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ rm llvm-project.src.tar.xz && \ From ae3a84d21a8189c8bd9274b60cce22e961b6d605 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 28 Mar 2023 15:39:30 +0000 Subject: [PATCH 11/21] Fix mariner 1.0 base image --- src/cbl-mariner/1.0/helix/amd64/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cbl-mariner/1.0/helix/amd64/Dockerfile b/src/cbl-mariner/1.0/helix/amd64/Dockerfile index 0a636340f..426bfebaa 100644 --- a/src/cbl-mariner/1.0/helix/amd64/Dockerfile +++ b/src/cbl-mariner/1.0/helix/amd64/Dockerfile @@ -1,4 +1,4 @@ -FROM cblmariner.azurecr.io/base/core:1.0 +FROM mcr.microsoft.com/cbl-mariner/base/core:1.0 # Install Helix Dependencies From 4f0d25d8dda1536f826d98e33e1d4e804aff7956 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 28 Mar 2023 16:28:56 +0000 Subject: [PATCH 12/21] Order manifest entries by dependency order --- src/cbl-mariner/manifest.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index 3c9ca828f..ab1a158f4 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -45,11 +45,11 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps", + "dockerfile": "src/cbl-mariner/2.0/crossdeps-artifacts", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-local": { + "cbl-mariner-2.0-crossdeps-artifacts-local": { "isLocal": true } } @@ -59,11 +59,11 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps-amd64", + "dockerfile": "src/cbl-mariner/2.0/crossdeps", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-amd64-local": { + "cbl-mariner-2.0-crossdeps-local": { "isLocal": true } } @@ -73,11 +73,11 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps-arm", + "dockerfile": "src/cbl-mariner/2.0/crossdeps-amd64", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-arm-local": { + "cbl-mariner-2.0-crossdeps-amd64-local": { "isLocal": true } } @@ -87,11 +87,11 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps-artifacts", + "dockerfile": "src/cbl-mariner/2.0/crossdeps-arm", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-artifacts-local": { + "cbl-mariner-2.0-crossdeps-arm-local": { "isLocal": true } } From 042a82128c05bfa722736dd518e9acdd52680594 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 28 Mar 2023 16:47:18 +0000 Subject: [PATCH 13/21] Fix order crossdeps-artifacts depends on crossdeps. --- src/cbl-mariner/manifest.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index ab1a158f4..b338b76e3 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -45,11 +45,11 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps-artifacts", + "dockerfile": "src/cbl-mariner/2.0/crossdeps", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-artifacts-local": { + "cbl-mariner-2.0-crossdeps-local": { "isLocal": true } } @@ -59,11 +59,11 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps", + "dockerfile": "src/cbl-mariner/2.0/crossdeps-artifacts", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-local": { + "cbl-mariner-2.0-crossdeps-artifacts-local": { "isLocal": true } } From c7604ae18fc9b2de613b8ea82a9c726651c79e84 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 28 Mar 2023 18:06:20 +0000 Subject: [PATCH 14/21] Increase timeout --- eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml | 1 + eng/pipelines/dotnet-buildtools-prereqs-mariner.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml b/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml index 7c48e63bd..cf809df33 100644 --- a/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml +++ b/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml @@ -24,3 +24,4 @@ stages: parameters: internalProjectName: ${{ variables.internalProjectName }} publicProjectName: ${{ variables.publicProjectName }} + linuxAmdBuildJobTimeout: 360 diff --git a/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml b/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml index a7fe22798..e8b2178c3 100644 --- a/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml +++ b/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml @@ -24,3 +24,4 @@ stages: parameters: internalProjectName: ${{ variables.internalProjectName }} publicProjectName: ${{ variables.publicProjectName }} + linuxAmdBuildJobTimeout: 360 From b6ebffa40598053f9bf524c4561c45e6babf20da Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Tue, 28 Mar 2023 22:20:42 +0000 Subject: [PATCH 15/21] Avoid local-only tags --- src/cbl-mariner/manifest.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index b338b76e3..efcfa7db9 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -49,6 +49,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-local": { "isLocal": true } @@ -63,6 +65,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-artifacts-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-artifacts$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-artifacts-local": { "isLocal": true } @@ -77,6 +81,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-amd64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-amd64$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-amd64-local": { "isLocal": true } @@ -91,6 +97,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-arm-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-arm$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-arm-local": { "isLocal": true } From ffc872da5e7f1dfdf21ea696e3dd87f8a69245bd Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 29 Mar 2023 01:55:56 +0000 Subject: [PATCH 16/21] Optimize image size --- .../2.0/cross/amd64-alpine/Dockerfile | 8 ++- src/cbl-mariner/2.0/cross/amd64/Dockerfile | 10 ++- .../2.0/cross/arm64-alpine/Dockerfile | 8 ++- src/cbl-mariner/2.0/cross/arm64/Dockerfile | 21 +++--- src/cbl-mariner/2.0/cross/x86/Dockerfile | 29 ++++----- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 30 +-------- .../2.0/crossdeps-artifacts/Dockerfile | 15 ----- .../2.0/crossdeps-builder/Dockerfile | 64 +++++++++++++++++++ .../dimitri_john_ledkov.asc | 0 .../mariner-extended.repo | 0 src/cbl-mariner/2.0/crossdeps/Dockerfile | 28 -------- src/cbl-mariner/manifest.json | 8 +-- 12 files changed, 112 insertions(+), 109 deletions(-) delete mode 100644 src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile create mode 100644 src/cbl-mariner/2.0/crossdeps-builder/Dockerfile rename src/cbl-mariner/2.0/{crossdeps => crossdeps-builder}/dimitri_john_ledkov.asc (100%) rename src/cbl-mariner/2.0/{crossdeps => crossdeps-builder}/mariner-extended.repo (100%) diff --git a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile index 26052ce61..87cd590e4 100644 --- a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile @@ -1,4 +1,10 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder ARG ROOTFS_DIR=/crossrootfs/x64 RUN /scripts/eng/common/cross/build-rootfs.sh x64 alpine3.13 --skipunmount + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/amd64/Dockerfile b/src/cbl-mariner/2.0/cross/amd64/Dockerfile index f99370f42..ac52987cf 100644 --- a/src/cbl-mariner/2.0/cross/amd64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/amd64/Dockerfile @@ -1,10 +1,14 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder ARG ROOTFS_DIR=/crossrootfs/x64 -RUN tdnf install -y debootstrap - RUN /scripts/eng/common/cross/build-rootfs.sh x64 xenial --skipunmount + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR + RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ cp /usr/lib/clang/${LLVM_VERSION}/lib/linux/libclang_rt.profile-x86_64.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ diff --git a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile index b2f82c1b1..98e156e66 100644 --- a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile @@ -1,4 +1,10 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder ARG ROOTFS_DIR=/crossrootfs/arm64 RUN /scripts/eng/common/cross/build-rootfs.sh arm64 alpine3.13 --skipunmount + + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR \ No newline at end of file diff --git a/src/cbl-mariner/2.0/cross/arm64/Dockerfile b/src/cbl-mariner/2.0/cross/arm64/Dockerfile index ba06ee743..b9d48ccab 100644 --- a/src/cbl-mariner/2.0/cross/arm64/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64/Dockerfile @@ -1,18 +1,10 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local as artifacts - -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder ARG ROOTFS_DIR=/crossrootfs/arm64 -RUN tdnf install -y debootstrap - RUN /scripts/eng/common/cross/build-rootfs.sh arm64 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation -COPY --from=artifacts /llvm-project.src.tar.xz . -RUN mkdir llvm-project.src && \ - tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ - rm llvm-project.src.tar.xz && \ - mkdir compiler-rt_build && cd compiler-rt_build && \ +RUN mkdir compiler-rt_build && cd compiler-rt_build && \ BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ TARGET_TRIPLE=aarch64-linux-gnu && \ cmake ../llvm-project.src/compiler-rt \ @@ -33,11 +25,14 @@ RUN mkdir llvm-project.src && \ -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install + make -j $(getconf _NPROCESSORS_ONLN) RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-aarch64.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ -RUN rm -r compiler-rt_build llvm-project.src + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local +ARG ROOTFS_DIR=/crossrootfs/arm64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index 6413877be..17ed3fef4 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -1,23 +1,15 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local as artifacts - -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local AS rootfsbuild +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local as builder ARG ROOTFS_DIR=/crossrootfs/x86 -RUN tdnf install -y \ - debootstrap \ - # Provides LLVMConfig.cmake, needed to build compiler-rt. Only needed on x86. - # x64 doesn't need this because we use compiler-rt from the mariner package. - # arm/arm64 don't need this because LLVMConfig.cmake is provided by the LLVM we build from source. - llvm-devel +# Provides LLVMConfig.cmake, needed to build compiler-rt. Only needed on x86. +# x64 doesn't need this because we use compiler-rt from the mariner package. +# arm/arm64 don't need this because LLVMConfig.cmake is provided by the LLVM we build from source. +RUN tdnf install -y llvm-devel RUN /scripts/eng/common/cross/build-rootfs.sh x86 xenial --skipunmount # Build compiler-rt profile library for PGO instrumentation -COPY --from=artifacts /llvm-project.src.tar.xz . -RUN mkdir llvm-project.src && \ - tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ - rm llvm-project.src.tar.xz && \ - mkdir compiler-rt_build && cd compiler-rt_build && \ +RUN mkdir compiler-rt_build && cd compiler-rt_build && \ BUILD_FLAGS="-v --sysroot=$ROOTFS_DIR" \ TARGET_TRIPLE=i386-linux-gnu && \ cmake ../llvm-project.src/compiler-rt \ @@ -38,11 +30,14 @@ RUN mkdir llvm-project.src && \ -DCMAKE_INSTALL_PREFIX=$ROOTFS_DIR/usr \ -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \ -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install + make -j $(getconf _NPROCESSORS_ONLN) RUN LLVM_VERSION=12.0.1 LLVM_VERSION_MAJOR="${LLVM_VERSION%%.*}" && \ mkdir -p $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ && \ cp compiler-rt_build/lib/linux/libclang_rt.profile-i386.a $ROOTFS_DIR/usr/lib/llvm-${LLVM_VERSION_MAJOR}/lib/clang/${LLVM_VERSION}/lib/linux/ -RUN rm -r compiler-rt_build llvm-project.src + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local +ARG ROOTFS_DIR=/crossrootfs/x86 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index 508894b17..89f8ee24a 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -1,30 +1,6 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-artifacts-local as artifacts +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local as builder FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local -# Install LLVM-only build dependencies -RUN tdnf install -y \ - texinfo \ - diffutils \ - binutils - -# Build LLVM cross-toolchain (with support for targeting arm architectures) -COPY --from=artifacts /llvm-project.src.tar.xz . -RUN mkdir llvm-project.src && \ - tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ - rm llvm-project.src.tar.xz && \ - mkdir build && cd build && \ - cmake ../llvm-project.src/llvm \ - -DCMAKE_BUILD_TYPE=Release \ - -DLLVM_TARGETS_TO_BUILD="host;AArch64;ARM" \ - -Wno-dev \ - -DLLVM_ENABLE_PROJECTS="clang;lld" && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install - -RUN rm -r build llvm-project.src - -RUN tdnf remove -y \ - texinfo \ - diffutils \ - binutils +# Install LLVM that we built from source +COPY --from=builder /usr/local /usr/local \ No newline at end of file diff --git a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile b/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile deleted file mode 100644 index 59014fffa..000000000 --- a/src/cbl-mariner/2.0/crossdeps-artifacts/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local - -# 1. Obtain signing keys used to sign llvm sources -RUN wget https://releases.llvm.org/release-keys.asc && \ - echo "f181a90697e3ea4b7782f1ee48314a570aef058505b4f3a0ab0611094ec13241 release-keys.asc" | sha256sum -c && \ - gpg --output release-keys.gpg --dearmor release-keys.asc && \ - rm release-keys.asc && \ -# 2. Download llvm sources and signature, and verify signature - LLVM_VERSION=12.0.1 && \ - wget -O llvm-project.src.tar.xz.sig https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz.sig && \ - echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project.src.tar.xz.sig" | sha256sum -c && \ - wget -O llvm-project.src.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ - echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project.src.tar.xz" | sha256sum -c && \ - gpg --keyring /release-keys.gpg --verify llvm-project.src.tar.xz.sig && \ - rm llvm-project.src.tar.xz.sig diff --git a/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile b/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile new file mode 100644 index 000000000..309566d34 --- /dev/null +++ b/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile @@ -0,0 +1,64 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local + +# TODO: remove this once debootstrap is available in the base repos. +COPY mariner-extended.repo /etc/yum.repos.d/ + +RUN tdnf install -y \ + # Rootfs build dependencies + debootstrap \ + # LLVM build dependencies + texinfo \ + diffutils \ + binutils + +# Obtain ubuntu package signing key (for use by debootstrap) +# 1. Add public key used to sign the ubuntu keyring +COPY dimitri_john_ledkov.asc . +RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ + rm dimitri_john_ledkov.asc && \ +# 2. Download the ubuntu keyrings + wget https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ + echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ + tar xf ubuntu-keyring_2021.03.26.tar.gz && \ + rm ubuntu-keyring_2021.03.26.tar.gz && \ +# 3. Verify keyrings + pushd ubuntu-keyring-2021.03.26 && \ + gpg --keyring /dimitri_john_ledkov.gpg --output SHA512SUMS.txt --decrypt SHA512SUMS.txt.asc && \ + rm /dimitri_john_ledkov.gpg && \ + sha512sum -c SHA512SUMS.txt && \ +# 4. Install the needed keyring and delete the rest + mkdir -p /usr/share/keyrings && \ + mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ + popd && \ + rm -r ubuntu-keyring-2021.03.26 + +# 1. Obtain signing keys used to sign llvm sources +RUN wget https://releases.llvm.org/release-keys.asc && \ + echo "f181a90697e3ea4b7782f1ee48314a570aef058505b4f3a0ab0611094ec13241 release-keys.asc" | sha256sum -c && \ + gpg --output release-keys.gpg --dearmor release-keys.asc && \ + rm release-keys.asc && \ +# 2. Download llvm sources and signature, and verify signature + LLVM_VERSION=12.0.1 && \ + wget -O llvm-project.src.tar.xz.sig https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz.sig && \ + echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project.src.tar.xz.sig" | sha256sum -c && \ + wget -O llvm-project.src.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz && \ + echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project.src.tar.xz" | sha256sum -c && \ + gpg --keyring /release-keys.gpg --verify llvm-project.src.tar.xz.sig && \ + rm llvm-project.src.tar.xz.sig + +# Build LLVM cross-toolchain (with support for targeting arm architectures) +RUN mkdir llvm-project.src && \ + tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ + rm llvm-project.src.tar.xz && \ + mkdir build && cd build && \ + cmake ../llvm-project.src/llvm \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_TARGETS_TO_BUILD="host;AArch64;ARM" \ + -Wno-dev \ + -DLLVM_ENABLE_PROJECTS="clang;lld" && \ + make -j $(getconf _NPROCESSORS_ONLN) && \ + make install + +# Obtain arcade scripts used to build rootfs +RUN git config --global user.email builder@dotnet-buildtools-prereqs-docker && \ + git clone --depth 1 --single-branch https://github.com/dotnet/arcade /scripts diff --git a/src/cbl-mariner/2.0/crossdeps/dimitri_john_ledkov.asc b/src/cbl-mariner/2.0/crossdeps-builder/dimitri_john_ledkov.asc similarity index 100% rename from src/cbl-mariner/2.0/crossdeps/dimitri_john_ledkov.asc rename to src/cbl-mariner/2.0/crossdeps-builder/dimitri_john_ledkov.asc diff --git a/src/cbl-mariner/2.0/crossdeps/mariner-extended.repo b/src/cbl-mariner/2.0/crossdeps-builder/mariner-extended.repo similarity index 100% rename from src/cbl-mariner/2.0/crossdeps/mariner-extended.repo rename to src/cbl-mariner/2.0/crossdeps-builder/mariner-extended.repo diff --git a/src/cbl-mariner/2.0/crossdeps/Dockerfile b/src/cbl-mariner/2.0/crossdeps/Dockerfile index ec954a86e..a571bc173 100644 --- a/src/cbl-mariner/2.0/crossdeps/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps/Dockerfile @@ -1,8 +1,5 @@ FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 -# TODO: remove this once debootstrap is available in the base repos. -COPY mariner-extended.repo /etc/yum.repos.d/ - RUN tdnf update -y && \ tdnf install -y \ wget \ @@ -17,28 +14,3 @@ RUN tdnf update -y && \ glibc-devel \ lttng-ust-devel \ kernel-headers - -# Obtain arcade scripts used to build rootfs -RUN git config --global user.email builder@dotnet-buildtools-prereqs-docker && \ - git clone --depth 1 --single-branch https://github.com/dotnet/arcade /scripts - -# Obtain ubuntu package signing key (for use by debootstrap) -# 1. Add public key used to sign the ubuntu keyring -COPY dimitri_john_ledkov.asc . -RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ - rm dimitri_john_ledkov.asc && \ -# 2. Download the ubuntu keyrings - wget https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ - echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ - tar xf ubuntu-keyring_2021.03.26.tar.gz && \ - rm ubuntu-keyring_2021.03.26.tar.gz && \ -# 3. Verify keyrings - pushd ubuntu-keyring-2021.03.26 && \ - gpg --keyring /dimitri_john_ledkov.gpg --output SHA512SUMS.txt --decrypt SHA512SUMS.txt.asc && \ - rm /dimitri_john_ledkov.gpg && \ - sha512sum -c SHA512SUMS.txt && \ -# 4. Install the needed keyring and delete the rest - mkdir -p /usr/share/keyrings && \ - mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ - popd && \ - rm -r ubuntu-keyring-2021.03.26 diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index efcfa7db9..bd76c7b5b 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -61,13 +61,13 @@ { "platforms": [ { - "dockerfile": "src/cbl-mariner/2.0/crossdeps-artifacts", + "dockerfile": "src/cbl-mariner/2.0/crossdeps-builder", "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-artifacts-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "cbl-mariner-2.0-crossdeps-artifacts$(FloatingTagSuffix)": {}, - "cbl-mariner-2.0-crossdeps-artifacts-local": { + "cbl-mariner-2.0-crossdeps-builder-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-builder$(FloatingTagSuffix)": {}, + "cbl-mariner-2.0-crossdeps-builder-local": { "isLocal": true } } From 8327d79130ac23e9069a6c2be3aa676b792ac762 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 29 Mar 2023 03:06:51 +0000 Subject: [PATCH 17/21] Ensure qemu-user-static is available This allows running arm64 binaries in the chroot on the x64 host. --- eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml | 2 ++ eng/pipelines/dotnet-buildtools-prereqs-mariner.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml b/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml index cf809df33..f86edb835 100644 --- a/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml +++ b/eng/pipelines/dotnet-buildtools-prereqs-mariner-pr.yml @@ -25,3 +25,5 @@ stages: internalProjectName: ${{ variables.internalProjectName }} publicProjectName: ${{ variables.publicProjectName }} linuxAmdBuildJobTimeout: 360 + customBuildInitSteps: + - template: /eng/pipelines/steps/install-cross-build-prereqs.yml diff --git a/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml b/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml index e8b2178c3..480468014 100644 --- a/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml +++ b/eng/pipelines/dotnet-buildtools-prereqs-mariner.yml @@ -25,3 +25,5 @@ stages: internalProjectName: ${{ variables.internalProjectName }} publicProjectName: ${{ variables.publicProjectName }} linuxAmdBuildJobTimeout: 360 + customBuildInitSteps: + - template: /eng/pipelines/steps/install-cross-build-prereqs.yml From 1fce64bd72a46885ef36c4c9ddd3a9a24b4faaa8 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 29 Mar 2023 17:12:06 +0000 Subject: [PATCH 18/21] Use local-only images, fix indentation --- src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile | 6 +++--- src/cbl-mariner/2.0/crossdeps-builder/Dockerfile | 12 ++++++------ src/cbl-mariner/manifest.json | 6 ------ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile index 7fbf5aef9..9a115b3ed 100644 --- a/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-amd64/Dockerfile @@ -1,6 +1,6 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local RUN tdnf install -y \ - clang \ - lld \ - compiler-rt + clang \ + lld \ + compiler-rt diff --git a/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile b/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile index 309566d34..5d3a7bac8 100644 --- a/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-builder/Dockerfile @@ -4,12 +4,12 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local COPY mariner-extended.repo /etc/yum.repos.d/ RUN tdnf install -y \ - # Rootfs build dependencies - debootstrap \ - # LLVM build dependencies - texinfo \ - diffutils \ - binutils + # Rootfs build dependencies + debootstrap \ + # LLVM build dependencies + texinfo \ + diffutils \ + binutils # Obtain ubuntu package signing key (for use by debootstrap) # 1. Add public key used to sign the ubuntu keyring diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index bd76c7b5b..2c7803d75 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -49,8 +49,6 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "cbl-mariner-2.0-crossdeps$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-local": { "isLocal": true } @@ -65,8 +63,6 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-builder-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "cbl-mariner-2.0-crossdeps-builder$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-builder-local": { "isLocal": true } @@ -81,8 +77,6 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { - "cbl-mariner-2.0-crossdeps-amd64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "cbl-mariner-2.0-crossdeps-amd64$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-amd64-local": { "isLocal": true } From 49178c541ad5b330e98a8370970edace59913f29 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 29 Mar 2023 17:55:02 +0000 Subject: [PATCH 19/21] Fix capitalization --- src/cbl-mariner/2.0/cross/x86/Dockerfile | 2 +- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/x86/Dockerfile b/src/cbl-mariner/2.0/cross/x86/Dockerfile index 17ed3fef4..4e40dc702 100644 --- a/src/cbl-mariner/2.0/cross/x86/Dockerfile +++ b/src/cbl-mariner/2.0/cross/x86/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local as builder +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder ARG ROOTFS_DIR=/crossrootfs/x86 # Provides LLVMConfig.cmake, needed to build compiler-rt. Only needed on x86. diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index 89f8ee24a..c0f15b412 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local as builder +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-builder-local AS builder FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local From ec3af4cc9666ac563e6a72a007bd3d5aa22436ea Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 29 Mar 2023 18:04:09 +0000 Subject: [PATCH 20/21] Fix newlines --- src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile | 2 +- src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile | 2 +- src/cbl-mariner/2.0/crossdeps-arm/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile index 87cd590e4..69a574000 100644 --- a/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/amd64-alpine/Dockerfile @@ -7,4 +7,4 @@ RUN /scripts/eng/common/cross/build-rootfs.sh x64 alpine3.13 --skipunmount FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-amd64-local ARG ROOTFS_DIR=/crossrootfs/x64 -COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR \ No newline at end of file +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile index 98e156e66..3dd593c46 100644 --- a/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile +++ b/src/cbl-mariner/2.0/cross/arm64-alpine/Dockerfile @@ -7,4 +7,4 @@ RUN /scripts/eng/common/cross/build-rootfs.sh arm64 alpine3.13 --skipunmount FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-arm-local ARG ROOTFS_DIR=/crossrootfs/arm64 -COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR \ No newline at end of file +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile index c0f15b412..d4f93732a 100644 --- a/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile +++ b/src/cbl-mariner/2.0/crossdeps-arm/Dockerfile @@ -3,4 +3,4 @@ FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-build FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local # Install LLVM that we built from source -COPY --from=builder /usr/local /usr/local \ No newline at end of file +COPY --from=builder /usr/local /usr/local From 8a2a90da8d6e6b3d450a1d4553c10174c507fd12 Mon Sep 17 00:00:00 2001 From: Sven Boemer Date: Wed, 29 Mar 2023 20:53:46 +0000 Subject: [PATCH 21/21] Add back non-local version tags --- src/cbl-mariner/manifest.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cbl-mariner/manifest.json b/src/cbl-mariner/manifest.json index 2c7803d75..bd76c7b5b 100644 --- a/src/cbl-mariner/manifest.json +++ b/src/cbl-mariner/manifest.json @@ -49,6 +49,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-local": { "isLocal": true } @@ -63,6 +65,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-builder-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-builder$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-builder-local": { "isLocal": true } @@ -77,6 +81,8 @@ "os": "linux", "osVersion": "cbl-mariner2.0", "tags": { + "cbl-mariner-2.0-crossdeps-amd64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "cbl-mariner-2.0-crossdeps-amd64$(FloatingTagSuffix)": {}, "cbl-mariner-2.0-crossdeps-amd64-local": { "isLocal": true }