[llvm] 128e1eb - [CMake] Prefer multi-target variables over generic target variables in runtimes build
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 17 15:18:39 PST 2020
Author: James Nagurne
Date: 2020-01-17T15:18:18-08:00
New Revision: 128e1ebd931027c58065f0c0dc83c0b6a1c53a83
URL: https://github.com/llvm/llvm-project/commit/128e1ebd931027c58065f0c0dc83c0b6a1c53a83
DIFF: https://github.com/llvm/llvm-project/commit/128e1ebd931027c58065f0c0dc83c0b6a1c53a83.diff
LOG: [CMake] Prefer multi-target variables over generic target variables in runtimes build
Runtimes variables in a multi-target environment are defined like:
RUNTIMES_target_VARIABLE_NAME
RUNTIMES_target+multi_VARIABLE_NAME
In my case, I have a downstream runtimes cache that does the following:
set(RUNTIMES_${target}+except_LIBCXXABI_ENABLE_EXCEPTIONS ON CACHE BOOL "")
set(RUNTIMES_${target}_LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "")
I found that I was always getting the 'target' variable value (OFF) in
my 'target+except' build, which was unexpected. This behavior was
caused by the loop in llvm/runtimes/CMakeLists.txt that runs through all
variable names, adding '-DVARIABLE_NAME=' options to the subsequent
external project's cmake command.
The issue is that the loop does a single pass, such that if the 'target'
value appears in the cache after the 'target+except' value, the 'target'
value will take precedence. I suggest in my change here that the more
specific 'target+except' value should take precedence always, without
relying on CMake cache ordering.
Differential Revision: https://reviews.llvm.org/D71570
Patch By: JamesNagurne
Added:
Modified:
llvm/runtimes/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt
index f29d601d3fcd..e98c61c0ee69 100644
--- a/llvm/runtimes/CMakeLists.txt
+++ b/llvm/runtimes/CMakeLists.txt
@@ -448,14 +448,16 @@ else() # if this is included from LLVM's CMake
get_cmake_property(variableNames VARIABLES)
foreach(variableName ${variableNames})
- string(FIND "${variableName}" "RUNTIMES_${name}_" out)
+ string(FIND "${variableName}" "RUNTIMES_${target}_" out)
if("${out}" EQUAL 0)
- string(REPLACE "RUNTIMES_${name}_" "" new_name ${variableName})
+ string(REPLACE "RUNTIMES_${target}_" "" new_name ${variableName})
list(APPEND ${name}_extra_args "-D${new_name}=${${variableName}}")
endif()
- string(FIND "${variableName}" "RUNTIMES_${target}_" out)
+ endforeach()
+ foreach(variableName ${variableNames})
+ string(FIND "${variableName}" "RUNTIMES_${name}_" out)
if("${out}" EQUAL 0)
- string(REPLACE "RUNTIMES_${target}_" "" new_name ${variableName})
+ string(REPLACE "RUNTIMES_${name}_" "" new_name ${variableName})
list(APPEND ${name}_extra_args "-D${new_name}=${${variableName}}")
endif()
endforeach()
More information about the llvm-commits
mailing list