@@ -34,6 +34,12 @@ pub enum SourceType {
3434 Submodule ,
3535}
3636
37+ #[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
38+ pub enum ToolArtifactKind {
39+ Binary ,
40+ Library ,
41+ }
42+
3743#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
3844struct ToolBuild {
3945 compiler : Compiler ,
@@ -47,6 +53,8 @@ struct ToolBuild {
4753 allow_features : & ' static str ,
4854 /// Additional arguments to pass to the `cargo` invocation.
4955 cargo_args : Vec < String > ,
56+ /// Whether the tool builds a binary or a library.
57+ artifact_kind : ToolArtifactKind ,
5058}
5159
5260impl Builder < ' _ > {
@@ -79,7 +87,7 @@ impl Builder<'_> {
7987/// for using this type as `type Output = ToolBuildResult;`
8088#[ derive( Clone ) ]
8189pub struct ToolBuildResult {
82- /// Executable path of the corresponding tool that was built.
90+ /// Artifact path of the corresponding tool that was built.
8391 pub tool_path : PathBuf ,
8492 /// Compiler used to build the tool. For non-`ToolRustc` tools this is equal to `target_compiler`.
8593 /// For `ToolRustc` this is one stage before of the `target_compiler`.
@@ -179,8 +187,14 @@ impl Step for ToolBuild {
179187 if tool == "tidy" {
180188 tool = "rust-tidy" ;
181189 }
182- let tool_path =
183- copy_link_tool_bin ( builder, self . compiler , self . target , self . mode , tool) ;
190+ let tool_path = match self . artifact_kind {
191+ ToolArtifactKind :: Binary => {
192+ copy_link_tool_bin ( builder, self . compiler , self . target , self . mode , tool)
193+ }
194+ ToolArtifactKind :: Library => builder
195+ . cargo_out ( self . compiler , self . mode , self . target )
196+ . join ( format ! ( "lib{tool}.rlib" ) ) ,
197+ } ;
184198
185199 ToolBuildResult { tool_path, build_compiler : self . compiler , target_compiler }
186200 }
@@ -330,6 +344,7 @@ macro_rules! bootstrap_tool {
330344 $( , is_unstable_tool = $unstable: expr) *
331345 $( , allow_features = $allow_features: expr) ?
332346 $( , submodules = $submodules: expr) ?
347+ $( , artifact_kind = $artifact_kind: expr) ?
333348 ;
334349 ) +) => {
335350 #[ derive( PartialEq , Eq , Clone ) ]
@@ -389,6 +404,7 @@ macro_rules! bootstrap_tool {
389404 builder. require_submodule( submodule, None ) ;
390405 }
391406 ) *
407+
392408 builder. ensure( ToolBuild {
393409 compiler: self . compiler,
394410 target: self . target,
@@ -407,7 +423,12 @@ macro_rules! bootstrap_tool {
407423 } ,
408424 extra_features: vec![ ] ,
409425 allow_features: concat!( $( $allow_features) * ) ,
410- cargo_args: vec![ ]
426+ cargo_args: vec![ ] ,
427+ artifact_kind: if false $( || $artifact_kind == ToolArtifactKind :: Library ) * {
428+ ToolArtifactKind :: Library
429+ } else {
430+ ToolArtifactKind :: Binary
431+ }
411432 } )
412433 }
413434 }
@@ -445,51 +466,14 @@ bootstrap_tool!(
445466 WasmComponentLd , "src/tools/wasm-component-ld" , "wasm-component-ld" , is_unstable_tool = true , allow_features = "min_specialization" ;
446467 UnicodeTableGenerator , "src/tools/unicode-table-generator" , "unicode-table-generator" ;
447468 FeaturesStatusDump , "src/tools/features-status-dump" , "features-status-dump" ;
469+ OptimizedDist , "src/tools/opt-dist" , "opt-dist" , submodules = & [ "src/tools/rustc-perf" ] ;
470+ RunMakeSupport , "src/tools/run-make-support" , "run_make_support" , artifact_kind = ToolArtifactKind :: Library ;
448471) ;
449472
450473/// These are the submodules that are required for rustbook to work due to
451474/// depending on mdbook plugins.
452475pub static SUBMODULES_FOR_RUSTBOOK : & [ & str ] = & [ "src/doc/book" , "src/doc/reference" ] ;
453476
454- #[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
455- pub struct OptimizedDist {
456- pub compiler : Compiler ,
457- pub target : TargetSelection ,
458- }
459-
460- impl Step for OptimizedDist {
461- type Output = ToolBuildResult ;
462-
463- fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
464- run. path ( "src/tools/opt-dist" )
465- }
466-
467- fn make_run ( run : RunConfig < ' _ > ) {
468- run. builder . ensure ( OptimizedDist {
469- compiler : run. builder . compiler ( 0 , run. builder . config . build ) ,
470- target : run. target ,
471- } ) ;
472- }
473-
474- fn run ( self , builder : & Builder < ' _ > ) -> ToolBuildResult {
475- // We need to ensure the rustc-perf submodule is initialized when building opt-dist since
476- // the tool requires it to be in place to run.
477- builder. require_submodule ( "src/tools/rustc-perf" , None ) ;
478-
479- builder. ensure ( ToolBuild {
480- compiler : self . compiler ,
481- target : self . target ,
482- tool : "opt-dist" ,
483- mode : Mode :: ToolBootstrap ,
484- path : "src/tools/opt-dist" ,
485- source_type : SourceType :: InTree ,
486- extra_features : Vec :: new ( ) ,
487- allow_features : "" ,
488- cargo_args : Vec :: new ( ) ,
489- } )
490- }
491- }
492-
493477/// The [rustc-perf](https://github.com/rust-lang/rustc-perf) benchmark suite, which is added
494478/// as a submodule at `src/tools/rustc-perf`.
495479#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
@@ -529,6 +513,7 @@ impl Step for RustcPerf {
529513 // Only build the collector package, which is used for benchmarking through
530514 // a CLI.
531515 cargo_args : vec ! [ "-p" . to_string( ) , "collector" . to_string( ) ] ,
516+ artifact_kind : ToolArtifactKind :: Binary ,
532517 } ;
533518 let res = builder. ensure ( tool. clone ( ) ) ;
534519 // We also need to symlink the `rustc-fake` binary to the corresponding directory,
@@ -586,6 +571,7 @@ impl Step for ErrorIndex {
586571 extra_features : Vec :: new ( ) ,
587572 allow_features : "" ,
588573 cargo_args : Vec :: new ( ) ,
574+ artifact_kind : ToolArtifactKind :: Binary ,
589575 } )
590576 }
591577}
@@ -621,6 +607,7 @@ impl Step for RemoteTestServer {
621607 extra_features : Vec :: new ( ) ,
622608 allow_features : "" ,
623609 cargo_args : Vec :: new ( ) ,
610+ artifact_kind : ToolArtifactKind :: Binary ,
624611 } )
625612 }
626613}
@@ -725,6 +712,7 @@ impl Step for Rustdoc {
725712 extra_features,
726713 allow_features : "" ,
727714 cargo_args : Vec :: new ( ) ,
715+ artifact_kind : ToolArtifactKind :: Binary ,
728716 } ) ;
729717
730718 // don't create a stage0-sysroot/bin directory.
@@ -779,6 +767,7 @@ impl Step for Cargo {
779767 extra_features : Vec :: new ( ) ,
780768 allow_features : "" ,
781769 cargo_args : Vec :: new ( ) ,
770+ artifact_kind : ToolArtifactKind :: Binary ,
782771 } )
783772 }
784773}
@@ -827,6 +816,7 @@ impl Step for LldWrapper {
827816 extra_features : Vec :: new ( ) ,
828817 allow_features : "" ,
829818 cargo_args : Vec :: new ( ) ,
819+ artifact_kind : ToolArtifactKind :: Binary ,
830820 } ) ;
831821
832822 let libdir_bin = builder. sysroot_target_bindir ( self . target_compiler , target) ;
@@ -887,6 +877,7 @@ impl Step for RustAnalyzer {
887877 source_type : SourceType :: InTree ,
888878 allow_features : RustAnalyzer :: ALLOW_FEATURES ,
889879 cargo_args : Vec :: new ( ) ,
880+ artifact_kind : ToolArtifactKind :: Binary ,
890881 } )
891882 }
892883}
@@ -931,6 +922,7 @@ impl Step for RustAnalyzerProcMacroSrv {
931922 source_type : SourceType :: InTree ,
932923 allow_features : RustAnalyzer :: ALLOW_FEATURES ,
933924 cargo_args : Vec :: new ( ) ,
925+ artifact_kind : ToolArtifactKind :: Binary ,
934926 } ) ;
935927
936928 // Copy `rust-analyzer-proc-macro-srv` to `<sysroot>/libexec/`
@@ -985,6 +977,7 @@ impl Step for LlvmBitcodeLinker {
985977 extra_features : self . extra_features ,
986978 allow_features : "" ,
987979 cargo_args : Vec :: new ( ) ,
980+ artifact_kind : ToolArtifactKind :: Binary ,
988981 } ) ;
989982
990983 if tool_result. target_compiler . stage > 0 {
@@ -1164,6 +1157,7 @@ fn run_tool_build_step(
11641157 source_type : SourceType :: InTree ,
11651158 allow_features : "" ,
11661159 cargo_args : vec ! [ ] ,
1160+ artifact_kind : ToolArtifactKind :: Binary ,
11671161 } ) ;
11681162
11691163 // FIXME: This should just be an if-let-chain, but those are unstable.
@@ -1242,6 +1236,7 @@ impl Step for TestFloatParse {
12421236 extra_features : Vec :: new ( ) ,
12431237 allow_features : "" ,
12441238 cargo_args : Vec :: new ( ) ,
1239+ artifact_kind : ToolArtifactKind :: Binary ,
12451240 } )
12461241 }
12471242}
0 commit comments