@@ -8,6 +8,7 @@ use std::{
8
8
process:: { Command , Stdio } ,
9
9
time:: Instant ,
10
10
} ;
11
+ use std:: str:: from_utf8;
11
12
12
13
#[ derive( Args ) ]
13
14
pub struct BuildArgs {
@@ -82,11 +83,38 @@ fn build_project(path: &PathBuf, release: bool, verbose: bool, target_dir: Optio
82
83
ensure_wasm_target ( ) ?;
83
84
84
85
println ! ( "📦 Running cargo build..." ) ;
85
- run_cargo_build ( path, release, verbose, target_dir) ?;
86
+ run_cargo_build ( path, release, verbose, target_dir. clone ( ) ) ?;
87
+
88
+ let target_dir = if target_dir. is_none ( ) {
89
+ let result = Command :: new ( "cargo" )
90
+ . arg ( "metadata" )
91
+ . arg ( "--no-deps" )
92
+ . output ( )
93
+ . map_err ( |e| {
94
+ if verbose {
95
+ println ! ( "Failed to get target directory: {:?}" , e) ;
96
+ }
97
+ Error :: Build ( "Failed to get target directory" . to_string ( ) )
98
+ } ) ?;
99
+ let utf8_string = from_utf8 ( & result. stdout ) . map_err ( |e| {
100
+ if verbose {
101
+ println ! ( "Failed to decode UTF-8 output: {:?}" , e) ;
102
+ }
103
+ Error :: Build ( "Failed to get target directory" . to_string ( ) )
104
+ } ) ?;
105
+ let json_value = json:: parse ( utf8_string) . unwrap ( ) ;
106
+ json_value[ "target_directory" ] . to_string ( )
107
+ } else {
108
+ target_dir. unwrap ( )
109
+ } ;
110
+
111
+ if verbose {
112
+ println ! ( "Checking target dir: {}" , target_dir)
113
+ }
86
114
87
115
// Define the expected output location
88
116
let build_mode = if release { "release" } else { "debug" } ;
89
- let target_dir = path. join ( "target/ wasm32-unknown-unknown") . join ( build_mode) ;
117
+ let target_dir = path. join ( target_dir ) . join ( " wasm32-unknown-unknown") . join ( build_mode) ;
90
118
91
119
// Locate the generated .wasm file
92
120
let wasm_file = target_dir
@@ -142,6 +170,10 @@ fn run_cargo_build(path: &PathBuf, release: bool, verbose: bool, target_dir: Opt
142
170
build_args. push ( "--release" . to_string ( ) ) ;
143
171
}
144
172
173
+ if verbose {
174
+ println ! ( "Running command: {}" , build_args. join( " " ) ) ;
175
+ }
176
+
145
177
let mut cmd = Command :: new ( "cargo" )
146
178
. args ( & build_args)
147
179
. env (
0 commit comments