From c9e87a19a9b7ca3d82da9cba7b4064af23899149 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 15 Aug 2012 01:24:50 -0700 Subject: [PATCH] Add cmake options to disable or require support for CPU extensions --- Alc/ALc.c | 8 +++++++- Alc/mixer.c | 12 ++++++------ CMakeLists.txt | 37 +++++++++++++++++++++++++++++-------- config.h.in | 6 ++++++ 4 files changed, 48 insertions(+), 15 deletions(-) diff --git a/Alc/ALc.c b/Alc/ALc.c index 14a74a92..ee2bd8a9 100644 --- a/Alc/ALc.c +++ b/Alc/ALc.c @@ -791,7 +791,13 @@ static void alc_initconfig(void) ReadALConfig(); - capfilter = CPU_CAP_ALL; + capfilter = 0; +#ifdef HAVE_SSE + capfilter |= CPU_CAP_SSE; +#endif +#ifdef HAVE_NEON + capfilter |= CPU_CAP_NEON; +#endif if(ConfigValueStr(NULL, "disable-cpu-exts", &str)) { if(strcasecmp(str, "all") == 0) diff --git a/Alc/mixer.c b/Alc/mixer.c index 7454ec48..10e3d4e2 100644 --- a/Alc/mixer.c +++ b/Alc/mixer.c @@ -41,7 +41,7 @@ DryMixerFunc SelectDirectMixer(enum Resampler Resampler) { -#ifdef HAVE_XMMINTRIN_H +#ifdef HAVE_SSE if((CPUCapFlags&CPU_CAP_SSE)) { switch(Resampler) @@ -57,7 +57,7 @@ DryMixerFunc SelectDirectMixer(enum Resampler Resampler) } } #endif -#ifdef HAVE_ARM_NEON_H +#ifdef HAVE_NEON if((CPUCapFlags&CPU_CAP_NEON)) { switch(Resampler) @@ -90,7 +90,7 @@ DryMixerFunc SelectDirectMixer(enum Resampler Resampler) DryMixerFunc SelectHrtfMixer(enum Resampler Resampler) { -#ifdef HAVE_XMMINTRIN_H +#ifdef HAVE_SSE if((CPUCapFlags&CPU_CAP_SSE)) { switch(Resampler) @@ -106,7 +106,7 @@ DryMixerFunc SelectHrtfMixer(enum Resampler Resampler) } } #endif -#ifdef HAVE_ARM_NEON_H +#ifdef HAVE_NEON if((CPUCapFlags&CPU_CAP_NEON)) { switch(Resampler) @@ -139,7 +139,7 @@ DryMixerFunc SelectHrtfMixer(enum Resampler Resampler) WetMixerFunc SelectSendMixer(enum Resampler Resampler) { -#ifdef HAVE_XMMINTRIN_H +#ifdef HAVE_SSE if((CPUCapFlags&CPU_CAP_SSE)) { switch(Resampler) @@ -155,7 +155,7 @@ WetMixerFunc SelectSendMixer(enum Resampler Resampler) } } #endif -#ifdef HAVE_ARM_NEON_H +#ifdef HAVE_NEON if((CPUCapFlags&CPU_CAP_NEON)) { switch(Resampler) diff --git a/CMakeLists.txt b/CMakeLists.txt index 619bdf68..d9eb0826 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,13 @@ PROJECT(OpenAL C) SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) +OPTION(SSE "Check for SSE CPU extensions" ON) +OPTION(NEON "Check for ARM Neon CPU extensions" ON) + +OPTION(REQUIRE_SSE "Require SSE CPU extensions" OFF) +OPTION(REQUIRE_NEON "Require ARM Neon CPU extensions" OFF) + + OPTION(ALSA "Check for ALSA backend" ON) OPTION(OSS "Check for OSS backend" ON) OPTION(SOLARIS "Check for Solaris backend" ON) @@ -429,19 +436,33 @@ SET(ALC_OBJS Alc/ALc.c SET(CPU_EXTS "Default") +SET(HAVE_SSE 0) +SET(HAVE_NEON 0) # Check for SSE support -CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H) -IF(HAVE_XMMINTRIN_H) - SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_sse.c) - SET(CPU_EXTS "${CPU_EXTS}, SSE") +IF(SSE) + CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H) + IF(HAVE_XMMINTRIN_H) + SET(HAVE_SSE 1) + SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_sse.c) + SET(CPU_EXTS "${CPU_EXTS}, SSE") + ENDIF() +ENDIF() +IF(REQUIRE_SSE AND NOT HAVE_SSE) + MESSAGE(FATAL_ERROR "Failed to enabled required SSE CPU extensions") ENDIF() # Check for ARM Neon support -CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H) -IF(HAVE_ARM_NEON_H) - SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_neon.c) - SET(CPU_EXTS "${CPU_EXTS}, Neon") +IF(NEON) + CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H) + IF(HAVE_ARM_NEON_H) + SET(HAVE_NEON 1) + SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_neon.c) + SET(CPU_EXTS "${CPU_EXTS}, Neon") + ENDIF() +ENDIF() +IF(REQUIRE_NEON AND NOT HAVE_NEON) + MESSAGE(FATAL_ERROR "Failed to enabled required ARM Neon CPU extensions") ENDIF() diff --git a/config.h.in b/config.h.in index af7420b9..7368bba3 100644 --- a/config.h.in +++ b/config.h.in @@ -5,6 +5,12 @@ /* Define to the library version */ #define ALSOFT_VERSION "${LIB_VERSION}" +/* Define if we have SSE CPU extensions */ +#cmakedefine HAVE_SSE + +/* Define if we have ARM Neon CPU extensions */ +#cmakedefine HAVE_NEON + /* Define if we have the ALSA backend */ #cmakedefine HAVE_ALSA -- 2.11.4.GIT