小记WebKit的构建
由于工作需要,计划研究下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,结果各种坑:
- ioa入域后公司WiFi一直连不上,8000也解决不了,最后自己通过有线连接绕过了这个问题
- apt的配置写入了过期的代理,其实KM上能搜到这个问题….,要自己手动删除,不然安装一直失败
- 有一次发现域外解析失败,是有线连接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
就可以,运行成功:
终于赶在假期前解决这个问题了…
用Ubuntu22真是省了不少事情….
本来想装个Centos8的Desktop,跑下Server的产物,验证下猜想,但一直没法启用Wayland桌面,遂不折腾了…