开源地址:https://github.com/TraceMachina/rules_mojo
Mojo 的密封、可复制的 Bazel/Nix 规则🔥
将 Mojo 引入所有 Linux 发行版。
nix run github:TraceMachina/rules_mojo#mojo
✨特点:
- Mojo 被包裹在Nix中。无需隐式
apt
安装,无需使用 Ubuntu。您可以rules_mojo
在任何x86_64-linux
安装了 Nix 的系统上使用。
- Bazel是 Mojo 的规则。这意味着它
rules_mojo
为您提供增量构建。在rules_mojo
自己的 CI 中,这可将构建时间和 CPU 周期减少高达 95%。
- 与NativeLink和 本地远程执行 (LRE)集成 ,让您可以在任意可扩展的 Kubernetes 集群中执行构建。无论您想在 1000 个核心上构建,还是在世界各地的边缘网络上运行可执行文件,NativeLink+LRE 基础架构都能为您提供支持。
- 捆绑的 Clang/LLVM C++ 工具链,带有mold 链接器和uutils ( coreutils 的 Rust 重写)。此工具链将 Mojo 可执行文件的链接速度比标准 C++ 工具链快两个数量级。
- 漂亮的编译器崩溃堆栈跟踪,由
llvm-symbolizer
上游 LLVM 源构建提供支持。
🔮即将推出™:
- Mac 支持。
- GPU 支持。
- Python 互操作性。
🔪粗糙的边缘:
- Mojo 是实验性的,
rules_mojo
甚至更具实验性。一些功能(例如 linting 和 Python 互操作性)尚未实现。此外,LRE 框架仍在积极开发中(事实上, rules_mojo
它是 LRE 的验证案例),因此预计会有更大规模的重构。
- 目前无法选择 Mojo 版本。
rules_mojo
使用固定的nightly
工具链,该工具链恰好不会因为稳定版崩溃而崩溃。
- 工具链将所有可执行文件链接到 的动态库。这会带来较新和 版本
nixpkgs
的潜在性能改进,但会使可执行文件与没有这些库的系统不兼容。您可以尝试使用patchelf重写s ,但您可能会在非前沿系统上遇到 版本不兼容问题。glibc``libstdc++``RPATH
glibc
- 动态加载器
ld-linux-x86_64.so.2
未设置为 Nix 变体。这样,您可以rules_mojo
在 nix 环境之外运行构建的可执行文件。但是,在较旧的系统上,动态加载器和基于 nix 的加载器之间的版本不匹配glibc
可能会导致问题。如有疑问,请使用ldd <path/to/executable>
来仔细检查动态依赖项解析。
🦋已知错误:
- 虽然您可以远程构建测试,但您需要在本地运行它们。
- 所有 mojo 调用都会打印
crashdb
警告,因为不清楚如何配置crashdb
输出位置以指向 nix 存储之外。