From 4dc40c3807bf55c549ac4d3a018002a7eb4cc5b4 Mon Sep 17 00:00:00 2001 From: Ivan-Velickovic Date: Tue, 13 Jun 2023 12:52:50 +1000 Subject: [PATCH] cmake: detect 32-bit x86 cross-compilers Signed-off-by: Ivan-Velickovic --- gcc.cmake | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gcc.cmake b/gcc.cmake index f47aa9814..61947dc95 100644 --- a/gcc.cmake +++ b/gcc.cmake @@ -117,13 +117,19 @@ if("${CROSS_COMPILER_PREFIX}" STREQUAL "") endif() if("${CROSS_COMPILER_PREFIX}" STREQUAL "") - # If we haven't set a target above we assume x86_64/ia32 target - if(CMAKE_HOST_APPLE) - # CMAKE_HOST_APPLE is a CMake variable that evaluates to True on a Mac OSX system - FindPrefixedGCC(CROSS_COMPILER_PREFIX "x86_64-linux-gnu-" "x86_64-unknown-linux-gnu-") - elseif("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "aarch64") - # If we're on an aarch64 host, gcc won't support x86. Set an x86 compatible toolchain - FindPrefixedGCC(CROSS_COMPILER_PREFIX "x86_64-linux-gnu-" "x86_64-unknown-linux-gnu-") + # If we haven't set a target above we assume x86_64/ia32 target, and hence have to + # find an appropriate x86 compatible toolchain. If we're on an AArch64 host, GCC will + # not support x86. If we're on macOS (detected via CMAKE_HOST_APPLE), we need to find + # the appropriate x86 compiler regardless of host architecture. This is as `gcc` + # usually actually uses clang on macOS, not GCC. + if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "aarch64" OR CMAKE_HOST_APPLE) + if("${sel4_arch}" STREQUAL "ia32") + FindPrefixedGCC(CROSS_COMPILER_PREFIX "i686-linux-gnu-" "i686-unknown-linux-gnu-") + else() + FindPrefixedGCC( + CROSS_COMPILER_PREFIX "x86_64-linux-gnu-" "x86_64-unknown-linux-gnu-" + ) + endif() endif() endif() endif()