Skia构建系统与编译脚本分析

分析下Skia的构建系统,具体编译过程参看Windows下从源码编译Skia。这里以ninja为例来分析。执行下面三条命令就可以完成编译:

SET "GYP_GENERATORS=ninja"
python bin/sync-and-gyp 
ninja -C out\Release

“python bin/sync-and-gyp”会生成ninja脚本。下面来分析脚本层级以及某个模块的脚本内容和结构。关于ninja,参考https://ninja-build.org/manual.htmlhttp://guiquanz.me/2014/07/28/a_intro_to_Ninja/

ninja脚本层级及模块脚本说明

skia\gyp下面的gyp脚本是模板,执行sync-and-gyp时会根据这些模板来动态生成实际的构建脚本。很多模块依赖、条件等都可以在这个目录下的gyp或gypi中找到。

sync-and-gyp之后,out\Release\build.ninja,是总的编译脚本。里面定义了all,还定义了默认编译目标为most。most对应的ninja脚本是out\Release\obj\gyp\most.ninja。

如果想编译某个单独的模块,可以执行“ninja module_name”,比如“ninja images”,“ninja giflib”等。

具体到某个模块的编译脚本,都在out\Release\obj\gyp\目录下。某个模块的ninja脚本中,定义了具体的编译规则。以images.ninja(对应skia_images.lib)为例来说明下,它的内容如下:

arch = environment.x86
cc = $cl_x86
cxx = $cl_x86
cc_host = $cl_x86
cxx_host = $cl_x86
asm = $ml_x86
build obj\gyp\images.actions_depends.stamp: stamp obj\gyp\libjpeg-turbo.lib $
    obj\gyp\libwebp.actions_depends.stamp

pdbname_c = images.pdb
pdbname_cc = images.pdb
pchprefix = images
defines = -DSK_INTERNAL -DSK_GAMMA_SRGB -DSK_GAMMA_APPLY_TO_A8 $
    -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 -DSK_SUPPORT_GPU=0 $
    -DSK_FORCE_DISTANCE_FIELD_TEXT=0 -DSK_BUILD_FOR_WIN32 $
    -D_CRT_SECURE_NO_WARNINGS -DGR_GL_FUNCTION_TYPE=__stdcall $
    -D_HAS_EXCEPTIONS=0 -DNDEBUG -DNDEBUG
asmflags = 
rcflags = /I..\..\gyp
includes = -I..\..\include\images -I..\..\include\private -I..\..\src\lazy $
    -I..\..\src\core -I..\..\src\image -I..\..\include\c $
    -I..\..\include\config -I..\..\include\core -I..\..\include\pathops $
    -I..\..\gyp\config\win -I..\..\third_party\externals\libjpeg-turbo $
    -I..\..\third_party\externals\libpng -I..\..\third_party\libpng $
    -I..\..\third_party\externals\giflib -I..\..\third_party\giflib $
    -I..\..\third_party\etc1 -I..\..\third_party\ktx $
    -I..\..\third_party\externals\libwebp\src -I..\..\include\utils $
    -I..\..\src\utils -I..\..\include\utils\win
midl_includes = 
cflags = /wd4275 /wd4345 /wd4355 /Ox /Ot /fp:precise /W3 /WX /Zi /GR- /MD $
    /we4189 /arch:SSE2 /FS
cflags_c = -DSK_A32_
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值