From 8b461977b387fedba85f2b4c4500a761c6d9e4aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 00:40:03 +0800
Subject: [PATCH 01/12] Add Android bionic library docker
---
scripts/Docker/bionic/amd64/Dockerfile | 49 +++++++++++++++++++++
scripts/Docker/bionic/arm64v8/Dockerfile | 55 ++++++++++++++++++++++++
2 files changed, 104 insertions(+)
create mode 100644 scripts/Docker/bionic/amd64/Dockerfile
create mode 100644 scripts/Docker/bionic/arm64v8/Dockerfile
diff --git a/scripts/Docker/bionic/amd64/Dockerfile b/scripts/Docker/bionic/amd64/Dockerfile
new file mode 100644
index 0000000000..33c228ee63
--- /dev/null
+++ b/scripts/Docker/bionic/amd64/Dockerfile
@@ -0,0 +1,49 @@
+# Arguments:
+# DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ]
+FROM amd64/debian:bookworm
+
+# Install the required packages
+RUN apt-get update && apt-get install -y \
+ build-essential \
+ git \
+ wget \
+ unzip \
+ cmake \
+ ninja-build \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+# Configure Android NDK r26b
+RUN wget https://dl.google.com/android/repository/android-ndk-r26b-linux.zip && \
+ unzip android-ndk-r26b-linux.zip -d /opt && \
+ rm android-ndk-r26b-linux.zip
+ENV ANDROID_NDK_HOME /opt/android-ndk-r26b
+ENV PATH $PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
+
+# Copy source
+COPY . .
+
+# Install the .NET SDK
+ARG DOTNET_SDK_VERSION=8.0
+ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
+RUN wget https://builds.dotnet.microsoft.com/dotnet/scripts/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 \
+ && rm dotnet-install.sh \
+ && dotnet help \
+ && dotnet --info
+
+WORKDIR /work
+
+# Cmake
+RUN cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=x86_64 \ # target architecture
+ -DANDROID_NATIVE_API_LEVEL=29 \ # Android 10.0 (API 29)
+ -DANDROID_TOOLCHAIN=clang \ # use clang
+ -DCMAKE_BUILD_TYPE=Release \
+ -B build \
+ .
+RUN cmake --build build --parallel
+
+# Clean build cache
+RUN rm -rf build
diff --git a/scripts/Docker/bionic/arm64v8/Dockerfile b/scripts/Docker/bionic/arm64v8/Dockerfile
new file mode 100644
index 0000000000..84c4509a01
--- /dev/null
+++ b/scripts/Docker/bionic/arm64v8/Dockerfile
@@ -0,0 +1,55 @@
+# Arguments:
+# DOTNET_SDK_VERSION - the version of dotnet for the Cake script [ 8.0 | * ]
+FROM debian:bookworm
+
+# Install the required packages
+RUN apt-get update && apt-get install -y \
+ build-essential \
+ git \
+ wget \
+ unzip \
+ cmake \
+ ninja-build \
+ qemu-user-static \
+ binfmt-support \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+# Configure Android NDK r26b
+RUN wget https://dl.google.com/android/repository/android-ndk-r26b-linux.zip && \
+ unzip android-ndk-r26b-linux.zip -d /opt && \
+ rm android-ndk-r26b-linux.zip
+ENV ANDROID_NDK_HOME /opt/android-ndk-r26b
+ENV PATH $PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
+
+# AArch64 qemu emulation
+COPY qemu-aarch64-static /usr/bin/qemu-aarch64-static
+RUN chmod +x /usr/bin/qemu-aarch64-static
+
+# Copy source
+COPY . .
+
+# Install the .NET SDK
+ARG DOTNET_SDK_VERSION=8.0
+ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
+RUN wget https://builds.dotnet.microsoft.com/dotnet/scripts/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 \
+ && rm dotnet-install.sh \
+ && dotnet help \
+ && dotnet --info
+
+WORKDIR /work
+
+# Cmake
+RUN cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=arm64-v8a \ # target architecture
+ -DANDROID_NATIVE_API_LEVEL=29 \ # Android 10.0 (API 29)
+ -DANDROID_TOOLCHAIN=clang \ # use clang
+ -DCMAKE_BUILD_TYPE=Release \
+ -B build \
+ .
+RUN cmake --build build --parallel
+
+# Clean build cache
+RUN rm -rf build
From 9a223342dfbdf41f52eb0a8f3c43853288d8e25a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 00:42:32 +0800
Subject: [PATCH 02/12] Create .dockerignore
---
scripts/Docker/bionic/amd64/.dockerignore | 1 +
1 file changed, 1 insertion(+)
create mode 100644 scripts/Docker/bionic/amd64/.dockerignore
diff --git a/scripts/Docker/bionic/amd64/.dockerignore b/scripts/Docker/bionic/amd64/.dockerignore
new file mode 100644
index 0000000000..3a09fc21d8
--- /dev/null
+++ b/scripts/Docker/bionic/amd64/.dockerignore
@@ -0,0 +1 @@
+build-local.sh
From dbb5f5850f054a8b395e40e44fd5860eb8fa13d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 00:51:10 +0800
Subject: [PATCH 03/12] Create build-local.sh
---
scripts/Docker/bionic/amd64/build-local.sh | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 scripts/Docker/bionic/amd64/build-local.sh
diff --git a/scripts/Docker/bionic/amd64/build-local.sh b/scripts/Docker/bionic/amd64/build-local.sh
new file mode 100644
index 0000000000..0b09452bd4
--- /dev/null
+++ b/scripts/Docker/bionic/amd64/build-local.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+set -e
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+(cd $DIR && docker build --tag skiasharp-bionic-x64 .)
+(cd $DIR/../../../../ && \
+ docker run --rm --name skiasharp-bionic-x64 --volume $(pwd):/work skiasharp-bionic-x64 /bin/bash -c "\
+ dotnet tool restore ; \
+ dotnet cake --target=externals-linux --configuration=Release --buildarch=x64 --variant=bionic")
From 1f6f68b7f5a7894ab938cd53a2a4722404437d2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 00:51:51 +0800
Subject: [PATCH 04/12] Create .dockerignore
---
scripts/Docker/bionic/arm64v8/.dockerignore | 1 +
1 file changed, 1 insertion(+)
create mode 100644 scripts/Docker/bionic/arm64v8/.dockerignore
diff --git a/scripts/Docker/bionic/arm64v8/.dockerignore b/scripts/Docker/bionic/arm64v8/.dockerignore
new file mode 100644
index 0000000000..3a09fc21d8
--- /dev/null
+++ b/scripts/Docker/bionic/arm64v8/.dockerignore
@@ -0,0 +1 @@
+build-local.sh
From 6238e1a7bba39e1669a0000838e85abaa6d67566 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 00:53:50 +0800
Subject: [PATCH 05/12] Create build-local.sh
---
scripts/Docker/bionic/arm64v8/build-local.sh | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 scripts/Docker/bionic/arm64v8/build-local.sh
diff --git a/scripts/Docker/bionic/arm64v8/build-local.sh b/scripts/Docker/bionic/arm64v8/build-local.sh
new file mode 100644
index 0000000000..f41b7dc454
--- /dev/null
+++ b/scripts/Docker/bionic/arm64v8/build-local.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+set -e
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+(cd $DIR && docker build --tag skiasharp-bionic-arm64 .)
+(cd $DIR/../../../../ && \
+ docker run --rm --name skiasharp-bionic-arm64 --volume $(pwd):/work skiasharp-bionic-arm64 /bin/bash -c "\
+ dotnet tool restore ; \
+ dotnet cake --target=externals-linux --configuration=Release --buildarch=arm64 --variant=bionic")
From dbb147f3da111753df7c7351b3d33ec66e9fa446 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:04:50 +0800
Subject: [PATCH 06/12] azure-templates-stages.yml:Bionic build
---
scripts/azure-templates-stages.yml | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/scripts/azure-templates-stages.yml b/scripts/azure-templates-stages.yml
index eec22cb330..4e040e51c1 100644
--- a/scripts/azure-templates-stages.yml
+++ b/scripts/azure-templates-stages.yml
@@ -362,6 +362,12 @@ stages:
matrix:
- arch: x64
docker: scripts/Docker/debian/amd64
+ - arch: x64
+ variant: bionic
+ docker: scripts/Docker/bionic/amd64
+ - arch: arm64
+ variant: bionic
+ docker: scripts/Docker/bionic/arm64v8
- arch: loongarch64
docker: scripts/Docker/debian/clang-cross/13
target: externals-linux-clang-cross
@@ -518,6 +524,7 @@ stages:
- name: native_linux_arm64_alpine_nodeps_linux
- name: native_linux_arm64_linux
- name: native_linux_arm64_nodeps_linux
+ - name: native_linux_arm64_bionic_linux
- name: native_linux_arm_alpine_linux
- name: native_linux_arm_alpine_nodeps_linux
- name: native_linux_arm_linux
@@ -534,6 +541,7 @@ stages:
- name: native_linux_x64_alpine_nodeps_linux
- name: native_linux_x64_linux
- name: native_linux_x64_nodeps_linux
+ - name: native_linux_x64_bionic_linux
- name: native_linux_x86_linux
- name: native_linux_x86_nodeps_linux
# WASM
From 940e5ac407225238fe9cbf38eed553a642cf9324 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:10:48 +0800
Subject: [PATCH 07/12] HarfBuzzSharp.NativeAssets.Linux.csproj:Bionic build
---
.../HarfBuzzSharp.NativeAssets.Linux.csproj | 3 +++
1 file changed, 3 insertions(+)
diff --git a/binding/HarfBuzzSharp.NativeAssets.Linux/HarfBuzzSharp.NativeAssets.Linux.csproj b/binding/HarfBuzzSharp.NativeAssets.Linux/HarfBuzzSharp.NativeAssets.Linux.csproj
index afaeedbfa0..68ede387c7 100644
--- a/binding/HarfBuzzSharp.NativeAssets.Linux/HarfBuzzSharp.NativeAssets.Linux.csproj
+++ b/binding/HarfBuzzSharp.NativeAssets.Linux/HarfBuzzSharp.NativeAssets.Linux.csproj
@@ -19,6 +19,9 @@
+
+
+
From efea15967ed043f17af5bccad85e2f47fa2ad9d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:13:07 +0800
Subject: [PATCH 08/12] HarfBuzzSharp.targets:Bionic build
---
.../buildTransitive/net4/HarfBuzzSharp.targets | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/binding/HarfBuzzSharp.NativeAssets.Linux/buildTransitive/net4/HarfBuzzSharp.targets b/binding/HarfBuzzSharp.NativeAssets.Linux/buildTransitive/net4/HarfBuzzSharp.targets
index 06826d3c4b..bcde14721b 100644
--- a/binding/HarfBuzzSharp.NativeAssets.Linux/buildTransitive/net4/HarfBuzzSharp.targets
+++ b/binding/HarfBuzzSharp.NativeAssets.Linux/buildTransitive/net4/HarfBuzzSharp.targets
@@ -49,6 +49,14 @@
musl-loongarch64\
+
+ <_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-bionic-x64\native\libHarfBuzzSharp*.so">
+ bionic-x64\
+
+ <_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-bionic-arm64\native\libHarfBuzzSharp*.so">
+ bionic-arm64\
+
+
%(Dir)%(Filename)%(Extension)
From 7ee8bff897a8a046128edc091497d27efc2fffbf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:17:43 +0800
Subject: [PATCH 09/12]
SkiaSharp.NativeAssets.Linux.NoDependencies.csproj:Bionic build
---
.../SkiaSharp.NativeAssets.Linux.NoDependencies.csproj | 3 +++
1 file changed, 3 insertions(+)
diff --git a/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/SkiaSharp.NativeAssets.Linux.NoDependencies.csproj b/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/SkiaSharp.NativeAssets.Linux.NoDependencies.csproj
index 3de0a3fdde..8e4b6ba82d 100644
--- a/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/SkiaSharp.NativeAssets.Linux.NoDependencies.csproj
+++ b/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/SkiaSharp.NativeAssets.Linux.NoDependencies.csproj
@@ -30,6 +30,9 @@ The excluded dependencies are:
+
+
+
From b451d7f8e4f368ba31b7b6e7114c277a9574e8bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:20:28 +0800
Subject: [PATCH 10/12] SkiaSharp.targets:Bionic build
---
.../buildTransitive/net4/SkiaSharp.targets | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/buildTransitive/net4/SkiaSharp.targets b/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/buildTransitive/net4/SkiaSharp.targets
index ffe1394d2b..f06e337c21 100644
--- a/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/buildTransitive/net4/SkiaSharp.targets
+++ b/binding/SkiaSharp.NativeAssets.Linux.NoDependencies/buildTransitive/net4/SkiaSharp.targets
@@ -49,6 +49,14 @@
musl-loongarch64\
+
+ <_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-bionic-x64\native\libSkiaSharp*.so">
+ bionic-x64\
+
+ <_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-bionic-arm64\native\libSkiaSharp*.so">
+ bionic-arm64\
+
+
%(Dir)%(Filename)%(Extension)
From 3c438b70d1e36960b86d85d16358546b797ec0fc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:21:50 +0800
Subject: [PATCH 11/12] SkiaSharp.NativeAssets.Linux.csproj:Bionic build
---
.../SkiaSharp.NativeAssets.Linux.csproj | 3 +++
1 file changed, 3 insertions(+)
diff --git a/binding/SkiaSharp.NativeAssets.Linux/SkiaSharp.NativeAssets.Linux.csproj b/binding/SkiaSharp.NativeAssets.Linux/SkiaSharp.NativeAssets.Linux.csproj
index 1555c37d87..045e0b9f4d 100644
--- a/binding/SkiaSharp.NativeAssets.Linux/SkiaSharp.NativeAssets.Linux.csproj
+++ b/binding/SkiaSharp.NativeAssets.Linux/SkiaSharp.NativeAssets.Linux.csproj
@@ -19,6 +19,9 @@
+
+
+
From 182730ba51db7ad8e387169ccaeebbd8c5725a0c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=B1=E9=9B=B2=E3=81=AA=E3=81=AE?=
<87938880+4Darmygeometry@users.noreply.github.com>
Date: Thu, 27 Mar 2025 01:23:51 +0800
Subject: [PATCH 12/12] SkiaSharp.targets:Bionic build
---
.../buildTransitive/net4/SkiaSharp.targets | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/binding/SkiaSharp.NativeAssets.Linux/buildTransitive/net4/SkiaSharp.targets b/binding/SkiaSharp.NativeAssets.Linux/buildTransitive/net4/SkiaSharp.targets
index ffe1394d2b..f06e337c21 100644
--- a/binding/SkiaSharp.NativeAssets.Linux/buildTransitive/net4/SkiaSharp.targets
+++ b/binding/SkiaSharp.NativeAssets.Linux/buildTransitive/net4/SkiaSharp.targets
@@ -49,6 +49,14 @@
musl-loongarch64\
+
+ <_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-bionic-x64\native\libSkiaSharp*.so">
+ bionic-x64\
+
+ <_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-bionic-arm64\native\libSkiaSharp*.so">
+ bionic-arm64\
+
+
%(Dir)%(Filename)%(Extension)