From 3c16f580b0dfd836d4f34638fcb059d23900ed5c Mon Sep 17 00:00:00 2001 From: Sergey Fedorov 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")