CMake: reduce Neon related output on Intel platforms

* Only try to find sse2neon if Neon detected
* Only run Neon support test once
This commit is contained in:
Brecht Van Lommel 2021-03-01 19:15:29 +01:00
parent 77bc5510a9
commit f39143bc2e
4 changed files with 22 additions and 14 deletions

View File

@ -901,6 +901,18 @@ if(NOT CMAKE_BUILD_TYPE MATCHES "Release")
endif()
endif()
# Test SIMD support, before platform includes to determine if sse2neon is needed.
if(WITH_CPU_SIMD)
set(COMPILER_SSE_FLAG)
set(COMPILER_SSE2_FLAG)
# Test Neon first since macOS Arm can compile and run x86-64 SSE binaries.
TEST_NEON_SUPPORT()
if(NOT SUPPORT_NEON_BUILD)
TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
endif()
endif()
# ----------------------------------------------------------------------------
# Main Platform Checks
#
@ -956,16 +968,11 @@ if(WITH_INTERNATIONAL)
endif()
endif()
# See TEST_SSE_SUPPORT() and TEST_NEON_SUPPORT() for how these are defined.
# Enable SIMD support if detected by TEST_SSE_SUPPORT() or TEST_NEON_SUPPORT().
#
# This is done globally, so that all modules can use it if available, and
# because these are used in headers used by many modules.
if(WITH_CPU_SIMD)
set(COMPILER_SSE_FLAG)
set(COMPILER_SSE2_FLAG)
# Test Neon first since macOS Arm can compile and run x86-64 SSE binaries.
TEST_NEON_SUPPORT()
if(SUPPORT_NEON_BUILD)
# Neon
if(SSE2NEON_FOUND)
@ -974,7 +981,6 @@ if(WITH_CPU_SIMD)
endif()
else()
# SSE
TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
if(SUPPORT_SSE_BUILD)
string(PREPEND PLATFORM_CFLAGS "${COMPILER_SSE_FLAG} ")
add_definitions(-D__SSE__ -D__MMX__)

View File

@ -682,11 +682,13 @@ macro(TEST_SSE_SUPPORT
endmacro()
macro(TEST_NEON_SUPPORT)
include(CheckCXXSourceCompiles)
check_cxx_source_compiles(
"#include <arm_neon.h>
int main() {return vaddvq_s32(vdupq_n_s32(1));}"
SUPPORT_NEON_BUILD)
if(NOT DEFINED SUPPORT_NEON_BUILD)
include(CheckCXXSourceCompiles)
check_cxx_source_compiles(
"#include <arm_neon.h>
int main() {return vaddvq_s32(vdupq_n_s32(1));}"
SUPPORT_NEON_BUILD)
endif()
endmacro()
# Only print message if running CMake first time

View File

@ -324,7 +324,7 @@ if(WITH_NANOVDB)
find_package(NanoVDB)
endif()
if(WITH_CPU_SIMD)
if(WITH_CPU_SIMD AND SUPPORT_NEON_BUILD)
find_package(sse2neon)
endif()

View File

@ -285,7 +285,7 @@ if(WITH_NANOVDB)
endif()
endif()
if(WITH_CPU_SIMD)
if(WITH_CPU_SIMD AND SUPPORT_NEON_BUILD)
find_package_wrapper(sse2neon)
endif()