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。