From dc9c5e769e18bd54a6953b68e7aa696c9d031569 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Mon, 12 Dec 2022 11:24:21 +0800 Subject: [PATCH] enh: dynamically check the support of fma/avx/sse42/avx2 in cmake files. --- cmake/cmake.define | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/cmake/cmake.define b/cmake/cmake.define index e34785cba6..d73c42e375 100644 --- a/cmake/cmake.define +++ b/cmake/cmake.define @@ -123,21 +123,31 @@ ELSE () SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-literal-suffix -Werror=return-type -fPIC -gdwarf-2 -g3 -Wformat=2 -Wno-format-nonliteral -Wno-format-truncation -Wno-format-y2k") ENDIF () - IF (TD_INTEL_64 OR TD_INTEL_32) - ADD_DEFINITIONS("-msse4.2") - IF("${FMA_SUPPORT}" MATCHES "true") - MESSAGE(STATUS "fma function supported") - ADD_DEFINITIONS("-mfma") - ELSE () - MESSAGE(STATUS "fma function NOT supported") + INCLUDE(CheckCCompilerFlag) + CHECK_C_COMPILER_FLAG("-msse4.2" GCC_SUPPORT_SSE42) + CHECK_C_COMPILER_FLAG("-mfma" GCC_SUPPORT_FMA) + CHECK_C_COMPILER_FLAG("-mavx" GCC_SUPPORT_AVX) + CHECK_C_COMPILER_FLAG("-mavx2" GCC_SUPPORT_AVX2) + + IF (GCC_SUPPORT_SSE42) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2") + ENDIF() + IF (GCC_SUPPORT_FMA) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma") + ENDIF() + + IF ("${SIMD_SUPPORT}" MATCHES "true") + IF (GCC_SUPPORT_AVX) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx") ENDIF() - - IF("${SIMD_SUPPORT}" MATCHES "true") - ADD_DEFINITIONS("-mavx -mavx2") - MESSAGE(STATUS "SIMD instructions (AVX/AVX2) is ACTIVATED") - ELSE() - MESSAGE(STATUS "SIMD instruction (AVX/AVX2)is NOT ACTIVATED") + IF (GCC_SUPPORT_AVX2) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2") ENDIF() - ENDIF () + MESSAGE(STATUS "SIMD instructions (AVX/AVX2) is ACTIVATED") + ENDIF() ENDIF () -- GitLab