|
@@ -329,6 +329,8 @@ set_option(SSE "Use SSE assembly routines" ${OPT_DEF_ASM})
|
|
|
set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
|
|
|
set_option(SSE3 "Use SSE3 assembly routines" ${OPT_DEF_SSEMATH})
|
|
|
set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM})
|
|
|
+set_option(ARMSIMD "use SIMD assembly blitters on ARM" ON)
|
|
|
+set_option(ARMNEON "use NEON assembly blitters on ARM" ON)
|
|
|
set_option(DISKAUDIO "Support the disk writer audio driver" ON)
|
|
|
set_option(DUMMYAUDIO "Support the dummy audio driver" ON)
|
|
|
set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF)
|
|
@@ -671,6 +673,61 @@ if(ASSEMBLY)
|
|
|
endif()
|
|
|
endif()
|
|
|
endif()
|
|
|
+
|
|
|
+ if(ARMSIMD)
|
|
|
+ set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
|
|
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
|
|
|
+ check_c_source_compiles("
|
|
|
+ .text
|
|
|
+ .arch armv6
|
|
|
+ .object_arch armv4
|
|
|
+ .arm
|
|
|
+ .altmacro
|
|
|
+ #ifndef __ARM_EABI__
|
|
|
+ #error EABI is required (to be sure that calling conventions are compatible)
|
|
|
+ #endif
|
|
|
+ pld [r0]
|
|
|
+ uqadd8 r0, r0, r0
|
|
|
+ " ARMSIMD_FOUND)
|
|
|
+ set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
|
|
|
+
|
|
|
+ if(ARMSIMD_FOUND)
|
|
|
+ set(HAVE_ARMSIMD TRUE)
|
|
|
+ set(SDL_ARM_SIMD_BLITTERS 1)
|
|
|
+ file(GLOB ARMSIMD_SOURCES ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-simd*.S)
|
|
|
+ set(SOURCE_FILES ${SOURCE_FILES} ${ARMSIMD_SOURCES})
|
|
|
+ set(WARN_ABOUT_ARM_SIMD_ASM_MIT TRUE)
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(ARMNEON)
|
|
|
+ set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
|
|
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
|
|
|
+ check_c_source_compiles("
|
|
|
+ .text
|
|
|
+ .fpu neon
|
|
|
+ .arch armv7a
|
|
|
+ .object_arch armv4
|
|
|
+ .eabi_attribute 10, 0
|
|
|
+ .arm
|
|
|
+ .altmacro
|
|
|
+ #ifndef __ARM_EABI__
|
|
|
+ #error EABI is required (to be sure that calling conventions are compatible)
|
|
|
+ #endif
|
|
|
+ pld [r0]
|
|
|
+ vmovn.u16 d0, q0
|
|
|
+ " ARMNEON_FOUND)
|
|
|
+ set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
|
|
|
+
|
|
|
+ if(ARMNEON_FOUND)
|
|
|
+ set(HAVE_ARMNEON TRUE)
|
|
|
+ set(SDL_ARM_NEON_BLITTERS 1)
|
|
|
+ file(GLOB ARMNEON_SOURCES ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-neon*.S)
|
|
|
+ set(SOURCE_FILES ${SOURCE_FILES} ${ARMNEON_SOURCES})
|
|
|
+ set(WARN_ABOUT_ARM_NEON_ASM_MIT TRUE)
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
elseif(MSVC_VERSION GREATER 1500)
|
|
|
# TODO: SDL_cpuinfo.h needs to support the user's configuration wish
|
|
|
# for MSVC - right now it is always activated
|
|
@@ -1927,6 +1984,24 @@ if(UNIX)
|
|
|
message(STATUS "")
|
|
|
endif()
|
|
|
|
|
|
+if(WARN_ABOUT_ARM_SIMD_ASM_MIT)
|
|
|
+ message(STATUS "")
|
|
|
+ message(STATUS "SDL is being built with ARM SIMD optimizations, which")
|
|
|
+ message(STATUS "uses code licensed under the MIT license. If this is a")
|
|
|
+ message(STATUS "problem, please disable that code by rerunning CMake with:")
|
|
|
+ message(STATUS "")
|
|
|
+ message(STATUS " -DARMSIMD=OFF")
|
|
|
+endif()
|
|
|
+
|
|
|
+if(WARN_ABOUT_ARM_NEON_ASM_MIT)
|
|
|
+ message(STATUS "")
|
|
|
+ message(STATUS "SDL is being built with ARM NEON optimizations, which")
|
|
|
+ message(STATUS "uses code licensed under the MIT license. If this is a")
|
|
|
+ message(STATUS "problem, please disable that code by rerunning CMake with:")
|
|
|
+ message(STATUS "")
|
|
|
+ message(STATUS " -DARMNEON=OFF")
|
|
|
+endif()
|
|
|
+
|
|
|
# Ensure that the extra cflags are used at compile time
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
|
|
|
|