From d27db3defa2d76ca65052fd2232d78bc39573983 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 15 Mar 2023 04:56:55 +0100
Subject: [PATCH] cmake+video: always use altivec.h header for detection +
introduce SDL_ENABLE_ALTIVEC
---
CMakeLists.txt | 16 +++++-----------
cmake/CheckCPUArchitecture.cmake | 4 ++--
cmake/sdlplatform.cmake | 2 +-
include/SDL3/SDL_intrin.h | 4 ++--
include/build_config/SDL_build_config.h.cmake | 1 -
src/SDL_internal.h | 4 ++++
src/video/SDL_blit_N.c | 3 ---
7 files changed, 14 insertions(+), 20 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 42ad41af53e2..facbf93c7245 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -856,23 +856,17 @@ if(SDL_ASSEMBLY)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -maltivec")
check_c_source_compiles("
#include <altivec.h>
- vector unsigned int vzero() {
- return vec_splat_u32(0);
- }
- int main(int argc, char **argv) { return 0; }" HAVE_ALTIVEC_H_HDR)
- check_c_source_compiles("
vector unsigned int vzero() {
return vec_splat_u32(0);
}
int main(int argc, char **argv) { return 0; }" CPU_SUPPORTS_ALTIVEC)
cmake_pop_check_state()
- if(CPU_SUPPORTS_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
- set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set
- target_compile_options(sdl-build-options INTERFACE "-maltivec")
+ if(CPU_SUPPORTS_ALTIVEC)
+ set(HAVE_ALTIVEC TRUE)
set(SDL_ALTIVEC_BLITTERS 1)
- if(HAVE_ALTIVEC_H_HDR)
- set(HAVE_ALTIVEC_H 1)
- endif()
+ target_compile_options(sdl-build-options INTERFACE "-maltivec")
+ set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_N.c" APPEND PROPERTY COMPILE_DEFINITIONS "SDL_ENABLE_ALTIVEC")
+ set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_N.c" APPEND PROPERTY SKIP_PRECOMPILE_HEADERS 1)
endif()
endif()
diff --git a/cmake/CheckCPUArchitecture.cmake b/cmake/CheckCPUArchitecture.cmake
index fb560af10c68..8e2954b93f92 100644
--- a/cmake/CheckCPUArchitecture.cmake
+++ b/cmake/CheckCPUArchitecture.cmake
@@ -36,10 +36,10 @@ function(check_cpu_architecture ARCH VARIABLE)
_internal_check_cpu_architecture("defined(__loongarch64)" loongarch64 ${VARIABLE})
elseif(ARCH STREQUAL "emscripten")
_internal_check_cpu_architecture("defined(__EMSCRIPTEN__)" emscripten ${VARIABLE})
- elseif(ARCH STREQUAL "powerpc32")
- _internal_check_cpu_architecture("defined(__PPC__) || defined(__powerpc__)" powerpc32 ${VARIABLE})
elseif(ARCH STREQUAL "powerpc64")
_internal_check_cpu_architecture("defined(__PPC64__) || defined(__powerpc64__)" powerpc64 ${VARIABLE})
+ elseif(ARCH STREQUAL "powerpc32")
+ _internal_check_cpu_architecture("(defined(__PPC__) || defined(__powerpc__)) && !defined(__powerpc64__)" powerpc32 ${VARIABLE})
else()
message(WARNING "Unknown CPU architectures (${ARCH}).")
set("${VARIABLE}" FALSE)
diff --git a/cmake/sdlplatform.cmake b/cmake/sdlplatform.cmake
index b2488e0214df..5cf31457cd4f 100644
--- a/cmake/sdlplatform.cmake
+++ b/cmake/sdlplatform.cmake
@@ -78,7 +78,7 @@ function(SDL_DetectCPUArchitecture)
endforeach()
endif()
- set(sdl_known_archs x64 x86 arm64 arm32 emscripten powerpc32 powerpc64 loongarch64)
+ set(sdl_known_archs x64 x86 arm64 arm32 emscripten powerpc64 powerpc32 loongarch64)
if(NOT sdl_cpu_names)
set(found FALSE)
foreach(sdl_known_arch ${sdl_known_archs})
diff --git a/include/SDL3/SDL_intrin.h b/include/SDL3/SDL_intrin.h
index 80be5a562f5f..6fedc18b2ab5 100644
--- a/include/SDL3/SDL_intrin.h
+++ b/include/SDL3/SDL_intrin.h
@@ -69,8 +69,8 @@ _m_prefetch(void *__P)
# include <arm_neon.h>
#endif
#else
-/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */
-#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H)
+/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC to have it included. */
+#if defined(__ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC)
#include <altivec.h>
#endif
#if !defined(SDL_DISABLE_NEON)
diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake
index 433b99225f1a..5d8d2dbc59b3 100644
--- a/include/build_config/SDL_build_config.h.cmake
+++ b/include/build_config/SDL_build_config.h.cmake
@@ -215,7 +215,6 @@
#cmakedefine HAVE_FLOAT_H 1
#endif /* HAVE_LIBC */
-#cmakedefine HAVE_ALTIVEC_H 1
#cmakedefine HAVE_DBUS_DBUS_H 1
#cmakedefine HAVE_FCITX 1
#cmakedefine HAVE_IBUS_IBUS_H 1
diff --git a/src/SDL_internal.h b/src/SDL_internal.h
index cea752ae6dde..89c6f224e036 100644
--- a/src/SDL_internal.h
+++ b/src/SDL_internal.h
@@ -186,6 +186,10 @@
#include <SDL3/SDL.h>
#include <SDL3/SDL_intrin.h>
+#if defined(__ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC)
+#define HAVE_ALTIVEC_INTRINSICS 1
+#endif
+
#if defined(__ARM_NEON) && !defined(SDL_DISABLE_NEON)
#define HAVE_NEON_INTRINSICS 1
#endif
diff --git a/src/video/SDL_blit_N.c b/src/video/SDL_blit_N.c
index f42ad44e8cb1..0fed6caa7329 100644
--- a/src/video/SDL_blit_N.c
+++ b/src/video/SDL_blit_N.c
@@ -46,9 +46,6 @@ enum blit_features
};
#if SDL_ALTIVEC_BLITTERS
-#ifdef HAVE_ALTIVEC_H
-#include <altivec.h>
-#endif
#ifdef __MACOS__
#include <sys/sysctl.h>
static size_t