如何将rustflags传递给工件依赖项二进制文件?

hl0ma9xz  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(151)

我想找到一种方法将rustflags传递到工件依赖项bin。
下面是故事。
我目前编写我的玩具操作系统,并使用工件依赖关系,因为这是在rust-osdev/bootloader repositiory建议(描述是这个README的引导部分),我认为这是一个有用的方式。然而,我发现这种方式似乎没有传递我在我的内核工作区.cargo/config.toml中附加的rustflags,如下所示。

[build]
target = "x86_64-unknown-none"
rustflags = ["-C", "relocation-model=static", "-C", "link-arg=-no-pie"]

[unstable]
build-std = ["core", "compiler_builtins"]
build-std-features = ["compiler-builtins-mem"]

在上面的配置中,我希望内核elf类型是EXEC,但实际上,该类型是DYN,即我得到了PIE Elf文件,即使我写静态和没有饼标志。
我尝试了一些模式如下。
1.直接在内核工作区目录中运行cargo build
1.设置无效的rustflags(如link-args=hoge)并在根项目目录中运行cargo build
结果
1.创建非pie elf(Elf类型为EXEC),未出现错误。
1.编译时没有出现错误,即使我在编译前运行cargo clean
这就是为什么,我怀疑当.cargo/config.toml的工作空间被视为二进制工件依赖项时,我在.cargo/config.toml中编写的rustflags不起作用。
复制代码为here
如果有办法通过 rust 旗,请教我。

bvjxkvbb

bvjxkvbb1#

在workspace中添加您的build.rs,在我的例子中是<project root path>/<kernel workspace name>/build.rs,并在其中放入如下脚本。

fn main() {
  println!("cargo:rust-link-arg=-no-pie");
}

相关问题