WPE

WebKit 的官方 linux 嵌入式 port,自己也有一个官网,好处是跟 GTK port 相比不依赖 gtk,不过 glib 或者 gio 什么的肯定是少不了了。

这只是一个临时选择,有机会了会去用 servo。

目前在用 2.54.2,主要是 mainline 拉不下来,这里是 tarball 的下载地址。

我的构建参数:

-DPORT=WPE
-DDEVELOPER_MODE=OFF
-DENABLE_MINIBROWSER=OFF
-DENABLE_INTROSPECTION=OFF
-DENABLE_DOCUMENTATION=OFF
-DENABLE_GAMEPAD=OFF
-DENABLE_API_TESTS=OFF
-DENABLE_WEBDRIVER=OFF
-DENABLE_BUBBLEWRAP_SANDBOX=ON
-DENABLE_SPEECH_SYNTHESIS=OFF
-DENABLE_TOUCH_EVENTS=OFF
-DUSE_SKIA=ON
-DUSE_FLITE=OFF
-DUSE_SPIEL=OFF
-DUSE_ATK=OFF
-DUSE_GSTREAMER=ON
-DENABLE_VIDEO=ON
-DENABLE_WEB_AUDIO=OFF
-DENABLE_WEB_RTC=OFF
-DENABLE_XSLT=OFF
-DUSE_AVIF=ON
-DUSE_JPEGXL=OFF
-DUSE_LCMS=ON
-DUSE_LIBHYPHEN=OFF
-DUSE_WOFF2=ON
-DENABLE_PDFJS=OFF
-DUSE_LIBBACKTRACE=OFF
-DENABLE_WPE_LEGACY_API=OFF
-DENABLE_WPE_PLATFORM=ON
-DENABLE_WPE_PLATFORM_DRM=OFF
-DENABLE_WPE_PLATFORM_WAYLAND=ON
-DENABLE_WPE_PLATFORM_HEADLESS=OFF
-DENABLE_JOURNALD_LOG=OFF
-DCMAKE_BUILD_TYPE=MinSizeRel
-DENABLE_GEOLOCATION=OFF
-DENABLE_MEDIA_SESSION=OFF
-DENABLE_MEDIA_STREAM=OFF
-DENABLE_WEBGL=OFF
-DENABLE_WEBGPU=OFF
-DENABLE_WEBXR=OFF
-DENABLE_SPELLCHECK=OFF
-DENABLE_JIT=OFF
-DENABLE_DFG_JIT=OFF
-DENABLE_FTL_JIT=OFF
-DENABLE_WEBASSEMBLY=ON
-DENABLE_CONTEXT_MENUS=ON
-DENABLE_MATHML=OFF
-DENABLE_IMAGE_DIFF=OFF 
-DENABLE_NOTIFICATIONS=OFF
-DENABLE_SMOOTH_SCROLLING=OFF
-DENABLE_USER_MESSAGE_HANDLERS=ON
-DENABLE_MEDIA_CONTROLS_CONTEXT_MENUS=OFF
-DUSE_SYSTEM_MALLOC=OFF
-DENABLE_DRAG_SUPPORT=ON
-DUSE_VULKAN=ON

然后 full lto 似乎有点问题。

我的 FLAGS:

CXXFLAGS="-march=native -flto=thin -pipe -Os -fno-plt -fno-ident -fstack-protector-strong -fstack-clash-protection -fcf-protection=branch -fmerge-all-constants -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-semantic-interposition"
LDFLAGS="-Wl,-z,now -Wl,-z,relro -Wl,-z,max-page-size=0x1000 -Wl,--icf=all -Wl,--pack-dyn-relocs=relr -Wl,--gc-sections -Wl,-Bsymbolic -Wl,--exclude-libs,ALL -Wl,-z,noseparate-code -Wl,--build-id=none"

套壳浏览器的代码。100% vibe coding
main.cpp

然后就是 patch。

首先是两个笔误:
0001.patch
0002.patch

一个补上指纹保护的 patch:
0003-fingerprinting-protection.patch

一个不知道自己是拿来干什么的:
0004-fingerprinting-zhuangbi.patch

以及补上 multiview 的,没有这个就绘制不了 Chrome 栏也不能实现多标签页:
0005-multiview.patch

内存占用的话基本能到 chromium 两倍,不过的话二进制体积倒是比较小。

# size /usr/lib/libWPEWebKit-2.0.so.1.11.5 -A
/usr/lib/libWPEWebKit-2.0.so.1.11.5  :
section                                               size        addr
.dynsym                                              95904         624
.gnu.version                                          7992       96528
.gnu.version_r                                         128      104520
.gnu.hash                                            10952      104648
.dynstr                                             106753      115600
.rela.dyn                                           129696      222360
.relr.dyn                                            47608      352056
.rela.plt                                             1248      399664
.rodata                                           55573184      400960
.gresource.ModernMediaControlsGResourceBundle        17080    55974144
.gresource.WebKitResourcesGResourceBundle             4488    55991224
.eh_frame_hdr                                          388    55995712
.eh_frame                                             2236    55996104
.init                                                    3    56002436
.fini                                                    3    56002439
.text                                             74158229    56002560
.plt                                                   848   130160800
.tbss                                                   88   130161648
.init_array                                             88   130165744
.fini_array                                             24   130165832
.data.rel.ro                                       2843008   130165856
.dynamic                                              1200   133008864
.got                                                 21976   133010064
.got.plt                                               440   133032040
.relro_padding                                        1504   133032480
.data                                               301800   133036576
__DATA,__jsc_opcodes                                 16384   133341184
__DATA,__wtf_config                                  16384   133357568
.bss                                                249440   133373952
Total                                            133609076

也就是 127.4 MiB。