@@ -26,7 +26,10 @@ use crate::{
26
26
WorkspaceBuildScripts ,
27
27
build_dependencies:: BuildScriptOutput ,
28
28
cargo_workspace:: { CargoMetadataConfig , DepKind , PackageData , RustLibSource } ,
29
- env:: { cargo_config_env, inject_cargo_env, inject_cargo_package_env, inject_rustc_tool_env} ,
29
+ env:: {
30
+ cargo_config_build_target_dir, cargo_config_env, inject_cargo_env,
31
+ inject_cargo_package_env, inject_rustc_tool_env,
32
+ } ,
30
33
project_json:: { Crate , CrateArrayIdx } ,
31
34
sysroot:: RustLibSrcWorkspace ,
32
35
toolchain_info:: { QueryConfig , rustc_cfg, target_data_layout, target_tuple, version} ,
@@ -280,8 +283,11 @@ impl ProjectWorkspace {
280
283
. ok ( )
281
284
. flatten ( ) ;
282
285
283
- let target_dir =
284
- config. target_dir . clone ( ) . unwrap_or_else ( || workspace_dir. join ( "target" ) . into ( ) ) ;
286
+ let target_dir = config
287
+ . target_dir
288
+ . clone ( )
289
+ . or_else ( || cargo_config_build_target_dir ( cargo_toml, extra_env, & sysroot) )
290
+ . unwrap_or_else ( || workspace_dir. join ( "target" ) . into ( ) ) ;
285
291
286
292
// We spawn a bunch of processes to query various information about the workspace's
287
293
// toolchain and sysroot
@@ -452,6 +458,14 @@ impl ProjectWorkspace {
452
458
let targets = target_tuple:: get ( query_config, config. target . as_deref ( ) , & config. extra_env )
453
459
. unwrap_or_default ( ) ;
454
460
let toolchain = version:: get ( query_config, & config. extra_env ) . ok ( ) . flatten ( ) ;
461
+ let project_root = project_json. project_root ( ) ;
462
+ let target_dir = config
463
+ . target_dir
464
+ . clone ( )
465
+ . or_else ( || {
466
+ cargo_config_build_target_dir ( project_json. manifest ( ) ?, & config. extra_env , & sysroot)
467
+ } )
468
+ . unwrap_or_else ( || project_root. join ( "target" ) . into ( ) ) ;
455
469
456
470
// We spawn a bunch of processes to query various information about the workspace's
457
471
// toolchain and sysroot
@@ -469,18 +483,13 @@ impl ProjectWorkspace {
469
483
)
470
484
} ) ;
471
485
let loaded_sysroot = s. spawn ( || {
472
- let project_root = project_json. project_root ( ) ;
473
486
if let Some ( sysroot_project) = sysroot_project {
474
487
sysroot. load_workspace (
475
488
& RustSourceWorkspaceConfig :: Json ( * sysroot_project) ,
476
489
project_root,
477
490
progress,
478
491
)
479
492
} else {
480
- let target_dir = config
481
- . target_dir
482
- . clone ( )
483
- . unwrap_or_else ( || project_root. join ( "target" ) . into ( ) ) ;
484
493
sysroot. load_workspace (
485
494
& RustSourceWorkspaceConfig :: CargoMetadata ( sysroot_metadata_config (
486
495
config,
@@ -535,7 +544,12 @@ impl ProjectWorkspace {
535
544
. unwrap_or_default ( ) ;
536
545
let rustc_cfg = rustc_cfg:: get ( query_config, None , & config. extra_env ) ;
537
546
let data_layout = target_data_layout:: get ( query_config, None , & config. extra_env ) ;
538
- let target_dir = config. target_dir . clone ( ) . unwrap_or_else ( || dir. join ( "target" ) . into ( ) ) ;
547
+ let target_dir = config
548
+ . target_dir
549
+ . clone ( )
550
+ . or_else ( || cargo_config_build_target_dir ( detached_file, & config. extra_env , & sysroot) )
551
+ . unwrap_or_else ( || dir. join ( "target" ) . into ( ) ) ;
552
+
539
553
let loaded_sysroot = sysroot. load_workspace (
540
554
& RustSourceWorkspaceConfig :: CargoMetadata ( sysroot_metadata_config (
541
555
config,
0 commit comments