11
11
12
12
13
13
def get_targets_from_manifest (source_dir ):
14
- command_vector = ["cargo" , "read-manifest " ]
14
+ command_vector = ["cargo" , "metadata" , "--no-deps " ]
15
15
try :
16
16
with subprocess .Popen (
17
17
command_vector , stdout = subprocess .PIPE , cwd = source_dir ) as process :
18
18
out , err = process .communicate ()
19
19
manifest = json .loads (out .decode ("utf-8" ))
20
- targets = manifest ["targets" ]
21
- target_tuples = []
22
- for target in targets :
23
- target_tuples .append ((target ["kind" ][0 ], target ["name" ]))
24
- return target_tuples
20
+ targets = []
21
+ for package in manifest ["packages" ]:
22
+ for target in package ["targets" ]:
23
+ targets .append ({
24
+ "name" : target ["name" ],
25
+ "kind" : target ["kind" ][0 ],
26
+ "package" : package ["name" ],
27
+ "version" : package ["version" ]
28
+ })
29
+ return targets
25
30
except :
26
31
return []
27
32
28
33
29
34
def build_all_targets (source_dir , build_dir ):
30
35
targets_list = get_targets_from_manifest (source_dir )
31
36
for target in targets_list :
32
- logging .info (f"Building target { target [1 ]} of type { target [0 ]} " )
37
+ logging .info (
38
+ f"Building target { target ['name' ]} of type { target ['kind' ]} from package { target ['package' ]} "
39
+ )
33
40
perform_build (source_dir , build_dir , target )
34
- logging .info (f"Finished building target { target [1 ]} of type { target [0 ]} " )
41
+ logging .info (
42
+ f"Finished building target { target ['name' ]} of type { target ['kind' ]} from package { target ['package' ]} "
43
+ )
35
44
36
45
37
46
def perform_build (source_dir , build_dir , target ):
38
47
build_env = os .environ .copy ()
39
48
build_env ["CARGO_TARGET_DIR" ] = build_dir
40
- build_command_vector = ["cargo" , "rustc" , "--all-features" ]
41
- if target [0 ] == "lib" :
49
+ build_command_vector = [
50
+ "cargo" , "rustc" , "--all-features" , "-p" ,
51
+ f"{ target ['package' ]} @{ target ['version' ]} "
52
+ ]
53
+ if target ['kind' ] == "lib" :
42
54
build_command_vector .append ("--lib" )
43
- elif target [0 ] == "test" :
44
- build_command_vector .extend (["--test" , target [1 ]])
45
- elif target [0 ] == "bench" :
46
- build_command_vector .extend (["--bench" , target [1 ]])
55
+ elif target ['kind' ] == "test" :
56
+ build_command_vector .extend (["--test" , target ['name' ]])
57
+ elif target ['kind' ] == "bench" :
58
+ build_command_vector .extend (["--bench" , target ['name' ]])
59
+ elif target ['kind' ] == "bin" :
60
+ build_command_vector .extend (["--bin" , target ['name' ]])
61
+ elif target ['kind' ] == "example" :
62
+ build_command_vector .extend (["--example" , target ['name' ]])
47
63
else :
48
64
logging .warn ("Unrecognized target type, not building." )
49
65
return
@@ -57,7 +73,9 @@ def perform_build(source_dir, build_dir, target):
57
73
stdout = subprocess .PIPE ,
58
74
stderr = subprocess .PIPE )
59
75
except :
60
- logging .warn (f"Failed to build target { target [1 ]} of type { target [0 ]} " )
76
+ logging .warn (
77
+ f"Failed to build target { target ['name' ]} of type { target ['kind' ]} from package { target ['package' ]} "
78
+ )
61
79
62
80
63
81
def extract_ir (build_dir , corpus_dir ):
0 commit comments