Skip to content

Commit b2904ce

Browse files
theunifanquake
authored andcommitted
build: add configure checks for minisketch
AC_DEFINE'd values won't be passed down to minisketch because it does not use bitcoin-config.h. Thus we need a way to know if we should manually add defines for minisketch files.
1 parent 07f0a61 commit b2904ce

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

configure.ac

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,24 @@ AX_CHECK_COMPILE_FLAG([-msse4.1],[[SSE41_CXXFLAGS="-msse4.1"]],,[[$CXXFLAG_WERRO
470470
AX_CHECK_COMPILE_FLAG([-mavx -mavx2],[[AVX2_CXXFLAGS="-mavx -mavx2"]],,[[$CXXFLAG_WERROR]])
471471
AX_CHECK_COMPILE_FLAG([-msse4 -msha],[[SHANI_CXXFLAGS="-msse4 -msha"]],,[[$CXXFLAG_WERROR]])
472472

473+
enable_clmul=
474+
AX_CHECK_COMPILE_FLAG([-mpclmul], [enable_clmul=yes], [], [$CXXFLAG_WERROR], [AC_LANG_PROGRAM([
475+
#include <stdint.h>
476+
#include <x86intrin.h>
477+
], [
478+
__m128i a = _mm_cvtsi64_si128((uint64_t)7);
479+
__m128i b = _mm_clmulepi64_si128(a, a, 37);
480+
__m128i c = _mm_srli_epi64(b, 41);
481+
__m128i d = _mm_xor_si128(b, c);
482+
uint64_t e = _mm_cvtsi128_si64(d);
483+
return e == 0;
484+
])])
485+
486+
if test x$enable_clmul = xyes; then
487+
CLMUL_CXXFLAGS="-mpclmul"
488+
AC_DEFINE(HAVE_CLMUL, 1, [Define this symbol if clmul instructions can be used])
489+
fi
490+
473491
TEMP_CXXFLAGS="$CXXFLAGS"
474492
CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
475493
AC_MSG_CHECKING(for SSE4.2 intrinsics)
@@ -950,19 +968,20 @@ AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,,
950968
#endif])
951969

952970
AC_MSG_CHECKING(for __builtin_clzl)
971+
953972
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
954973
(void) __builtin_clzl(0);
955974
]])],
956-
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_BUILTIN_CLZL, 1, [Define this symbol if you have __builtin_clzl])],
957-
[ AC_MSG_RESULT(no)]
975+
[ AC_MSG_RESULT(yes); have_clzl=yes; AC_DEFINE(HAVE_BUILTIN_CLZL, 1, [Define this symbol if you have __builtin_clzl])],
976+
[ AC_MSG_RESULT(no); have_clzl=no;]
958977
)
959978

960979
AC_MSG_CHECKING(for __builtin_clzll)
961980
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
962981
(void) __builtin_clzll(0);
963982
]])],
964-
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_BUILTIN_CLZLL, 1, [Define this symbol if you have __builtin_clzll])],
965-
[ AC_MSG_RESULT(no)]
983+
[ AC_MSG_RESULT(yes); have_clzll=yes; AC_DEFINE(HAVE_BUILTIN_CLZLL, 1, [Define this symbol if you have __builtin_clzll])],
984+
[ AC_MSG_RESULT(no); have_clzll=no;]
966985
)
967986

968987
dnl Check for malloc_info (for memory statistics information in getmemoryinfo)
@@ -1763,6 +1782,10 @@ AM_CONDITIONAL([WORDS_BIGENDIAN],[test x$ac_cv_c_bigendian = xyes])
17631782
AM_CONDITIONAL([USE_NATPMP],[test x$use_natpmp = xyes])
17641783
AM_CONDITIONAL([USE_UPNP],[test x$use_upnp = xyes])
17651784

1785+
dnl for minisketch
1786+
AM_CONDITIONAL([ENABLE_CLMUL],[test x$enable_clmul = xyes])
1787+
AM_CONDITIONAL([HAVE_CLZ],[test x$have_clzl$have_clzll = xyesyes])
1788+
17661789
AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
17671790
AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
17681791
AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build])
@@ -1806,6 +1829,7 @@ AC_SUBST(SANITIZER_CXXFLAGS)
18061829
AC_SUBST(SANITIZER_LDFLAGS)
18071830
AC_SUBST(SSE42_CXXFLAGS)
18081831
AC_SUBST(SSE41_CXXFLAGS)
1832+
AC_SUBST(CLMUL_CXXFLAGS)
18091833
AC_SUBST(AVX2_CXXFLAGS)
18101834
AC_SUBST(SHANI_CXXFLAGS)
18111835
AC_SUBST(ARM_CRC_CXXFLAGS)

0 commit comments

Comments
 (0)