Skip to content

Commit b4e14f8

Browse files
[runtimes] Fix parsing of LIB{CXX,CXXABI,UNWIND}_TEST_PARAMS
Since 78d649a the recommended way to pass an executor is to use the _TEST_PARAMS variable, which means we now pass more complicated value (including ones that may contain multiple `=`) as part of this variable. However, the `REGEX REPLACE` being used has greedy matches so everything up to the last = becomes part of the variable name which results in invalid syntax in the generated lit config file. This was noticed due to builder failures for those using the CrossWinToARMLinux.cmake cache file. Co-authored-by: Vladimir Vereschaka <[email protected]>
1 parent 70cfa2f commit b4e14f8

File tree

5 files changed

+24
-18
lines changed

5 files changed

+24
-18
lines changed

clang/cmake/caches/CrossWinToARMLinux.cmake

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS
151151

152152
find_package(Python3 COMPONENTS Interpreter)
153153

154+
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_TEST_PARAMS_default "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_TEST_PARAMS}")
155+
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_TEST_PARAMS_default "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_TEST_PARAMS}")
156+
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_TEST_PARAMS_default "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_TEST_PARAMS}")
157+
154158
# Remote test configuration.
155159
if(DEFINED REMOTE_TEST_HOST)
156160
# Allow override with the custom values.
@@ -162,11 +166,15 @@ if(DEFINED REMOTE_TEST_HOST)
162166
"\\\"${Python3_EXECUTABLE}\\\" \\\"${LLVM_PROJECT_DIR}/llvm/utils/remote-exec.py\\\" --host=${REMOTE_TEST_USER}@${REMOTE_TEST_HOST}"
163167
CACHE STRING "")
164168

165-
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_TEST_PARAMS "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_TEST_PARAMS} 'executor=${DEFAULT_TEST_EXECUTOR}'" CACHE STRING "")
166-
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_TEST_PARAMS "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_TEST_PARAMS} 'executor=${DEFAULT_TEST_EXECUTOR}'" CACHE STRING "")
167-
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_TEST_PARAMS "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_TEST_PARAMS} 'executor=${DEFAULT_TEST_EXECUTOR}'" CACHE STRING "")
169+
list(APPEND RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_TEST_PARAMS_default "executor=${DEFAULT_TEST_EXECUTOR}")
170+
list(APPEND RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_TEST_PARAMS_default "executor=${DEFAULT_TEST_EXECUTOR}")
171+
list(APPEND RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_TEST_PARAMS_default "executor=${DEFAULT_TEST_EXECUTOR}")
168172
endif()
169173

174+
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_TEST_PARAMS "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_TEST_PARAMS_default}" CACHE INTERNAL "")
175+
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_TEST_PARAMS "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_TEST_PARAMS_default}" CACHE INTERNAL "")
176+
set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_TEST_PARAMS "${RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_TEST_PARAMS_default}" CACHE INTERNAL "")
177+
170178
set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
171179
set(LLVM_TOOLCHAIN_TOOLS
172180
llvm-ar

libcxx/test/CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,7 @@ if (LLVM_USE_SANITIZER)
3535
serialize_lit_string_param(SERIALIZED_LIT_PARAMS use_sanitizer "${LLVM_USE_SANITIZER}")
3636
endif()
3737

38-
foreach(param IN LISTS LIBCXX_TEST_PARAMS)
39-
string(REGEX REPLACE "(.+)=(.+)" "\\1" name "${param}")
40-
string(REGEX REPLACE "(.+)=(.+)" "\\2" value "${param}")
41-
serialize_lit_string_param(SERIALIZED_LIT_PARAMS "${name}" "${value}")
42-
endforeach()
38+
serialize_lit_params_list(SERIALIZED_LIT_PARAMS LIBCXX_TEST_PARAMS)
4339

4440
if (NOT DEFINED LIBCXX_TEST_DEPS)
4541
message(FATAL_ERROR "Expected LIBCXX_TEST_DEPS to be defined")

libcxxabi/test/CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,7 @@ else()
4949
serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${LLVM_DEFAULT_TARGET_TRIPLE}")
5050
endif()
5151

52-
foreach(param IN LISTS LIBCXXABI_TEST_PARAMS)
53-
string(REGEX REPLACE "(.+)=(.+)" "\\1" name "${param}")
54-
string(REGEX REPLACE "(.+)=(.+)" "\\2" value "${param}")
55-
serialize_lit_string_param(SERIALIZED_LIT_PARAMS "${name}" "${value}")
56-
endforeach()
52+
serialize_lit_params_list(SERIALIZED_LIT_PARAMS LIBCXXABI_TEST_PARAMS)
5753

5854
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/cmake-bridge.cfg.in"
5955
"${CMAKE_CURRENT_BINARY_DIR}/cmake-bridge.cfg"

libunwind/test/CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,7 @@ else()
3232
serialize_lit_string_param(SERIALIZED_LIT_PARAMS target_triple "${LLVM_DEFAULT_TARGET_TRIPLE}")
3333
endif()
3434

35-
foreach(param IN LISTS LIBUNWIND_TEST_PARAMS)
36-
string(REGEX REPLACE "(.+)=(.+)" "\\1" name "${param}")
37-
string(REGEX REPLACE "(.+)=(.+)" "\\2" value "${param}")
38-
serialize_lit_string_param(SERIALIZED_LIT_PARAMS "${name}" "${value}")
39-
endforeach()
35+
serialize_lit_params_list(SERIALIZED_LIT_PARAMS LIBUNWIND_TEST_PARAMS)
4036

4137
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/configs/cmake-bridge.cfg.in"
4238
"${CMAKE_CURRENT_BINARY_DIR}/cmake-bridge.cfg"

runtimes/cmake/Modules/HandleLitArguments.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,13 @@ macro(serialize_lit_string_param output_var param value)
88
string(REPLACE "\"" "\\\"" _escaped_value "${value}")
99
string(APPEND ${output_var} "config.${param} = \"${_escaped_value}\"\n")
1010
endmacro()
11+
12+
macro(serialize_lit_params_list output_var list)
13+
foreach(param IN LISTS ${list})
14+
string(FIND "${param}" "=" _eq_index)
15+
string(SUBSTRING "${param}" 0 ${_eq_index} name)
16+
string(SUBSTRING "${param}" ${_eq_index} -1 value)
17+
string(SUBSTRING "${value}" 1 -1 value) # strip the leading =
18+
serialize_lit_string_param("${output_var}" "${name}" "${value}")
19+
endforeach()
20+
endmacro()

0 commit comments

Comments
 (0)