Skip to content

Commit

Permalink
[CMake] Prefer multi-target variables over generic target variables i…
Browse files Browse the repository at this point in the history
…n 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
  • Loading branch information
DragonDisciple authored and petrhosek committed Jan 17, 2020
1 parent 9b9c68a commit 128e1eb
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions llvm/runtimes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit 128e1eb

Please sign in to comment.