Commit dc961cc
freedesktop.egl 1.7.0:libglvnd 源码构建;模块名改跟接口所有者(khronos.egl / freedesktop.wayland.*) (#293)
* freedesktop.egl 1.7.0:libglvnd 源码构建 + C++23 模块层,替掉 compat.egl 绑定
compat.egl 绑的是 xim:libglvnd,而它自己的注释就写着这是错的:
libglvnd **is** a separable project, so by the criterion this should be a
source build; it is still a binding for effort alone
判据里没有「工作量」这一项。工作量的部分是生成的 dispatch(约 1000 行 Python
处理 2.7MB gl.xml)加上整个 libGLdispatch.so —— mcpplibs/libglvnd 这个 fork
把生成物签进仓、两个库都建出来,于是构建期不跑 Python、不跑第二套构建系统,
mcpp build 就是全部工具链。upstream/ 是 freedesktop 发布物原样,fork 加的东西
全在 mcpp/ 下,CI 两边都 diff。
一个索引条目,两个库。libGLdispatch.so.0 由同 workspace 的兄弟成员构建,用
path 依赖引入而不是走索引:「进程里只有一个 dispatch 点」是 GLVND 存在的全部
理由,两个索引条目会让消费者把两个都写上、解析出两个包实例,而 soname 复用
只映射其中一个、另一个被静默丢弃。
按架构选文件放在 build.mcpp 里。GLdispatch 的 entry stub 既分架构又分线程存储
模型,而且和 libffi 的不同,它们自身没有任何门控 —— 在 sources 里写死 x86_64
会让包只能在 x86_64 上用而且哪儿都不写明;build.mcpp 用 mcpp::target_arch()
做的正是上游 gl_dispatch_type 的那个选择。
编译进去的 vendor 搜索路径刻意留空。上游烤进 <prefix>/share/glvnd/egl_vendor.d,
重定位之后那就是 host 的目录。留空能让「生态没声明」表现为「找不到 vendor」,
而不是悄悄把宿主驱动装进沙箱进程 —— 与 compat.libgbm 对 GBM_BACKENDS_PATH 的
立场一致,真正的路径由 xim:mesa 通过 discovery 层声明(xim-pkgindex#713)。
测试成员的每条断言在零 vendor 的机器上都成立,这是被 runner 教的:原来那条
「扩展串里有 EGL_EXT_」在我这台过、在干净 runner 挂,因为上游在 vendor 列表
为空时直接返回空串(libegl.c:928)—— 那条断言测的是机器有没有 GPU 驱动。
换成两条更好的:EGL_VERSION 在任何 vendor 之前由 libglvnd 自己答成字面量
"1.5 libglvnd"(既是活性检查也是身份检查),以及 dladdr 确认加载的确实是本包
构建的 libEGL.so.1 而不是 xim:libglvnd payload 的同 soname 副本 —— 后者在装了
图形栈的机器上是真实可达的,和 compat.libdrm 测试里那条同理。
* 模块名带上拥有接口的组织,并修好 wayland 因重切 tag 而失效的 sha256
⚠ 这个提交修复 main 上的一处失效:mcpplibs/wayland 的 v1.26.0 被重切以承载模块
重命名,于是已合并描述符里的 sha256 不再匹配,freedesktop.wayland@1.26.0 目前
装不下来。四个 wayland 描述符的 sha256 都已更新,合并即恢复。
模块重命名:
wayland.client → freedesktop.wayland.client
wayland.server → freedesktop.wayland.server
wayland.util → freedesktop.wayland.util
egl → khronos.egl
规则是「模块名跟拥有**接口**的组织,而不是发实现代码的人」。freedesktop 确实拥有
wayland 协议;EGL 则是 Khronos 的规范,libglvnd 只是实现之一、freedesktop 只是托管方
—— 所以包仍叫 freedesktop.egl,导出的模块叫 khronos.egl。
mcpplibs.openkal 已经为这条规则付过学费:它的 0.1.0 是被撤回而不是保留的,原因写在
描述符里 —— "placed the module a consumer imports under the control of the
implementation, which contradicts what the specification is for"。
模块名是全局且长期的,包名不是。换实现不该逼消费者改 import,否则一个「除了 include
那一行什么都不改」的包装层就失去了意义。副作用是好的:两个 EGL 提供方现在会在模块名
上硬冲突,而不是静默共存 —— 这正是 GLVND「一个进程一个 dispatch 点」想要的。
索引里既有的惯例本来就是「namespace 不进模块名」(chriskohlhoff.asio → import asio,
fmtlib.fmt → import fmt,compat.opencv → import opencv.cv),这次是把它推进一步:
不是随便一个名字,而是接口所有者的名字。
* docs: 第四轮记录 —— EGL 源码化、模块命名归属、沙箱干净房间验证
跨仓主文档补上 §19,涵盖这一轮的四件事:
§19.2 模块命名。规则定为「跟拥有**接口**的组织,不跟发实现的人」,依据是
mcpplibs.openkal 已经付过的学费(0.1.0 被撤回,因为它把消费者 import 的模块放在了
实现的控制之下)。于是 wayland 三个模块加 freedesktop 前缀,EGL 的模块叫 khronos.egl
—— 包名与模块名故意不一致,因为 freedesktop 发这份代码而 Khronos 拥有这份规范。
§19.3 生成器该放哪。判据是「依不依赖目标平台」:能预先算定的签进仓 + CI diff(两个
fork 的构建路径上都没有 Python),依赖架构算不出来的才进 build.mcpp(GLdispatch 的
entry stub)。把 genmod.py 改写成 build.mcpp 反而会把生成器塞进每个消费者的构建。
§19.4 沙箱干净房间验证。合成 home、从零 clone + 装 + 构建,而沙箱里 /usr 是宿主的
—— 所以证的不是「宿主不在」,而是「宿主在、可达、且全部落败」。整条链跑通,
eglInitialize 拿到 EGL 1.5 vendor Mesa Project,gbm_bo_create 真分配出 256x256。
顺带记了三个坑,其中 [indices] 同一 path 挂两个键会产生二义那条最耗时间。
§19.6 记一处自己造成的破坏:为承载模块重命名原地重切了 wayland 的 v1.26.0,于是在本
PR 合并前 main 上的 sha256 对不上。正确次序应当是先改描述符再重切 tag。同版本重切还
会被 store 掩盖(只按 name+version 索引),清理命令一并记下。
§19.5 xlings pin:§15「不下调到 .4」的结论仍然成立,但那条要求指出的缺口是真的 ——
两个 fork 的 CI 根本没钉,现已钉到与 kXlingsVersion 一致的 .5。
* docs: 模块命名规则写进两份 descriptor-examples,并修掉描述符首行的旧模块名
规则:模块名跟拥有**接口**的组织。索引早先的惯例是把 namespace 整个丢掉
(chriskohlhoff.asio → import asio),这一条是把那个惯例说具体 —— 模块名全局且长期,
包名不是,所以它该说清楚谁拥有这份接口。EGL 那一行顺带解释了包名与模块名为什么故意
不一致。
* 沙箱验证脚本签进仓,§19.4 换成完整记录
之前 §19.4 只有方法论和输出摘录,脚本躺在一个 subos 目录里 —— 那既不可复现也不算记录
下来了。现在:
* tests/verify_graphics_closed_loop_sandbox.sh 签进仓,与
check_graphics_install_side_effects.sh 同处 tests/,带复现命令与参数说明;
* §19.4 收录**完整**输出(七个步骤全文),外加一张「这份输出证明了什么」的断言→证据
对照表,以及两条不是缺陷的输出各自的解释;
* 三个坑写进文档:[indices] 同一 path 挂两个键会二义、沙箱里 find 会抓到别的 subos
的 mcpp、沙箱不挂 cwd。
签进仓的这一版是重新跑过的,不是把之前的输出誊抄过来 —— 分支 feat/freedesktop-egl
@ 2f4458d,结果 PASS。
§19.1 与 §19.8 同步:示例 09 已推到 mcpp PR #532。之前扣着不推的理由是「会把已绿的 CI
弄红」,那是假设、没查 —— mcpp 的 CI 根本不构建 examples/09-graphics-stack。
---------
Co-authored-by: Sunrisepeak <x.d2learn.org@gmail.com>1 parent 83ddd4a commit dc961cc
13 files changed
Lines changed: 718 additions & 309 deletions
File tree
- .agents/docs
- docs
- zh
- pkgs
- c
- f
- tests
- examples
- egl
- tests
- wayland/tests
Lines changed: 259 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
12 | 17 | | |
13 | 18 | | |
14 | 19 | | |
| |||
1113 | 1118 | | |
1114 | 1119 | | |
1115 | 1120 | | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
| 1160 | + | |
| 1161 | + | |
| 1162 | + | |
| 1163 | + | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + | |
| 1180 | + | |
| 1181 | + | |
| 1182 | + | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + | |
| 1193 | + | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
| 1211 | + | |
| 1212 | + | |
| 1213 | + | |
| 1214 | + | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
| 1235 | + | |
| 1236 | + | |
| 1237 | + | |
| 1238 | + | |
| 1239 | + | |
| 1240 | + | |
| 1241 | + | |
| 1242 | + | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
| 1257 | + | |
| 1258 | + | |
| 1259 | + | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
| 1269 | + | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
| 1274 | + | |
| 1275 | + | |
| 1276 | + | |
| 1277 | + | |
| 1278 | + | |
| 1279 | + | |
| 1280 | + | |
| 1281 | + | |
| 1282 | + | |
| 1283 | + | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
| 1291 | + | |
| 1292 | + | |
| 1293 | + | |
| 1294 | + | |
| 1295 | + | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
| 1333 | + | |
| 1334 | + | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
| 1351 | + | |
| 1352 | + | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
| 1356 | + | |
| 1357 | + | |
| 1358 | + | |
| 1359 | + | |
| 1360 | + | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
| 1368 | + | |
| 1369 | + | |
| 1370 | + | |
| 1371 | + | |
| 1372 | + | |
| 1373 | + | |
| 1374 | + | |
0 commit comments