Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
16 changes: 14 additions & 2 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_INCLUDED = Argument("verifyIncluded", Argument("verifyincluded", ""))
.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);

Expand All @@ -32,9 +35,11 @@ if (!string.IsNullOrEmpty(CXX))
if (!string.IsNullOrEmpty(AR))
COMPILERS += $"ar='{AR}' ";

void CheckDeps(FilePath so)
void CheckDeps(FilePath so, bool checkIncluded = true)
{
Information($"Making sure that there are no dependencies on: {string.Join(", ", VERIFY_EXCLUDED)}");
if (checkIncluded && VERIFY_INCLUDED.Length > 0)
Information($"Making sure that there ARE dependencies on: {string.Join(", ", VERIFY_INCLUDED)}");

RunProcess("readelf", $"-dV {so}", out var stdoutEnum);
var stdout = stdoutEnum.ToArray();
Expand All @@ -51,6 +56,13 @@ void CheckDeps(FilePath so)
throw new Exception($"{so} contained a dependency on {exclude}.");
}

if (checkIncluded) {
foreach (var include in VERIFY_INCLUDED) {
if (!needed.Any(o => o.Contains(include.Trim(), StringComparison.OrdinalIgnoreCase)))
throw new Exception($"{so} is missing an expected dependency on {include}.");
}
}

var glibcs = MatchRegex(@"GLIBC_([\w\.\d]+)", stdout).Distinct().ToList();
glibcs.Sort();

Expand Down Expand Up @@ -159,7 +171,7 @@ Task("libHarfBuzzSharp")
CopyFileToDirectory(so, outDir);
CopyFile(so, outDir.CombineWithFilePath("libHarfBuzzSharp.so"));

CheckDeps(so);
CheckDeps(so, checkIncluded: false); // HarfBuzz doesn't need fontconfig
}
});

Expand Down
6 changes: 5 additions & 1 deletion scripts/Docker/_clang-cross-common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ set -ex
# $2 - The target architecture to build for [ arm | arm64 | riscv64 | x86 | x64 | loongarch64 ]
# $3 - The ABI [ gnu | musl ]
# $4 - The variant [ "" | alpine ]
# $5 - Extra arguments to pass to dotnet cake

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

Expand All @@ -28,6 +29,9 @@ ABI=$3
# the variant
VARIANT=$4

# extra arguments passed through
EXTRA_ARGS=$5

# architecture-specific additional args (matching CI configuration)
ADDITIONAL_ARGS=""
case $ARCH in
Expand All @@ -46,4 +50,4 @@ esac
(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 $ADDITIONAL_ARGS ")
dotnet cake --target=externals-linux-clang-cross --configuration=Release --buildarch=$ARCH $VARIANT $ADDITIONAL_ARGS $EXTRA_ARGS ")
25 changes: 17 additions & 8 deletions scripts/Docker/debian/clang-cross/10/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,31 @@ RUN . /etc/skia-env \
&& sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so

# Install the cross-compilation skia build dependencies (fontconfig)
# We need BOTH libfontconfig1 (runtime .so) and libfontconfig1-dev (headers and .a)
# The -dev package only has a broken symlink; the runtime package has the actual .so
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.3 ; FC_PKG=libfontconfig-dev ; APT_REPO=http://deb.debian.org/debian ;; \
*) FC_VERSION=2.13.1-2 ; FC_PKG=libfontconfig1-dev ; APT_REPO=http://archive.debian.org/debian ;; \
riscv64) FC_VERSION=2.15.0-2.3 ; FC_DEV_PKG=libfontconfig-dev ; FC_RT_PKG=libfontconfig1 ; APT_REPO=http://deb.debian.org/debian ;; \
*) FC_VERSION=2.13.1-2 ; FC_DEV_PKG=libfontconfig1-dev ; FC_RT_PKG=libfontconfig1 ; APT_REPO=http://archive.debian.org/debian ;; \
esac \
&& FC_URL=${APT_REPO}/pool/main/f/fontconfig/${FC_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig from $FC_URL" \
&& curl $FC_URL -L -o libfontconfig-dev.deb \
&& TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \
&& FC_DEV_URL=${APT_REPO}/pool/main/f/fontconfig/${FC_DEV_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig-dev from $FC_DEV_URL" \
&& curl $FC_DEV_URL -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/
&& cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ \
&& rm -rf *.deb *.tar* debian-binary usr \
&& FC_RT_URL=${APT_REPO}/pool/main/f/fontconfig/${FC_RT_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig runtime from $FC_RT_URL" \
&& curl $FC_RT_URL -L -o libfontconfig1.deb \
&& ar vx libfontconfig1.deb \
&& tar -xJvf data.tar.xz \
&& cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \
&& rm -rf *.deb *.tar* debian-binary usr

# Install the .NET SDK
ARG DOTNET_SDK_VERSION=8.0
Expand Down
25 changes: 17 additions & 8 deletions scripts/Docker/debian/clang-cross/11/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -47,22 +47,31 @@ RUN . /etc/skia-env \
&& sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so

# Install the cross-compilation skia build dependencies (fontconfig)
# We need BOTH libfontconfig1 (runtime .so) and libfontconfig1-dev (headers and .a)
# The -dev package only has a broken symlink; the runtime package has the actual .so
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.3 ; FC_PKG=libfontconfig-dev ;; \
*) FC_VERSION=2.13.1-2 ; FC_PKG=libfontconfig1-dev ;; \
riscv64) FC_VERSION=2.15.0-2.3 ; FC_DEV_PKG=libfontconfig-dev ; FC_RT_PKG=libfontconfig1 ;; \
*) FC_VERSION=2.13.1-2 ; FC_DEV_PKG=libfontconfig1-dev ; FC_RT_PKG=libfontconfig1 ;; \
esac \
&& FC_URL=http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig from $FC_URL" \
&& curl $FC_URL -L -o libfontconfig-dev.deb \
&& TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \
&& FC_DEV_URL=http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_DEV_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig-dev from $FC_DEV_URL" \
&& curl $FC_DEV_URL -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/
&& cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ \
&& rm -rf *.deb *.tar* debian-binary usr \
&& FC_RT_URL=http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_RT_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig runtime from $FC_RT_URL" \
&& curl $FC_RT_URL -L -o libfontconfig1.deb \
&& ar vx libfontconfig1.deb \
&& tar -xJvf data.tar.xz \
&& cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \
&& rm -rf *.deb *.tar* debian-binary usr

# Install the .NET SDK
ARG DOTNET_SDK_VERSION=8.0
Expand Down
25 changes: 17 additions & 8 deletions scripts/Docker/debian/clang-cross/12/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -47,22 +47,31 @@ RUN . /etc/skia-env \
&& sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so

# Install the cross-compilation skia build dependencies (fontconfig)
# We need BOTH libfontconfig1 (runtime .so) and libfontconfig1-dev (headers and .a)
# The -dev package only has a broken symlink; the runtime package has the actual .so
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.3 ; FC_PKG=libfontconfig-dev ;; \
*) FC_VERSION=2.13.1-2 ; FC_PKG=libfontconfig1-dev ;; \
riscv64) FC_VERSION=2.15.0-2.3 ; FC_DEV_PKG=libfontconfig-dev ; FC_RT_PKG=libfontconfig1 ;; \
*) FC_VERSION=2.13.1-2 ; FC_DEV_PKG=libfontconfig1-dev ; FC_RT_PKG=libfontconfig1 ;; \
esac \
&& FC_URL=http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig from $FC_URL" \
&& curl $FC_URL -L -o libfontconfig-dev.deb \
&& TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \
&& FC_DEV_URL=http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_DEV_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig-dev from $FC_DEV_URL" \
&& curl $FC_DEV_URL -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/
&& cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ \
&& rm -rf *.deb *.tar* debian-binary usr \
&& FC_RT_URL=http://deb.debian.org/debian/pool/main/f/fontconfig/${FC_RT_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig runtime from $FC_RT_URL" \
&& curl $FC_RT_URL -L -o libfontconfig1.deb \
&& ar vx libfontconfig1.deb \
&& tar -xJvf data.tar.xz \
&& cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \
&& rm -rf *.deb *.tar* debian-binary usr

# Install the .NET SDK
ARG DOTNET_SDK_VERSION=8.0
Expand Down
27 changes: 18 additions & 9 deletions scripts/Docker/debian/clang-cross/13/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -50,23 +50,32 @@ RUN . /etc/skia-env \
&& sed -i "s/\/usr\/${TOOLCHAIN_ARCH}\/lib\///g" /usr/${TOOLCHAIN_ARCH}/lib/libc.so

# Install the cross-compilation skia build dependencies (fontconfig)
# We need BOTH libfontconfig1 (runtime .so) and libfontconfig1-dev (headers and .a)
# The -dev package only has a broken symlink; the runtime package has the actual .so
RUN . /etc/skia-env \
&& mkdir -p /skia-utils/libfontconfig-dev \
&& cd /skia-utils/libfontconfig-dev \
&& case "${TOOLCHAIN_ARCH_SHORT}" in \
loong64) FC_VERSION=2.17.1-3 ; FC_PKG=libfontconfig-dev ; APT_REPO=http://deb.debian.org/debian ;; \
riscv64) FC_VERSION=2.15.0-2.3 ; FC_PKG=libfontconfig-dev ; APT_REPO=http://deb.debian.org/debian ;; \
*) FC_VERSION=2.13.1-2 ; FC_PKG=libfontconfig1-dev ; APT_REPO=http://deb.debian.org/debian ;; \
loong64) FC_VERSION=2.17.1-3 ; FC_DEV_PKG=libfontconfig-dev ; FC_RT_PKG=libfontconfig1 ; APT_REPO=http://deb.debian.org/debian ;; \
riscv64) FC_VERSION=2.15.0-2.3 ; FC_DEV_PKG=libfontconfig-dev ; FC_RT_PKG=libfontconfig1 ; APT_REPO=http://deb.debian.org/debian ;; \
*) FC_VERSION=2.13.1-2 ; FC_DEV_PKG=libfontconfig1-dev ; FC_RT_PKG=libfontconfig1 ; APT_REPO=http://deb.debian.org/debian ;; \
esac \
&& FC_URL=${APT_REPO}/pool/main/f/fontconfig/${FC_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig from $FC_URL" \
&& curl $FC_URL -L -o libfontconfig-dev.deb \
&& TOOLCHAIN_ARCH=$(echo ${TOOLCHAIN_ARCH} | sed 's/x86-64/x86_64/g') \
&& FC_DEV_URL=${APT_REPO}/pool/main/f/fontconfig/${FC_DEV_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig-dev from $FC_DEV_URL" \
&& curl $FC_DEV_URL -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/
&& cp -R usr/include/* /usr/${TOOLCHAIN_ARCH}/include/ \
&& rm -rf *.deb *.tar* debian-binary usr \
&& FC_RT_URL=${APT_REPO}/pool/main/f/fontconfig/${FC_RT_PKG}_${FC_VERSION}_${TOOLCHAIN_ARCH_SHORT}.deb \
&& echo "Downloading fontconfig runtime from $FC_RT_URL" \
&& curl $FC_RT_URL -L -o libfontconfig1.deb \
&& ar vx libfontconfig1.deb \
&& tar -xJvf data.tar.xz \
&& cp -R usr/lib/*/* /usr/${TOOLCHAIN_ARCH}/lib/ \
&& rm -rf *.deb *.tar* debian-binary usr

# Install the .NET SDK
ARG DOTNET_SDK_VERSION=8.0
Expand Down
5 changes: 4 additions & 1 deletion scripts/Docker/debian/clang-cross/build-local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ set -ex
# Parameters:
# $1 - The target architecture to build for [ arm | arm64 | riscv64 | x86 | x64 | loongarch64 ]
# $2 - The Debian distro version [ 10 | 12 | 13 ]
# $3+ - Additional arguments to pass to the cake script
# LoongArch needs to get the packages from loongnix25

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

ARCH="${1:-arm}"
DEBIAN_VERSION="${2:-10}"
shift 2 || true
EXTRA_ARGS="$@"

$DIR/../../_clang-cross-common.sh "$DIR/$DEBIAN_VERSION" "$ARCH" "gnu"
$DIR/../../_clang-cross-common.sh "$DIR/$DEBIAN_VERSION" "$ARCH" "gnu" "" "$EXTRA_ARGS"
1 change: 1 addition & 0 deletions scripts/azure-templates-stages-native-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ stages:
use1ESPipelineTemplates: ${{ parameters.use1ESPipelineTemplates }}
builds:
- name: ''
additionalArgs: --verifyIncluded=fontconfig
- name: nodeps
desc: 'No Deps'
additionalArgs: --verifyExcluded=fontconfig
Expand Down