Skip to content

mcpp:plugins 0.2.6 —— 生成的头必须能被单独 include - #366

Merged
Sunrisepeak merged 1 commit into
mainfrom
feat/plugins-0.2.6
Sep 7, 2026
Merged

mcpp:plugins 0.2.6 —— 生成的头必须能被单独 include#366
Sunrisepeak merged 1 commit into
mainfrom
feat/plugins-0.2.6

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

mcpp.rules.spirv 在两个着色器编译器之间做选择,而这个选择的全部前提是它们产出
等价的头。glslc 发的是初始化列表,规则本来就要在外面写声明,顺手写了
#pragma once#include <cstdint>;glslang 发的是完整的 C 声明,于是规则什么
都不写,而那个文件点名 uint32_t 却什么都不 include:

tri_vert.h:3:7: error: 'uint32_t' does not name a type

此前每个能用的消费者都在它前面放了一个 Vulkan 头,所以一个不完整的头读起来一直像是
好的 —— 直到有人第一个 include 它。在一台干净机器上的沙箱里抓到。

两条路现在产出同样的两个文件:编译器写 <base>.inc,规则写 <base>.h。已有构建
目录原地升级,实测通过。

同时给「每条规则都为本宿主编译过」那个夹具补了它自己的分母:它断言的是「每一条」,
而「每一条」是它 carry 的一张清单,加第七个成员时那条步骤会继续绿。清单现在在构建之前
与包自己的 [features] 比一次。

xim:shaderc 的精确版本钉这一版不动 —— 等带 cmd 转义修复的 mcpp 发布之后再改回
>=2026.3

两端镜像下载回来逐字节比对,一个 sha256 同时命名两端。

`mcpp.rules.spirv` 在两个着色器编译器之间做选择,而这个选择的全部前提是它们产出
**等价的**头。glslc 发的是初始化列表,规则本来就要在外面写声明,顺手写了
`#pragma once` 与 `#include <cstdint>`;glslang 发的是完整的 C 声明,于是规则什么
都不写,而那个文件点名 `uint32_t` 却什么都不 include:

    tri_vert.h:3:7: error: 'uint32_t' does not name a type

此前每个能用的消费者都在它前面放了一个 Vulkan 头,所以一个不完整的头读起来一直像是
好的 —— 直到有人第一个 include 它。在一台干净机器上的沙箱里抓到。

两条路现在产出同样的两个文件:编译器写 `<base>.inc`,规则写 `<base>.h`。已有构建
目录原地升级,实测通过。

同时给「每条规则都为本宿主编译过」那个夹具补了它自己的分母:它断言的是「每一条」,
而「每一条」是它 carry 的一张清单,加第七个成员时那条步骤会继续绿。清单现在在构建之前
与包自己的 `[features]` 比一次。

`xim:shaderc` 的精确版本钉这一版不动 —— 等带 cmd 转义修复的 mcpp 发布之后再改回
`>=2026.3`。

两端镜像下载回来逐字节比对,一个 sha256 同时命名两端。
@Sunrisepeak
Sunrisepeak merged commit a47e294 into main Sep 7, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant