diff options
| -rw-r--r-- | src/bootstrap/src/core/build_steps/compile.rs | 2 | ||||
| -rw-r--r-- | src/bootstrap/src/core/build_steps/dist.rs | 15 | ||||
| -rw-r--r-- | src/bootstrap/src/core/build_steps/install.rs | 2 | ||||
| -rw-r--r-- | src/bootstrap/src/core/build_steps/tool.rs | 21 | ||||
| -rw-r--r-- | src/bootstrap/src/core/builder/tests.rs | 1 |
5 files changed, 29 insertions, 12 deletions
diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs index d1285340cd6..a80fdefac43 100644 --- a/src/bootstrap/src/core/build_steps/compile.rs +++ b/src/bootstrap/src/core/build_steps/compile.rs @@ -2056,7 +2056,7 @@ impl Step for Assemble { if builder.config.llvm_bitcode_linker_enabled { trace!("llvm-bitcode-linker enabled, installing"); let llvm_bitcode_linker = builder.ensure( - crate::core::build_steps::tool::LlvmBitcodeLinker::for_use_by_compiler( + crate::core::build_steps::tool::LlvmBitcodeLinker::from_target_compiler( builder, target_compiler, ), diff --git a/src/bootstrap/src/core/build_steps/dist.rs b/src/bootstrap/src/core/build_steps/dist.rs index af17a69302b..39e4fb2ac01 100644 --- a/src/bootstrap/src/core/build_steps/dist.rs +++ b/src/bootstrap/src/core/build_steps/dist.rs @@ -1576,7 +1576,7 @@ impl Step for Extended { backend: "cranelift".to_string(), }); add_component!("llvm-bitcode-linker" => LlvmBitcodeLinker { - target_compiler: compiler, + build_compiler: compiler, target }); @@ -2344,9 +2344,13 @@ impl Step for LlvmTools { } } +/// Distributes the `llvm-bitcode-linker` tool so that it can be used by a compiler whose host +/// is `target`. #[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)] pub struct LlvmBitcodeLinker { - pub target_compiler: Compiler, + /// The linker will be compiled by this compiler. + pub build_compiler: Compiler, + /// The linker will by usable by rustc on this host. pub target: TargetSelection, } @@ -2362,7 +2366,10 @@ impl Step for LlvmBitcodeLinker { fn make_run(run: RunConfig<'_>) { run.builder.ensure(LlvmBitcodeLinker { - target_compiler: run.builder.compiler(run.builder.top_stage, run.target), + build_compiler: tool::LlvmBitcodeLinker::get_build_compiler_for_target( + run.builder, + run.target, + ), target: run.target, }); } @@ -2371,7 +2378,7 @@ impl Step for LlvmBitcodeLinker { let target = self.target; let llbc_linker = builder - .ensure(tool::LlvmBitcodeLinker::for_use_by_compiler(builder, self.target_compiler)); + .ensure(tool::LlvmBitcodeLinker::from_build_compiler(self.build_compiler, target)); let self_contained_bin_dir = format!("lib/rustlib/{}/bin/self-contained", target.triple); diff --git a/src/bootstrap/src/core/build_steps/install.rs b/src/bootstrap/src/core/build_steps/install.rs index 285624916d1..4156b49a8b3 100644 --- a/src/bootstrap/src/core/build_steps/install.rs +++ b/src/bootstrap/src/core/build_steps/install.rs @@ -287,7 +287,7 @@ install!((self, builder, _config), } }; LlvmBitcodeLinker, alias = "llvm-bitcode-linker", Self::should_build(_config), only_hosts: true, { - if let Some(tarball) = builder.ensure(dist::LlvmBitcodeLinker { target_compiler: self.compiler, target: self.target }) { + if let Some(tarball) = builder.ensure(dist::LlvmBitcodeLinker { build_compiler: self.compiler, target: self.target }) { install_sh(builder, "llvm-bitcode-linker", self.compiler.stage, Some(self.target), &tarball); } else { builder.info( diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core/build_steps/tool.rs index 4d2fa177765..f1e317ebb66 100644 --- a/src/bootstrap/src/core/build_steps/tool.rs +++ b/src/bootstrap/src/core/build_steps/tool.rs @@ -1171,8 +1171,14 @@ pub struct LlvmBitcodeLinker { } impl LlvmBitcodeLinker { + /// Returns `LlvmBitcodeLinker` that will be **compiled** by the passed compiler, for the given + /// `target`. + pub fn from_build_compiler(build_compiler: Compiler, target: TargetSelection) -> Self { + Self { build_compiler, target } + } + /// Returns `LlvmBitcodeLinker` that should be **used** by the passed compiler. - pub fn for_use_by_compiler(builder: &Builder<'_>, target_compiler: Compiler) -> Self { + pub fn from_target_compiler(builder: &Builder<'_>, target_compiler: Compiler) -> Self { Self { build_compiler: get_tool_target_compiler( builder, @@ -1181,6 +1187,14 @@ impl LlvmBitcodeLinker { target: target_compiler.host, } } + + /// Return a compiler that is able to build this tool for the given `target`. + pub fn get_build_compiler_for_target( + builder: &Builder<'_>, + target: TargetSelection, + ) -> Compiler { + get_tool_target_compiler(builder, ToolTargetBuildMode::Build(target)) + } } impl Step for LlvmBitcodeLinker { @@ -1196,10 +1210,7 @@ impl Step for LlvmBitcodeLinker { fn make_run(run: RunConfig<'_>) { run.builder.ensure(LlvmBitcodeLinker { - build_compiler: get_tool_target_compiler( - run.builder, - ToolTargetBuildMode::Build(run.target), - ), + build_compiler: Self::get_build_compiler_for_target(run.builder, run.target), target: run.target, }); } diff --git a/src/bootstrap/src/core/builder/tests.rs b/src/bootstrap/src/core/builder/tests.rs index 4ca9ff98dee..aa4995a2549 100644 --- a/src/bootstrap/src/core/builder/tests.rs +++ b/src/bootstrap/src/core/builder/tests.rs @@ -1293,7 +1293,6 @@ mod snapshot { [build] rustc 0 <host> -> miri 1 <target1> [build] rustc 0 <host> -> cargo-miri 1 <target1> [build] rustc 1 <host> -> LlvmBitcodeLinker 2 <target1> - [build] rustc 0 <host> -> LlvmBitcodeLinker 1 <host> "); } |
