Skip to content

Commit 772ca37

Browse files
committed
Fix staging for doc compiler
1 parent e371348 commit 772ca37

File tree

4 files changed

+35
-34
lines changed

4 files changed

+35
-34
lines changed

src/bootstrap/src/core/build_steps/doc.rs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -754,21 +754,31 @@ fn doc_std(
754754
builder.cp_link_r(&out_dir, out);
755755
}
756756

757+
/// Prepare a compiler that will be able to document something for `target` at `stage`.
758+
fn prepare_doc_compiler(builder: &Builder<'_>, target: TargetSelection, stage: u32) -> Compiler {
759+
let build_compiler = builder.compiler(stage - 1, builder.host_target);
760+
builder.std(build_compiler, target);
761+
build_compiler
762+
}
763+
764+
/// Document the compiler for the given `target` using rustdoc from `build_compiler`.
757765
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
758766
pub struct Rustc {
759-
pub stage: u32,
760-
pub target: TargetSelection,
767+
build_compiler: Compiler,
768+
target: TargetSelection,
761769
crates: Vec<String>,
762770
}
763771

764772
impl Rustc {
765-
pub(crate) fn new(stage: u32, target: TargetSelection, builder: &Builder<'_>) -> Self {
773+
/// Document `stage` compiler for the given `target`.
774+
pub(crate) fn for_stage(builder: &Builder<'_>, target: TargetSelection, stage: u32) -> Self {
766775
let crates = builder
767776
.in_tree_crates("rustc-main", Some(target))
768777
.into_iter()
769778
.map(|krate| krate.name.to_string())
770779
.collect();
771-
Self { stage, target, crates }
780+
let build_compiler = prepare_doc_compiler(builder, target, stage);
781+
Self { build_compiler, target, crates }
772782
}
773783
}
774784

@@ -785,11 +795,7 @@ impl Step for Rustc {
785795
}
786796

787797
fn make_run(run: RunConfig<'_>) {
788-
run.builder.ensure(Rustc {
789-
stage: run.builder.top_stage,
790-
target: run.target,
791-
crates: run.make_run_crates(Alias::Compiler),
792-
});
798+
run.builder.ensure(Rustc::for_stage(run.builder, run.target, run.builder.top_stage));
793799
}
794800

795801
/// Generates compiler documentation.
@@ -799,7 +805,6 @@ impl Step for Rustc {
799805
/// we do not merge it with the other documentation from std, test and
800806
/// proc_macros. This is largely just a wrapper around `cargo doc`.
801807
fn run(self, builder: &Builder<'_>) {
802-
let stage = self.stage;
803808
let target = self.target;
804809

805810
// This is the intended out directory for compiler documentation.
@@ -808,21 +813,21 @@ impl Step for Rustc {
808813

809814
// Build the standard library, so that proc-macros can use it.
810815
// (Normally, only the metadata would be necessary, but proc-macros are special since they run at compile-time.)
811-
let compiler = builder.compiler(stage, builder.config.host_target);
812-
builder.std(compiler, builder.config.host_target);
816+
let build_compiler = self.build_compiler;
817+
builder.std(build_compiler, builder.config.host_target);
813818

814819
let _guard = builder.msg_rustc_tool(
815820
Kind::Doc,
816-
stage,
821+
build_compiler.stage,
817822
format!("compiler{}", crate_description(&self.crates)),
818-
compiler.host,
823+
build_compiler.host,
819824
target,
820825
);
821826

822827
// Build cargo command.
823828
let mut cargo = builder::Cargo::new(
824829
builder,
825-
compiler,
830+
build_compiler,
826831
Mode::Rustc,
827832
SourceType::InTree,
828833
target,
@@ -840,7 +845,7 @@ impl Step for Rustc {
840845
// If there is any bug, please comment out the next line.
841846
cargo.rustdocflag("--generate-link-to-definition");
842847

843-
compile::rustc_cargo(builder, &mut cargo, target, &compiler, &self.crates);
848+
compile::rustc_cargo(builder, &mut cargo, target, &build_compiler, &self.crates);
844849
cargo.arg("-Zskip-rustdoc-fingerprint");
845850

846851
// Only include compiler crates, no dependencies of those, such as `libc`.
@@ -855,7 +860,7 @@ impl Step for Rustc {
855860

856861
let mut to_open = None;
857862

858-
let out_dir = builder.stage_out(compiler, Mode::Rustc).join(target).join("doc");
863+
let out_dir = builder.stage_out(build_compiler, Mode::Rustc).join(target).join("doc");
859864
for krate in &*self.crates {
860865
// Create all crate output directories first to make sure rustdoc uses
861866
// relative links.
@@ -877,7 +882,7 @@ impl Step for Rustc {
877882
symlink_dir_force(&builder.config, &out, &out_dir);
878883
// Cargo puts proc macros in `target/doc` even if you pass `--target`
879884
// explicitly (https://github.com/rust-lang/cargo/issues/7677).
880-
let proc_macro_out_dir = builder.stage_out(compiler, Mode::Rustc).join("doc");
885+
let proc_macro_out_dir = builder.stage_out(build_compiler, Mode::Rustc).join("doc");
881886
symlink_dir_force(&builder.config, &out, &proc_macro_out_dir);
882887

883888
cargo.into_cmd().run(builder);
@@ -903,7 +908,7 @@ impl Step for Rustc {
903908
}
904909

905910
fn metadata(&self) -> Option<StepMetadata> {
906-
Some(StepMetadata::doc("rustc", self.target).stage(self.stage))
911+
Some(StepMetadata::doc("rustc", self.target).built_by(self.build_compiler))
907912
}
908913
}
909914

src/bootstrap/src/core/build_steps/test.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,10 @@ impl Step for HtmlCheck {
212212
}
213213
// Ensure that a few different kinds of documentation are available.
214214
builder.default_doc(&[]);
215-
builder.ensure(crate::core::build_steps::doc::Rustc::new(
216-
builder.top_stage,
217-
self.target,
215+
builder.ensure(crate::core::build_steps::doc::Rustc::for_stage(
218216
builder,
217+
self.target,
218+
builder.top_stage,
219219
));
220220

221221
builder

src/bootstrap/src/core/builder/tests.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,11 +1755,9 @@ mod snapshot {
17551755
.path("compiler")
17561756
.stage(1)
17571757
.render_steps(), @r"
1758+
[build] rustdoc 0 <host>
17581759
[build] llvm <host>
1759-
[build] rustc 0 <host> -> rustc 1 <host>
1760-
[build] rustc 1 <host> -> std 1 <host>
1761-
[build] rustdoc 1 <host>
1762-
[doc] rustc 1 <host>
1760+
[doc] rustc 0 <host> -> rustc 1 <host>
17631761
");
17641762
}
17651763

@@ -1774,10 +1772,8 @@ mod snapshot {
17741772
[build] llvm <host>
17751773
[build] rustc 0 <host> -> rustc 1 <host>
17761774
[build] rustc 1 <host> -> std 1 <host>
1777-
[build] rustc 1 <host> -> rustc 2 <host>
1778-
[build] rustc 2 <host> -> std 2 <host>
1779-
[build] rustdoc 2 <host>
1780-
[doc] rustc 2 <host>
1775+
[build] rustdoc 1 <host>
1776+
[doc] rustc 1 <host> -> rustc 2 <host>
17811777
");
17821778
}
17831779

src/ci/docker/host-x86_64/pr-check-2/Dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ ENV SCRIPT \
3131
python3 ../x.py clippy ci && \
3232
python3 ../x.py test --stage 1 core alloc std test proc_macro && \
3333
python3 ../x.py test --stage 1 src/tools/compiletest && \
34-
python3 ../x.py doc --stage 0 bootstrap && \
34+
python3 ../x.py doc bootstrap && \
3535
# Build both public and internal documentation.
36-
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 0 compiler && \
37-
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 1 library && \
36+
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc compiler && \
37+
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc library && \
3838
mkdir -p /checkout/obj/staging/doc && \
3939
cp -r build/x86_64-unknown-linux-gnu/doc /checkout/obj/staging && \
40-
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 1 library/test && \
40+
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc library/test && \
4141
# The BOOTSTRAP_TRACING flag is added to verify whether the
4242
# bootstrap process compiles successfully with this flag enabled.
4343
BOOTSTRAP_TRACING=1 python3 ../x.py --help

0 commit comments

Comments
 (0)