Skip to content

Commit

Permalink
Rollup merge of rust-lang#122632 - onur-ozkan:fix-llvm-caching-bug, r…
Browse files Browse the repository at this point in the history
…=albertlarsan68

fetch submodule before checking llvm stamp

Previously, we were checking the LLVM stamp before fetching the submodule which leads to not being able to compile llvm on submodule updates.

Fixes rust-lang#122612
Fixes rust-lang#122787
  • Loading branch information
matthiaskrgr authored Apr 16, 2024
2 parents 1dea922 + 3683b11 commit 04a2e3c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/bootstrap/src/core/build_steps/llvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ pub fn prebuilt_llvm_config(
builder: &Builder<'_>,
target: TargetSelection,
) -> Result<LlvmResult, Meta> {
// If we have llvm submodule initialized already, sync it.
builder.update_existing_submodule(&Path::new("src").join("llvm-project"));

builder.config.maybe_download_ci_llvm();

// If we're using a custom LLVM bail out here, but we can only use a
Expand All @@ -94,6 +97,9 @@ pub fn prebuilt_llvm_config(
}
}

// Initialize the llvm submodule if not initialized already.
builder.update_submodule(&Path::new("src").join("llvm-project"));

let root = "src/llvm-project/llvm";
let out_dir = builder.llvm_out(target);

Expand Down Expand Up @@ -280,7 +286,6 @@ impl Step for Llvm {
Err(m) => m,
};

builder.update_submodule(&Path::new("src").join("llvm-project"));
if builder.llvm_link_shared() && target.is_windows() {
panic!("shared linking to LLVM is not currently supported on {}", target.triple);
}
Expand Down
12 changes: 12 additions & 0 deletions src/bootstrap/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,18 @@ impl Build {
}
}

/// Updates the given submodule only if it's initialized already; nothing happens otherwise.
pub fn update_existing_submodule(&self, submodule: &Path) {
// Avoid running git when there isn't a git checkout.
if !self.config.submodules(self.rust_info()) {
return;
}

if GitInfo::new(false, submodule).is_managed_git_subrepository() {
self.update_submodule(submodule);
}
}

/// Executes the entire build, as configured by the flags and configuration.
pub fn build(&mut self) {
unsafe {
Expand Down

0 comments on commit 04a2e3c

Please sign in to comment.