From: Mika Lindqvist Date: Fri, 20 Jan 2023 21:37:36 +0000 (+0200) Subject: Fix MinGW build X-Git-Tag: 2.1.0-beta1~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b892331cf74771813073e295ac4d14d2c35ea3dd;p=thirdparty%2Fzlib-ng.git Fix MinGW build * Add detection of XSAVE intrinsics --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 4400fea58..059017e16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -883,6 +883,11 @@ if(WITH_OPTIM) set(WITH_PCLMULQDQ OFF) set(WITH_VPCLMULQDQ OFF) endif() + check_xsave_intrinsics() + if(HAVE_XSAVE_INTRIN) + add_feature_info(XSAVE 1 "Support XSAVE intrinsics using \"${XSAVEFLAG}\"") + set_property(SOURCE ${ARCHDIR}/x86_features.c PROPERTY COMPILE_FLAGS "${XSAVEFLAG}") + endif() endif() endif() diff --git a/arch/x86/Makefile.in b/arch/x86/Makefile.in index f9aedf82b..a3d5283b9 100644 --- a/arch/x86/Makefile.in +++ b/arch/x86/Makefile.in @@ -17,6 +17,7 @@ SSE41FLAG=-msse4.1 SSE42FLAG=-msse4.2 PCLMULFLAG=-mpclmul VPCLMULFLAG=-mvpclmulqdq +XSAVEFLAG=-mxsave NOLTOFLAG= SRCDIR=. @@ -42,10 +43,10 @@ all: \ slide_hash_sse2.o slide_hash_sse2.lo x86_features.o: - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c + $(CC) $(CFLAGS) $(XSAVEFLAG) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c x86_features.lo: - $(CC) $(SFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c + $(CC) $(SFLAGS) $(XSAVEFLAG) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c chunkset_avx.o: $(CC) $(CFLAGS) $(AVX2FLAG) $(NOLTOFLAG) $(INCLUDES) -c -o $@ $(SRCDIR)/chunkset_avx.c diff --git a/cmake/detect-intrinsics.cmake b/cmake/detect-intrinsics.cmake index 92caf7aba..3e932d83b 100644 --- a/cmake/detect-intrinsics.cmake +++ b/cmake/detect-intrinsics.cmake @@ -536,3 +536,21 @@ macro(check_vgfma_intrinsics) HAVE_VGFMA_INTRIN FAIL_REGEX "not supported") set(CMAKE_REQUIRED_FLAGS) endmacro() + +macro(check_xsave_intrinsics) + if(NOT NATIVEFLAG AND NOT MSVC) + set(XSAVEFLAG "-mxsave") + endif() + set(CMAKE_REQUIRED_FLAGS "${XSAVEFLAG} ${NATIVEFLAG}") + check_c_source_compiles( + "#ifdef _WIN32 + # include + #else + # include + #endif + int main(void) { + return _xgetbv(0); + }" + HAVE_XSAVE_INTRIN FAIL_REGEX "not supported") + set(CMAKE_REQUIRED_FLAGS) +endmacro() diff --git a/configure b/configure index 8dae722a6..53a3a08ef 100755 --- a/configure +++ b/configure @@ -115,6 +115,7 @@ sse41flag="-msse4.1" sse42flag="-msse4.2" pclmulflag="-mpclmul" vpclmulflag="-mvpclmulqdq -mavx512f" +xsaveflag="-mxsave" acleflag= neonflag= noltoflag="-fno-lto" @@ -268,6 +269,7 @@ if test $native -eq 1; then sse42flag="" pclmulflag="" vpclmulflag="" + xsaveflag="" noltoflag="" fi @@ -1224,6 +1226,27 @@ EOF fi } +check_xsave_intrinsics() { + # Check whether compiler supports XSAVE intrinsics + cat > $test.c << EOF +#ifdef _WIN32 +# include +#else +# include +#endif +int main(void) { + return _xgetbv(0); +} +EOF + if try ${CC} ${CFLAGS} ${xsaveflag} $test.c; then + echo "Checking for XSAVE intrinsics ... Yes." | tee -a configure.log + HAVE_XSAVE_INTRIN=1 + else + echo "Checking for XSAVE intrinsics ... No." | tee -a configure.log + HAVE_XSAVE_INTRIN=0 + fi +} + check_ppc_intrinsics() { cat > $test.c << EOF #include @@ -1605,6 +1628,12 @@ case "${ARCH}" in fi fi + check_xsave_intrinsics + + if test ${HAVE_XSAVE_INTRIN} -eq 0; then + xsaveflag="" + fi + if test $forcetzcnt -eq 1; then CFLAGS="${CFLAGS} -DX86_NOCHECK_TZCNT" SFLAGS="${SFLAGS} -DX86_NOCHECK_TZCNT" @@ -2044,6 +2073,7 @@ echo sse41flag = $sse41flag >> configure.log echo sse42flag = $sse42flag >> configure.log echo pclmulflag = $pclmulflag >> configure.log echo vpclmulflag = $vpclmulflag >> configure.log +echo xsaveflag = $xsaveflag >> configure.log echo acleflag = $acleflag >> configure.log echo neonflag = $neonflag >> configure.log echo ARCHDIR = ${ARCHDIR} >> configure.log @@ -2181,6 +2211,7 @@ sed < $SRCDIR/$ARCHDIR/Makefile.in " /^SSE42FLAG *=/s#=.*#=$sse42flag# /^PCLMULFLAG *=/s#=.*#=$pclmulflag# /^VPCLMULFLAG *=/s#=.*#=$vpclmulflag# +/^XSAVEFLAG *=/s#=.*#=$xsaveflag# /^ACLEFLAG *=/s#=.*#=$acleflag# /^NEONFLAG *=/s#=.*#=$neonflag# /^NOLTOFLAG *=/s#=.*#=$noltoflag#