Skip to content

Commit 96dbba1

Browse files
authored
Compiler detection: Cache compiler hash (#42994)
1 parent 7894bc9 commit 96dbba1

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

scripts/detect_compiler/CMakeLists.txt

+39-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,45 @@ endif()
1111
enable_language(C)
1212
enable_language(CXX)
1313

14-
file(SHA1 "${CMAKE_CXX_COMPILER}" CXX_HASH)
15-
file(SHA1 "${CMAKE_C_COMPILER}" C_HASH)
14+
if(VCPKG_COMPILER_CACHE_FILE)
15+
if(EXISTS "${VCPKG_COMPILER_CACHE_FILE}")
16+
file(READ "${VCPKG_COMPILER_CACHE_FILE}" JSON_CONTENT)
17+
else()
18+
set(JSON_CONTENT "{}")
19+
endif()
20+
21+
function(get_hash compiler_path out_var)
22+
file(TO_CMAKE_PATH "${compiler_path}" "compiler_path")
23+
file(SIZE "${compiler_path}" SIZE)
24+
file(TIMESTAMP "${compiler_path}" TIMESTAMP "%s" UTC)
25+
26+
string(JSON COMPILER_EXISTS ERROR_VARIABLE JSON_ERROR GET "${JSON_CONTENT}" "${compiler_path}")
27+
if(NOT JSON_ERROR)
28+
# Get compiler attributes using JSON API
29+
string(JSON SIZE_JSON GET "${JSON_CONTENT}" "${compiler_path}" "size")
30+
string(JSON TIMESTAMP_JSON GET "${JSON_CONTENT}" "${compiler_path}" "timestamp")
31+
string(JSON HASH_JSON GET "${JSON_CONTENT}" "${compiler_path}" "hash")
32+
if ((SIZE_JSON EQUAL SIZE) AND (TIMESTAMP_JSON EQUAL TIMESTAMP))
33+
set("${out_var}" "${HASH_JSON}" PARENT_SCOPE)
34+
return()
35+
endif()
36+
endif()
37+
file(SHA1 "${compiler_path}" HASH)
38+
# Add new entry to JSON
39+
string(JSON JSON_CONTENT SET "${JSON_CONTENT}" "${compiler_path}" "{\"size\": ${SIZE}, \"timestamp\": ${TIMESTAMP}, \"hash\": \"${HASH}\"}")
40+
set("${out_var}" "${HASH}" PARENT_SCOPE)
41+
set(JSON_CONTENT "${JSON_CONTENT}" PARENT_SCOPE)
42+
endfunction()
43+
44+
get_hash("${CMAKE_C_COMPILER}" C_HASH)
45+
get_hash("${CMAKE_CXX_COMPILER}" CXX_HASH)
46+
47+
# Write updated JSON back to file
48+
file(WRITE "${VCPKG_COMPILER_CACHE_FILE}" "${JSON_CONTENT}")
49+
else()
50+
file(SHA1 "${CMAKE_CXX_COMPILER}" CXX_HASH)
51+
file(SHA1 "${CMAKE_C_COMPILER}" C_HASH)
52+
endif()
1653
string(SHA1 COMPILER_HASH "${C_HASH}${CXX_HASH}")
1754

1855
message("#COMPILER_HASH#${COMPILER_HASH}")

scripts/detect_compiler/portfile.cmake

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ set(VCPKG_BUILD_TYPE release)
1818
vcpkg_configure_cmake(
1919
SOURCE_PATH "${CMAKE_CURRENT_LIST_DIR}"
2020
PREFER_NINJA
21+
OPTIONS
22+
"-DVCPKG_COMPILER_CACHE_FILE=${VCPKG_COMPILER_CACHE_FILE}"
23+
2124
)
2225

2326
foreach(LOG IN LISTS LOGS)

0 commit comments

Comments
 (0)