From 3c16f580b0dfd836d4f34638fcb059d23900ed5c Mon Sep 17 00:00:00 2001
From: Sergey Fedorov <barracuda@macos-powerpc.org>
Date: Mon, 29 Jul 2024 17:24:31 +0800
Subject: [PATCH 3/3] CMakeLists: fix powerpc

---
 CMakeLists.txt | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git CMakeLists.txt CMakeLists.txt
index 44d3898..d8c8793 100644
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -25,6 +25,9 @@ ENDIF()
 
 set(VERSION "v${LIB_VERSION_STRING}")
 
+include(TestBigEndian)
+TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
+
 # add git revision
 IF(EXISTS ${PROJECT_SOURCE_DIR}/.git )
   FIND_PACKAGE(Git)
@@ -151,6 +154,8 @@ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
   set(ARCH "x86_64")
 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(ppc64.*|PPC64.*|powerpc64.*)")
   set(ARCH "ppc64")
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc|powerpc")
+  set(ARCH "ppc")
 elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(aarch64|arm64)")
   set(ARCH "aarch64")
 elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "unknown")
@@ -164,8 +169,18 @@ if(${ARCH} STREQUAL "x86_64")
   message(STATUS "Detected 64-bit x86 target")
   #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -march=native")
 elseif(${ARCH} STREQUAL "ppc64")
-  message(STATUS "Detected 64-bit POWER target")
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNO_WARN_X86_INTRINSICS -DSSE_CORRECT_DENORMALS")
+  if(IS_BIG_ENDIAN)
+    message(STATUS "Detected 64-bit Big-endian POWER target")
+    # x86 intrinsics headers should not be used on Big-endian ppc, those ported insns assume ppc64le arch.
+    # -DNO_WARN_X86_INTRINSICS disables erring out, but we want it to fail if those headers are pulled in.
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec -mtune=native -DSSE_CORRECT_DENORMALS")
+  else()
+    message(STATUS "Detected 64-bit Little-endian POWER target")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNO_WARN_X86_INTRINSICS -DSSE_CORRECT_DENORMALS")
+  endif()
+elseif(${ARCH} STREQUAL "ppc")
+  message(STATUS "Detected 32-bit PowerPC target")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec -mtune=native -DSSE_CORRECT_DENORMALS")
 elseif(${ARCH} STREQUAL "aarch64")
   message(STATUS "Detected 64-bit ARM target")
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNO_WARN_X86_INTRINSICS -DSSE_CORRECT_DENORMALS")
