1use ninja_files_data::{BuildBuilder, CommandBuilder, FileBuilder, RuleBuilder, RuleId, Utf8Path};
2
3const CARGO_BUILD: RuleId = RuleId::unsafe_create("cargo-build");
4
5pub fn build<C, O>(cargo_toml: C, output_bin: O) -> FileBuilder
7where
8 C: AsRef<Utf8Path>,
9 O: AsRef<Utf8Path>,
10{
11 let output_bin = output_bin.as_ref();
12 let mut dep_file = output_bin.to_path_buf();
13 dep_file.set_extension("d");
14 let builder = FileBuilder::new();
15
16 let command = CommandBuilder::new("cargo")
17 .arg("build")
18 .arg("--manifest-path")
19 .arg("$in");
20
21 let rule = RuleBuilder::new(command).variable("deps", "gcc");
22
23 let build = BuildBuilder::new(CARGO_BUILD)
24 .explicit(cargo_toml)
25 .variable("depfile", dep_file);
26 builder.rule(&CARGO_BUILD, rule).file(output_bin, build)
27}