@@ -7,6 +7,7 @@ use crate::target_specs::update_target_specs_files;
7
7
use crate :: { cache_dir, spirv_source:: SpirvSource } ;
8
8
use anyhow:: Context as _;
9
9
use spirv_builder:: SpirvBuilder ;
10
+ use std:: env;
10
11
use std:: path:: { Path , PathBuf } ;
11
12
12
13
/// Represents a functional backend installation, whether it was cached or just installed.
@@ -279,20 +280,33 @@ package = "rustc_codegen_spirv"
279
280
}
280
281
281
282
crate :: user_output!( "Compiling `rustc_codegen_spirv` from source {}\n " , source, ) ;
282
- let mut build_command = std:: process:: Command :: new ( "cargo" ) ;
283
- build_command
283
+ let mut cargo = std:: process:: Command :: new ( "cargo" ) ;
284
+ cargo
284
285
. current_dir ( & install_dir)
285
286
. arg ( format ! ( "+{toolchain_channel}" ) )
286
- . args ( [ "build" , "--release" ] )
287
- . env_remove ( "RUSTC" )
288
- . env_remove ( "RUSTFLAGS" ) ;
287
+ . args ( [ "build" , "--release" ] ) ;
289
288
if source. is_path ( ) {
290
- build_command . args ( [ "-p" , "rustc_codegen_spirv" , "--lib" ] ) ;
289
+ cargo . args ( [ "-p" , "rustc_codegen_spirv" , "--lib" ] ) ;
291
290
}
292
291
293
- log:: debug!( "building artifacts with `{build_command:?}`" ) ;
292
+ // Clear Cargo environment variables that we don't want to leak into the
293
+ // inner invocation of Cargo and mess with our `rustc_codegen_spirv` build.
294
+ for ( key, _) in env:: vars_os ( ) {
295
+ let remove = key. to_str ( ) . is_some_and ( |st| {
296
+ st. starts_with ( "CARGO_FEATURES_" ) || st. starts_with ( "CARGO_CFG_" )
297
+ } ) ;
298
+ if remove {
299
+ cargo. env_remove ( key) ;
300
+ }
301
+ }
302
+ cargo
303
+ . env_remove ( "RUSTC" )
304
+ . env_remove ( "RUSTFLAGS" )
305
+ // ignore any externally supplied target dir, we want to build it in our cache dir
306
+ . env_remove ( "CARGO_TARGET_DIR" ) ;
294
307
295
- build_command
308
+ log:: debug!( "building artifacts with `{cargo:?}`" ) ;
309
+ cargo
296
310
. stdout ( std:: process:: Stdio :: inherit ( ) )
297
311
. stderr ( std:: process:: Stdio :: inherit ( ) )
298
312
. output ( )
0 commit comments