Skip to content

Commit 320d024

Browse files
authored
feat: add compat.re2 2022-04-01 + a upb feature on compat.protobuf (#148)
* feat: add compat.re2 2022-04-01 + a `upb` feature on compat.protobuf The index-side half of gRPC's P1: with these, a future grpc-m adaptation repo has to vendor only gRPC's own source. Before writing either, the biggest unknown was settled by compiling gRPC 1.83.0 TUs directly with mcpp's gcc@16.1.0 — no patches, no configure, no codegen, include paths only: OK src/core/lib/slice/slice.cc OK src/core/lib/surface/call.cc (one of core's heaviest) OK src/core/lib/promise/activity.cc OK src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c OK src/cpp/common/channel_arguments.cc OK src/cpp/client/channel_cc.cc (the C++ API layer) and the SSL layer 4/4 against compat.openssl 3.5.1's headers rather than BoringSSL. gRPC's tree also has no .h.in / config.h.cmake at all, confirming it needs no configure step. compat.re2 is pinned to 2022-04-01 because that IS gRPC 1.83.0's pin (its third_party/re2 submodule is commit 0c5616d == that tag) and gRPC's xds matchers are written against this API — RE2 swapped re2::StringPiece for absl::string_view in its 2023 releases, so a newer one is not a drop-in. Sources follow upstream's RE2_SOURCES: all of re2/*.cc (upstream keeps tests one level down in re2/testing/) plus util/rune.cc and util/strutil.cc named individually, because the other TUs in util/ define main() — a dependency's objects all enter the consumer's link — and util/pcre.cc would drag in libpcre. The `upb` feature needs no new download: upb has lived in protobuf's own tarball since v22. Two things there are not guesswork: * upb/**/*.c CANNOT be globbed. It pulls 14 extra files including TWO ALTERNATIVE BUILDS of the descriptor tables (upb/reflection/stage0/ and upb/reflection/cmake/); compiling more than one is a duplicate-symbol failure. Hence a transcription of libupb_srcs (63 files). * descriptor.upb_minitable.c must be added ON TOP of that list even though it is not in it — upstream's cmake/libupb.cmake adds exactly that file as bootstrap_sources, because the whole reflection layer reaches the descriptor tables through upb/reflection/descriptor_bootstrap.h. Omitting it compiles fine and fails only at link time. include_dirs gains the tarball root and the bootstrap dir. Those are unconditional because `features` can gate sources/defines/deps but NOT include dirs, and the feature's own TUs need them; both are additive rather than shadowing (the root supplies only upb/…, since protobuf's C++ headers live under src/, and the bootstrap dir supplies google/protobuf/descriptor.upb*.h, a different file name from the C++ descriptor.h beside it). Verified cold with the pinned mcpp 2026.8.3.3, gcc@16.1.0, MCPP_INDEX_MIRROR=GLOBAL, MCPP_BUILD_CACHE=local, target/ removed first: abseil test result ok. 1 passed; 0 failed (17.84s) protobuf test result ok. 1 passed; 0 failed (40.88s) protobuf-gzip test result ok. 1 passed; 0 failed (51.99s) protobuf-upb test result ok. 1 passed; 0 failed (70.20s) re2 test result ok. 1 passed; 0 failed ( 2.35s) The first three are regressions: this change touches compat.protobuf's include_dirs, so the existing members had to be re-checked. Object counts verified: re2 links 23 .o (22 sources + the test); protobuf-upb links 296 = 151 abseil + 80 protobuf + 64 upb + 1 test. The upb feature was verified negatively too — reverting the member to a bare `protobuf = "35.1"` drops it to exactly 232 and fails the link with undefined upb_Arena_Init / upb_Decode / upb_DefPool_Free AND google__protobuf__FileDescriptorProto_msg_init, which is precisely the bootstrap descriptor table the second bullet above is about. The upb test drives BOTH runtimes over the same bytes: the C++ runtime builds and serializes a FileDescriptorProto, then upb parses it, loads it into a upb_DefPool and answers reflection queries — and asserts that a name never declared does NOT resolve. CN mirror published and closed-loop checked: mcpp-res/re2@2022-04-01 returns http=200 and is byte-identical to GLOBAL. * fix(re2): define NOMINMAX on windows — <windows.h> ate Regexp::min()/max() CI's windows leg failed with re2/regexp.cc:389: error: too few arguments provided to function-like macro invocation re2/regexp.cc:389: error: reference to non-static member function must be called which is not the usual std::min/std::max collision. RE2's util/mutex.h includes <windows.h>, and its min/max function-like macros then eat RE2's OWN accessors: regexp.cc compares `a->min() == b->min()` and `a->max() == b->max()` on Regexp. Upstream's CMake never spells NOMINMAX out because a CMake consumer normally sets it project-wide; in the index each package carries its own flags. linux re-verified (test result ok); the windows path is only checkable in CI.
1 parent 163bce4 commit 320d024

10 files changed

Lines changed: 557 additions & 3 deletions

File tree

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# 新增 compat.re2 2022-04-01 与 compat.protobuf 的 upb feature(2026-08-04)
2+
3+
[gRPC 收录可行性分析](2026-08-04-grpc-feasibility-analysis.md)**P1 索引侧**,承接
4+
[P0](2026-08-04-add-abseil-and-protobuf-plan.md)。目标是把 gRPC 剩下的索引侧依赖补齐,使后续
5+
`grpc-m` 独立仓只需 vendor gRPC 自己的源码。
6+
7+
产出:
8+
9+
| 变更 | 规模 | 说明 |
10+
|---|---|---|
11+
| `compat.re2@2022-04-01` | 22 TU | 新包,Shape A |
12+
| `compat.protobuf` 新增 `upb` feature | 64 TU | 源码全在已收录的 protobuf tarball 内,无新下载 |
13+
14+
workspace 成员:`tests/examples/re2``tests/examples/protobuf-upb`
15+
16+
## 0. 先做的事:确认 mcpp 真能编 gRPC
17+
18+
在写任何描述符之前先打掉最大的未知数 —— 用 mcpp 的 gcc@16.1.0 直接编 gRPC 1.83.0 的代表性 TU,
19+
只给 include 路径,不打补丁、不跑 configure、不做 codegen:
20+
21+
```
22+
OK src/core/lib/slice/slice.cc
23+
OK src/core/lib/surface/call.cc <- core 里最重的之一
24+
OK src/core/lib/promise/activity.cc
25+
OK src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c
26+
OK src/cpp/common/channel_arguments.cc
27+
OK src/cpp/client/channel_cc.cc <- C++ API 层
28+
```
29+
30+
以及 SSL 层对着 **compat.openssl 3.5.1 的头文件**(不是 boringssl)4/4 通过:
31+
32+
```
33+
OK src/core/tsi/ssl_transport_security.cc
34+
OK src/core/credentials/transport/ssl/ssl_credentials.cc
35+
OK src/core/tsi/ssl/session_cache/ssl_session_openssl.cc
36+
OK src/core/tsi/ssl_telemetry_utils.cc
37+
```
38+
39+
需要的 include 路径只有:仓库根、`include``src/core/ext/upb-gen``src/core/ext/upbdefs-gen`,
40+
外加 abseil / protobuf(含 upb)/ openssl。另核实 gRPC 源码树内**没有任何 `.h.in`
41+
`config.h.cmake`**,确认它不需要 configure 步骤。
42+
43+
结论:整源码直编路线成立,可以继续投入。
44+
45+
## 1. compat.re2 —— 为什么钉在 2022-04-01
46+
47+
`2022-04-01` 是 RE2 的上游 release tag,也是 **gRPC 1.83.0 的 pin**(其 `third_party/re2` submodule
48+
= commit `0c5616d` = 该 tag)。这个 pin 是有意义的:gRPC 的 xds matcher
49+
(`src/core/util/matchers.h``src/core/xds/grpc/xds_route_config*`)是照着这一版 API 写的。
50+
RE2 在 2023 年的版本里把自己的字符串类型从 `re2::StringPiece` 换成了 `absl::string_view`
51+
并引入了 Abseil 依赖,**新版不是 drop-in**。将来若有别的消费者需要新版,可按 `compat.catch2`
52+
的先例在同一描述符里追加版本。
53+
54+
上游该 tag 没有 release asset,用 tag 归档(RE2 无 submodule,自包含),sha256 两次下载一致。
55+
56+
源码清单直接对应上游 `CMakeLists.txt``RE2_SOURCES`:`re2/*.cc` 全部(上游把测试放在
57+
低一级的 `re2/testing/`,glob 够不到)+ `util/rune.cc` + `util/strutil.cc``util/` 逐条列而不通配,
58+
因为该目录另外两个 TU **都带 `main()`**(`util/benchmark.cc``util/test.cc`,连同
59+
`util/fuzz.cc` 与顶层 `testinstall.cc`),依赖的 `.o` 会全量入链,任何一个都会和消费者的
60+
`main()` 撞车;`util/pcre.cc` 还会额外拖进 libpcre。
61+
62+
## 2. upb feature —— 组成必须严格照抄上游 libupb
63+
64+
upb 是 protobuf 自 v22 起吸收进来的小型 C 运行时,**源码就在已收录的 protobuf 35.1 tarball 里**
65+
(根目录 `upb/`),所以不需要新包、不需要新下载。默认关闭:C++ 运行时一点都不用它,而它是 64 个额外
66+
C TU。gRPC 是需要它的那个消费者 —— `src/core/ext/upb-gen/**.c` 就是 upb 代码。
67+
68+
两处**不能想当然**的地方:
69+
70+
1. **不能用 `upb/**/*.c` 通配。** 实测通配会多带 14 个文件,其中包含 **descriptor 表的两份替代构建**
71+
(`upb/reflection/stage0/…``upb/reflection/cmake/…`)以及 `upb/message/promote.c`
72+
`decode_fast/` 的若干变体。同时编进多份 descriptor 变体 = 重复符号链接失败。因此逐条转录
73+
`src/file_lists.cmake``libupb_srcs`(63 条)。
74+
2. **必须额外加上 `upb/reflection/cmake/google/protobuf/descriptor.upb_minitable.c`**,它**不在**
75+
`libupb_srcs` 里。上游 `cmake/libupb.cmake` 正是把这一个文件作为 `bootstrap_sources` 叠加在清单之上,
76+
因为整个 reflection 层经 `upb/reflection/descriptor_bootstrap.h` 都要用 descriptor 表。
77+
漏掉它能编译通过,**只在链接期炸**
78+
79+
`include_dirs` 因此追加了两条(tarball 根、`upb/reflection/cmake`)。它们是**无条件**声明的:
80+
`features` 能门控 sources/defines/deps,**不能门控 include dirs**,而 feature 自己的 TU 需要它们才能编译。
81+
两条都是纯追加、不构成遮蔽 —— 根目录只提供 `upb/…`(protobuf 的 C++ 头在 `src/` 下而非根),
82+
bootstrap 目录提供的是 `google/protobuf/descriptor.upb*.h`,与隔壁 C++ 的 `descriptor.h` 文件名不同。
83+
84+
## 3. 验证结论
85+
86+
全部使用与 CI 一致的配置(mcpp **2026.8.3.3**、gcc@16.1.0、`MCPP_INDEX_MIRROR=GLOBAL`
87+
`MCPP_BUILD_CACHE=local`),每个成员先删 `target/` 冷构建:
88+
89+
```
90+
abseil test result ok. 1 passed; 0 failed (17.84s)
91+
protobuf test result ok. 1 passed; 0 failed (40.88s)
92+
protobuf-gzip test result ok. 1 passed; 0 failed (51.99s)
93+
protobuf-upb test result ok. 1 passed; 0 failed (70.20s)
94+
re2 test result ok. 1 passed; 0 failed ( 2.35s)
95+
```
96+
97+
前三个是**回归**:本次改了 `compat.protobuf``include_dirs`,必须确认既有成员未受影响。
98+
99+
- **目标文件数已核对**:`re2` 23 个(22 源 + 1 测试);`protobuf-upb` 296 个
100+
= 151(abseil)+ 80(protobuf)+ 64(upb)+ 1(测试)。
101+
- **`upb` feature 做了负向验证**:把成员依赖改回裸 `protobuf = "35.1"` 后,目标文件数从 296 落到
102+
**232(正好少 64 个)**,链接给出 `undefined reference to upb_Arena_Init` / `upb_Decode` /
103+
`upb_DefPool_Free`,以及 **`google__protobuf__FileDescriptorProto_msg_init`** —— 最后这一个正好
104+
证明 §2 说的 bootstrap descriptor 表既是必需的、也确实由该 feature 带入。
105+
(注意关键词:这里工具链是 gcc,用 GNU ld,报的是 `undefined reference`;lld 才报 `undefined symbol`。)
106+
- **测试打的是真符号**。re2 侧覆盖 FullMatch/PartialMatch(并断言 FullMatch ****接受尾部残余)、
107+
预编译 RE2 对象取捕获、GlobalReplace、`RE2::Set` 多模式匹配、非法模式必须被拒、UTF-8 按 rune 计数;
108+
upb 侧让**两个运行时对同一段字节交叉验证** —— C++ 运行时构造并序列化 `FileDescriptorProto`,
109+
再由 upb 解析、灌进 `upb_DefPool`、回答反射查询,并断言一个从未声明过的名字**查不到**
110+
- **CN 镜像已闭环**:`mcpp-res/re2@2022-04-01` 返回 `http=200` 且与 GLOBAL **字节一致**
111+
112+
## 4. 下一步(grpc-m)
113+
114+
索引侧到此备齐:`compat.abseil` / `compat.protobuf`(+`upb`)/ `compat.re2` / `compat.openssl`
115+
`grpc-m` 只需 vendor gRPC 自己的源码。已知的两个待办:
116+
117+
- **c-ares 暂不引入。** 上游有官方裁剪开关 `grpc_no_ares=true``GRPC_ARES=0`
118+
(`BUILD:75``bazel/grpc_build_system.bzl:175`),且只有 10 个文件 include `ares.h`,全在
119+
`resolver/dns/c_ares/``event_engine/*ares*`,可 glob 排除。第一版走 gRPC 原生 DNS 解析器,
120+
helloworld 连 `localhost` 用不到异步 DNS。将来以 `ares` feature + `compat.c-ares@1.34.5` 补上
121+
(grpc 已冻好 `third_party/cares/config_{linux,darwin,windows}/ares_config.h`,可作为配置快照)。
122+
- **descriptor 表二选一。** gRPC 自带 `src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c`,
123+
与本 feature 带入的 bootstrap 版本**定义同一批符号**。grpc-m 必须排除其中一份,否则重复符号。

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Two kinds of packages live here:
3939
|------|------|
4040
| Native module library (Form A) | [`mcpplibs.xpkg`](pkgs/x/xpkg.lua) · [`mcpplibs.tinyhttps`](pkgs/t/tinyhttps.lua) · [`tensorvia-cpu`](pkgs/t/tensorvia-cpu.lua) · [`ffmpeg`](pkgs/f/ffmpeg.lua) (module layer; sources compiled directly through `compat.ffmpeg`) · [`opencv`](pkgs/o/opencv.lua) (single repository: the module layer and the full OpenCV 5 source build both live in the package, and only this descriptor stays on the index side) |
4141
| C-source compat (with `features`) | [`compat.cjson`](pkgs/c/compat.cjson.lua) · [`compat.zlib`](pkgs/c/compat.zlib.lua) |
42-
| C++-source compat, one depending on the other | [`compat.abseil`](pkgs/c/compat.abseil.lua) (151 TUs; a wildcard over `absl/**` trimmed by upstream's test/benchmark naming conventions) · [`compat.protobuf`](pkgs/c/compat.protobuf.lua) (the libprotobuf runtime, 79 TUs transcribed from upstream's own `src/file_lists.cmake`; declares `compat.abseil` as a dependency because protobuf's public headers include `absl/…`, and its `gzip` feature defines `HAVE_ZLIB` and pulls `compat.zlib`) |
42+
| C++-source compat, one depending on the other | [`compat.abseil`](pkgs/c/compat.abseil.lua) (151 TUs; a wildcard over `absl/**` trimmed by upstream's test/benchmark naming conventions) · [`compat.protobuf`](pkgs/c/compat.protobuf.lua) (the libprotobuf runtime, 79 TUs transcribed from upstream's own `src/file_lists.cmake`; declares `compat.abseil` as a dependency because protobuf's public headers include `absl/…`, and its `gzip` feature defines `HAVE_ZLIB` and pulls `compat.zlib`, while `upb` adds protobuf's 64-TU C runtime out of the same tarball) · [`compat.re2`](pkgs/c/compat.re2.lua) (22 TUs, upstream's own `RE2_SOURCES`) |
4343
| header-only (with `features`) | [`compat.eigen`](pkgs/c/compat.eigen.lua) |
4444
| Runtime loader compat (pure sources, sidestepping upstream codegen/asm) | [`compat.vulkan`](pkgs/c/compat.vulkan.lua) (the Khronos loader: `loader/generated/` is checked in, and the assembly path degrades to plain C through `UNKNOWN_FUNCTIONS_SUPPORTED`, so no CMake/Python/assembler is needed; windows deferred) · [`compat.vulkan-headers`](pkgs/c/compat.vulkan-headers.lua) |
4545
| Whole-source direct build + generated config (only where a platform lacks one) | [`compat.curl`](pkgs/c/compat.curl.lua) (win32 uses upstream's checked-in config, unix generates one) · [`compat.sdl2`](pkgs/c/compat.sdl2.lua) (win/mac use upstream's checked-in config; linux generates one and enables X11 by hand) |

README.zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ mcpp self config --mirror CN # 切换至国内镜像,默认使用 GLOBAL 上
3636
|------|------|
3737
| 原生模块库(Form A) | [`mcpplibs.xpkg`](pkgs/x/xpkg.lua) · [`mcpplibs.tinyhttps`](pkgs/t/tinyhttps.lua) · [`tensorvia-cpu`](pkgs/t/tensorvia-cpu.lua) · [`ffmpeg`](pkgs/f/ffmpeg.lua)(模块层,源码经 `compat.ffmpeg` 直编) · [`opencv`](pkgs/o/opencv.lua)(单仓库:模块层与 OpenCV 5 全源码构建同在包内,索引侧只留本描述符) |
3838
| C 源码 compat(含 `features`) | [`compat.cjson`](pkgs/c/compat.cjson.lua) · [`compat.zlib`](pkgs/c/compat.zlib.lua) |
39-
| C++ 源码 compat(彼此依赖) | [`compat.abseil`](pkgs/c/compat.abseil.lua)(151 TU;对 `absl/**` 取通配后,按上游自身的 test/benchmark 命名约定裁剪) · [`compat.protobuf`](pkgs/c/compat.protobuf.lua)(libprotobuf 运行时,79 TU 逐条转录自上游 `src/file_lists.cmake`;因 protobuf 公开头文件 include 了 `absl/…`,故显式依赖 `compat.abseil`;`gzip` feature 定义 `HAVE_ZLIB` 并拉入 `compat.zlib`) |
39+
| C++ 源码 compat(彼此依赖) | [`compat.abseil`](pkgs/c/compat.abseil.lua)(151 TU;对 `absl/**` 取通配后,按上游自身的 test/benchmark 命名约定裁剪) · [`compat.protobuf`](pkgs/c/compat.protobuf.lua)(libprotobuf 运行时,79 TU 逐条转录自上游 `src/file_lists.cmake`;因 protobuf 公开头文件 include 了 `absl/…`,故显式依赖 `compat.abseil`;`gzip` feature 定义 `HAVE_ZLIB` 并拉入 `compat.zlib`,`upb` feature 则从同一个 tarball 里再编出 protobuf 的 64 TU C 运行时) · [`compat.re2`](pkgs/c/compat.re2.lua)(22 TU,取自上游自身的 `RE2_SOURCES`) |
4040
| header-only(含 `features`) | [`compat.eigen`](pkgs/c/compat.eigen.lua) |
4141
| 运行时 loader compat(纯源码,绕开上游 codegen/asm) | [`compat.vulkan`](pkgs/c/compat.vulkan.lua)(Khronos loader:`loader/generated/` 已签入,汇编路径经 `UNKNOWN_FUNCTIONS_SUPPORTED` 降级为纯 C,故无需 CMake/Python/汇编器;windows 延后)· [`compat.vulkan-headers`](pkgs/c/compat.vulkan-headers.lua) |
4242
| 全源码直编 + 生成 config(仅缺口平台) | [`compat.curl`](pkgs/c/compat.curl.lua)(win32 用上游签入 config,unix 生成) · [`compat.sdl2`](pkgs/c/compat.sdl2.lua)(win/mac 用上游签入 config,linux 生成 + 手工开 X11) |

mcpp.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ members = [
4343
"tests/examples/openblas",
4444
"tests/examples/openssl",
4545
"tests/examples/protobuf",
46+
"tests/examples/protobuf-upb",
4647
"tests/examples/protobuf-gzip",
4748
"tests/examples/opencv-module",
4849
"tests/examples/opencv-module-dnn",
4950
"tests/examples/opencv-module-unifont",
51+
"tests/examples/re2",
5052
"tests/examples/sdl2",
5153
"tests/examples/spdlog",
5254
"tests/examples/freetype",

pkgs/c/compat.protobuf.lua

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,20 @@ package = {
7676
-- `*/src` carries the public <google/protobuf/…> headers;
7777
-- `*/third_party/utf8_range` carries utf8_range.h + utf8_validity.h,
7878
-- which protobuf's own TUs include unqualified.
79-
include_dirs = { "*/src", "*/third_party/utf8_range" },
79+
--
80+
-- The last two exist for the `upb` feature but are declared
81+
-- unconditionally: `features` can gate sources/defines/deps, not
82+
-- include dirs, and the feature's own TUs need them to compile. Both
83+
-- are additive rather than shadowing — the tarball root supplies only
84+
-- `upb/…` (protobuf's C++ headers live under src/, not at the root),
85+
-- and the bootstrap dir supplies `google/protobuf/descriptor.upb*.h`,
86+
-- a different file name from the C++ `descriptor.h` next door.
87+
include_dirs = {
88+
"*/src",
89+
"*/third_party/utf8_range",
90+
"*", -- upb/… headers
91+
"*/upb/reflection/cmake", -- google/protobuf/descriptor.upb*.h
92+
},
8093

8194
-- Transcribed from upstream's own authoritative list — the
8295
-- `libprotobuf_srcs` set in src/file_lists.cmake, which upstream
@@ -199,6 +212,98 @@ package = {
199212
defines = { "HAVE_ZLIB=1" },
200213
deps = { ["compat.zlib"] = "1.3.2" },
201214
},
215+
216+
-- upb — protobuf's small C runtime, vendored in the SAME tarball
217+
-- (upb/ at the root) since protobuf v22 absorbed it. Off by
218+
-- default: nothing in the C++ runtime uses it, and it is 64 extra
219+
-- C TUs. gRPC is the consumer that needs it — its generated
220+
-- src/core/ext/upb-gen/**.c is upb code and links against this
221+
-- runtime.
222+
--
223+
-- The list is transcribed from upstream's `libupb_srcs`
224+
-- (src/file_lists.cmake) rather than globbed, and that is not
225+
-- fussiness: `upb/**/*.c` would pull in 14 more files, among them
226+
-- TWO ALTERNATIVE BUILDS of the descriptor tables
227+
-- (upb/reflection/stage0/… and upb/reflection/cmake/…) plus
228+
-- upb/message/promote.c and the decode_fast/ variants. Compiling
229+
-- more than one descriptor variant is a duplicate-symbol link
230+
-- failure.
231+
--
232+
-- descriptor.upb_minitable.c IS included even though it is not in
233+
-- libupb_srcs: upstream's cmake/libupb.cmake adds exactly this
234+
-- file as `bootstrap_sources` on top of the list, because
235+
-- upb/reflection/descriptor_bootstrap.h — reached by the whole
236+
-- reflection layer — needs the descriptor tables. Without it the
237+
-- feature builds and only fails at link time.
238+
["upb"] = {
239+
sources = {
240+
"*/upb/base/status.c",
241+
"*/upb/hash/common.c",
242+
"*/upb/json/decode.c",
243+
"*/upb/json/encode.c",
244+
"*/upb/lex/atoi.c",
245+
"*/upb/lex/round_trip.c",
246+
"*/upb/lex/strtod.c",
247+
"*/upb/lex/unicode.c",
248+
"*/upb/mem/alloc.c",
249+
"*/upb/mem/arena.c",
250+
"*/upb/message/accessors.c",
251+
"*/upb/message/array.c",
252+
"*/upb/message/compare.c",
253+
"*/upb/message/compat.c",
254+
"*/upb/message/copy.c",
255+
"*/upb/message/internal/compare_unknown.c",
256+
"*/upb/message/internal/extension.c",
257+
"*/upb/message/internal/iterator.c",
258+
"*/upb/message/internal/message.c",
259+
"*/upb/message/map.c",
260+
"*/upb/message/map_sorter.c",
261+
"*/upb/message/merge.c",
262+
"*/upb/message/message.c",
263+
"*/upb/mini_descriptor/build_enum.c",
264+
"*/upb/mini_descriptor/decode.c",
265+
"*/upb/mini_descriptor/internal/base92.c",
266+
"*/upb/mini_descriptor/internal/encode.c",
267+
"*/upb/mini_descriptor/link.c",
268+
"*/upb/mini_table/compat.c",
269+
"*/upb/mini_table/debug_string.c",
270+
"*/upb/mini_table/extension_registry.c",
271+
"*/upb/mini_table/generated_registry.c",
272+
"*/upb/mini_table/internal/message.c",
273+
"*/upb/mini_table/message.c",
274+
"*/upb/reflection/def_pool.c",
275+
"*/upb/reflection/def_type.c",
276+
"*/upb/reflection/desc_state.c",
277+
"*/upb/reflection/enum_def.c",
278+
"*/upb/reflection/enum_reserved_range.c",
279+
"*/upb/reflection/enum_value_def.c",
280+
"*/upb/reflection/extension_range.c",
281+
"*/upb/reflection/field_def.c",
282+
"*/upb/reflection/file_def.c",
283+
"*/upb/reflection/internal/def_builder.c",
284+
"*/upb/reflection/internal/strdup2.c",
285+
"*/upb/reflection/message.c",
286+
"*/upb/reflection/message_def.c",
287+
"*/upb/reflection/message_reserved_range.c",
288+
"*/upb/reflection/method_def.c",
289+
"*/upb/reflection/oneof_def.c",
290+
"*/upb/reflection/service_def.c",
291+
"*/upb/text/debug_string.c",
292+
"*/upb/text/encode.c",
293+
"*/upb/text/internal/encode.c",
294+
"*/upb/util/def_to_proto.c",
295+
"*/upb/util/required_fields.c",
296+
"*/upb/wire/byte_size.c",
297+
"*/upb/wire/decode.c",
298+
"*/upb/wire/decode_fast/select.c",
299+
"*/upb/wire/encode.c",
300+
"*/upb/wire/eps_copy_input_stream.c",
301+
"*/upb/wire/internal/decoder.c",
302+
"*/upb/wire/reader.c",
303+
-- upstream's bootstrap_sources (cmake/libupb.cmake)
304+
"*/upb/reflection/cmake/google/protobuf/descriptor.upb_minitable.c",
305+
},
306+
},
202307
},
203308

204309
linux = {

0 commit comments

Comments
 (0)