diff options
| author | Amos Wenger <amoswenger@gmail.com> | 2022-07-26 16:25:48 +0200 |
|---|---|---|
| committer | Amos Wenger <amoswenger@gmail.com> | 2022-07-27 15:52:57 +0200 |
| commit | 6ea7d82dcc83d71753189b5f4ce676a31a0e88ab (patch) | |
| tree | e051ff3070462c599a4aa39c76d54403170d622a | |
| parent | 8bcd4a2b4cb2ee8299834dbf4a85906fc5b8a2a1 (diff) | |
| download | rust-6ea7d82dcc83d71753189b5f4ce676a31a0e88ab.tar.gz rust-6ea7d82dcc83d71753189b5f4ce676a31a0e88ab.zip | |
Ship `rust-analyzer-proc-macro-srv` binary with dist::Rustc
This builds `src/tools/rust-analyzer/crates/proc-macro-srv-cli` and ships it as part of Rustc's dist component. This allows rust-analyzer's proc macro support to work on all rustc versions (stable, beta and nightly) starting now.
| -rw-r--r-- | src/bootstrap/builder.rs | 1 | ||||
| -rw-r--r-- | src/bootstrap/dist.rs | 12 | ||||
| -rw-r--r-- | src/bootstrap/tool.rs | 44 |
3 files changed, 57 insertions, 0 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index 8876f70c8c6..0ab4824ac0a 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -601,6 +601,7 @@ impl<'a> Builder<'a> { tool::Cargo, tool::Rls, tool::RustAnalyzer, + tool::RustAnalyzerProcMacroSrv, tool::RustDemangler, tool::Rustdoc, tool::Clippy, diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 95655c0ee35..6291b204e48 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -362,6 +362,18 @@ impl Step for Rustc { builder.install(&builder.rustdoc(compiler), &image.join("bin"), 0o755); + let ra_proc_macro_srv = builder + .ensure(tool::RustAnalyzerProcMacroSrv { + compiler: builder.compiler_for( + compiler.stage, + builder.config.build, + compiler.host, + ), + target: compiler.host, + }) + .expect("rust-analyzer-proc-macro-server always builds"); + builder.install(&ra_proc_macro_srv, &image.join("libexec"), 0o755); + let libdir_relative = builder.libdir_relative(compiler); // Copy runtime DLLs needed by the compiler diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs index 7c37621d417..839a6d27199 100644 --- a/src/bootstrap/tool.rs +++ b/src/bootstrap/tool.rs @@ -727,6 +727,50 @@ impl Step for RustAnalyzer { } } +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub struct RustAnalyzerProcMacroSrv { + pub compiler: Compiler, + pub target: TargetSelection, +} + +impl Step for RustAnalyzerProcMacroSrv { + type Output = Option<PathBuf>; + const DEFAULT: bool = true; + const ONLY_HOSTS: bool = false; + + fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { + let builder = run.builder; + run.path("src/tools/rust-analyzer").default_condition( + builder.config.extended + && builder + .config + .tools + .as_ref() + .map_or(true, |tools| tools.iter().any(|tool| tool == "rust-analyzer")), + ) + } + + fn make_run(run: RunConfig<'_>) { + run.builder.ensure(RustAnalyzerProcMacroSrv { + compiler: run.builder.compiler(run.builder.top_stage, run.builder.config.build), + target: run.target, + }); + } + + fn run(self, builder: &Builder<'_>) -> Option<PathBuf> { + builder.ensure(ToolBuild { + compiler: self.compiler, + target: self.target, + tool: "rust-analyzer-proc-macro-srv", + mode: Mode::ToolStd, + path: "src/tools/rust-analyzer/crates/proc-macro-srv-cli", + extra_features: vec!["proc-macro-srv/sysroot-abi".to_owned()], + is_optional_tool: false, + source_type: SourceType::InTree, + }) + } +} + macro_rules! tool_extended { (($sel:ident, $builder:ident), $($name:ident, |
