diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000000..99e25bfe48c9 --- /dev/null +++ b/.github/workflows/build.yml @@ -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 }} diff --git a/README.md b/README.md new file mode 100644 index 000000000000..2687877cdb50 --- /dev/null +++ b/README.md @@ -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 diff --git a/gn/toolchain/BUILD.gn b/gn/toolchain/BUILD.gn index 55e33e29b1d2..af041497d430 100644 --- a/gn/toolchain/BUILD.gn +++ b/gn/toolchain/BUILD.gn @@ -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\" && " diff --git a/third_party/harfbuzz/BUILD.gn b/third_party/harfbuzz/BUILD.gn index cb46365176cb..acf36b6a6dae 100644 --- a/third_party/harfbuzz/BUILD.gn +++ b/third_party/harfbuzz/BUILD.gn @@ -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",