diff --git a/src/azurelinux/3.0/net10.0/cross/loongarch64-musl/Dockerfile b/src/azurelinux/3.0/net10.0/cross/loongarch64-musl/Dockerfile new file mode 100644 index 000000000..8b42979ad --- /dev/null +++ b/src/azurelinux/3.0/net10.0/cross/loongarch64-musl/Dockerfile @@ -0,0 +1,36 @@ +ARG ROOTFS_DIR=/crossrootfs/loongarch64 + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-crossdeps-builder-amd64 AS builder +ARG ROOTFS_DIR + +RUN /scripts/eng/common/cross/build-rootfs.sh loongarch64 alpine3.20 --skipunmount + +RUN TARGET_TRIPLE="loongarch64-alpine-linux-musl" && \ + cmake -S llvm-project.src/runtimes -B runtimes \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_ASM_COMPILER=clang \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_ASM_COMPILER_TARGET="$TARGET_TRIPLE" \ + -DCMAKE_C_COMPILER_TARGET="$TARGET_TRIPLE" \ + -DCMAKE_CXX_COMPILER_TARGET="$TARGET_TRIPLE" \ + # We're going to link the static libraries we build here into PIC images, so build the static libraries as PIC. + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_SYSROOT="$ROOTFS_DIR" \ + # Specify linker to use for exes directly for CMake toolchain detection + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + # Don't search for tools in the sysroot as we're cross-compiling + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM="NEVER" \ + -DLLVM_USE_LINKER=lld \ + -DLLVM_ENABLE_RUNTIMES="libcxx" \ + -DLIBCXX_ENABLE_SHARED=OFF \ + -DLIBCXX_HAS_MUSL_LIBC=ON \ + -DLIBCXX_CXX_ABI=libstdc++ \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$ROOTFS_DIR/usr/include/c++/14.2.0/;$ROOTFS_DIR/usr/include/c++/14.2.0/$TARGET_TRIPLE" && \ + cmake --build runtimes -j $(getconf _NPROCESSORS_ONLN) && \ + cmake --install runtimes --prefix "$ROOTFS_DIR/usr" + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-crossdeps-llvm-amd64 +ARG ROOTFS_DIR + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/azurelinux/3.0/net10.0/cross/loongarch64/Dockerfile b/src/azurelinux/3.0/net10.0/cross/loongarch64/Dockerfile new file mode 100644 index 000000000..8a6e9f5a0 --- /dev/null +++ b/src/azurelinux/3.0/net10.0/cross/loongarch64/Dockerfile @@ -0,0 +1,57 @@ +ARG ROOTFS_DIR=/crossrootfs/loongarch64 + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-crossdeps-builder-amd64 AS builder +ARG ROOTFS_DIR + +# Install the latest debootstrap +RUN tdnf remove -y debootstrap && \ + curl -fsL -o debootstrap.tar.gz https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.138.tar.gz && \ + echo "e8e8b72388b6e5ced65d1b5e69ce0b9e13f4813da0c328a52add57ee5f79430a debootstrap.tar.gz" | sha256sum -c - && \ + tar xzf debootstrap.tar.gz -C / && \ + ln -s /debootstrap/debootstrap -t /usr/local/bin && \ + rm -f debootstrap.tar.gz + +# temp +RUN rm -rf /scripts && git clone --depth 1 --single-branch https://github.com/am11/arcade -b patch-14 /scripts + +RUN /scripts/eng/common/cross/build-rootfs.sh loongarch64 sid --skipunmount --skipsigcheck + +RUN TARGET_TRIPLE="loongarch64-linux-gnu" && \ + CLANG_MAJOR_VERSION=$(clang --version | grep -oP "(?<=version )\d+") && \ + cmake -S llvm-project.src/runtimes -B runtimes \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_ASM_COMPILER=clang \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_ASM_COMPILER_TARGET="$TARGET_TRIPLE" \ + -DCMAKE_C_COMPILER_TARGET="$TARGET_TRIPLE" \ + -DCMAKE_CXX_COMPILER_TARGET="$TARGET_TRIPLE" \ + # We're going to link the static libraries we build here into PIC images, so build the static libraries as PIC. + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_SYSROOT="$ROOTFS_DIR" \ + # Specify linker to use for exes directly for CMake toolchain detection + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + # Don't search for tools in the sysroot as we're cross-compiling + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM="NEVER" \ + -DLLVM_USE_LINKER=lld \ + -DLLVM_ENABLE_RUNTIMES="libcxx;compiler-rt" \ + -DLIBCXX_ENABLE_SHARED=OFF \ + -DLIBCXX_CXX_ABI=libstdc++ \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$ROOTFS_DIR/usr/include/c++/13/;$ROOTFS_DIR/usr/include/$TARGET_TRIPLE" \ + -DCOMPILER_RT_CXX_LIBRARY="libcxx" \ + -DCOMPILER_RT_STATIC_CXX_LIBRARY=ON \ + -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ + -DCOMPILER_RT_BUILD_MEMPROF=OFF \ + # The libfuzzer build in LLVM doesn't correctly forward the required CMake properties to the "fuzzed libc++" build + # so skip it here. + -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCOMPILER_RT_INSTALL_PATH="/usr/local/lib/clang/$CLANG_MAJOR_VERSION" && \ + cmake --build runtimes -j $(getconf _NPROCESSORS_ONLN) && \ + cmake --install runtimes --prefix "$ROOTFS_DIR/usr" + +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-crossdeps-llvm-amd64 +ARG ROOTFS_DIR + +COPY --from=builder /usr/local/lib/clang /usr/local/lib/clang/ +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/azurelinux/manifest.json b/src/azurelinux/manifest.json index e14f70ed2..a7519d913 100644 --- a/src/azurelinux/manifest.json +++ b/src/azurelinux/manifest.json @@ -650,6 +650,29 @@ } ] }, + { + "platforms": [ + { + "dockerfile": "src/azurelinux/3.0/net10.0/cross/loongarch64", + "os": "linux", + "osVersion": "azurelinux3.0", + "tags": { + "azurelinux-3.0-net10.0-cross-loongarch64": {} + } + } + ] + }, { + "platforms": [ + { + "dockerfile": "src/azurelinux/3.0/net10.0/cross/loongarch64-musl", + "os": "linux", + "osVersion": "azurelinux3.0", + "tags": { + "azurelinux-3.0-net10.0-cross-loongarch64-musl": {} + } + } + ] + }, { "platforms": [ { diff --git a/src/ubuntu/build-scripts/install-cross-build-prereqs.sh b/src/ubuntu/build-scripts/install-cross-build-prereqs.sh index 58195f1bd..0527426c4 100755 --- a/src/ubuntu/build-scripts/install-cross-build-prereqs.sh +++ b/src/ubuntu/build-scripts/install-cross-build-prereqs.sh @@ -5,13 +5,22 @@ set -e # Stop script if unbound variable found (use ${var:-} if intentional) set -u -# we need to make sure that we install binfmt >= 2.2.0 and qemu-user-static >= 1.4.2, -# which are available in Ubuntu 20.04+ repositories +# we need to use ubuntu repo for new architectures like qemu-loongarch64-static which are not available in microsoft sources + +# backup and create single source for this distro +find /etc/apt +sudo mv /etc/apt/sources.list.d{,_} +sudo mkdir /etc/apt/sources.list.d + . /etc/os-release -if [ "$(echo "$VERSION_ID" | tr -d .)" -lt 2004 ]; then - sed "s/$UBUNTU_CODENAME/focal/g" /etc/apt/sources.list | sudo dd of=/etc/apt/sources.list.d/focal.list -fi +sudo tee "/etc/apt/sources.list.d/ubuntu.sources" > /dev/null <