فهرست منبع

wamr-compiler: Fix non-x86{_64} host builds (#3037)

The build system assumed sizeof (void *) == 8 as a host system
running on a x86_64 architecture, x86 otherwise. However, this
assumption is invalid for most other architectures out there, such as
aarch64 or armv7l.

This PR refers to the CMAKE_HOST_SYSTEM_PROCESSOR variable
which, according to the documentation, typically refers to the output
from "uname -m" for Unix-like systems.
Xavier Del Campo 2 سال پیش
والد
کامیت
ade97ac3e1
1فایلهای تغییر یافته به همراه25 افزوده شده و 12 حذف شده
  1. 25 12
      wamr-compiler/CMakeLists.txt

+ 25 - 12
wamr-compiler/CMakeLists.txt

@@ -58,25 +58,38 @@ if (DEFINED WAMR_BUILD_AOT_FUNC_PREFIX)
   add_definitions(-DAOT_FUNC_PREFIX="${WAMR_BUILD_AOT_FUNC_PREFIX}")
   add_definitions(-DAOT_FUNC_PREFIX="${WAMR_BUILD_AOT_FUNC_PREFIX}")
 endif ()
 endif ()
 
 
-# Set WAMR_BUILD_TARGET, currently values supported:
-# "X86_64", "AMD_64", "X86_32", "ARM_32", "MIPS_32", "XTENSA_32"
 if (NOT WAMR_BUILD_TARGET)
 if (NOT WAMR_BUILD_TARGET)
-  if (CMAKE_SIZEOF_VOID_P EQUAL 8)
-    # Build as X86_64 by default in 64-bit platform
+  if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
     set (WAMR_BUILD_TARGET "X86_64")
     set (WAMR_BUILD_TARGET "X86_64")
-  else ()
-    # Build as X86_32 by default in 32-bit platform
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "i686")
     set (WAMR_BUILD_TARGET "X86_32")
     set (WAMR_BUILD_TARGET "X86_32")
-  endif ()
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "amd64")
+    set (WAMR_BUILD_TARGET "AMD_64")
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64"
+          OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
+    set (WAMR_BUILD_TARGET "AARCH64")
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm.*")
+    message(STATUS "Assuming ${CMAKE_HOST_SYSTEM_PROCESSOR} as ARM_32")
+    set (WAMR_BUILD_TARGET "ARM_32")
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "mips")
+    set (WAMR_BUILD_TARGET "MIPS_32")
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "xtensa")
+    set (WAMR_BUILD_TARGET "XTENSA_32")
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "riscv64")
+    set (WAMR_BUILD_TARGET "RISCV64")
+  elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "riscv")
+    message(STATUS "Assuming ${CMAKE_HOST_SYSTEM_PROCESSOR} as RISCV32")
+    set (WAMR_BUILD_TARGET "RISCV32")
+  else ()
+    message (FATAL_ERROR "Unsupported CMAKE_HOST_SYSTEM_PROCESSOR "
+    "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+  endif()
+
   if (WAMR_BUILD_PLATFORM STREQUAL "windows")
   if (WAMR_BUILD_PLATFORM STREQUAL "windows")
     if (("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win32"))
     if (("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win32"))
       set (WAMR_BUILD_TARGET "X86_32")
       set (WAMR_BUILD_TARGET "X86_32")
     endif()
     endif()
-  elseif (WAMR_BUILD_PLATFORM STREQUAL "darwin")
-    if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
-      set (WAMR_BUILD_TARGET "AARCH64")
-    endif ()
-  endif()
+  endif ()
 endif ()
 endif ()
 
 
 string(TOUPPER ${WAMR_BUILD_TARGET} WAMR_BUILD_TARGET)
 string(TOUPPER ${WAMR_BUILD_TARGET} WAMR_BUILD_TARGET)