Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase Linux support #3209

Merged
merged 32 commits into from
Mar 23, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
b785521
Extend clang-cross to support alpine
kasperk81 Mar 11, 2025
159d70d
Merge branch 'main' into main-musl
kasperk81 Mar 13, 2025
80fe135
add variant
kasperk81 Mar 13, 2025
b02c7c1
fix target machine arch
kasperk81 Mar 14, 2025
1766d87
fix arm64
kasperk81 Mar 14, 2025
b4c8998
Test older debians
mattleibow Mar 14, 2025
28028d6
try this
mattleibow Mar 14, 2025
4a9db61
this
mattleibow Mar 14, 2025
9fcff57
Update native/linux-clang-cross/build.cake
kasperk81 Mar 15, 2025
92bbc61
Revert depot_tools so we cn use an older python
mattleibow Mar 17, 2025
f257080
Everything is 10
mattleibow Mar 17, 2025
ceb6671
this
mattleibow Mar 17, 2025
8bad5a7
that
mattleibow Mar 17, 2025
c7c3fce
oops
mattleibow Mar 17, 2025
4676f38
ghckjhg
mattleibow Mar 18, 2025
8e3d803
better
mattleibow Mar 18, 2025
84d227c
feedback
kasperk81 Mar 19, 2025
08fe863
Merge branch 'pr/3200' into dev/linux-versions
mattleibow Mar 19, 2025
259da8f
fix
mattleibow Mar 19, 2025
01a51b3
this
mattleibow Mar 20, 2025
3daed6f
this was important
mattleibow Mar 20, 2025
f99e99d
Get the machines to do it for me
mattleibow Mar 20, 2025
50e0859
try this
mattleibow Mar 20, 2025
d096023
push
mattleibow Mar 20, 2025
69fb348
fix that
mattleibow Mar 20, 2025
51e5198
oops
mattleibow Mar 20, 2025
27889dd
item.arch
mattleibow Mar 21, 2025
432e4ff
--build-arg BUILD_ARCH ${{ item.arch }}
mattleibow Mar 21, 2025
7ebfa6e
=
mattleibow Mar 21, 2025
7cb8e7a
disable x86 alpine for now
mattleibow Mar 22, 2025
6c30f10
Merge remote-tracking branch 'origin/main' into dev/linux-versions
mattleibow Mar 22, 2025
b408b07
mire
mattleibow Mar 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion externals/depot_tools
Submodule depot_tools updated from ecad42 to 8fecc5
28 changes: 14 additions & 14 deletions native/linux-clang-cross/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Comment on lines +5 to +7
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I now define these in the Docker container instead of having it calculated in other places each time we use it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

running file output/path/libSkiaSharp.so will validate if we are producing the correct arch/bitness compared to main branch


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} ] " +
Expand All @@ -43,7 +45,6 @@ Task("libSkiaSharp")
RunCake("../linux/build.cake", "libSkiaSharp", new Dictionary<string, string> {
{ "arch", arch },
{ "gnArgs", GetGnArgs(arch) },
{ "variant", BUILD_VARIANT },
});
}
});
Expand All @@ -56,7 +57,6 @@ Task("libHarfBuzzSharp")
RunCake("../linux/build.cake", "libHarfBuzzSharp", new Dictionary<string, string> {
{ "arch", arch },
{ "gnArgs", GetGnArgs(arch) },
{ "variant", BUILD_VARIANT },
});
}
});
Expand Down
46 changes: 38 additions & 8 deletions native/linux/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Expand All @@ -31,29 +34,56 @@ 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")
.IsDependentOn("git-sync-deps")
.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;

Expand Down
53 changes: 27 additions & 26 deletions scripts/Docker/_clang-cross-common.sh
Original file line number Diff line number Diff line change
@@ -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 ")
2 changes: 1 addition & 1 deletion scripts/Docker/alpine/amd64/Dockerfile
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we cross compile all archs, then we don't need these arch specific ones.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am having issues with cross-compiling all archs. Debian x64 to x64 and Alpine x86. Once I get those to build then I can drop.

Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
2 changes: 1 addition & 1 deletion scripts/Docker/alpine/arm64v8/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
60 changes: 43 additions & 17 deletions scripts/Docker/alpine/clang-cross/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,50 +1,76 @@
# 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 \
&& rm 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" ]
14 changes: 5 additions & 9 deletions scripts/Docker/alpine/clang-cross/build-local.sh
Original file line number Diff line number Diff line change
@@ -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"
6 changes: 6 additions & 0 deletions scripts/Docker/alpine/clang-cross/startup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -e

source /etc/skia-env

exec "$@"
4 changes: 2 additions & 2 deletions scripts/Docker/debian/amd64/Dockerfile
Original file line number Diff line number Diff line change
@@ -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 \
Expand All @@ -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 \
Expand Down
4 changes: 2 additions & 2 deletions scripts/Docker/debian/arm64v8/Dockerfile
Original file line number Diff line number Diff line change
@@ -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 \
Expand All @@ -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 \
Expand Down
Loading