Skip to content

Commit

Permalink
Add GitHub actions to build Skia
Browse files Browse the repository at this point in the history
  • Loading branch information
dacap committed Mar 2, 2020
1 parent e00d40d commit be15448
Show file tree
Hide file tree
Showing 4 changed files with 237 additions and 1 deletion.
121 changes: 121 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
name: Build
on: push
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest, macos-latest, ubuntu-16.04]
mode: [Release, Debug]
arch: [x64, x86]
exclude:
- os: macos-latest
arch: x86
steps:
- uses: actions/checkout@v2
- name: Install Dependencies
shell: bash
run: |
if [[ "${{ runner.os }}" == "Windows" ]] ; then
choco install llvm
choco install zip
elif [[ "${{ runner.os }}" == "macOS" ]] ; then
brew install coreutils
else
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main"
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update -qq
sudo apt-get install -y \
git g++ g++-multilib clang-10 libc++-10-dev pandoc dpkg-dev \
libcurl4-openssl-dev libgif-dev libjpeg-dev \
libz-dev libpng-dev libtinyxml-dev libpixman-1-dev \
libx11-dev libxcursor-dev ninja-build zip unzip \
libfontconfig-dev libgl1-mesa-dev
fi
- name: Download depot_tools
run: |
git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
echo "::add-path::${PWD}/depot_tools"
- name: Sync Deps
run: python tools/git-sync-deps
- name: Generating Ninja Files
shell: bash
run: |
if [[ "${{ matrix.mode }}" == "Debug" ]] ; then
export is_debug=true
export is_official=false
else
export is_debug=false
export is_official=true
fi
if [[ "${{ runner.os }}" == "Windows" ]] ; then
export gn_flags='win_vc="C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC" win_toolchain_version="15.0" win_sdk="C:\\Program Files (x86)\\Windows Kits\\10" win_sdk_version="10.0.18362.0" cc="clang" cxx="clang++" clang_win="C:\Program Files\LLVM" clang_win_version="9.0.0"'
if [[ "${{ matrix.mode }}" == "Debug" ]] ; then
export gn_flags="$gn_flags extra_cflags=[\"-MTd\"]"
else
export gn_flags="$gn_flags extra_cflags=[\"-MT\"]"
fi
elif [[ "${{ runner.os }}" == "macOS" ]] ; then
export gn_flags='extra_cflags=["-stdlib=libc++", "-mmacosx-version-min=10.9"] extra_cflags_cc=["-frtti"]'
else
export gn_flags='cc="clang-10" cxx="clang++-10" extra_cflags_cc=["-stdlib=libc++"] extra_ldflags=["-stdlib=libc++"]'
fi
gn gen out/${{ matrix.mode }}-${{ matrix.arch }} --args="is_debug=$is_debug is_official_build=$is_official skia_use_system_expat=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false skia_use_sfntly=false skia_use_freetype=true skia_use_harfbuzz=true skia_pdf_subset_harfbuzz=true skia_use_system_freetype2=false skia_use_system_harfbuzz=false target_cpu=\"${{ matrix.arch }}\" $gn_flags"
- name: Compiling
run: ninja -C out/${{ matrix.mode }}-${{ matrix.arch }} skia modules
- name: Copying Files
shell: bash
run: |
if [[ "${{ runner.os }}" == "Windows" ]] ; then
export libext=lib
else
export libext=a
fi
if [[ "${{ runner.os }}" == "macOS" ]] ; then
export cp=gcp
else
export cp=cp
fi
export dst=Skia-${{ runner.os }}-${{ matrix.mode }}-${{ matrix.arch }}
mkdir $dst
$cp -R --parents \
out/${{ matrix.mode }}-${{ matrix.arch }}/*.$libext \
include \
modules/particles/include/*.h \
modules/skottie/include/*.h \
modules/skparagraph/include/*.h \
modules/skplaintexteditor/include/*.h \
modules/skresources/include/*.h \
modules/sksg/include/*.h \
modules/skshaper/include/*.h \
src/gpu/gl/*.h \
third_party/externals/angle2/LICENSE \
third_party/externals/angle2/include \
third_party/externals/freetype/docs/FTL.TXT \
third_party/externals/freetype/docs/GPLv2.TXT \
third_party/externals/freetype/docs/LICENSE.TXT \
third_party/externals/freetype/include \
third_party/externals/libpng/LICENSE \
third_party/externals/libpng/*.h \
third_party/externals/libwebp/COPYING \
third_party/externals/libwebp/PATENTS \
third_party/externals/libwebp/src/dec/*.h \
third_party/externals/libwebp/src/dsp/*.h \
third_party/externals/libwebp/src/enc/*.h \
third_party/externals/libwebp/src/mux/*.h \
third_party/externals/libwebp/src/utils/*.h \
third_party/externals/libwebp/src/webp/*.h \
third_party/externals/harfbuzz/COPYING \
third_party/externals/harfbuzz/src/*.h \
third_party/externals/swiftshader/LICENSE.txt \
third_party/externals/swiftshader/include \
third_party/externals/zlib/LICENSE \
third_party/externals/zlib/*.h \
$dst
- name: Uploading Artifact
uses: actions/upload-artifact@v1
with:
name: Skia-${{ runner.os }}-${{ matrix.mode }}-${{ matrix.arch }}
path: Skia-${{ runner.os }}-${{ matrix.mode }}-${{ matrix.arch }}
112 changes: 112 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Skia for Aseprite and laf

**Pre-built binaries of Skia** in the [releases page](https://github.com/aseprite/skia/releases).

Skia is a 2D graphic library developed by Google Inc., you can find
the official website in [skia.org](https://skia.org).

This fork is used to compile Skia automatically for
[laf](https://github.com/aseprite/laf) and
[Aseprite](https://github.com/aseprite/aseprite) using GitHub Actions.

# Building Skia

In the following sections you will find straightforward steps to
compile Skia. You can always check the [official Skia
instructions](https://skia.org/user/build) and select the OS you are
building for. [Aseprite](https://github.com/aseprite/aseprite) and
[laf](https://github.com/aseprite/laf) use the **`aseprite-m81`** branch.
So remember to checkout that specific branch.

These are the platform-specific steps to compile Skia:

* [Skia on Windows](#skia-on-windows)
* [Skia on macOS](#skia-on-macos)
* [Skia on Linux](#skia-on-linux)

After this you should have all Skia libraries compiled. After that,
when you compile laf or Aseprite remember to add
`-DSKIA_DIR=$HOME/deps/skia` parameter to your `cmake` call and all
other parameters.

## Skia on Windows

Download
[Google depot tools](https://storage.googleapis.com/chrome-infra/depot_tools.zip)
and uncompress it in some place like `C:\deps\depot_tools`.

[It's recommended to compile Skia with Clang](https://github.com/google/skia/blob/master/site/user/build.md#a-note-on-software-backend-performance)
to get better performance. So you will need to [download Clang](http://releases.llvm.org/9.0.0/LLVM-9.0.0-win64.exe),
and install it on a folder like `C:\deps\llvm` (a folder without whitespaces).

Open a [developer command prompt](https://docs.microsoft.com/en-us/dotnet/framework/tools/developer-command-prompt-for-vs)
or command line (`cmd.exe`) and call:

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -arch=x64

Then:

set PATH=C:\deps\depot_tools;%PATH%
cd C:\deps\depot_tools
gclient sync

(The `gclient` command might print an error like
`Error: client not configured; see 'gclient config'`.
Just ignore it.)

cd C:\deps
git clone -b aseprite-m81 https://github.com/aseprite/skia.git
cd skia
set GIT_EXECUTABLE=git.bat
python tools/git-sync-deps

(The `tools/git-sync-deps` will take some minutes because it downloads
a lot of packages, please wait and re-run the same command in case it
fails.)

Finally, if you've downloaded Clang, use this command:

set PATH=C:\deps\llvm\bin;%PATH%
gn gen out/Release-x64 --args="is_debug=false is_official_build=true skia_use_system_expat=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false skia_use_sfntly=false skia_use_freetype=true skia_use_harfbuzz=true skia_pdf_subset_harfbuzz=true skia_use_system_freetype2=false skia_use_system_harfbuzz=false target_cpu=""x64"" cc=""clang"" cxx=""clang++"" clang_win=""c:\deps\llvm"" win_vc=""C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC"" extra_cflags=[""-MT""]"
ninja -C out/Release-x64 skia modules

If you haven't installed Clang, and want to compile Skia with MSVC
(anyway it's not recommended because the performance penalty is too
big), you can use the following commands instead:

gn gen out/Release-x64 --args="is_debug=false is_official_build=true skia_use_system_expat=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false skia_use_sfntly=false skia_use_freetype=true skia_use_harfbuzz=true skia_pdf_subset_harfbuzz=true skia_use_system_freetype2=false skia_use_system_harfbuzz=false target_cpu=""x64"" win_vc=""C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC"" extra_cflags=[""-MT""]"
ninja -C out/Release-x64 skia modules

## Skia on macOS

These steps will create a `deps` folder in your home directory with a
couple of subdirectories needed to build Skia (you can change the
`$HOME/deps` with other directory). Some of these commands will take
several minutes to finish:

mkdir $HOME/deps
cd $HOME/deps
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
git clone -b aseprite-m81 https://github.com/aseprite/skia.git
export PATH="${PWD}/depot_tools:${PATH}"
cd skia
python tools/git-sync-deps
gn gen out/Release-x64 --args="is_official_build=true skia_use_system_expat=false skia_use_system_icu=false skia_use_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false extra_cflags_cc=[\"-frtti\"]"
ninja -C out/Release-x64 skia modules

## Skia on Linux

These steps will create a `deps` folder in your home directory with a
couple of subdirectories needed to build Skia (you can change the
`$HOME/deps` with other directory). Some of these commands will take
several minutes to finish:

mkdir $HOME/deps
cd $HOME/deps
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
git clone -b aseprite-m81 https://github.com/aseprite/skia.git
export PATH="${PWD}/depot_tools:${PATH}"
cd skia
python tools/git-sync-deps
gn gen out/Release-x64 --args="is_debug=false is_official_build=true skia_use_system_expat=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false"
ninja -C out/Release-x64 skia modules
3 changes: 2 additions & 1 deletion gn/toolchain/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ toolchain("msvc") {
if (target_cpu == "x86") {
# Toolchain asset includes a script that configures for x86 building.
# We don't support x86 builds with local MSVC installations.
env_setup = "cmd /c $win_sdk/bin/SetEnv.cmd /x86 && "
# Setup the env before
#env_setup = "cmd /c $win_sdk\\bin\\SetEnv.cmd /x86 && "
} else if (target_cpu == "arm64") {
# ARM64 compiler is incomplete - it relies on DLLs located in the host toolchain directory.
env_setup = "cmd /C set \"PATH=%PATH%;$win_vc\\Tools\\MSVC\\$win_toolchain_version\\bin\\HostX64\\x64\" && "
Expand Down
2 changes: 2 additions & 0 deletions third_party/harfbuzz/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ if (skia_use_system_harfbuzz) {
".",
_src,
]
include_dirs = [ "../externals/freetype/include" ]
defines = [
"HAVE_ICU",
"HAVE_ICU_BUILTIN",
"HAVE_INTEL_ATOMIC_PRIMITIVES",
"HAVE_OT",
"HAVE_FREETYPE",
]
deps = [
"//third_party/icu",
Expand Down

0 comments on commit be15448

Please sign in to comment.