13 个版本
0.8.1 | 2022 年 1 月 24 日 |
---|---|
0.8.0 | 2020 年 11 月 25 日 |
0.7.3 | 2020 年 8 月 15 日 |
0.6.2 | 2019 年 10 月 15 日 |
0.4.1 |
|
#594 在 Cargo 插件
每月 82 次下载
34KB
564 行
Cargo-sysroot
一个简单的工具,用于编译您的 no_std 应用程序的 sysroot 库,同时使用标准 cargo 工具。
这不是像 cargo xbuild
或 xargo
这样的包装器,这是一个独立工具,您只需在之前调用一次。它具有与标准工具(如 Rust Analyzer、clippy 或简单的 cargo check
)一起工作的优点。它通过为您生成一个 .cargo/config
来实现这一点。
先决条件
- 最新的夜间编译器。
- 必须为活动工具链安装
rust-src
组件。 - 您的
Cargo.toml
文件 必须 包含package.metadata.cargo-sysroot.target
,其中target
是一个目标规范 JSON 文件。- 内置目标也可以使用!
- 或者,在命令行上传递
--target
,例如cargo sysroot --target path/to/target.json
示例 Cargo.toml
[package]
name = "My Project"
version = "0.1.0"
authors = ["Me <[email protected]>"]
[package.metadata.cargo-sysroot]
target = "my_custom_target.json" # This is relative to Cargo.toml
入门
- 运行
cargo install cargo-sysroot
。 - 在您的项目的当前工作目录中运行
cargo sysroot
。
本工具将为您生成一个类似下面的 .cargo/config.toml
文件。您可以通过命令行选项 --no-config
来禁用此功能。
[build]
target = <package.metadata.cargo-sysroot.target>
rustflags = [
"--sysroot",
"<project root>/target/sysroot",
]
sysroot 将位于 target/sysroot
,而构建它的目标目录为 target/sysroot/target
。
由于 Rust sysroot 的工作方式,您可以通过简单地传递不同的 --target
到 cargo,在无需重新构建的情况下同时使用多个不同的目标规格。
请注意,此工具目前非常简单,所以如果该文件已存在,它不会尝试做任何事情。在这种情况下,您将需要手动编辑它。
这将允许 Cargo 使用常规命令,如 cargo build
,正确地构建您的项目。
您可能希望修改此文件以利用 target.$triple.runner
键。有关详细信息,请参阅 Cargo 文档。请注意,作者遇到了 $triple
变体不起作用的问题,您可能在使用 cfg
变体时获得更好的成功。
如果您更新了 Rust 夜间版本,您将需要再次运行 cargo-sysroot
,这将导致 cargo 检测到更新并重新构建 sysroot 和您的项目。
建议
如果您有比 target.$triple.runner
更复杂的需求,后者不支持复杂的命令行修改。
作者建议使用他们自己的 cargo-runner
来解决这个问题,它允许在 Cargo.toml
中指定命令行,并从 Cargo 应用路径后缀。
其他选择包括 cargo-make,您可以将其设置为运行您想要的任何内容,而不是使用 cargo run
。
使用我的其他 crate,cargo-image
来构建适合在 QEMU 中运行的形象。
详细信息
sysroot crate 使用 --release
开关进行编译。使用 mem
和 rustc-dep-of-std
功能构建 compiler_builtins
,提供 memcpy
和相关功能。
sysroot crate 将共享您 crate 指定的任何配置文件信息。例如,如果您为 release
启用了调试,sysroot crate 也将具有此功能。这符合 cargo-xbuild
的行为,并且某些 crate,例如 bootloader
,需要此功能才能正常工作。
您可以通过 --rust-src-dir
标志传递自定义 rust 源代码。
TODO
- 允许禁用
mem
功能?
常见问题解答
- 问:为什么您要写这个而不是直接使用
cargo-xbuild
? - 答:这比让
cargo-xbuild
可靠地工作或与任何其他标准工具工作更容易、更简单。
许可
根据您的要求,许可为以下之一:
- Apache License,版本 2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应按上述方式双授权,不附加任何额外条款或条件。
依赖项
~3–4MB
~70K SLoC