小记WebKit的构建

本文约 1900 字,阅读需 4 分钟。

由于工作需要,计划研究下WebKit的Skia渲染后端,分析cmake容易发现,只有GTK/WPE这两个PORT会开启Skia的渲染后端。

之前从https://github.com/WebKit/WebKit下载,然后在Mac构建,无论是命令行还是XCode打开,都是非常顺利的。(其实命令行构建有坑,就是要指定库的加载路径,但XCode构建真的是点一下就行…)

一开始,想在Mac上开启Skia就好,但发现互相之间依赖太重了,几乎不可能….

于是开启了虐心的构建之旅….

1. 胡乱构建

官方也没有构建说明,猜测应该是这样

./Tools/Scripts/build-webkit --debug --gtk
# 其实最后就是调用一个Cmake

有个参考:BuildingGtk – WebKit

但是问题一大堆….构建脚本对不熟悉项目的人非常不友好..

2. 头铁要在CentOS Server上构建

我的构建机是一台Server,其是“内核TK4-5.4, 用户态基于centOS8”的TencentOS Server 3.2 (Final),导致GTK相关的很多依赖根本找不到….(本身就不是Desktop,而且很老的版本了)

后面又研究了下,发现构建WPEWebkit似乎更符合我的需要,于是把PORT改成WPE,最终构建参数大致如下:

cmake .. -DPORT=WPE -DCMAKE_BUILD_TYPE=RelWithDebInfo -GNinja \
  -DENABLE_MINIBROWSER=ON -DENABLE_DOCUMENTATION=OFF -DENABLE_JOURNALD_LOG=OFF \
  -DUSE_LIBBACKTRACE=OFF -DENABLE_BUBBLEWRAP_SANDBOX=OFF -DDEVELOPER_MODE=OFF \
  -DUSE_SYSTEM_SYSPROF_CAPTURE=OFF -DUSE_GSTREAMER_FULL=ON -DENABLE_WPE_QT_API=OFF \
  -DDEVELOPER_MODE_FATAL_WARNINGS=OFF -DUSE_GLIB=OFF -DENABLE_LAYOUT_TESTS=OFF

各种开关是屏蔽一些不关心的功能,减少构建阻力。

3. 解决各种依赖

但还是遇到一些库,版本不满足要求,比如glib,gstream这些,原因是:centos8本身还是太老了,2019-09发布的,而Webkit却是最新….但自己还是头铁,把gstream这些从源码构建了一遍…..(这个过程也是花了不少精力时间,就当增加体验了….)

最终还是编起来了,感觉还是比较有成就感的。

4. 和VirtualBox较劲

自己没有Linux真机,之前都是在VirtualBox里面测试,没遇到过什么问题,一开始自己装的是基于X11的LinuxLite,各种依赖库直接从Server拷贝了一份(通过ldd导出)。

结果运行失败在了wayland的初始化,猜测可能是X11的原因,于是装了个Ubuntu24的虚拟机(有wayland的桌面)。还是不行。

发现一个问题,就是Mac上的Virutalbox无法开启3D加速,也不知道是什么原因,Windows上也不行,于是只能放弃VirtualBox上测试,返璞归真,直接真机吧。不然不确定的因素太多….

5. 在真机上装Linux系统

考虑网络问题,从8000上下了公司的Ubuntu20.04.iso,结果各种坑:

  1. ioa入域后公司WiFi一直连不上,8000也解决不了,最后自己通过有线连接绕过了这个问题
  2. apt的配置写入了过期的代理,其实KM上能搜到这个问题….,要自己手动删除,不然安装一直失败
  3. 有一次发现域外解析失败,是有线连接ioa会注册多个,但只有不带数字后缀的那个是能用的,不然网页会有ssl错误

总结就是Linux下的ioa体验很差,但折腾半天后也勉强能用。

接下来,网上找了一个程序(A simple Wayland EGL program to show a triangle),发现本地编起来能运行,但Server上编了就不能运行,对比发现是libwayland-client.so这个库的影响,由于版本不同。 但Server的wayland版本和Ubuntu20.04不一样,如果直接用本地的,就会有符号找不到。于是又开始去升级Ubuntu到22….

另外一个要升级的原因是,wpewebkit在Ubuntu20.04上是编不起来的,很多依赖都是过时的。

升级22后,只需要apt install各种依赖就OK,不需要像之前那样自己编,加上之前踩了那么多坑,还算顺利,有个坑就是用cc/clang-12都会失败,不是代码层面的失败,要升级到clang-15来编才行。

https://wpewebkit.org/about/get-wpe.html 提供了wpe webkit构建的最小代码,解压出来只有500M,和从Webkit构建是一样的,但更方便。

6. 最后

再Ubuntu上安装依赖比较顺利,运行后出现找不到WPENetworkProcess的错误,自己ln -s /usr/local/libexec/wpe.... $(pwd)/bin就可以,运行成功:

20240930155644

终于赶在假期前解决这个问题了…

用Ubuntu22真是省了不少事情….

本来想装个Centos8的Desktop,跑下Server的产物,验证下猜想,但一直没法启用Wayland桌面,遂不折腾了…

参考:

总阅读量次。