diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-03-29 15:33:23 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-03-29 15:33:23 +0100 |
commit | 251fdc38e66e7b75c34793a162c9cc5a7467e834 (patch) | |
tree | 14126f228723e237d9d4302eef6d54c382f01814 | |
parent | ea9d518099d0ccef9d1bba73d6e270200398bc58 (diff) | |
download | rspamd-251fdc38e66e7b75c34793a162c9cc5a7467e834.tar.gz rspamd-251fdc38e66e7b75c34793a162c9cc5a7467e834.zip |
[Minor] Support compilers with broken avx2 support
-rw-r--r-- | src/libcryptobox/CMakeLists.txt | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/libcryptobox/CMakeLists.txt b/src/libcryptobox/CMakeLists.txt index 9b1079ff2..2f1a3d57c 100644 --- a/src/libcryptobox/CMakeLists.txt +++ b/src/libcryptobox/CMakeLists.txt @@ -42,6 +42,45 @@ IF("${ARCH}" STREQUAL "x86_64") SET(ASM_CODE "vpaddq %ymm0, %ymm0, %ymm0") ASM_OP(HAVE_AVX2 "avx2") + # Handle broken compilers, sigh... + IF(HAVE_AVX2) + CHECK_C_SOURCE_COMPILES( +" +#include <stddef.h> +#pragma GCC push_options +#pragma GCC target(\"avx2\") +#ifndef __SSE2__ +#define __SSE2__ +#endif +#ifndef __SSE__ +#define __SSE__ +#endif +#ifndef __SSE4_2__ +#define __SSE4_2__ +#endif +#ifndef __SSE4_1__ +#define __SSE4_1__ +#endif +#ifndef __SSEE3__ +#define __SSEE3__ +#endif +#ifndef __AVX__ +#define __AVX__ +#endif +#ifndef __AVX2__ +#define __AVX2__ +#endif + +#include <immintrin.h> +void cmkcheckweak() __attribute__((weak)); +int main(int argc, char** argv) { + __m256i str = _mm256_loadu_si256((__m256i *)argv[0]); +}" HAVE_AVX2_C_COMPILER) + IF(NOT HAVE_AVX2_C_COMPILER) + MESSAGE(STATUS "Your compiler has broken AVX2 support") + UNSET(HAVE_AVX2) + ENDIF() + ENDIF() SET(ASM_CODE "vpaddq %xmm0, %xmm0, %xmm0") ASM_OP(HAVE_AVX "avx") SET(ASM_CODE "pmuludq %xmm0, %xmm0") @@ -80,6 +119,7 @@ IF(HAVE_AVX2) SET(POLYSRC ${POLYSRC} ${CMAKE_CURRENT_SOURCE_DIR}/poly1305/avx2.S) SET(SIPHASHSRC ${SIPHASHSRC} ${CMAKE_CURRENT_SOURCE_DIR}/siphash/avx2.S) SET(BASE64SRC ${BASE64SRC} ${CMAKE_CURRENT_SOURCE_DIR}/base64/avx2.c) + MESSAGE(STATUS "AVX2 support is added") ENDIF(HAVE_AVX2) IF(HAVE_AVX) SET(CHACHASRC ${CHACHASRC} ${CMAKE_CURRENT_SOURCE_DIR}/chacha20/avx.S) @@ -87,16 +127,20 @@ IF(HAVE_AVX) SET(CURVESRC ${CURVESRC} ${CMAKE_CURRENT_SOURCE_DIR}/curve25519/avx.S ${CMAKE_CURRENT_SOURCE_DIR}/curve25519/avx.c) SET(BLAKE2SRC ${BLAKE2SRC} ${CMAKE_CURRENT_SOURCE_DIR}/blake2/avx.S) + MESSAGE(STATUS "AVX support is added") ENDIF(HAVE_AVX) IF(HAVE_SSE2) SET(CHACHASRC ${CHACHASRC} ${CMAKE_CURRENT_SOURCE_DIR}/chacha20/sse2.S) SET(POLYSRC ${POLYSRC} ${CMAKE_CURRENT_SOURCE_DIR}/poly1305/sse2.S) + MESSAGE(STATUS "SSE2 support is added") ENDIF(HAVE_SSE2) IF(HAVE_SSE41) SET(SIPHASHSRC ${SIPHASHSRC} ${CMAKE_CURRENT_SOURCE_DIR}/siphash/sse41.S) + MESSAGE(STATUS "SSE41 support is added") ENDIF(HAVE_SSE41) IF(HAVE_SSE42) SET(BASE64SRC ${BASE64SRC} ${CMAKE_CURRENT_SOURCE_DIR}/base64/sse42.c) + MESSAGE(STATUS "SSE42 support is added") ENDIF(HAVE_SSE42) CONFIGURE_FILE(platform_config.h.in platform_config.h) |