Skip to content

Commit 693c4ed

Browse files
committed
openkal-llvm-runtime 0.1.0:C++ 运行时在 openkal 之上
libc++、libc++abi、libunwind,为 openkal-musl 配置,而不是为某个宿主 C 库。 一份 C++ 标准库不像程序那样可移植:它是为某一个 C 库配置、并对着那个库的头 编译的,而「能找到头」和「为这个目标配置过」不是一回事。 vendored 的是四个 runtimes 子树,revision 与工具链自身构建所用的一致; 编译器和链接器不 vendored、不改 —— 它们按三元组生成代码,而 openkal 不改变 任何架构或目标格式。 配置只决定两位: _LIBCPP_HAS_MUSL_LIBC 1 底下的 C 库是 musl 的 _LIBCPP_HAS_RANDOM_DEVICE 0 openkal 没有熵源 第一位是实测出来的:置 0(工具链自带的值)时,一个 include <vector> 的翻译 单元报 20 个错,头一个点名原因「unknown rune table for this platform」;置 1 则一个不报。 判据:examples/cxx 五项断言,其中两项是这个包的全部理由 —— 异常跨三层栈帧 抛出并接住,以及栈展开时析构函数运行。其余的,一个链接进去但从没工作过的 运行时同样满足。examples/import-std 断言另一半:import std 本身。 ⚠️ 这不是预防性措辞。写这个包的过程中,示例打印完第一行就 libc++abi: terminating due to uncaught exception 而 _Unwind_Backtrace 走 0 帧,同时编译、链接、以及所有不抛的路径全绿。 真因在两层之下:openkal-musl 替换掉的 __libc_start_main 不读辅助向量,于是 dl_iterate_phdr 报了一个「没有程序头」的对象,unwinder 在那里找 PT_GNU_EH_FRAME,断定这个程序没有帧描述,而不是断定它没被告知。 一个只被构建过的包会把那个发出去。
0 parents  commit 693c4ed

13,964 files changed

Lines changed: 1887650 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: CI
2+
3+
# What this workflow asserts.
4+
#
5+
# A C++ standard library is not portable in the sense a program is: it is
6+
# configured for one C library and compiled against that library's headers. The
7+
# claim here is therefore not "it builds" but "a program above it does the
8+
# things a C++ program does", and the one that settles it is an exception thrown
9+
# across frames and caught --- because that is the path a build proves nothing
10+
# about. Everything else this package could check, a runtime that was linked but
11+
# never worked would also satisfy.
12+
13+
on:
14+
push:
15+
branches: [main]
16+
pull_request:
17+
workflow_dispatch:
18+
19+
env:
20+
MCPP_VERSION: 2026.8.19.4
21+
XLINGS_VERSION: v2026.8.17.2
22+
XLINGS_NON_INTERACTIVE: '1'
23+
24+
jobs:
25+
runtime:
26+
name: build the runtime and run what stands above it (${{ matrix.toolchain }})
27+
runs-on: ubuntu-24.04
28+
timeout-minutes: 60
29+
strategy:
30+
fail-fast: false
31+
matrix:
32+
toolchain: ['llvm@22.1.8']
33+
defaults:
34+
run:
35+
shell: bash
36+
steps:
37+
- uses: actions/checkout@v4
38+
39+
- name: Install xlings and mcpp
40+
run: |
41+
curl -fsSL https://raw.githubusercontent.com/openxlings/xlings/main/tools/other/quick_install.sh \
42+
| bash -s "$XLINGS_VERSION"
43+
echo "$HOME/.xlings/subos/current/bin" >> "$GITHUB_PATH"
44+
45+
- name: Install mcpp
46+
run: |
47+
for attempt in 1 2 3 4 5 6; do
48+
xlings update > /dev/null 2>&1 || true
49+
if xlings install "mcpp@$MCPP_VERSION" -y -g; then break; fi
50+
if [ "$attempt" = 6 ]; then
51+
echo "::error::mcpp@$MCPP_VERSION never appeared in the index"; exit 1
52+
fi
53+
sleep 60
54+
done
55+
mcpp --version
56+
mcpp self config --mirror GLOBAL
57+
58+
- name: Select the toolchain
59+
run: |
60+
spec='${{ matrix.toolchain }}'
61+
mcpp toolchain install "${spec%@*}" "${spec#*@}"
62+
mcpp toolchain default "$spec"
63+
64+
- name: The runtime builds
65+
run: mcpp build
66+
67+
# ⚠️ THE ONE OBSERVATION A BUILD CANNOT MAKE.
68+
#
69+
# An unwinder that cannot find the program's frame descriptions compiles,
70+
# links, and runs every path that does not throw. Measured while this
71+
# package was written: the whole example above printed its first line and
72+
# then `libc++abi: terminating due to uncaught exception', with
73+
# _Unwind_Backtrace walking zero frames --- and nothing named the cause.
74+
# So the throw is the check, and the destructor beside it is what says the
75+
# unwind was correct rather than merely non-fatal.
76+
- name: A C++ program above it throws across frames and catches
77+
run: |
78+
cd examples/cxx && mcpp run 2>&1 | tee out.log
79+
grep -q -- '-- failures: 0 --' out.log
80+
81+
- name: import std above it
82+
run: |
83+
cd examples/import-std && mcpp run 2>&1 | tee out.log
84+
grep -q 'import std above openkal: 2 4 7' out.log

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
target/
2+
compile_commands.json
3+
mcpp.lock
4+
.cache/

.mailmap

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# This file allows mapping several author and committer email addresses and
2+
# names to a single canonical one for `git shortlog`, `git log --author`,
3+
# or `git check-mailmap`.
4+
#
5+
# For example, if you commit as `random.person@example.com` but sometimes use
6+
# "Rañdom Person" and sometimes "Random Person" as name and you want the former
7+
# to be your canonical name, add
8+
#
9+
# Rañdom Person <random.person@example.com>
10+
#
11+
# If you commit as both `random.person@example.com` and `ranp@example.com` and
12+
# you want the former to be your canonical email address, add
13+
#
14+
# <random.person@example.com> <ranp@example.com>
15+
#
16+
# Combinations of both are possible too, see
17+
# https://git-scm.com/docs/gitmailmap for format details.
18+
#
19+
# You can commit changes for your own names and email addresses without review.
20+
# If you want to add entries for other people, please have them review the
21+
# addition.
22+
#
23+
# Please keep this file sorted.
24+
25+
<compnerd@compnerd.org> <abdulras@fb.com>
26+
<compnerd@compnerd.org> <abdulras@google.com>
27+
<compnerd@compnerd.org> <abdulras@thebrowser.company>
28+
<git@xen0n.name> <xen0n@gentoo.org>
29+
<hans@hanshq.net> <hans@chromium.org>
30+
<i@maskray.me> <maskray@google.com>
31+
<JCTremoulet@gmail.com> <jotrem@microsoft.com>
32+
Min Hsu <min.hsu@sifive.com> <min@myhsu.dev>
33+
Min Hsu <min.hsu@sifive.com> <minyihh@uci.edu>
34+
<qcf@ecnelises.com> <qiucofan@cn.ibm.com> <qiucf@cn.ibm.com>
35+
<rnk@google.com> <reid@kleckner.net>
36+
<thakis@chromium.org> <nicolasweber@gmx.de>
37+
Jianjian GUAN <jacquesguan@me.com>
38+
Jianjian GUAN <jacquesguan@me.com> <Jianjian.Guan@streamcomputing.com>
39+
Jon Roelofs <jonathan_roelofs@apple.com> <jonathan@codesourcery.com>
40+
Jon Roelofs <jonathan_roelofs@apple.com> <jroelofs@jroelofs.com>
41+
Jonathan Thackray <jonathan.thackray@arm.com> <jthackray@users.noreply.github.com>
42+
klensy <nightouser@gmail.com>
43+
klensy <nightouser@gmail.com> <klensy@users.noreply.github.com>
44+
LLVM GN Syncbot <llvmgnsyncbot@gmail.com>
45+
Martin Storsjö <martin@martin.st>
46+
Med Ismail Bennani <ismail@bennani.ma> <m.i.b@apple.com>
47+
Med Ismail Bennani <ismail@bennani.ma> <medismail.bennani@gmail.com>
48+
Ramkumar Ramachandra <r@artagnon.com> <artagnon@gmail.com>
49+
Ramkumar Ramachandra <r@artagnon.com> <Ramkumar.Ramachandra@imgtec.com>
50+
Saleem Abdulrasool <compnerd@compnerd.org>
51+
Tommy Chiang <ty1208chiang@gmail.com> <oToToT@users.noreply.github.com>
52+
Pengcheng Wang <wangpengcheng.pp@bytedance.com>
53+
Pengcheng Wang <wangpengcheng.pp@bytedance.com> <137158460+wangpc-pp@users.noreply.github.com>
54+
Pengcheng Wang <wangpengcheng.pp@bytedance.com> <pc.wang@linux.alibaba.com>

LICENSE

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
Copyright (c) 2026-present mcpp community, speakshen@163.com
2+
3+
---
4+
5+
Apache License
6+
Version 2.0, January 2004
7+
http://www.apache.org/licenses/
8+
9+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
10+
11+
1. Definitions.
12+
13+
"License" shall mean the terms and conditions for use, reproduction,
14+
and distribution as defined by Sections 1 through 9 of this document.
15+
16+
"Licensor" shall mean the copyright owner or entity authorized by
17+
the copyright owner that is granting the License.
18+
19+
"Legal Entity" shall mean the union of the acting entity and all
20+
other entities that control, are controlled by, or are under common
21+
control with that entity. For the purposes of this definition,
22+
"control" means (i) the power, direct or indirect, to cause the
23+
direction or management of such entity, whether by contract or
24+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
25+
outstanding shares, or (iii) beneficial ownership of such entity.
26+
27+
"You" (or "Your") shall mean an individual or Legal Entity
28+
exercising permissions granted by this License.
29+
30+
"Source" form shall mean the preferred form for making modifications,
31+
including but not limited to software source code, documentation
32+
source, and configuration files.
33+
34+
"Object" form shall mean any form resulting from mechanical
35+
transformation or translation of a Source form, including but
36+
not limited to compiled object code, generated documentation,
37+
and conversions to other media types.
38+
39+
"Work" shall mean the work of authorship, whether in Source or
40+
Object form, made available under the License, as indicated by a
41+
copyright notice that is included in or attached to the work
42+
(an example is provided in the Appendix below).
43+
44+
"Derivative Works" shall mean any work, whether in Source or Object
45+
form, that is based on (or derived from) the Work and for which the
46+
editorial revisions, annotations, elaborations, or other modifications
47+
represent, as a whole, an original work of authorship. For the purposes
48+
of this License, Derivative Works shall not include works that remain
49+
separable from, or merely link (or bind by name) to the interfaces of,
50+
the Work and Derivative Works thereof.
51+
52+
"Contribution" shall mean any work of authorship, including
53+
the original version of the Work and any modifications or additions
54+
to that Work or Derivative Works thereof, that is intentionally
55+
submitted to Licensor for inclusion in the Work by the copyright owner
56+
or by an individual or Legal Entity authorized to submit on behalf of
57+
the copyright owner. For the purposes of this definition, "submitted"
58+
means any form of electronic, verbal, or written communication sent
59+
to the Licensor or its representatives, including but not limited to
60+
communication on electronic mailing lists, source code control systems,
61+
and issue tracking systems that are managed by, or on behalf of, the
62+
Licensor for the purpose of discussing and improving the Work, but
63+
excluding communication that is conspicuously marked or otherwise
64+
designated in writing by the copyright owner as "Not a Contribution."
65+
66+
"Contributor" shall mean Licensor and any individual or Legal Entity
67+
on behalf of whom a Contribution has been received by Licensor and
68+
subsequently incorporated within the Work.
69+
70+
2. Grant of Copyright License. Subject to the terms and conditions of
71+
this License, each Contributor hereby grants to You a perpetual,
72+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
73+
copyright license to reproduce, prepare Derivative Works of,
74+
publicly display, publicly perform, sublicense, and distribute the
75+
Work and such Derivative Works in Source or Object form.
76+
77+
3. Grant of Patent License. Subject to the terms and conditions of
78+
this License, each Contributor hereby grants to You a perpetual,
79+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
80+
(except as stated in this section) patent license to make, have made,
81+
use, offer to sell, sell, import, and otherwise transfer the Work,
82+
where such license applies only to those patent claims licensable
83+
by such Contributor that are necessarily infringed by their
84+
Contribution(s) alone or by combination of their Contribution(s)
85+
with the Work to which such Contribution(s) was submitted. If You
86+
institute patent litigation against any entity (including a
87+
cross-claim or counterclaim in a lawsuit) alleging that the Work
88+
or a Contribution incorporated within the Work constitutes direct
89+
or contributory patent infringement, then any patent licenses
90+
granted to You under this License for that Work shall terminate
91+
as of the date such litigation is filed.
92+
93+
4. Redistribution. You may reproduce and distribute copies of the
94+
Work or Derivative Works thereof in any medium, with or without
95+
modifications, and in Source or Object form, provided that You
96+
meet the following conditions:
97+
98+
(a) You must give any other recipients of the Work or
99+
Derivative Works a copy of this License; and
100+
101+
(b) You must cause any modified files to carry prominent notices
102+
stating that You changed the files; and
103+
104+
(c) You must retain, in the Source form of any Derivative Works
105+
that You distribute, all copyright, patent, trademark, and
106+
attribution notices from the Source form of the Work,
107+
excluding those notices that do not pertain to any part of
108+
the Derivative Works; and
109+
110+
(d) If the Work includes a "NOTICE" text file as part of its
111+
distribution, then any Derivative Works that You distribute must
112+
include a readable copy of the attribution notices contained
113+
within such NOTICE file, excluding those notices that do not
114+
pertain to any part of the Derivative Works, in at least one
115+
of the following places: within a NOTICE text file distributed
116+
as part of the Derivative Works; within the Source form or
117+
documentation, if provided along with the Derivative Works; or,
118+
within a display generated by the Derivative Works, if and
119+
wherever such third-party notices normally appear. The contents
120+
of the NOTICE file are for informational purposes only and
121+
do not modify the License. You may add Your own attribution
122+
notices within Derivative Works that You distribute, alongside
123+
or as an addendum to the NOTICE text from the Work, provided
124+
that such additional attribution notices cannot be construed
125+
as modifying the License.
126+
127+
You may add Your own copyright statement to Your modifications and
128+
may provide additional or different license terms and conditions
129+
for use, reproduction, or distribution of Your modifications, or
130+
for any such Derivative Works as a whole, provided Your use,
131+
reproduction, and distribution of the Work otherwise complies with
132+
the conditions stated in this License.
133+
134+
5. Submission of Contributions. Unless You explicitly state otherwise,
135+
any Contribution intentionally submitted for inclusion in the Work
136+
by You to the Licensor shall be under the terms and conditions of
137+
this License, without any additional terms or conditions.
138+
Notwithstanding the above, nothing herein shall supersede or modify
139+
the terms of any separate license agreement you may have executed
140+
with Licensor regarding such Contributions.
141+
142+
6. Trademarks. This License does not grant permission to use the trade
143+
names, trademarks, service marks, or product names of the Licensor,
144+
except as required for reasonable and customary use in describing the
145+
origin of the Work and reproducing the content of the NOTICE file.
146+
147+
7. Disclaimer of Warranty. Unless required by applicable law or
148+
agreed to in writing, Licensor provides the Work (and each
149+
Contributor provides its Contributions) on an "AS IS" BASIS,
150+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
151+
implied, including, without limitation, any warranties or conditions
152+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
153+
PARTICULAR PURPOSE. You are solely responsible for determining the
154+
appropriateness of using or redistributing the Work and assume any
155+
risks associated with Your exercise of permissions under this License.
156+
157+
8. Limitation of Liability. In no event and under no legal theory,
158+
whether in tort (including negligence), contract, or otherwise,
159+
unless required by applicable law (such as deliberate and grossly
160+
negligent acts) or agreed to in writing, shall any Contributor be
161+
liable to You for damages, including any direct, indirect, special,
162+
incidental, or consequential damages of any character arising as a
163+
result of this License or out of the use or inability to use the
164+
Work (including but not limited to damages for loss of goodwill,
165+
work stoppage, computer failure or malfunction, or any and all
166+
other commercial damages or losses), even if such Contributor
167+
has been advised of the possibility of such damages.
168+
169+
9. Accepting Warranty or Additional Liability. While redistributing
170+
the Work or Derivative Works thereof, You may choose to offer,
171+
and charge a fee for, acceptance of support, warranty, indemnity,
172+
or other liability obligations and/or rights consistent with this
173+
License. However, in accepting such obligations, You may act only
174+
on Your own behalf and on Your sole responsibility, not on behalf
175+
of any other Contributor, and only if You agree to indemnify,
176+
defend, and hold each Contributor harmless for any liability
177+
incurred by, or claims asserted against, such Contributor by reason
178+
of your accepting any such warranty or additional liability.
179+
180+
END OF TERMS AND CONDITIONS
181+
182+
APPENDIX: How to apply the Apache License to your work.
183+
184+
To apply the Apache License to your work, attach the following
185+
boilerplate notice, with the fields enclosed by brackets "[]"
186+
replaced with your own identifying information. (Don't include
187+
the brackets!) The text should be enclosed in the appropriate
188+
comment syntax for the file format. We also recommend that a
189+
file or class name and description of purpose be included on the
190+
same "printed page" as the copyright notice for easier
191+
identification within third-party archives.
192+
193+
Copyright [yyyy] [name of copyright owner]
194+
195+
Licensed under the Apache License, Version 2.0 (the "License");
196+
you may not use this file except in compliance with the License.
197+
You may obtain a copy of the License at
198+
199+
http://www.apache.org/licenses/LICENSE-2.0
200+
201+
Unless required by applicable law or agreed to in writing, software
202+
distributed under the License is distributed on an "AS IS" BASIS,
203+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
204+
See the License for the specific language governing permissions and
205+
limitations under the License.

0 commit comments

Comments
 (0)