包内原生源码初版

豫构今受包中 C 注册,自召 clang 编之、llvm-ar 归档,授编译器链接。不召包之 Makefile,终链接亦不召运行时 Makefile。

原生工具启则即告命与参数,毕则告成败,皆书 stderr。预处理正文不印,警告与失败诊断不废。此为进程启毕之报,非内部输出逐字即传。

「原生」者「典」【
  「源文件」者「列」【『包上下文.c』】也,
  「包含目录」者「列」【】也,
】也。

字段可省,省则空列。源须 .c,路径皆从包根,不受绝对路径、空段、点与双点、重复、链接及子包越界。头不列为编译源;工具链运行时头目录由豫构授之。C 文可与豫言模块相邻,唯注册者编,未注册者不搜。首版沿声明包闭包行之,未按实际模块裁剪。注册路径之禁非 C 沙箱,不限可信源码内一切 include。

包上下文已归 库/构建基础/包上下文.c,注册于其包。通用文件系统尚存运行时,后乃逐迁。

仍用 ./yy豫构 构建 包名。工具取 PATH 所指,记实径、版本及修改时间;固定宿主 C、gnu11、O3、NDEBUG。原生典可列系统依赖之库名,沿所依授链接器;不擅安装,不解 pkg-config 与系统头路径,不受自定参数。原生片段须并完整包籍而用。

终端以监视屏示原生之命与用时,预处理、编译、归档及辅事皆入焉。各命别计,毕则撤屏;其后编译器另示全图。非终端仍逐行报启毕成败。预处理正文不印;警告与败辞先撤屏而后告,不为更新所掩。

每次先预处理,得头文件展开与源位置。以工具、源实径、参数、包含目录及所得全文定身份;文同则复用对象与归档,预处理败则不取旧物。惟改注释而所得文不变,不必重编。尚不以 depfile 跳过预处理,亦未按工具二进制内容取摘要;易工具而保留其版本与修改时间,应清缓存,不称异机复现之保证。

产物存工具链 .yybuild/豫构原生,借不可变上下文索引编号。对象名有独立号,异处同名不相覆。归档身份含当前对象全列,去注册则另立归档,不留旧成员。产物以进程锁守,临时成则原子替换;败不发布。

归档清单由 --native-link-inputs 授编译器。先包归档,后核心运行时。首版仅宿主静态;WASI 与动态运行时仍拒之。双种子之导出明取所需原生之文,额外组成则报,不可忽略。

核心运行时尚预构。初装或改其文,先行 make 运行时;旧稳定器初举亦备之。本轮唯迁包上下文,未迁整个核心,尚须完整工具链目录。

旧自举桥与包上下文兼容书皆除。运行时唯备其核,包中实现由包籍登记,不得以旧物补漏。双种子导出据包名取构建基础之正文,携之而行,不依原仓目录。

C调用 之豫言值 ABI 不易,任意 C 签名、公开头接口、动态原生库与任意钩子未设。make 豫构测试 验原生配置、同名源、未注册文、复建、改头、改源、撤注册、缺头、子包与链接。后议见原生构建设计