diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake --- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake @@ -326,6 +326,21 @@ string(REPLACE "-" ";" TARGET_TRIPLE_LIST ${COMPILER_RT_DEFAULT_TARGET_TRIPLE}) list(GET TARGET_TRIPLE_LIST 0 COMPILER_RT_DEFAULT_TARGET_ARCH) + + # Map various forms of the architecture names to the canonical forms + # (as they are used by clang, see getArchNameForCompilerRTLib). + if("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "^i.86$") + # Android uses i686, but that's remapped at a later stage. + set(COMPILER_RT_DEFAULT_TARGET_ARCH "i386") + elseif ("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "^arm" AND + NOT "${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "^arm64") + if ("${COMPILER_RT_DEFAULT_TARGET_TRIPLE}" MATCHES ".*hf$") + set(COMPILER_RT_DEFAULT_TARGET_ARCH "armhf") + else() + set(COMPILER_RT_DEFAULT_TARGET_ARCH "arm") + endif() + endif() + # Determine if test target triple is specified explicitly, and doesn't match the # default. if(NOT COMPILER_RT_DEFAULT_TARGET_TRIPLE STREQUAL TARGET_TRIPLE)