Skip to content

Commit ff3cf61

Browse files
committed
build: safe and cachable build
- improve safe.directory setup - export chainload toolchain file vars - add clean --clean-downloads-after-build Signed-off-by: l.feng <43399351+msclock@users.noreply.github.com>
1 parent 2fc05cb commit ff3cf61

3 files changed

Lines changed: 81 additions & 35 deletions

File tree

.github/workflows/reuseable_cibuildwheel.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ jobs:
4949
if: runner.os == 'Linux' && inputs.extra && contains(matrix.qemu_arch, matrix.arch)
5050

5151
- name: Cache
52+
if: >
53+
inputs.auto && !contains(matrix.qemu_arch, matrix.arch) ||
54+
inputs.extra && contains(matrix.qemu_arch, matrix.arch)
5255
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
5356
with:
5457
path: |

cmake/vcpkg/bootstrap/vcpkg_bootstrap.cmake

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,32 @@ function(_vcpkg_upgrade vcpkg_root vcpkg_repo vcpkg_ref)
111111
return()
112112
endif()
113113

114-
execute_process(
115-
COMMAND ${GIT_EXECUTABLE} config --global --add safe.directory ${vcpkg_root}
116-
WORKING_DIRECTORY ${vcpkg_root}
117-
RESULT_VARIABLE result)
114+
# Check .gitconfig on linux or windows
115+
if(EXISTS "$ENV{HOME}/.gitconfig" OR EXISTS "$ENV{USERPROFILE}/.gitconfig")
116+
execute_process(
117+
COMMAND ${GIT_EXECUTABLE} config --get-all safe.directory
118+
WORKING_DIRECTORY ${vcpkg_root}
119+
OUTPUT_VARIABLE safe_directory
120+
OUTPUT_STRIP_TRAILING_WHITESPACE
121+
RESULT_VARIABLE result)
118122

119-
if(NOT result EQUAL "0")
120-
message(FATAL_ERROR "failed to change origin to ${vcpkg_repo}")
123+
if(NOT result EQUAL "0")
124+
message(FATAL_ERROR "failed to get git safe directory")
125+
endif()
126+
endif()
127+
128+
if(NOT DEFINED safe_directory
129+
OR (DEFINED safe_directory AND NOT safe_directory MATCHES "${vcpkg_root}"))
130+
message(STATUS "vcpkg root is not in the git safe directory, adding...")
131+
132+
execute_process(
133+
COMMAND ${GIT_EXECUTABLE} config --global safe.directory ${vcpkg_root}
134+
WORKING_DIRECTORY ${vcpkg_root}
135+
RESULT_VARIABLE result)
136+
137+
if(NOT result EQUAL "0")
138+
message(FATAL_ERROR "${GIT_EXECUTABLE} config failed with ${result}")
139+
endif()
121140
endif()
122141

123142
execute_process(
@@ -219,4 +238,16 @@ function(_vcpkg_bootstrap)
219238
endif()
220239

221240
_vcpkg_set_cache_variables("${vcpkg_root}")
241+
242+
# Make sure downloads folder is 755 on linux
243+
if(CMAKE_HOST_UNIX)
244+
execute_process(
245+
COMMAND chmod 755 ${vcpkg_root}/downloads
246+
WORKING_DIRECTORY ${vcpkg_root}
247+
RESULT_VARIABLE result)
248+
249+
if(NOT result EQUAL "0")
250+
message(STATUS "failed to chmod 755 ${vcpkg_root}/downloads")
251+
endif()
252+
endif()
222253
endfunction()

cmake/vcpkg/bootstrap/vcpkg_chainload_toolchain.cmake

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,51 @@ SPDX-FileCopyrightText: Copyright 2024 msclock
55

66
# configure VCPKG_CHAINLOAD_TOOLCHAIN_FILE based on VCPKG_TARGET_TRIPLET and
77
# VCPKG_TARGET_ARCHITECTURE
8-
function(_vcpkg_chainload_toolchain)
9-
if(NOT DEFINED VCPKG_TARGET_TRIPLET OR NOT DEFINED VCPKG_TARGET_ARCHITECTURE)
10-
message(
11-
FATAL_ERROR
12-
"VCPKG_TARGET_TRIPLET and VCPKG_TARGET_ARCHITECTURE must be set before calling _vcpkg_chainload_toolchain()"
13-
)
14-
endif()
8+
macro(_vcpkg_chainload_toolchain)
9+
if(NOT DEFINED VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
10+
if(NOT DEFINED VCPKG_TARGET_TRIPLET OR NOT DEFINED
11+
VCPKG_TARGET_ARCHITECTURE)
12+
message(
13+
FATAL_ERROR
14+
"VCPKG_TARGET_TRIPLET and VCPKG_TARGET_ARCHITECTURE must be set before calling _vcpkg_chainload_toolchain()"
15+
)
16+
endif()
17+
18+
# Load toolchain variables from triplet and architecture
1519

16-
# Load toolchain variables from triplet and architecture
20+
string(LENGTH "${VCPKG_TARGET_ARCHITECTURE}-" _prefix_len)
21+
string(SUBSTRING ${VCPKG_TARGET_TRIPLET} ${_prefix_len} -1 _stripped_string)
22+
string(REPLACE "-" ";" _triplet_parts "${_stripped_string}")
23+
list(GET _triplet_parts 0 _chainload_toolchain_name)
1724

18-
string(LENGTH "${VCPKG_TARGET_ARCHITECTURE}-" _prefix_len)
19-
string(SUBSTRING ${VCPKG_TARGET_TRIPLET} ${_prefix_len} -1 _stripped_string)
20-
string(REPLACE "-" ";" _triplet_parts "${_stripped_string}")
21-
list(GET _triplet_parts 0 _chainload_toolchain_name)
25+
set(_toolchain "scripts/toolchains/${_chainload_toolchain_name}.cmake")
2226

23-
set(_toolchain "scripts/toolchains/${_chainload_toolchain_name}.cmake")
27+
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${_toolchain}")
28+
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE
29+
"${CMAKE_CURRENT_LIST_DIR}/${_toolchain}"
30+
CACHE INTERNAL "vcpkg chainload")
31+
elseif(EXISTS "${_VCPKG_ROOT}/${_toolchain}")
32+
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE
33+
"${_VCPKG_ROOT}/${_toolchain}"
34+
CACHE INTERNAL "vcpkg chainload")
2435

25-
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${_toolchain}")
26-
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE
27-
"${CMAKE_CURRENT_LIST_DIR}/${_toolchain}"
28-
CACHE INTERNAL "vcpkg chainload")
29-
elseif(EXISTS "${_VCPKG_ROOT}/${_toolchain}")
30-
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE
31-
"${_VCPKG_ROOT}/${_toolchain}"
32-
CACHE INTERNAL "vcpkg chainload")
33-
else()
36+
else()
37+
message(
38+
WARNING
39+
"Could not find toolchain file for ${_chainload_toolchain_name}, skipping chainload"
40+
)
41+
endif()
42+
endif()
43+
44+
if(EXISTS "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
3445
message(
35-
FATAL_ERROR
36-
"Could not find toolchain file for ${_chainload_toolchain_name}, skipping chainload"
46+
STATUS "vcpkg_chainload_toolchain_file: ${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}"
3747
)
48+
include(${VCPKG_CHAINLOAD_TOOLCHAIN_FILE})
3849
endif()
39-
40-
message(
41-
STATUS "vcpkg_chainload_toolchain_file: ${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
42-
include(${VCPKG_CHAINLOAD_TOOLCHAIN_FILE})
43-
endfunction()
50+
unset(_chainload_toolchain_name)
51+
unset(_triplet_parts)
52+
unset(_toolchain)
53+
unset(_prefix_len)
54+
unset(_stripped_string)
55+
endmacro()

0 commit comments

Comments
 (0)