编译Skia:结合云端Github Actions与本地Visual Studio

用 Github Actions 云编译

JetBrains替Skia项目手工制作了Java和Kotlin绑定,拓展了Java - Graphics2d的绘图功能。

他们顺便公开了用于自动构建Skia的仓库[1],基于Github Actions。维护需编写 build.yml[2] 与一些简短的 python 脚本。Fork 一份后,可以修改参数然后部署自动化[3]构建。

查看原项目Log可知,构建总耗时52分钟,构建目标包括了mac,安卓,linux ,windows这些平台。

修改分支代码,只需构建windows静态库,耗时22分钟左右。其中环境部署、下载源码占用五分钟,构建占用十五分钟。不支持增量编译,有人声称可以用 Docker 实现,但是百度 Docker 出现的东西看起来不简单,暂且算了吧。

本地编译

编译Skia,不仅要下载本体代码,还需下载各种第三方库和谷歌的dept_tools,而且是同步git仓库,而不是简单的下载。墙内的话,先要弄个稳定的通道,然后用命令行配置git代理,不知道要鼓捣多久,最后说不定还是失败。但 Github Actions 短短几分钟就能把所需代码全部署完毕,实为一大利器。

如果能跳过编译步骤,只完成下载和部署流程,最后将配置好的整套代码拿下来,自己编译就好了。

可以将 Github Actions 获取的源码下载下来吗?当然可以,因为最后一步,产物是要上传到仓库的Release区的,我们自然也可以将源码一并打包了。(需修改python脚本,在云端遍历所有文件夹,用zipFile打包需要的代码[4]。)

下载下来,源码压缩包三百多兆,解压后一个多G,其中大部分是依赖库。

Skia 项目用dept_tools下载依赖库,用GN[5]描述构建方法,再调用GN依据.gn文件与传入的参数生成.ninja文件,最后用ninja调用msvc完成编译。

如果给GN指令传递 --ide=vs 参数[6],可生成 Visual Studio 解决方案。下载下来就可以打开,不过还不能编译,因为本地不存在Github Actions上面的工具链(包括企业版的MSVC[7]与某版Win10 SDK),需如下修改全部.ninja文件:

编译Skia:结合云端Github Actions与本地Visual Studio_第1张图片

图片仅供参考。

然后就可以编译了。右击编译Skia项目,仅用六分钟,就生成了一些.lib文件:

编译Skia:结合云端Github Actions与本地Visual Studio_第2张图片

编译Skia:结合云端Github Actions与本地Visual Studio_第3张图片

找个测试项目编译,运行成功,生成了一张图片:

参考

  1. ^https://github.com/JetBrains/skia-build
  2. ^https://github.com/JetBrains/skia-build/blob/master/.github/workflows/build.yml
  3. ^事件驱动的自动化构建 https://docs.github.com/en/actions/reference/events-that-trigger-workflows
  4. ^修改好的archive.py https://github.com/KnIfER/skia-build/blob/master/script/archive.py
  5. ^啥是GN? https://chromium.googlesource.com/chromium/src/tools/gn/+/48062805e19b4697c5fbd926dc649c78b6aaa138/README.md
  6. ^https://skia.org/docs/user/build/#visual-studio-solutions
  7. ^https://github.com/microsoft/setup-msbuild

你可能感兴趣的:(编译奇兵,skia,github)