| @@ -15,6 +15,7 @@ use std::fs::{self, File}; |
|
|
| 15 |
15 |
use std::io; |
| 16 |
16 |
use std::path::{Path, PathBuf}; |
| 17 |
17 |
use std::process::Command; |
|
18 |
+use std::sync::OnceLock; |
| 18 |
19 |
|
| 19 |
20 |
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step}; |
| 20 |
21 |
use crate::core::config::{Config, TargetSelection}; |
| @@ -105,13 +106,16 @@ pub fn prebuilt_llvm_config( |
|
|
| 105 |
106 |
let llvm_cmake_dir = out_dir.join("lib/cmake/llvm"); |
| 106 |
107 |
let res = LlvmResult { llvm_config: build_llvm_config, llvm_cmake_dir }; |
| 107 |
108 |
|
| 108 |
|
-let smart_stamp_hash = generate_smart_stamp_hash( |
| 109 |
|
-&builder.config.src.join("src/llvm-project"), |
| 110 |
|
-&builder.in_tree_llvm_info.sha().unwrap_or_default(), |
| 111 |
|
-); |
|
109 |
+static STAMP_HASH_MEMO: OnceLock<String> = OnceLock::new(); |
|
110 |
+let smart_stamp_hash = STAMP_HASH_MEMO.get_or_init(| |
|
111 |
+generate_smart_stamp_hash( |
|
112 |
+&builder.config.src.join("src/llvm-project"), |
|
113 |
+&builder.in_tree_llvm_info.sha().unwrap_or_default(), |
|
114 |
+) |
|
115 |
+}); |
| 112 |
116 |
|
| 113 |
117 |
let stamp = out_dir.join("llvm-finished-building"); |
| 114 |
|
-let stamp = HashStamp::new(stamp, Some(&smart_stamp_hash)); |
|
118 |
+let stamp = HashStamp::new(stamp, Some(smart_stamp_hash)); |
| 115 |
119 |
|
| 116 |
120 |
if stamp.is_done() { |
| 117 |
121 |
if stamp.hash.is_none() { |