ninja_files_cargo/
lib.rs

1use ninja_files_data::{BuildBuilder, CommandBuilder, FileBuilder, RuleBuilder, RuleId, Utf8Path};
2
3const CARGO_BUILD: RuleId = RuleId::unsafe_create("cargo-build");
4
5//Ideally we should read a cargo file
6pub 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}