Windows平台编译Skia

安装依赖

参考How to download Skia

编译器

官网推荐使用clang,性能更好。如果使用Visual Studio的话,建议使用2017或2019。
我实际编译时使用了2022,目前没有遇到问题。
后续步骤中也以Visual Studio 2022作为编译器。

depot_tools

  1. https://chromium.googlesource.com/chromium/tools/depot_tools.git Clone到本地。
  2. 将depot_tools目录加入环境变量PATH的最前面。
  3. 执行一次gclient。

手册上建议Windows平台上手动下载zip包再复制,实测不如直接git clone。

其他

python和ninja可以使用depot_tools内置的版本。
单纯编译时不需要安装bazelisk。

获取代码

1
2
3
4
git clone https://skia.googlesource.com/skia.git
cd skia
git checkout chrome/m116 # 使用chrome/m116分支
python3 tools/git-sync-deps

编译

参考How to build Skia 以及 JetBrains的skia-pack项目中的编译参数。
因为参数中存在空格和引号,建议通过Python运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from subprocess import check_call
SKIA_SOURCE_PATH = "where_you_clone_skia"

# 根据项目需要调整编译参数
args = [
'is_official_build=true', # Release
'is_component_build=true', # 编译动态库
'target_cpu="x64"', # 64bit

'skia_use_direct3d=true',
'skia_use_sfntly=false',
'skia_use_system_expat=false',
'skia_use_system_harfbuzz=false',
'skia_pdf_subset_harfbuzz=true',
'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',

'extra_cflags=["-DSK_FONT_HOST_USE_SYSTEM_SETTINGS"]',
]
check_call(
['gn', 'gen', 'out/Release', '--args=' + ' '.join(args)],
shell=True,
cwd=SKIA_SOURCE_PATH,
)

check_call(
['ninja', '-C', join(SKIA_SOURCE_PATH, 'out/Release')],
shell=True,
)