Browse Source

cmake: Use TARGET_ARCH var for detecting and aliasing target arch

Xenofon Karamanos 3 weeks ago
parent
commit
74c1c3fc91
2 changed files with 31 additions and 12 deletions
  1. 4 4
      cmake/compiler-specific.cmake
  2. 27 8
      cmake/defs.cmake

+ 4 - 4
cmake/compiler-specific.cmake

@@ -6,7 +6,7 @@ option(PROFILE "Enable profiling" OFF)
 add_library(common_compiler_flags INTERFACE)
 
 # Define the flags for the C compiler
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
+if(TARGET_ARCH MATCHES "x86_64")
 
   if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
@@ -30,7 +30,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
     target_link_options(common_compiler_flags INTERFACE -m64)
   endif()
 
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i486|i586|i686")
+elseif(TARGET_ARCH MATCHES "i386")
 
   if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
@@ -53,7 +53,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i486|i586|i686")
     target_link_options(common_compiler_flags INTERFACE -m32)
   endif()
 
-elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
+elseif(TARGET_ARCH MATCHES "aarch64")
 
   if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)
@@ -69,7 +69,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
 
   endif()
 
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64$")
+elseif(TARGET_ARCH MATCHES "ppc64$")
   # PowerPC 64-bit specific flags
   if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     target_compile_definitions(common_compiler_flags INTERFACE CC_GCC_LIKE_ASM)

+ 27 - 8
cmake/defs.cmake

@@ -23,10 +23,26 @@ set(OSREL ${CMAKE_SYSTEM_VERSION})
 message(STATUS "OS version: ${OSREL}")
 # set(HOST_ARCH "__CPU_${CMAKE_HOST_SYSTEM_PROCESSOR}")
 
+# Set the target architecture alias based on the system processor
+# Currently known used archs
+# i386, x86_64, aarch64, arm7, arm6, ppc64, mips, alpha
 if(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i486|i586|i686")
   set(TARGET_ARCH "i386")
 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
   set(TARGET_ARCH "x86_64")
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64$")
+  set(TARGET_ARCH "aarch64")
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv8|armv7")
+  # Match any variant like v7l
+  # armv8 is the 64-bit ARM architecture, uname -a will report it as aarch64 probably
+  # if not retarget it to arm7
+  # arm8 not supported yet from core atomic operations, fallback to arm7
+  set(TARGET_ARCH "arm7")
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv6")
+  set(TARGET_ARCH "arm6")
+  # Other older arm arch versions shall report as arm to kamailio
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
+  set(TARGET_ARCH "arm")
 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le$")
   set(TARGET_ARCH "ppc64")
 else()
@@ -167,22 +183,25 @@ option(USE_FAST_LOCK "Use fast locking if available" ON)
 # Fast-lock not available for all platforms like mips
 # Check the system processor type and set USE_FAST_LOCK accordingly
 if(USE_FAST_LOCK)
-  if(CMAKE_SYSTEM_PROCESSOR MATCHES
-     "i386|i486|i586|i686|x86_64|amd64|sparc64|sparc|ppc$|ppc64$|alpha|mips2|mips64"
-  )
+  if(TARGET_ARCH MATCHES "i386$|x86_64$|sparc64$|sparc$|ppc$|ppc64$|mips2$|mips64$")
     set(USE_FAST_LOCK YES)
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
-    set(USE_FAST_LOCK NO)
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm6|arm7")
+  elseif(TARGET_ARCH MATCHES "aarch64$")
+    set(USE_FAST_LOCK YES)
+    target_compile_definitions(common INTERFACE NOSMP) # memory barriers not
+                                                       # implemented for arm
+  elseif(TARGET_ARCH MATCHES "arm6$|arm7$")
     set(USE_FAST_LOCK YES)
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64")
+  elseif(TARGET_ARCH MATCHES "arm$")
     set(USE_FAST_LOCK YES)
     target_compile_definitions(common INTERFACE NOSMP) # memory barriers not
                                                        # implemented for arm
-  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips")
+  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips$")
     set(USE_FAST_LOCK NO)
     target_compile_definitions(common INTERFACE MIPS_HAS_LLSC) # likely
     target_compile_definitions(common INTERFACE NOSMP) # very likely
+  elseif(TARGET_ARCH MATCHES "alpha$")
+    set(USE_FAST_LOCK YES)
+    target_compile_definitions(common INTERFACE NOSMP) # very likely
   else()
     message(STATUS "Fast locking not available for this platform, disabling USE_FAST_LOCK")
     set(USE_FAST_LOCK NO)