Skip to content

Commit 9f972f2

Browse files
author
Yoshiki Takashima
authored
Added ability to figure out workspaces from cargo kani. (rust-lang#1421)
* Added ability to figure out workspaces from cargo kani. * Added doc comment. * Changed code to use `cargo_metadata` crate not raw json.
1 parent 6efab6c commit 9f972f2

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

Cargo.lock

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,37 @@ dependencies = [
8989
"walkdir",
9090
]
9191

92+
[[package]]
93+
name = "camino"
94+
version = "1.0.9"
95+
source = "registry+https://github.com/rust-lang/crates.io-index"
96+
checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412"
97+
dependencies = [
98+
"serde",
99+
]
100+
101+
[[package]]
102+
name = "cargo-platform"
103+
version = "0.1.2"
104+
source = "registry+https://github.com/rust-lang/crates.io-index"
105+
checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
106+
dependencies = [
107+
"serde",
108+
]
109+
110+
[[package]]
111+
name = "cargo_metadata"
112+
version = "0.15.0"
113+
source = "registry+https://github.com/rust-lang/crates.io-index"
114+
checksum = "3abb7553d5b9b8421c6de7cb02606ff15e0c6eea7d8eadd75ef013fd636bec36"
115+
dependencies = [
116+
"camino",
117+
"cargo-platform",
118+
"semver",
119+
"serde",
120+
"serde_json",
121+
]
122+
92123
[[package]]
93124
name = "cfg-if"
94125
version = "1.0.0"
@@ -285,6 +316,7 @@ name = "kani-driver"
285316
version = "0.7.0"
286317
dependencies = [
287318
"anyhow",
319+
"cargo_metadata",
288320
"clap",
289321
"glob",
290322
"kani_metadata",
@@ -647,6 +679,15 @@ version = "1.1.0"
647679
source = "registry+https://github.com/rust-lang/crates.io-index"
648680
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
649681

682+
[[package]]
683+
name = "semver"
684+
version = "1.0.12"
685+
source = "registry+https://github.com/rust-lang/crates.io-index"
686+
checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
687+
dependencies = [
688+
"serde",
689+
]
690+
650691
[[package]]
651692
name = "serde"
652693
version = "1.0.138"

kani-driver/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ publish = false
1313

1414
[dependencies]
1515
kani_metadata = { path = "../kani_metadata" }
16+
cargo_metadata = "0.15.0"
1617
anyhow = "1"
1718
serde = { version = "1", features = ["derive"] }
1819
serde_json = "1"

kani-driver/src/call_cargo.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33

44
use anyhow::{Context, Result};
5+
use cargo_metadata::MetadataCommand;
56
use std::ffi::OsString;
67
use std::path::{Path, PathBuf};
78
use std::process::Command;
@@ -21,11 +22,20 @@ pub struct CargoOutputs {
2122
pub metadata: Vec<PathBuf>,
2223
}
2324

25+
/// Finds the "target" directory while considering workspaces,
26+
fn find_target_dir() -> PathBuf {
27+
fn maybe_get_target() -> Option<PathBuf> {
28+
Some(MetadataCommand::new().exec().ok()?.target_directory.into())
29+
}
30+
31+
maybe_get_target().unwrap_or(PathBuf::from("target"))
32+
}
33+
2434
impl KaniSession {
2535
/// Calls `cargo_build` to generate `*.symtab.json` files in `target_dir`
2636
pub fn cargo_build(&self) -> Result<CargoOutputs> {
2737
let build_target = env!("TARGET"); // see build.rs
28-
let target_dir = self.args.target_dir.as_ref().unwrap_or(&PathBuf::from("target")).clone();
38+
let target_dir = self.args.target_dir.as_ref().unwrap_or(&find_target_dir()).clone();
2939
let outdir = target_dir.join(build_target).join("debug/deps");
3040

3141
let flag_env = {

0 commit comments

Comments
 (0)