diff --git a/src/azurelinux/3.0/net9.0/cross/riscv64-alpine/Dockerfile b/src/azurelinux/3.0/net9.0/cross/riscv64-alpine/Dockerfile new file mode 100644 index 000000000..c5fe2625c --- /dev/null +++ b/src/azurelinux/3.0/net9.0/cross/riscv64-alpine/Dockerfile @@ -0,0 +1,34 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-crossdeps-builder-net9.0-local AS builder +ARG ROOTFS_DIR=/crossrootfs/riscv64 + +RUN /scripts/eng/common/cross/build-rootfs.sh riscv64 alpine3.20 --skipunmount + +RUN TARGET_TRIPLE="riscv64-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++/13.2.1/;$ROOTFS_DIR/usr/include/c++/13.2.1/$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-crossdeps-llvm-net9.0-local +ARG ROOTFS_DIR=/crossrootfs/riscv64 + +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/azurelinux/3.0/net9.0/cross/riscv64/Dockerfile b/src/azurelinux/3.0/net9.0/cross/riscv64/Dockerfile new file mode 100644 index 000000000..ded3f617b --- /dev/null +++ b/src/azurelinux/3.0/net9.0/cross/riscv64/Dockerfile @@ -0,0 +1,50 @@ +FROM mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-crossdeps-builder-net9.0-local AS builder +ARG ROOTFS_DIR=/crossrootfs/riscv64 + +# Install the latest debootstrap +RUN tdnf remove -y debootstrap && \ + git clone --depth 1 "https://git.launchpad.net/ubuntu/+source/debootstrap" /debootstrap && \ + chmod a+x /debootstrap/debootstrap && \ + ln -s /debootstrap/debootstrap -t /usr/local/bin + +RUN /scripts/eng/common/cross/build-rootfs.sh riscv64 noble --skipunmount + +RUN TARGET_TRIPLE="riscv64-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-crossdeps-llvm-net9.0-local +ARG ROOTFS_DIR=/crossrootfs/riscv64 + +COPY --from=builder /usr/local/lib/clang /usr/local/lib/clang/ +COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/azurelinux/3.0/net9.0/crossdeps-builder/amd64/Dockerfile b/src/azurelinux/3.0/net9.0/crossdeps-builder/amd64/Dockerfile index 619e07288..7b9169ddd 100644 --- a/src/azurelinux/3.0/net9.0/crossdeps-builder/amd64/Dockerfile +++ b/src/azurelinux/3.0/net9.0/crossdeps-builder/amd64/Dockerfile @@ -70,7 +70,7 @@ RUN mkdir llvm-project.src && \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ - -DLLVM_TARGETS_TO_BUILD="X86;AArch64;ARM;PowerPC;SystemZ" \ + -DLLVM_TARGETS_TO_BUILD="X86;AArch64;ARM;PowerPC;RISCV;SystemZ" \ -Wno-dev \ -DLLVM_ENABLE_PROJECTS="clang;lld;clang-tools-extra" && \ make -j $(getconf _NPROCESSORS_ONLN) && \ diff --git a/src/azurelinux/manifest.json b/src/azurelinux/manifest.json index a710158b1..e3e1885aa 100644 --- a/src/azurelinux/manifest.json +++ b/src/azurelinux/manifest.json @@ -215,6 +215,31 @@ } ] }, + { + "platforms": [ + { + "dockerfile": "src/azurelinux/3.0/net9.0/cross/riscv64", + "os": "linux", + "osVersion": "azurelinux3.0", + "tags": { + "azurelinux-3.0-cross-riscv64-net9.0-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "azurelinux-3.0-cross-riscv64-net9.0$(FloatingTagSuffix)": {} + } + } + ] + }, { + "platforms": [ + { + "dockerfile": "src/azurelinux/3.0/net9.0/cross/riscv64-alpine", + "os": "linux", + "osVersion": "azurelinux3.0", + "tags": { + "azurelinux-3.0-cross-riscv64-alpine-net9.0-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, + "azurelinux-3.0-cross-riscv64-alpine-net9.0$(FloatingTagSuffix)": {} + } + } + ] + }, { "platforms": [ { diff --git a/src/ubuntu/22.04/cross/riscv64-alpine/Dockerfile b/src/ubuntu/22.04/cross/riscv64-alpine/Dockerfile deleted file mode 100644 index 051947123..000000000 --- a/src/ubuntu/22.04/cross/riscv64-alpine/Dockerfile +++ /dev/null @@ -1,35 +0,0 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-crossdeps-local as builder - -ARG ROOTFS_DIR=/crossrootfs/riscv64 - -# 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 - -# Build the rootfs -RUN /scripts/eng/common/cross/build-rootfs.sh riscv64 alpine --skipunmount - -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-crossdeps-local - -RUN cd /tmp \ - && wget https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.gz \ - && tar -xf binutils-2.40.tar.gz \ - && cd binutils-2.40 \ - && ./configure \ - --disable-werror \ - --target=riscv64-alpine-linux-musl \ - --prefix=/usr \ - --libdir=/lib \ - --disable-multilib \ - --with-sysroot=riscv64-alpine-linux-musl \ - --enable-gold=yes \ - --enable-plugins=yes \ - --program-prefix=riscv64-alpine-linux-musl- \ - && make \ - && make install \ - && cd .. \ - && rm -r * - -ARG ROOTFS_DIR=/crossrootfs/riscv64 - -COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/ubuntu/22.04/cross/riscv64/Dockerfile b/src/ubuntu/22.04/cross/riscv64/Dockerfile deleted file mode 100644 index 9e0df416e..000000000 --- a/src/ubuntu/22.04/cross/riscv64/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-crossdeps-local as builder - -ARG ROOTFS_DIR=/crossrootfs/riscv64 - -# 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 - -# Build the rootfs -RUN /scripts/eng/common/cross/build-rootfs.sh riscv64 sid --skipunmount - -FROM mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-crossdeps-local - -ARG ROOTFS_DIR=/crossrootfs/riscv64 - -COPY --from=builder $ROOTFS_DIR $ROOTFS_DIR diff --git a/src/ubuntu/manifest.json b/src/ubuntu/manifest.json index 301394eef..21efe8577 100644 --- a/src/ubuntu/manifest.json +++ b/src/ubuntu/manifest.json @@ -278,19 +278,6 @@ } ] }, - { - "platforms": [ - { - "dockerfile": "src/ubuntu/22.04/cross/riscv64", - "os": "linux", - "osVersion": "jammy", - "tags": { - "ubuntu-22.04-cross-riscv64-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "ubuntu-22.04-cross-riscv64$(FloatingTagSuffix)": {} - } - } - ] - }, { "platforms": [ { @@ -304,19 +291,6 @@ } ] }, - { - "platforms": [ - { - "dockerfile": "src/ubuntu/22.04/cross/riscv64-alpine", - "os": "linux", - "osVersion": "jammy", - "tags": { - "ubuntu-22.04-cross-riscv64-alpine-$(System:TimeStamp)-$(System:DockerfileGitCommitSha)": {}, - "ubuntu-22.04-cross-riscv64-alpine$(FloatingTagSuffix)": {} - } - } - ] - }, { "platforms": [ {