@@ -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 ( ) {
0 commit comments