diff --git a/externals/depot_tools b/externals/depot_tools index ecad42cb6a..8fecc592a2 160000 --- a/externals/depot_tools +++ b/externals/depot_tools @@ -1 +1 @@ -Subproject commit ecad42cb6a9b53bbe98f9a06d37dbfbaf7129881 +Subproject commit 8fecc592a290769242d5098666cee8d29b7f0523 diff --git a/native/linux-clang-cross/build.cake b/native/linux-clang-cross/build.cake index 2cde7ee54f..f022513fc2 100644 --- a/native/linux-clang-cross/build.cake +++ b/native/linux-clang-cross/build.cake @@ -2,31 +2,33 @@ DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); #load "../../scripts/cake/shared.cake" +string TOOLCHAIN_ARCH = Argument("toolchainArch", EnvironmentVariable("TOOLCHAIN_ARCH")); +string TOOLCHAIN_ARCH_SHORT = Argument("toolchainArchShort", EnvironmentVariable("TOOLCHAIN_ARCH_SHORT")); +string TOOLCHAIN_ARCH_TARGET = Argument("toolchainArchTarget", EnvironmentVariable("TOOLCHAIN_ARCH_TARGET")); + +Information("Toolchain:"); +Information($" Arch: {TOOLCHAIN_ARCH} ({TOOLCHAIN_ARCH_SHORT})"); +Information($" Target {TOOLCHAIN_ARCH_TARGET}"); + if (BUILD_ARCH.Length == 0) BUILD_ARCH = new [] { "arm" }; string GetGnArgs(string arch) { - var (vendor, abi, sysrootarg, linker) = BUILD_VARIANT switch - { - "alpine" or "alpinenodeps" => ("-alpine", "musl", "'--sysroot=/alpine', ", "'-fuse-ld=lld'"), - _ => ("", "gnu", "", ""), - }; - var (toolchainArch, targetArch) = arch switch + var (sysrootArg, linker) = BUILD_VARIANT switch { - "arm" => ($"arm{vendor}-linux-{abi}eabihf", $"armv7a{vendor}-linux-{abi}eabihf"), - "arm64" => ($"aarch64{vendor}-linux-{abi}", $"aarch64{vendor}-linux-{abi}"), - _ => ($"{arch}{vendor}-linux-{abi}", $"{arch}{vendor}-linux-{abi}"), + "alpine" or "alpinenodeps" => ("'--sysroot=/alpine', ", "'-fuse-ld=lld'"), + _ => ("", ""), }; - var sysroot = $"/usr/{toolchainArch}"; - var init = $"{sysrootarg} '--target={targetArch}'"; + var sysroot = $"/usr/{TOOLCHAIN_ARCH}"; + var init = $"{sysrootArg} '--target={TOOLCHAIN_ARCH_TARGET}'"; var bin = $"'-B{sysroot}/bin/' "; var libs = $"'-L{sysroot}/lib/' "; var includes = $"'-I{sysroot}/include', " + $"'-I{sysroot}/include/c++/current', " + - $"'-I{sysroot}/include/c++/current/{toolchainArch}' "; + $"'-I{sysroot}/include/c++/current/{TOOLCHAIN_ARCH}' "; return $"extra_asmflags+=[ {init}, '-no-integrated-as', {bin}, {includes} ] " + @@ -43,7 +45,6 @@ Task("libSkiaSharp") RunCake("../linux/build.cake", "libSkiaSharp", new Dictionary<string, string> { { "arch", arch }, { "gnArgs", GetGnArgs(arch) }, - { "variant", BUILD_VARIANT }, }); } }); @@ -56,7 +57,6 @@ Task("libHarfBuzzSharp") RunCake("../linux/build.cake", "libHarfBuzzSharp", new Dictionary<string, string> { { "arch", arch }, { "gnArgs", GetGnArgs(arch) }, - { "variant", BUILD_VARIANT }, }); } }); diff --git a/native/linux/build.cake b/native/linux/build.cake index 788ce7d6bb..2c17ec34ac 100644 --- a/native/linux/build.cake +++ b/native/linux/build.cake @@ -12,6 +12,9 @@ bool SUPPORT_VULKAN = SUPPORT_VULKAN_VAR == "1" || SUPPORT_VULKAN_VAR.ToLower() var VERIFY_EXCLUDED = Argument("verifyExcluded", Argument("verifyexcluded", "")) .ToLower().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); +var VERIFY_GLIBC_MAX_VAR = Argument("verifyGlibcMax", Argument("verifyglibcmax", "2.28")); +var VERIFY_GLIBC_MAX = string.IsNullOrEmpty(VERIFY_GLIBC_MAX_VAR) ? null : System.Version.Parse(VERIFY_GLIBC_MAX_VAR); + string CC = Argument("cc", EnvironmentVariable("CC")); string CXX = Argument("cxx", EnvironmentVariable("CXX")); string AR = Argument("ar", EnvironmentVariable("AR")); @@ -31,22 +34,38 @@ if (!string.IsNullOrEmpty(AR)) void CheckDeps(FilePath so) { - if (VERIFY_EXCLUDED == null || VERIFY_EXCLUDED.Length == 0) - return; - Information($"Making sure that there are no dependencies on: {string.Join(", ", VERIFY_EXCLUDED)}"); - RunProcess("readelf", $"-d {so}", out var stdout); - Information(String.Join(Environment.NewLine + " ", stdout)); + RunProcess("readelf", $"-dV {so}", out var stdoutEnum); + var stdout = stdoutEnum.ToArray(); - var needed = stdout - .Where(l => l.Contains("(NEEDED)")) - .ToList(); + var needed = MatchRegex(@"\(NEEDED\).+\[(.+)\]", stdout).ToList(); + + Information("Dependencies:"); + foreach (var need in needed) { + Information($" {need}"); + } foreach (var exclude in VERIFY_EXCLUDED) { if (needed.Any(o => o.Contains(exclude.Trim(), StringComparison.OrdinalIgnoreCase))) throw new Exception($"{so} contained a dependency on {exclude}."); } + + var glibcs = MatchRegex(@"GLIBC_([\w\.\d]+)", stdout).Distinct().ToList(); + glibcs.Sort(); + + Information("GLIBC:"); + foreach (var glibc in glibcs) { + Information($" {glibc}"); + } + + if (VERIFY_GLIBC_MAX != null) { + foreach (var glibc in glibcs) { + var version = System.Version.Parse(glibc); + if (version > VERIFY_GLIBC_MAX) + throw new Exception($"{so} contained a dependency on GLIBC {glibc} which is greater than the expected GLIBC {VERIFY_GLIBC_MAX}."); + } + } } Task("libSkiaSharp") @@ -54,6 +73,17 @@ Task("libSkiaSharp") .WithCriteria(IsRunningOnLinux()) .Does(() => { + // patch the gclient_paths.py for Python 3.7 + { + var gclient = DEPOT_PATH.CombineWithFilePath("gclient_paths.py"); + var contents = System.IO.File.ReadAllText(gclient.FullPath); + var newContents = contents + .Replace("@functools.lru_cache", "@functools.lru_cache()") + .Replace("@functools.lru_cache()()", "@functools.lru_cache()"); + if (contents != newContents) + System.IO.File.WriteAllText(gclient.FullPath, newContents); + } + foreach (var arch in BUILD_ARCH) { if (Skip(arch)) return; diff --git a/scripts/Docker/_clang-cross-common.sh b/scripts/Docker/_clang-cross-common.sh index ce949db82a..57b32a8314 100755 --- a/scripts/Docker/_clang-cross-common.sh +++ b/scripts/Docker/_clang-cross-common.sh @@ -1,42 +1,43 @@ #!/usr/bin/env bash set -ex +# Parameters: +# $1 - The directory containing the Dockerfile [ clang-cross/10 | clang-cross ] +# $2 - The target architecture to build for [ arm | arm64 | riscv64 | x86 | x64 ] +# $3 - The ABI [ gnu | musl ] +# $4 - The variant [ "" | alpine ] + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + +# the directory containing the Dockerfile DOCKER_DIR="$1" # the target architecture to build for -ARCH="${2:-arm}" +ARCH="$2" # the docker image architecture to use MACHINE_ARCH="$(uname -m)" -[ "$MACHINE_ARCH" = "arm64" ] && MACHINE_ARCH=aarch64 -IMAGE_ARCH="${3:-$([[ "$MACHINE_ARCH" == "aarch64" ]] && echo "arm64v8" || echo "amd64")}" - -DISTRO_VERSION=$4 -ABI=$5 -VENDOR=$6 - -case $ARCH in - arm) TOOLCHAIN_ARCH=arm$VENDOR-linux-${ABI}eabihf ; TOOLCHAIN_ARCH_SHORT=armhf ; TARGET_MACHINE_ARCH=armhf ;; - arm64) TOOLCHAIN_ARCH=aarch64$VENDOR-linux-$ABI ; TOOLCHAIN_ARCH_SHORT=arm64 ; TARGET_MACHINE_ARCH=aarch64 ;; - riscv64) TOOLCHAIN_ARCH=riscv64$VENDOR-linux-$ABI ; TOOLCHAIN_ARCH_SHORT=riscv64 ; TARGET_MACHINE_ARCH=riscv64 ;; - x86) TOOLCHAIN_ARCH=i686$VENDOR-linux-$ABI ; TOOLCHAIN_ARCH_SHORT=i386 ; TARGET_MACHINE_ARCH=x86 ;; - x64) TOOLCHAIN_ARCH=x86-64$VENDOR-linux-$ABI ; TOOLCHAIN_ARCH_SHORT=amd64 ; TARGET_MACHINE_ARCH=x86_64 ;; - *) echo "Unsupported architecture: $ARCH" && exit 1 ;; +case $MACHINE_ARCH in + arm64) IMAGE_ARCH=arm64v8 ; MACHINE_ARCH=aarch64 ;; + *) IMAGE_ARCH=amd64 ;; esac -(cd $DIR && docker build --tag skiasharp-linux-$ABI-cross-$ARCH \ - --build-arg TOOLCHAIN_ARCH=$TOOLCHAIN_ARCH \ - --build-arg TOOLCHAIN_ARCH_SHORT=$TOOLCHAIN_ARCH_SHORT \ - --build-arg IMAGE_ARCH=$IMAGE_ARCH \ - --build-arg MACHINE_ARCH=$MACHINE_ARCH \ - --build-arg TARGET_MACHINE_ARCH=$TARGET_MACHINE_ARCH \ - --build-arg DISTRO_VERSION=$DISTRO_VERSION \ +# the ABI +ABI=$3 + +# the variant +VARIANT=$4 + +(cd $DIR && + docker build --tag skiasharp-linux-$ABI-cross-$ARCH \ + --build-arg BUILD_ARCH=$ARCH \ + --build-arg IMAGE_ARCH=$IMAGE_ARCH \ + --build-arg MACHINE_ARCH=$MACHINE_ARCH \ $DOCKER_DIR) -if [ "$VENDOR" = "-alpine" ]; then vendor=alpine; fi +[ -n "$VARIANT" ] && VARIANT="--variant=$VARIANT" (cd $DIR/../.. && - docker run --rm --name skiasharp-linux-$ABI-cross-$ARCH --volume $(pwd):/work skiasharp-linux-$ABI-cross-$ARCH /bin/bash -c "\ - dotnet tool restore && - dotnet cake --target=externals-linux-clang-cross --configuration=Release --buildarch=$ARCH --variant=$vendor") + docker run --rm --name skiasharp-linux-$ABI-cross-$ARCH --volume $(pwd):/work skiasharp-linux-$ABI-cross-$ARCH /bin/bash -c " \ + dotnet tool restore ; \ + dotnet cake --target=externals-linux-clang-cross --configuration=Release --buildarch=$ARCH $VARIANT ") diff --git a/scripts/Docker/alpine/amd64/Dockerfile b/scripts/Docker/alpine/amd64/Dockerfile index ec6b446d40..d1e0a4d4ca 100644 --- a/scripts/Docker/alpine/amd64/Dockerfile +++ b/scripts/Docker/alpine/amd64/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --no-cache \ # Install the .NET SDK ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 RUN wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh \ && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ diff --git a/scripts/Docker/alpine/arm64v8/Dockerfile b/scripts/Docker/alpine/arm64v8/Dockerfile index bb90493524..0350af602f 100644 --- a/scripts/Docker/alpine/arm64v8/Dockerfile +++ b/scripts/Docker/alpine/arm64v8/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --no-cache \ # Install the .NET SDK ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 RUN wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh \ && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ diff --git a/scripts/Docker/alpine/clang-cross/Dockerfile b/scripts/Docker/alpine/clang-cross/Dockerfile index 198beeb7c3..c6ffe4431c 100644 --- a/scripts/Docker/alpine/clang-cross/Dockerfile +++ b/scripts/Docker/alpine/clang-cross/Dockerfile @@ -1,43 +1,65 @@ # Arguments: # IMAGE_ARCH - the architecture of the image [ amd64 | arm64v8 | riscv64 ] # DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ] +# LLVM_VERSION - the version of the LLVM compiler [ 13 | * ] # TOOLCHAIN_VERSION - the version of the GCC toolchain [ 9 | * ] # TOOLCHAIN_ARCH - the architecture of the GCC toolchain [ arm-alpine-linux-musleabihf | aarch64-alpine-linux-musl | riscv64-alpine-linux-musl ] -# TOOLCHAIN_ARCH_SHORT - the short form architecture of the GCC toolchain [ armhf | arm64 ] -# FONTCONFIG_VERSION - the exact version of libfontconfig1 to use [ 2.13.1-2 | * ] ARG IMAGE_ARCH=amd64 FROM ${IMAGE_ARCH}/debian:12 +# Set the architecture-specific variables based on the value of the BUILD_ARCH argument +ARG BUILD_ARCH=arm64 +RUN case ${BUILD_ARCH} in \ + arm) TOOLCHAIN_ARCH=armv7-alpine-linux-musleabihf ; TOOLCHAIN_ARCH_TARGET=armv7-alpine-linux-musleabihf ;; \ + arm64) TOOLCHAIN_ARCH=aarch64-alpine-linux-musl ; TOOLCHAIN_ARCH_TARGET=aarch64-alpine-linux-musl ;; \ + riscv64) TOOLCHAIN_ARCH=riscv64-alpine-linux-musl ; TOOLCHAIN_ARCH_TARGET=riscv64-alpine-linux-musl ;; \ + x86) TOOLCHAIN_ARCH=i586-alpine-linux-musl ; TOOLCHAIN_ARCH_TARGET=i586-alpine-linux-musl ;; \ + x64) TOOLCHAIN_ARCH=x86_64-alpine-linux-musl ; TOOLCHAIN_ARCH_TARGET=x86_64-alpine-linux-musl ;; \ + *) echo "Unsupported architecture: ${BUILD_ARCH}" && exit 1 ;; \ + esac \ + && echo "export TOOLCHAIN_ARCH=${TOOLCHAIN_ARCH}" > /etc/skia-env \ + && echo "export TOOLCHAIN_ARCH_TARGET=${TOOLCHAIN_ARCH_TARGET}" >> /etc/skia-env + # Install the required packages +ARG LLVM_VERSION=19 RUN apt-get update \ && apt-get install -y \ - curl python3 git clang-19 lld-19 ninja-build xz-utils curl \ + curl python3 git clang-${LLVM_VERSION} lld-${LLVM_VERSION} ninja-build xz-utils \ && rm -rf /var/lib/apt/lists/* # Install the cross-compilation musl toolchain -ARG DISTRO_VERSION=3.17 -ARG TOOLCHAIN_ARCH_SHORT=armhf +# First, obtain apk.static from https://gitlab.alpinelinux.org/alpine/apk-tools/-/releases/v2.12.14 ARG MACHINE_ARCH=x86_64 -ARG TARGET_MACHINE_ARCH=armhf - -# obtain apk.static from gitlab.alpinelinux.org/alpine/apk-tools/-/releases/v2.12.14 -RUN APK_DIR="$(mktemp -d)" && \ - curl -SLO --create-dirs --output-dir "$APK_DIR" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v2.12.14/$MACHINE_ARCH/apk.static" && \ - chmod +x "$APK_DIR/apk.static" && \ - "$APK_DIR/apk.static" \ +RUN . /etc/skia-env \ + && case "${BUILD_ARCH}" in \ + arm) APK_ARCH=armv7 ;; \ + arm64) APK_ARCH=aarch64 ;; \ + riscv64) APK_ARCH=riscv64 ;; \ + x86) APK_ARCH=x86 ;; \ + x64) APK_ARCH=x86_64 ;; \ + *) echo "Unsupported architecture: ${BUILD_ARCH}" && exit 1 ;; \ + esac \ + && case "${BUILD_ARCH}" in \ + riscv64) DISTRO_VERSION=3.20 ;; \ + *) DISTRO_VERSION=3.17 ;; \ + esac \ + && APK_DIR="$(mktemp -d)" \ + && curl -SLO --create-dirs --output-dir "$APK_DIR" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v2.12.14/$MACHINE_ARCH/apk.static" \ + && chmod +x "$APK_DIR/apk.static" \ + && "$APK_DIR/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/v$DISTRO_VERSION/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/v$DISTRO_VERSION/community" \ - -U --allow-untrusted --root /alpine --arch "$TARGET_MACHINE_ARCH" --initdb add && \ - "$APK_DIR/apk.static" \ + -U --allow-untrusted --root /alpine --arch "$APK_ARCH" --initdb add \ + && "$APK_DIR/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/v$DISTRO_VERSION/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/v$DISTRO_VERSION/community" \ - -U --allow-untrusted --root /alpine --arch "$TARGET_MACHINE_ARCH" --no-scripts \ + -U --allow-untrusted --root /alpine --arch "$APK_ARCH" --no-scripts \ add fontconfig-dev build-base linux-headers # Install the .NET SDK ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ @@ -45,6 +67,10 @@ RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ && dotnet help \ && dotnet --info -ENV CC=clang-19 CXX=clang++-19 +ENV CC=clang-${LLVM_VERSION} CXX=clang++-${LLVM_VERSION} WORKDIR /work + +COPY ./startup.sh / +RUN chmod +x /startup.sh +ENTRYPOINT [ "/startup.sh" ] diff --git a/scripts/Docker/alpine/clang-cross/build-local.sh b/scripts/Docker/alpine/clang-cross/build-local.sh index 09e2e3273b..591b9d2d64 100755 --- a/scripts/Docker/alpine/clang-cross/build-local.sh +++ b/scripts/Docker/alpine/clang-cross/build-local.sh @@ -1,15 +1,11 @@ #!/usr/bin/env bash set -ex +# Parameters: +# $1 - The target architecture to build for [ arm | arm64 | riscv64 | x86 | x64 ] + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -ARCH=$1 -ALPINE_VERSION=$3 -if [ -z "$ALPINE_VERSION" ]; then - case $ARCH in - riscv64) ALPINE_VERSION=3.20 ;; - *) ALPINE_VERSION=3.17 ;; - esac -fi +ARCH="${1:-arm}" -$DIR/../../_clang-cross-common.sh "$DIR" "$ARCH" "$2" "$ALPINE_VERSION" "musl" "-alpine" +$DIR/../../_clang-cross-common.sh "$DIR" "$ARCH" "musl" "alpine" diff --git a/scripts/Docker/alpine/clang-cross/startup.sh b/scripts/Docker/alpine/clang-cross/startup.sh new file mode 100644 index 0000000000..512bb431bf --- /dev/null +++ b/scripts/Docker/alpine/clang-cross/startup.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +source /etc/skia-env + +exec "$@" diff --git a/scripts/Docker/debian/amd64/Dockerfile b/scripts/Docker/debian/amd64/Dockerfile index 4b7a51144e..320ee380b4 100644 --- a/scripts/Docker/debian/amd64/Dockerfile +++ b/scripts/Docker/debian/amd64/Dockerfile @@ -1,7 +1,7 @@ # Arguments: # DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ] -FROM amd64/debian:11 +FROM amd64/debian:10 # Install the required packages RUN apt-get update \ @@ -12,7 +12,7 @@ RUN apt-get update \ # Install the .NET SDK ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ diff --git a/scripts/Docker/debian/arm64v8/Dockerfile b/scripts/Docker/debian/arm64v8/Dockerfile index 5a43b8592c..8ed6b69674 100644 --- a/scripts/Docker/debian/arm64v8/Dockerfile +++ b/scripts/Docker/debian/arm64v8/Dockerfile @@ -1,7 +1,7 @@ # Arguments: # DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ] -FROM arm64v8/debian:11 +FROM arm64v8/debian:10 # Install the required packages RUN apt-get update \ @@ -12,7 +12,7 @@ RUN apt-get update \ # Install the .NET SDK ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ diff --git a/scripts/Docker/debian/clang-cross/10/Dockerfile b/scripts/Docker/debian/clang-cross/10/Dockerfile new file mode 100644 index 0000000000..4048aeccd0 --- /dev/null +++ b/scripts/Docker/debian/clang-cross/10/Dockerfile @@ -0,0 +1,82 @@ +# Arguments: +# IMAGE_ARCH - the architecture of the image [ amd64 | arm64v8 | riscv64 ] +# DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ] +# LLVM_VERSION - the version of the LLVM compiler [ 13 | * ] +# TOOLCHAIN_VERSION - the version of the GCC toolchain [ 9 | * ] +# TOOLCHAIN_ARCH - the architecture of the GCC toolchain [ arm-linux-gnueabihf | aarch64-linux-gnu | riscv64-linux-gnu ] +# TOOLCHAIN_ARCH_SHORT - the short form architecture of the GCC toolchain [ armhf | arm64 | riscv64 ] + +ARG IMAGE_ARCH=amd64 +FROM ${IMAGE_ARCH}/debian:10 + +# Set the architecture-specific variables based on the value of the BUILD_ARCH argument +ARG BUILD_ARCH=arm64 +RUN case ${BUILD_ARCH} in \ + arm) TOOLCHAIN_ARCH=arm-linux-gnueabihf ; TOOLCHAIN_ARCH_SHORT=armhf ; TOOLCHAIN_ARCH_TARGET=armv7a-linux-gnueabihf ;; \ + arm64) TOOLCHAIN_ARCH=aarch64-linux-gnu ; TOOLCHAIN_ARCH_SHORT=arm64 ; TOOLCHAIN_ARCH_TARGET=aarch64-linux-gnu ;; \ + riscv64) TOOLCHAIN_ARCH=riscv64-linux-gnu ; TOOLCHAIN_ARCH_SHORT=riscv64 ; TOOLCHAIN_ARCH_TARGET=riscv64-linux-gnu ;; \ + x86) TOOLCHAIN_ARCH=i686-linux-gnu ; TOOLCHAIN_ARCH_SHORT=i386 ; TOOLCHAIN_ARCH_TARGET=i686-linux-gnu ;; \ + x64) TOOLCHAIN_ARCH=x86-64-linux-gnu ; TOOLCHAIN_ARCH_SHORT=amd64 ; TOOLCHAIN_ARCH_TARGET=x86_64-linux-gnu ;; \ + *) echo "Unsupported architecture: ${BUILD_ARCH}" && exit 1 ;; \ + esac \ + && echo "export TOOLCHAIN_ARCH=${TOOLCHAIN_ARCH}" > /etc/skia-env \ + && echo "export TOOLCHAIN_ARCH_SHORT=${TOOLCHAIN_ARCH_SHORT}" >> /etc/skia-env \ + && echo "export TOOLCHAIN_ARCH_TARGET=${TOOLCHAIN_ARCH_TARGET}" >> /etc/skia-env + +# Install the required packages +ARG LLVM_VERSION=13 +RUN apt-get update \ + && apt-get install -y \ + curl python3 git clang-${LLVM_VERSION} lld-${LLVM_VERSION} ninja-build xz-utils \ + && rm -rf /var/lib/apt/lists/* + +# Install the cross-compilation GCC toolchain +ARG TOOLCHAIN_VERSION=8 +RUN . /etc/skia-env \ + && apt-get update \ + && apt-get install -y \ + libstdc++-${TOOLCHAIN_VERSION}-dev-${TOOLCHAIN_ARCH_SHORT}-cross \ + libgcc-${TOOLCHAIN_VERSION}-dev-${TOOLCHAIN_ARCH_SHORT}-cross \ + binutils-${TOOLCHAIN_ARCH} \ + && rm -rf /var/lib/apt/lists/* + +# Make the script more flexible and use "current" instead of the actual version +RUN . /etc/skia-env \ + && TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \ + && ln -s /usr/${TOOLCHAIN_ARCH}/include/c++/${TOOLCHAIN_VERSION} /usr/${TOOLCHAIN_ARCH}/include/c++/current \ + && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libpthread.so \ + && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so + +# Install the cross-compilation skia build dependencies (fontconfig) +RUN . /etc/skia-env \ + && mkdir -p /skia-utils/libfontconfig-dev \ + && cd /skia-utils/libfontconfig-dev \ + && case "${TOOLCHAIN_ARCH_SHORT}" in \ + riscv64) FC_VERSION=2.15.0-2.1 ; FC_PKG=libfontconfig-dev ;; \ + *) FC_VERSION=2.13.1-2 ; FC_PKG=libfontconfig1-dev ;; \ + esac \ + && curl http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb -L -o libfontconfig-dev.deb \ + && ar vx libfontconfig-dev.deb \ + && tar -xJvf data.tar.xz \ + && rm libfontconfig-dev.deb \ + && TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \ + && cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \ + && cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ + +# Install the .NET SDK +ARG DOTNET_SDK_VERSION=8.0 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 +RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ + && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ + && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ + && rm dotnet-install.sh \ + && dotnet help \ + && dotnet --info + +ENV CC=clang-${LLVM_VERSION} CXX=clang++-${LLVM_VERSION} + +WORKDIR /work + +COPY ./startup.sh / +RUN chmod +x /startup.sh +ENTRYPOINT [ "/startup.sh" ] diff --git a/scripts/Docker/debian/clang-cross/10/startup.sh b/scripts/Docker/debian/clang-cross/10/startup.sh new file mode 100644 index 0000000000..512bb431bf --- /dev/null +++ b/scripts/Docker/debian/clang-cross/10/startup.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +source /etc/skia-env + +exec "$@" diff --git a/scripts/Docker/debian/clang-cross/11/Dockerfile b/scripts/Docker/debian/clang-cross/11/Dockerfile deleted file mode 100644 index fefaa6d40b..0000000000 --- a/scripts/Docker/debian/clang-cross/11/Dockerfile +++ /dev/null @@ -1,64 +0,0 @@ -# Arguments: -# IMAGE_ARCH - the architecture of the image [ amd64 | arm64v8 ] -# DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ] -# TOOLCHAIN_VERSION - the version of the GCC toolchain [ 9 | * ] -# TOOLCHAIN_ARCH - the architecture of the GCC toolchain [ arm-linux-gnueabihf | aarch64-linux-gnu] -# TOOLCHAIN_ARCH_SHORT - the short form architecture of the GCC toolchain [ armhf | arm64 ] -# FONTCONFIG_VERSION - the exact version of libfontconfig1 to use [ 2.13.1-2 | * ] - -ARG IMAGE_ARCH=amd64 -FROM ${IMAGE_ARCH}/debian:11 - -# Install the required packages -RUN apt-get update \ - && apt-get install -y \ - curl python3 git clang-13 ninja-build xz-utils \ - && rm -rf /var/lib/apt/lists/* - -# Install the cross-compilation GCC toolchain -ARG TOOLCHAIN_VERSION=9 -ARG TOOLCHAIN_ARCH=arm-linux-gnueabihf -ARG TOOLCHAIN_ARCH_SHORT=armhf -RUN apt-get update \ - && apt-get install -y \ - libstdc++-${TOOLCHAIN_VERSION}-dev-${TOOLCHAIN_ARCH_SHORT}-cross \ - libgcc-${TOOLCHAIN_VERSION}-dev-${TOOLCHAIN_ARCH_SHORT}-cross \ - binutils-${TOOLCHAIN_ARCH} \ - && rm -rf /var/lib/apt/lists/* - -# Make the script more flexible and use "current" instead of the actual version -RUN ln -s /usr/${TOOLCHAIN_ARCH}/include/c++/${TOOLCHAIN_VERSION} /usr/${TOOLCHAIN_ARCH}/include/c++/current \ - && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libpthread.so \ - && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so - -# Install the cross-compilation skia build dependencies (fontconfig) -ARG FONTCONFIG_VERSION=2.13.1-2 -RUN (mkdir -p /skia-utils/libfontconfig1-dev \ - && cd /skia-utils/libfontconfig1-dev \ - && curl http://deb.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_${FONTCONFIG_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb -L -o libfontconfig1-dev.deb \ - && ar vx libfontconfig1-dev.deb \ - && tar -xJvf data.tar.xz \ - && rm libfontconfig1-dev.deb \ - && cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \ - && cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ ) -RUN (mkdir -p /skia-utils/libfontconfig1 \ - && cd /skia-utils/libfontconfig1 \ - && curl http://deb.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_${FONTCONFIG_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb -L -o libfontconfig1.deb \ - && ar vx libfontconfig1.deb \ - && tar -xJvf data.tar.xz \ - && rm libfontconfig1.deb \ - && cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ ) - -# Install the .NET SDK -ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 -RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ - && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ - && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ - && rm dotnet-install.sh \ - && dotnet help \ - && dotnet --info - -ENV CC=clang-13 CXX=clang++-13 - -WORKDIR /work diff --git a/scripts/Docker/debian/clang-cross/12/Dockerfile b/scripts/Docker/debian/clang-cross/12/Dockerfile index 1a7eb845e5..8625586388 100644 --- a/scripts/Docker/debian/clang-cross/12/Dockerfile +++ b/scripts/Docker/debian/clang-cross/12/Dockerfile @@ -1,25 +1,39 @@ # Arguments: # IMAGE_ARCH - the architecture of the image [ amd64 | arm64v8 | riscv64 ] # DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ] -# TOOLCHAIN_VERSION - the version of the GCC toolchain [ 9 | * ] +# LLVM_VERSION - the version of the LLVM compiler [ 19 | * ] +# TOOLCHAIN_VERSION - the version of the GCC toolchain [ 12 | * ] # TOOLCHAIN_ARCH - the architecture of the GCC toolchain [ arm-linux-gnueabihf | aarch64-linux-gnu | riscv64-linux-gnu ] -# TOOLCHAIN_ARCH_SHORT - the short form architecture of the GCC toolchain [ armhf | arm64 ] -# FONTCONFIG_VERSION - the exact version of libfontconfig1 to use [ 2.13.1-2 | * ] +# TOOLCHAIN_ARCH_SHORT - the short form architecture of the GCC toolchain [ armhf | arm64 | riscv64 ] ARG IMAGE_ARCH=amd64 FROM ${IMAGE_ARCH}/debian:12 +# Set the architecture-specific variables based on the value of the BUILD_ARCH argument +ARG BUILD_ARCH=arm64 +RUN case ${BUILD_ARCH} in \ + arm) TOOLCHAIN_ARCH=arm-linux-gnueabihf ; TOOLCHAIN_ARCH_SHORT=armhf ; TOOLCHAIN_ARCH_TARGET=armv7a-linux-gnueabihf ;; \ + arm64) TOOLCHAIN_ARCH=aarch64-linux-gnu ; TOOLCHAIN_ARCH_SHORT=arm64 ; TOOLCHAIN_ARCH_TARGET=aarch64-linux-gnu ;; \ + riscv64) TOOLCHAIN_ARCH=riscv64-linux-gnu ; TOOLCHAIN_ARCH_SHORT=riscv64 ; TOOLCHAIN_ARCH_TARGET=riscv64-linux-gnu ;; \ + x86) TOOLCHAIN_ARCH=i686-linux-gnu ; TOOLCHAIN_ARCH_SHORT=i386 ; TOOLCHAIN_ARCH_TARGET=i686-linux-gnu ;; \ + x64) TOOLCHAIN_ARCH=x86-64-linux-gnu ; TOOLCHAIN_ARCH_SHORT=amd64 ; TOOLCHAIN_ARCH_TARGET=x86_64-linux-gnu ;; \ + *) echo "Unsupported architecture: ${BUILD_ARCH}" && exit 1 ;; \ + esac \ + && echo "export TOOLCHAIN_ARCH=${TOOLCHAIN_ARCH}" > /etc/skia-env \ + && echo "export TOOLCHAIN_ARCH_SHORT=${TOOLCHAIN_ARCH_SHORT}" >> /etc/skia-env \ + && echo "export TOOLCHAIN_ARCH_TARGET=${TOOLCHAIN_ARCH_TARGET}" >> /etc/skia-env + # Install the required packages +ARG LLVM_VERSION=19 RUN apt-get update \ && apt-get install -y \ - curl python3 git clang-19 ninja-build xz-utils \ + curl python3 git clang-${LLVM_VERSION} ninja-build xz-utils \ && rm -rf /var/lib/apt/lists/* # Install the cross-compilation GCC toolchain ARG TOOLCHAIN_VERSION=12 -ARG TOOLCHAIN_ARCH=arm-linux-gnueabihf -ARG TOOLCHAIN_ARCH_SHORT=armhf -RUN apt-get update \ +RUN . /etc/skia-env \ + && apt-get update \ && apt-get install -y \ libstdc++-${TOOLCHAIN_VERSION}-dev-${TOOLCHAIN_ARCH_SHORT}-cross \ libgcc-${TOOLCHAIN_VERSION}-dev-${TOOLCHAIN_ARCH_SHORT}-cross \ @@ -27,31 +41,31 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* # Make the script more flexible and use "current" instead of the actual version -RUN ln -s /usr/${TOOLCHAIN_ARCH}/include/c++/${TOOLCHAIN_VERSION} /usr/${TOOLCHAIN_ARCH}/include/c++/current \ - && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libpthread.so || true \ +RUN . /etc/skia-env \ + && TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \ + && ln -s /usr/${TOOLCHAIN_ARCH}/include/c++/${TOOLCHAIN_VERSION} /usr/${TOOLCHAIN_ARCH}/include/c++/current \ + && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libpthread.so \ && sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so # Install the cross-compilation skia build dependencies (fontconfig) -ARG FONTCONFIG_VERSION=2.15.0-2 -RUN (mkdir -p /skia-utils/libfontconfig1-dev \ - && cd /skia-utils/libfontconfig1-dev \ - && curl http://deb.debian.org/debian/pool/main/f/fontconfig/libfontconfig-dev_${FONTCONFIG_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb -L -o libfontconfig1-dev.deb \ - && ar vx libfontconfig1-dev.deb \ +RUN . /etc/skia-env \ + && mkdir -p /skia-utils/libfontconfig-dev \ + && cd /skia-utils/libfontconfig-dev \ + && case "${TOOLCHAIN_ARCH_SHORT}" in \ + riscv64) FC_VERSION=2.15.0-2.1 ; FC_PKG=libfontconfig-dev ;; \ + *) FC_VERSION=2.13.1-2 ; FC_PKG=libfontconfig1-dev ;; \ + esac \ + && curl http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb -L -o libfontconfig-dev.deb \ + && ar vx libfontconfig-dev.deb \ && tar -xJvf data.tar.xz \ - && rm libfontconfig1-dev.deb \ + && rm libfontconfig-dev.deb \ + && TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \ && cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \ - && cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ ) -RUN (mkdir -p /skia-utils/libfontconfig1 \ - && cd /skia-utils/libfontconfig1 \ - && curl http://deb.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_${FONTCONFIG_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb -L -o libfontconfig1.deb \ - && ar vx libfontconfig1.deb \ - && tar -xJvf data.tar.xz \ - && rm libfontconfig1.deb \ - && cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ ) + && cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ # Install the .NET SDK ARG DOTNET_SDK_VERSION=8.0 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT 1 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ && bash dotnet-install.sh --channel ${DOTNET_SDK_VERSION} --install-dir /usr/share/dotnet --verbose \ && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ @@ -59,6 +73,10 @@ RUN curl https://dot.net/v1/dotnet-install.sh -L -o dotnet-install.sh \ && dotnet help \ && dotnet --info -ENV CC=clang-19 CXX=clang++-19 +ENV CC=clang-${LLVM_VERSION} CXX=clang++-${LLVM_VERSION} WORKDIR /work + +COPY ./startup.sh / +RUN chmod +x /startup.sh +ENTRYPOINT [ "/startup.sh" ] diff --git a/scripts/Docker/debian/clang-cross/12/startup.sh b/scripts/Docker/debian/clang-cross/12/startup.sh new file mode 100644 index 0000000000..512bb431bf --- /dev/null +++ b/scripts/Docker/debian/clang-cross/12/startup.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -e + +source /etc/skia-env + +exec "$@" diff --git a/scripts/Docker/debian/clang-cross/build-local.sh b/scripts/Docker/debian/clang-cross/build-local.sh old mode 100755 new mode 100644 index c678b60e66..e1f5249d93 --- a/scripts/Docker/debian/clang-cross/build-local.sh +++ b/scripts/Docker/debian/clang-cross/build-local.sh @@ -1,15 +1,13 @@ #!/usr/bin/env bash set -ex +# Parameters: +# $1 - The target architecture to build for [ arm | arm64 | riscv64 | x86 | x64 ] +# $2 - The Debian distro version [ 10 | 12 ] + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -ARCH=$1 -DEBIAN_VERSION=$3 -if [ -z "$DEBIAN_VERSION" ]; then - case $ARCH in - riscv64) DEBIAN_VERSION=12 ;; - *) DEBIAN_VERSION=11 ;; - esac -fi +ARCH="${1:-arm}" +DEBIAN_VERSION="${2:-10}" -$DIR/../../_clang-cross-common.sh "$DIR/$DEBIAN_VERSION" "$ARCH" "$2" "$DEBIAN_VERSION" "gnu" +$DIR/../../_clang-cross-common.sh "$DIR/$DEBIAN_VERSION" "$ARCH" "gnu" diff --git a/scripts/azure-templates-linux-matrix.yml b/scripts/azure-templates-linux-matrix.yml index 26681ce2d0..ce581f75a8 100644 --- a/scripts/azure-templates-linux-matrix.yml +++ b/scripts/azure-templates-linux-matrix.yml @@ -31,6 +31,6 @@ jobs: buildAgent: ${{ parameters.buildAgent }} use1ESPipelineTemplates: ${{ parameters.use1ESPipelineTemplates }} docker: ${{ item.docker }} - dockerArgs: ${{ item.dockerArgs }} + dockerArgs: --build-arg BUILD_ARCH=${{ item.arch }} ${{ item.dockerArgs }} target: ${{ coalesce(item.target, 'externals-linux') }} additionalArgs: --buildarch=${{ item.arch }} --variant=${{ coalesce(item.variant, 'linux') }}${{ build.name }} --gnArgs="\"${{ build.gnArgs }} ${{ item.gnArgs }}\"" ${{ build.additionalArgs }} ${{ item.additionalArgs }} \ No newline at end of file diff --git a/scripts/azure-templates-merger.yml b/scripts/azure-templates-merger.yml index 47b634bcf8..1df451b5db 100644 --- a/scripts/azure-templates-merger.yml +++ b/scripts/azure-templates-merger.yml @@ -18,18 +18,11 @@ jobs: skipInstall: true skipSteps: true requiredArtifacts: ${{ parameters.requiredArtifacts }} - # preBuildSteps: - # - pwsh: az devops configure --defaults organization=$(System.TeamFoundationCollectionUri) project=$(System.TeamProject) --use-git-aliases true - # displayName: Configure the az CLI tool - # - ${{ each artifact in parameters.matrixArtifacts }}: - # - pwsh: | - # $json=@' - # ${{ artifact.jobs }} - # '@ - # .\scripts\download-artifact.ps1 ` - # -ArtifactsJson $json ` - # -BuildId "$(Build.BuildId)" ` - # -OutputDirectory "$(Build.SourcesDirectory)/output" - # env: - # AZURE_DEVOPS_EXT_PAT: $(System.AccessToken) - # displayName: Download the pre-built ${{ artifact.name }} artifacts + preBuildSteps: + - ${{ each artifact in parameters.matrixArtifacts }}: + - pwsh: | + $json=@' + ${{ artifact.jobs }} + '@ + .\scripts\get-artifact-names.ps1 -ArtifactsJson $json + displayName: List the pre-built ${{ artifact.name }} artifacts diff --git a/scripts/azure-templates-stages.yml b/scripts/azure-templates-stages.yml index aba496d9cb..f49bc35c0c 100644 --- a/scripts/azure-templates-stages.yml +++ b/scripts/azure-templates-stages.yml @@ -362,30 +362,15 @@ stages: matrix: - arch: x64 docker: scripts/Docker/debian/amd64 - - arch: x64 - variant: alpine - docker: scripts/Docker/alpine/amd64 - - arch: arm - docker: scripts/Docker/debian/clang-cross/11 - target: externals-linux-clang-cross - - arch: arm64 - docker: scripts/Docker/debian/clang-cross/11 - dockerArgs: --build-arg TOOLCHAIN_ARCH=aarch64-linux-gnu --build-arg TOOLCHAIN_ARCH_SHORT=arm64 - target: externals-linux-clang-cross - - arch: riscv64 - docker: scripts/Docker/debian/clang-cross/12 - dockerArgs: --build-arg TOOLCHAIN_ARCH=riscv64-linux-gnu --build-arg TOOLCHAIN_ARCH_SHORT=riscv64 --build-arg DISTRO_VERSION=12 - target: externals-linux-clang-cross - - arch: arm64 - variant: alpine - docker: scripts/Docker/alpine/clang-cross - dockerArgs: --build-arg TOOLCHAIN_ARCH=aarch64-alpine-linux-musl --build-arg TOOLCHAIN_ARCH_SHORT=arm64 --build-arg TARGET_MACHINE_ARCH=aarch64 - target: externals-linux-clang-cross - - arch: riscv64 - variant: alpine - docker: scripts/Docker/alpine/clang-cross - dockerArgs: --build-arg TOOLCHAIN_ARCH=riscv64-alpine-linux-musl --build-arg TOOLCHAIN_ARCH_SHORT=riscv64 --build-arg TARGET_MACHINE_ARCH=riscv64 --build-arg DISTRO_VERSION=3.20 - target: externals-linux-clang-cross + - ${{ each arch in split('arm,arm64,x86,riscv64', ',') }}: # separate x64 as it fails when cross-compiling + - arch: ${{ arch }} + docker: scripts/Docker/debian/clang-cross/10 + target: externals-linux-clang-cross + - ${{ each arch in split('arm,arm64,x64,riscv64', ',') }}: # removed x86 as it is having issues building + - arch: ${{ arch }} + variant: alpine + docker: scripts/Docker/alpine/clang-cross + target: externals-linux-clang-cross - template: /scripts/azure-templates-bootstrapper.yml@self # Build Native Tizen (Linux) parameters: name: native_tizen_linux @@ -532,6 +517,8 @@ stages: - name: native_linux_arm64_alpine_nodeps_linux - name: native_linux_arm64_linux - name: native_linux_arm64_nodeps_linux + - name: native_linux_arm_alpine_linux + - name: native_linux_arm_alpine_nodeps_linux - name: native_linux_arm_linux - name: native_linux_arm_nodeps_linux - name: native_linux_riscv64_alpine_linux @@ -542,6 +529,8 @@ stages: - name: native_linux_x64_alpine_nodeps_linux - name: native_linux_x64_linux - name: native_linux_x64_nodeps_linux + - name: native_linux_x86_linux + - name: native_linux_x86_nodeps_linux # WASM - name: native_wasm_2_0_23_linux - name: native_wasm_2_0_6_linux @@ -572,22 +561,6 @@ stages: buildPipelineType: ${{ parameters.buildPipelineType }} buildAgent: ${{ parameters.buildAgentHost }} requiredArtifacts: - # Linux - - name: native_linux_arm64_linux - - name: native_linux_arm64_nodeps_linux - - name: native_linux_arm64_alpine_linux - - name: native_linux_arm64_alpine_nodeps_linux - - name: native_linux_arm_linux - - name: native_linux_arm_nodeps_linux - - name: native_linux_riscv64_alpine_linux - - name: native_linux_riscv64_alpine_nodeps_linux - - name: native_linux_riscv64_linux - - name: native_linux_riscv64_nodeps_linux - - name: native_linux_x64_alpine_linux - - name: native_linux_x64_alpine_nodeps_linux - - name: native_linux_x64_linux - - name: native_linux_x64_nodeps_linux - # WASM - name: native_wasm_2_0_23_linux - name: native_wasm_2_0_6_linux - name: native_wasm_3_1_12_linux @@ -910,7 +883,6 @@ stages: requiredArtifacts: - name: native_linux_x64_linux - name: native_linux_arm64_linux - - name: native_linux_riscv64_linux postBuildSteps: - task: PublishTestResults@2 displayName: Publish the .NET Core test results diff --git a/scripts/cake/shared.cake b/scripts/cake/shared.cake index fca02d0ae1..c2ab2656d9 100644 --- a/scripts/cake/shared.cake +++ b/scripts/cake/shared.cake @@ -105,6 +105,18 @@ string GetRegexValue(string regex, FilePath file) } } +List<string> MatchRegex(string regex, params string[] lines) +{ + var matches = new List<string>(); + foreach (var line in lines) { + var match = Regex.Match(line, regex, RegexOptions.IgnoreCase | RegexOptions.Multiline); + if (match.Success) { + matches.Add(match.Groups[1].Value.Trim()); + } + } + return matches; +} + void DeleteDir(DirectoryPath dir) { if (DirectoryExists(dir)) diff --git a/scripts/get-artifact-names.ps1 b/scripts/get-artifact-names.ps1 new file mode 100644 index 0000000000..ced580726a --- /dev/null +++ b/scripts/get-artifact-names.ps1 @@ -0,0 +1,26 @@ +Param ( + [Parameter(Mandatory, ValueFromPipeline)] [string] $ArtifactsJson +) + +Write-Host "Using JSON:" +Write-Host "============================================================" +Write-Host $ArtifactsJson +Write-Host "============================================================" +Write-Host "" + +Write-Host "Looking for artifacts..." +$json = ConvertFrom-Json $ArtifactsJson +$objects = $json | Get-Member -MemberType NoteProperty +$names = $objects | ForEach-Object { $json."$($_.Name)".name } + +Write-Host "Found $($names.Count) item[s]:" +$names | ForEach-Object { Write-Host " - $_" } + +$actualNames = $names | Where-Object { $json."$_".result -ne "Skipped" } +$skippedNames = $names | Where-Object { $actualNames -notcontains $_ } + +Write-Host "Final $($actualNames.Count) item[s]:" +$actualNames | ForEach-Object { Write-Host " - $_" } + +Write-Host "Skipping $($skippedNames.Count) item[s]:" +$skippedNames | ForEach-Object { Write-Host " - $_" }