8 个版本
使用旧的 Rust 2015
0.0.8 | 2024年1月15日 |
---|---|
0.0.7 | 2024年1月5日 |
0.0.6 | 2023年4月3日 |
0.0.4 | 2023年3月31日 |
在 开发工具 中排名第 920
每月下载量 52 次
29KB
527 行代码(不含注释)
crit: Rust 跨平台编译器
.__ __
___________|__|/ |_
_/ ___\_ __ \ \ __\
\ \___| | \/ || |
\___ >__| |__||__|
\/
概要
crit
编译适用于许多不同目标平台的 Rust 应用程序。这项工作基于传统的 Rust 工具,包括 cross
、cargo
和惊人的 rustc
编译器。
示例
$ cd example
$ crit
$ ls .crit/bin
aarch64-apple-darwin
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
...
默认情况下,crit 以发布模式编译(-- -r
)。
有关更多选项,请参阅 crit -h
。
CRATE
API 文档
https://docs.rs/crit/latest/crit/
下载
https://github.com/mcandre/crit/releases
从源代码安装
$ cargo install --force --path .
许可协议
BSD-2-Clause 许可协议
运行时要求
推荐
- 能够运行 musl/Linux 容器的宿主机(例如 GNU/Linux、musl/Linux、macOS 或 Windows 宿主机)
- Docker First Aid Kit
- 设置环境变量
DOCKER_DEFAULT_PLATFORM
=linux/amd64
- ASDF 0.10(在安装每个 Rust 应用程序二进制文件后运行
asdf reshim
) - cargo-cache
- direnv 2
- POSIX 兼容的 tar
- tinyrick 0.0.9
- tree
- GNU 兼容的 time
- Amphetamine(macOS),The Caffeine(Windows),Caffeine(Linux)可以在任何长时间构建过程中防止休眠
- UNIX 环境,例如 macOS、Linux、BSD、WSL 等。
tar 是一种便携式归档工具,适用于创建 *.tgz
归档文件。用户可以下载这些归档文件并提取与其平台相关的可执行文件。归档文件特别适合用于Docker容器中,因为tar命令比unzip更容易安装。
请注意,非UNIX文件系统在端口生成过程中可能无法保留关键的chmod acl位。这可能会损坏下游的工件,例如压缩归档和安装过程。
贡献
有关开发crit的更多详细信息,请参阅DEVELOPMENT.md。
常见问题解答
帮助,某些目标损坏了?
请确保您的项目能够使用传统的 cross
或 cargo
命令针对单个目标进行构建。无法针对单个目标编译的项目,在尝试为多个目标进行交叉编译时自然会遇到困难。
请注意,Rust不断引入新的、不受支持的的目标。我们尽力跟上,但有时会错过一些。无论如何,您可以通过编写自定义模式来声明禁用的目标,用于 -
/ --exclude-targets
标志。
某些目标可能缺乏对Rust std
库的原始支持。这对于裸金属或嵌入式目标很常见。对于这类目标,您有几种解决策略
- 提供
std
实现。联系有关目标的专业人士。 - 避免在您的代码以及依赖关系树中使用
std
库。这对于许多Rust项目来说实际上是一种常见的做法,作为对嵌入式开发支持的积极立场。 - 禁用不需要的目标。
帮助,交叉编译看起来冻结了?
crit隐藏了大量的编译器噪音。当目标正在构建时,您可以使用常见的Docker命令来检查编译过程
docker ps-a
docker logs[--follow] <container id>
帮助,交叉编译很慢?
是的,确实很慢!几乎和用虚拟机进行交叉编译一样慢。
Rustaceans期待Rust编译器是分析性的,花费更多的时间优化程序,以便最终的可执行文件运行更安全、更快。Rust编译器通常需要很长时间来编译每个目标。
自然地,当交叉编译多个目标时,时间会随着目标数量的增加而增加。
一些交叉编译性能提示
- 调整您的Docker设置(见上面的Docker急救包)
- 重置常见的Cargo构建配置文件选项(例如,
codegen-units
、lto
、strip
等。) - 使用调试模式(例如,
--
) - 使用更少的依赖项
- 按照 UNIX哲学 进行设计,即“每个程序只做一件事”。不要做一百件事都很差。
- 保持主机唤醒状态(见Amphetamine / The Caffeine / Caffeine以上)
- 将交叉编译作为发布时的步骤,与更快速的开发任务区分开来
- 在具有更多CPU、磁盘和RAM资源的CI/CD管道中进行交叉编译
- 排除更多目标(例如,
-<target pattern>
)
致谢
- cross 基础交叉编译系统
- cross-toolchains 提供交叉Docker镜像
- cubejs/rust-cross 额外交叉目标的Docker镜像
- factorio 基于标准 Go 工具链生成 Go 应用程序端口
- tug 自动化多平台 Docker 镜像构建
- WASM 为 C/C++ 代码提供可移植的接口。
- xgo 支持具有原生 cgo 依赖的 Go 项目。
依赖项
~2.9–4MB
~68K SLoC