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)