@@ -15,6 +15,7 @@ use std::fs::{self, File};
1515use std:: io;
1616use std:: path:: { Path , PathBuf } ;
1717use std:: process:: Command ;
18+ use std:: sync:: OnceLock ;
1819
1920use crate :: core:: builder:: { Builder , RunConfig , ShouldRun , Step } ;
2021use crate :: core:: config:: { Config , TargetSelection } ;
@@ -105,13 +106,16 @@ pub fn prebuilt_llvm_config(
105106 let llvm_cmake_dir = out_dir. join ( "lib/cmake/llvm" ) ;
106107 let res = LlvmResult { llvm_config : build_llvm_config, llvm_cmake_dir } ;
107108
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+ } ) ;
112116
113117 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) ) ;
115119
116120 if stamp. is_done ( ) {
117121 if stamp. hash . is_none ( ) {
0 commit comments