|
| 1 | +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-crossdeps-local |
| 2 | + |
| 3 | +# TODO: remove this once debootstrap is available in the base repos. |
| 4 | +COPY mariner-extended.repo /etc/yum.repos.d/ |
| 5 | + |
| 6 | +RUN tdnf install -y \ |
| 7 | + # Rootfs build dependencies |
| 8 | + debootstrap \ |
| 9 | + # LLVM build dependencies |
| 10 | + texinfo \ |
| 11 | + diffutils \ |
| 12 | + binutils |
| 13 | + |
| 14 | +# Obtain ubuntu package signing key (for use by debootstrap) |
| 15 | +# 1. Add public key used to sign the ubuntu keyring |
| 16 | +COPY dimitri_john_ledkov.asc . |
| 17 | +RUN gpg --output dimitri_john_ledkov.gpg --dearmor dimitri_john_ledkov.asc && \ |
| 18 | + rm dimitri_john_ledkov.asc && \ |
| 19 | +# 2. Download the ubuntu keyrings |
| 20 | + wget https://mirrors.edge.kernel.org/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2021.03.26.tar.gz && \ |
| 21 | + echo "492eed5c06408c6f632577adb0796130af5d6542013ef418f47187a209e49bb1 ubuntu-keyring_2021.03.26.tar.gz" | sha256sum -c && \ |
| 22 | + tar xf ubuntu-keyring_2021.03.26.tar.gz && \ |
| 23 | + rm ubuntu-keyring_2021.03.26.tar.gz && \ |
| 24 | +# 3. Verify keyrings |
| 25 | + pushd ubuntu-keyring-2021.03.26 && \ |
| 26 | + gpg --keyring /dimitri_john_ledkov.gpg --output SHA512SUMS.txt --decrypt SHA512SUMS.txt.asc && \ |
| 27 | + rm /dimitri_john_ledkov.gpg && \ |
| 28 | + sha512sum -c SHA512SUMS.txt && \ |
| 29 | +# 4. Install the needed keyring and delete the rest |
| 30 | + mkdir -p /usr/share/keyrings && \ |
| 31 | + mv keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings && \ |
| 32 | + popd && \ |
| 33 | + rm -r ubuntu-keyring-2021.03.26 |
| 34 | + |
| 35 | +# 1. Obtain signing keys used to sign llvm sources |
| 36 | +RUN wget https://releases.llvm.org/release-keys.asc && \ |
| 37 | + echo "f181a90697e3ea4b7782f1ee48314a570aef058505b4f3a0ab0611094ec13241 release-keys.asc" | sha256sum -c && \ |
| 38 | + gpg --output release-keys.gpg --dearmor release-keys.asc && \ |
| 39 | + rm release-keys.asc && \ |
| 40 | +# 2. Download llvm sources and signature, and verify signature |
| 41 | + LLVM_VERSION=12.0.1 && \ |
| 42 | + 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 && \ |
| 43 | + echo "6cc956d622a7d3d746de0d71d8ca616a6c291e2c561703ac7a9535f38b999955 llvm-project.src.tar.xz.sig" | sha256sum -c && \ |
| 44 | + 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 && \ |
| 45 | + echo "129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e llvm-project.src.tar.xz" | sha256sum -c && \ |
| 46 | + gpg --keyring /release-keys.gpg --verify llvm-project.src.tar.xz.sig && \ |
| 47 | + rm llvm-project.src.tar.xz.sig |
| 48 | + |
| 49 | +# Build LLVM cross-toolchain (with support for targeting arm architectures) |
| 50 | +RUN mkdir llvm-project.src && \ |
| 51 | + tar -xf llvm-project.src.tar.xz --directory llvm-project.src --strip-components=1 && \ |
| 52 | + rm llvm-project.src.tar.xz && \ |
| 53 | + mkdir build && cd build && \ |
| 54 | + cmake ../llvm-project.src/llvm \ |
| 55 | + -DCMAKE_BUILD_TYPE=Release \ |
| 56 | + -DLLVM_TARGETS_TO_BUILD="host;AArch64;ARM" \ |
| 57 | + -Wno-dev \ |
| 58 | + -DLLVM_ENABLE_PROJECTS="clang;lld" && \ |
| 59 | + make -j $(getconf _NPROCESSORS_ONLN) && \ |
| 60 | + make install |
| 61 | + |
| 62 | +# Obtain arcade scripts used to build rootfs |
| 63 | +RUN git config --global user.email builder@dotnet-buildtools-prereqs-docker && \ |
| 64 | + git clone --depth 1 --single-branch https://github.com/dotnet/arcade /scripts |
0 commit comments