Rollup merge of #122632 - onur-ozkan:fix-llvm-caching-bug, r=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 #122612
Fixes #122787
This commit is contained in:
Matthias Krüger 2024-04-16 17:54:39 +02:00 committed by GitHub
commit 592b1ca99a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 1 deletions

View File

@ -76,6 +76,9 @@ pub fn prebuilt_llvm_config(
builder: &Builder<'_>, builder: &Builder<'_>,
target: TargetSelection, target: TargetSelection,
) -> Result<LlvmResult, Meta> { ) -> 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(); builder.config.maybe_download_ci_llvm();
// If we're using a custom LLVM bail out here, but we can only use a // If we're using a custom LLVM bail out here, but we can only use a
@ -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 root = "src/llvm-project/llvm";
let out_dir = builder.llvm_out(target); let out_dir = builder.llvm_out(target);
@ -280,7 +286,6 @@ fn run(self, builder: &Builder<'_>) -> LlvmResult {
Err(m) => m, Err(m) => m,
}; };
builder.update_submodule(&Path::new("src").join("llvm-project"));
if builder.llvm_link_shared() && target.is_windows() { if builder.llvm_link_shared() && target.is_windows() {
panic!("shared linking to LLVM is not currently supported on {}", target.triple); panic!("shared linking to LLVM is not currently supported on {}", target.triple);
} }

View File

@ -630,6 +630,18 @@ pub fn update_existing_submodules(&self) {
} }
} }
/// 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. /// Executes the entire build, as configured by the flags and configuration.
pub fn build(&mut self) { pub fn build(&mut self) {
unsafe { unsafe {