Skip to content

Commit c84ad73

Browse files
committed
[CMake] Improve GetHostTriple for Windows/ARM configurations
In MSVC mode, CMake provides CMAKE_C_COMPILER_ARCHITECTURE_ID, which should be accurate for what the compiler produces. Keep the old CMAKE_C_SIZEOF_VOID_P based fallback in case this doesn't provide matches. In GCC/MinGW mode, CMake doesn't provide that. As we're trying to guess the default host architecture, use CMAKE_HOST_SYSTEM_PROCESSOR in combination with the existing CMAKE_C_SIZEOF_VOID_P check to estimate whether it's x86/x86_64/arm/aarch64. Differential Revision: https://reviews.llvm.org/D107626
1 parent 53642d5 commit c84ad73

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

llvm/cmake/modules/GetHostTriple.cmake

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,34 @@
33

44
function( get_host_triple var )
55
if( MSVC )
6-
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
6+
if( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" )
7+
set( value "aarch64-pc-windows-msvc" )
8+
elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" )
9+
set( value "armv7-pc-windows-msvc" )
10+
elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "x64" )
11+
set( value "x86_64-pc-windows-msvc" )
12+
elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "X86" )
13+
set( value "i686-pc-windows-msvc" )
14+
elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
715
set( value "x86_64-pc-windows-msvc" )
816
else()
917
set( value "i686-pc-windows-msvc" )
1018
endif()
1119
elseif( MINGW AND NOT MSYS )
12-
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
13-
set( value "x86_64-w64-windows-gnu" )
20+
# CMake doesn't provide COMPILER_ARCHITECTURE_ID for Clang/GCC,
21+
# but it does for MSVC.
22+
if( CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ARM.*" )
23+
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
24+
set( value "aarch64-w64-windows-gnu" )
25+
else()
26+
set( value "armv7-pc-windows-gnu" )
27+
endif()
1428
else()
15-
set( value "i686-pc-windows-gnu" )
29+
if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
30+
set( value "x86_64-w64-windows-gnu" )
31+
else()
32+
set( value "i686-pc-windows-gnu" )
33+
endif()
1634
endif()
1735
elseif( CMAKE_SYSTEM_NAME MATCHES "OS390" )
1836
set( value "s390x-ibm-zos" )

0 commit comments

Comments
 (0)