Skip to content

Latest commit

 

History

History
96 lines (70 loc) · 2.63 KB

File metadata and controls

96 lines (70 loc) · 2.63 KB

Building on Linux

This guide covers building libSkiaSharp.so for Linux distributions.

Prerequisites

  • .NET 8 SDK - Pinned via global.json
  • Python 3
  • Clang 14+
  • Make
  • Ninja (build system)

Downloading

The first step is to clone the mono/SkiaSharp repository:

git clone https://github.com/mono/SkiaSharp.git
cd SkiaSharp

Google's depot_tools will be downloaded automatically during the build process.

Building

The easiest way to build is using the Cake build script:

# Download dependencies and build native library
dotnet cake --target=externals-linux

# Or build everything including managed code
dotnet cake --target=everything

Manual Building

If you need more control, you can build manually:

  1. Clone the skia submodule and sync dependencies:

    git submodule update --init --recursive
    cd externals/skia
    python3 tools/git-sync-deps
  2. Generate build files:

    ./bin/gn gen 'out/linux/x64' --args='
        is_official_build=true skia_enable_tools=false
        target_os="linux" target_cpu="x64"
        skia_use_icu=false skia_use_sfntly=false skia_use_piex=true
        skia_use_system_expat=false skia_use_system_freetype2=false 
        skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false 
        skia_use_system_libwebp=false skia_use_system_zlib=false
        skia_enable_gpu=true
        extra_cflags=[ "-DSKIA_C_DLL" ]'

    The latest arguments can be found in native/linux/build.cake

  3. Build:

    ninja -C 'out/linux/x64' SkiaSharp

Customizing

To customize the build, modify the --args value:

Option Example
Disable GPU skia_enable_gpu=false
Static library is_static_skiasharp=true
Custom compilers cc="gcc" cxx="g++" ar="ar"
Extra C/C++ flags extra_cflags=[ "-O3" ]
Extra linker flags extra_ldflags=[ "-fuse-ld=lld" ]

Docker

Building for different Linux distributions is easier with Docker. The repository includes Dockerfiles for various configurations.

# Build the Docker image
cd scripts/Docker/alpine/amd64
docker build --tag skiasharp-alpine .

# Run the build
docker run --rm --name skiasharp-alpine --volume $(pwd):/work skiasharp-alpine \
    /bin/bash ./bootstrapper.sh -t externals-linux --variant=alpine --buildarch=x64

# Fix file ownership if needed
chown -R $(id -u):$(id -g) .

See the scripts/Docker/ directory for available Dockerfiles.