llvm-project/llvm/cmake/modules/GetHostTriple.cmake
Martin Storsjö 592adb0b24 [CMake] Make the vendor part of default mingw triples consistent
Consistently use 'w64' as vendor string; it was 'pc' for the original
i686 triple added in 91bd6c922d7cf, but the later x86_64 triple
used 'w64' as vendor, added in d6c1f37f86440.

When the arm triples were added in c84ad73a27da6, the differing
vendors were copied over accidentally to the arm targets too.

When using per-target runtime directories, having inconsistent vendor
parts of the target triples is fatal.

Differential Revision: https://reviews.llvm.org/D107894
2021-08-12 13:27:09 +03:00

61 lines
2.1 KiB
CMake

# Returns the host triple.
# Invokes config.guess
function( get_host_triple var )
if( MSVC )
if( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" )
set( value "aarch64-pc-windows-msvc" )
elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" )
set( value "armv7-pc-windows-msvc" )
elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "x64" )
set( value "x86_64-pc-windows-msvc" )
elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "X86" )
set( value "i686-pc-windows-msvc" )
elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( value "x86_64-pc-windows-msvc" )
else()
set( value "i686-pc-windows-msvc" )
endif()
elseif( MINGW AND NOT MSYS )
# CMake doesn't provide COMPILER_ARCHITECTURE_ID for Clang/GCC,
# but it does for MSVC.
if( CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ARM.*" )
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( value "aarch64-w64-windows-gnu" )
else()
set( value "armv7-w64-windows-gnu" )
endif()
else()
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( value "x86_64-w64-windows-gnu" )
else()
set( value "i686-w64-windows-gnu" )
endif()
endif()
elseif( CMAKE_SYSTEM_NAME MATCHES "OS390" )
set( value "s390x-ibm-zos" )
elseif( CMAKE_SYSTEM_NAME STREQUAL AIX )
# We defer to dynamic detection of the host AIX version.
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set( value "powerpc64-ibm-aix" )
else()
set( value "powerpc-ibm-aix" )
endif()
else( MSVC )
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows AND NOT MSYS)
message(WARNING "unable to determine host target triple")
else()
set(config_guess ${LLVM_MAIN_SRC_DIR}/cmake/config.guess)
execute_process(COMMAND sh ${config_guess}
RESULT_VARIABLE TT_RV
OUTPUT_VARIABLE TT_OUT
OUTPUT_STRIP_TRAILING_WHITESPACE)
if( NOT TT_RV EQUAL 0 )
message(FATAL_ERROR "Failed to execute ${config_guess}")
endif( NOT TT_RV EQUAL 0 )
set( value ${TT_OUT} )
endif()
endif( MSVC )
set( ${var} ${value} PARENT_SCOPE )
endfunction( get_host_triple var )