Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
830928c
bench: set minimum epoch iterations to improve `pow_hash` stability
kwvg Sep 22, 2025
c4e7a40
fix: suppress unaligned memory UBSan warnings if supported by arch
kwvg Sep 22, 2025
7e8607e
refactor: remove large footprint Echo512 impl, switch to C++
kwvg Sep 22, 2025
386742b
refactor: remove large footprint Shavite512 impl, switch to C++
kwvg Sep 15, 2025
20fc998
refactor: move software AES round to header
kwvg Sep 16, 2025
d6d3518
crypto: replace hardcoded AES transform tables with constexpr tables
kwvg Sep 15, 2025
cba39c5
const: use function pointer to allow for switching implementation
kwvg Sep 21, 2025
1f2eb21
crypto: implement naive AES-NI backend for simple rounds
kwvg Sep 22, 2025
31a6732
crypto: implement AES-NI backend for Echo512's `FullStateRound()`
kwvg Sep 21, 2025
da38871
crypto: implement SSSE3 backend for Echo512's `MixColumns()`
kwvg Sep 22, 2025
71d6ef9
crypto: implement SSSE3 backend for Echo512's `ShiftRows()`
kwvg Sep 19, 2025
250dcce
crypto: combine Echo512's Shift and Mix operations
kwvg Sep 19, 2025
e1bbec4
crypto: avoid extra load/store in Echo512's `ShiftAndMix()`
kwvg Sep 19, 2025
f2ececc
crypto: implement AES-NI backend for Shavite512's `CompressElement()`
kwvg Sep 20, 2025
76bd236
crypto: implement naive ARM AES backend for simple rounds
kwvg Sep 21, 2025
959c9ee
crypto: implement ARM AES backend for Echo512's `FullStateRound()`
kwvg Sep 22, 2025
963215b
crypto: implement ARM AES backend for Shavite512's `CompressElement()`
kwvg Sep 21, 2025
fa68c70
crypto: implement ARM NEON backend for Echo512's `ShiftAndMix()`
kwvg Sep 22, 2025
31f93ad
crypto: unroll Echo512's `FullStateRound()`
kwvg Sep 21, 2025
d131fcc
crypto: implement Shavite512's full `Compress()` routine
kwvg Sep 22, 2025
005967b
crypto: drop naive AES backends
kwvg Sep 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 84 additions & 3 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ if test "$enable_debug" = "yes"; then
AX_CHECK_COMPILE_FLAG([-ftrapv], [DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -ftrapv"], [], [$CXXFLAG_WERROR])
else
dnl If not debugging, enable more aggressive optimizations for sphlib sources
AX_CHECK_COMPILE_FLAG([-O3], [SPHLIB_CFLAGS="$SPHLIB_CFLAGS -O3"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-O3], [SPHLIB_FLAGS="$SPHLIB_FLAGS -O3"], [], [$CXXFLAG_WERROR])

# We always enable at at least -g1 debug info to support proper stacktraces in crash infos
# Stacktraces will be suboptimal due to optimization, but better than nothing. Also, -fno-omit-frame-pointer
Expand Down Expand Up @@ -535,21 +535,27 @@ dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111843. To work around that, se
dnl -fstack-reuse=none for all gcc builds. (Only gcc understands this flag)
AX_CHECK_COMPILE_FLAG([-fstack-reuse=none], [CORE_CXXFLAGS="$CORE_CXXFLAGS -fstack-reuse=none"])

enable_arm_aes=no
enable_arm_crc=no
enable_arm_neon=no
enable_arm_shani=no
enable_ssse3=no
enable_sse42=no
enable_sse41=no
enable_avx2=no
enable_x86_aesni=no
enable_x86_shani=no

dnl Check for optional instruction set support. Enabling these does _not_ imply that all code will
dnl be compiled with them, rather that specific objects/libs may use them after checking for runtime
dnl compatibility.

dnl x86
AX_CHECK_COMPILE_FLAG([-mssse3], [SSSE3_CXXFLAGS="-mssse3"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-msse4.2], [SSE42_CXXFLAGS="-msse4.2"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-msse4.1], [SSE41_CXXFLAGS="-msse4.1"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-mavx -mavx2], [AVX2_CXXFLAGS="-mavx -mavx2"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-msse4.1 -maes], [X86_AESNI_CXXFLAGS="-msse4.1 -maes"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-msse4 -msha], [X86_SHANI_CXXFLAGS="-msse4 -msha"], [], [$CXXFLAG_WERROR])

enable_clmul=
Expand All @@ -570,6 +576,20 @@ if test "$enable_clmul" = "yes"; then
AC_DEFINE([HAVE_CLMUL], [1], [Define this symbol if clmul instructions can be used])
fi

TEMP_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$SSSE3_CXXFLAGS $CXXFLAGS"
AC_MSG_CHECKING([for SSSE3 intrinsics])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <tmmintrin.h>
]],[[
__m64 x = _mm_abs_pi32(_m_from_int(0));
return 0;
]])],
[ AC_MSG_RESULT([yes]); enable_ssse3=yes; AC_DEFINE([ENABLE_SSSE3], [1], [Define this symbol to build code that uses SSSE3 intrinsics]) ],
[ AC_MSG_RESULT([no])]
)
CXXFLAGS="$TEMP_CXXFLAGS"

TEMP_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$SSE42_CXXFLAGS $CXXFLAGS"
AC_MSG_CHECKING([for SSE4.2 intrinsics])
Expand Down Expand Up @@ -640,9 +660,41 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
)
CXXFLAGS="$TEMP_CXXFLAGS"

TEMP_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$X86_AESNI_CXXFLAGS $CXXFLAGS"
AC_MSG_CHECKING([for x86 AES-NI intrinsics])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <stdint.h>
#include <immintrin.h>
#include <wmmintrin.h>
]],[[
__m128i x = _mm_setzero_si128();
x = _mm_aesenc_si128(x, _mm_setzero_si128());
return _mm_extract_epi32(x, 0);
]])],
[ AC_MSG_RESULT([yes]); enable_x86_aesni=yes; AC_DEFINE([ENABLE_X86_AESNI], [1], [Define this symbol to build code that uses x86 AES-NI intrinsics]) ],
[ AC_MSG_RESULT([no])]
)
CXXFLAGS="$TEMP_CXXFLAGS"

# ARM
AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto], [ARM_CRC_CXXFLAGS="-march=armv8-a+crc+crypto"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-march=armv8-a+crypto], [ARM_SHANI_CXXFLAGS="-march=armv8-a+crypto"], [], [$CXXFLAG_WERROR])
AX_CHECK_COMPILE_FLAG([-march=armv8-a+crypto], [ARM_AES_CXXFLAGS="-march=armv8-a+crypto"; ARM_SHANI_CXXFLAGS="-march=armv8-a+crypto"], [], [$CXXFLAG_WERROR])

TEMP_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$ARM_AES_CXXFLAGS $CXXFLAGS"
AC_MSG_CHECKING([for ARMv8 AES intrinsics])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <arm_neon.h>
]],[[
uint8x16_t a, b;
vaesmcq_u8(vaeseq_u8(a, b));
return 0;
]])],
[ AC_MSG_RESULT([yes]); enable_arm_aes=yes; AC_DEFINE([ENABLE_ARM_AES], [1], [Define this symbol to build code that uses ARMv8 AES intrinsics]) ],
[ AC_MSG_RESULT([no])]
)
CXXFLAGS="$TEMP_CXXFLAGS"

TEMP_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$ARM_CRC_CXXFLAGS $CXXFLAGS"
Expand All @@ -663,6 +715,27 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
)
CXXFLAGS="$TEMP_CXXFLAGS"

ARM_NEON_CXXFLAGS=""
TEMP_CXXFLAGS="$CXXFLAGS"
for flag in "-march=armv8-a" "-march=armv7-a -mfpu=neon"; do
AX_CHECK_COMPILE_FLAG([$flag], [
CXXFLAGS="$CXXFLAGS $flag"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <arm_neon.h>
]], [[
float32x4_t f = vdupq_n_f32(0.0);
return 0;
]])], [
ARM_NEON_CXXFLAGS="$flag"
enable_arm_neon=yes
AC_DEFINE([ENABLE_ARM_NEON], [1], [Define this symbol to build code that uses ARM NEON intrinsics])
break
])
CXXFLAGS="$TEMP_CXXFLAGS"
])
done
CXXFLAGS="$TEMP_CXXFLAGS"

TEMP_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$ARM_SHANI_CXXFLAGS $CXXFLAGS"
AC_MSG_CHECKING([for ARMv8 SHA-NI intrinsics])
Expand Down Expand Up @@ -1820,11 +1893,15 @@ AM_CONDITIONAL([USE_QRCODE], [test "$use_qr" = "yes"])
AM_CONDITIONAL([USE_LCOV], [test "$use_lcov" = "yes"])
AM_CONDITIONAL([USE_LIBEVENT], [test "$use_libevent" = "yes"])
AM_CONDITIONAL([HARDEN], [test "$use_hardening" = "yes"])
AM_CONDITIONAL([ENABLE_SSSE3], [test "$enable_ssse3" = "yes"])
AM_CONDITIONAL([ENABLE_SSE42], [test "$enable_sse42" = "yes"])
AM_CONDITIONAL([ENABLE_SSE41], [test "$enable_sse41" = "yes"])
AM_CONDITIONAL([ENABLE_AVX2], [test "$enable_avx2" = "yes"])
AM_CONDITIONAL([ENABLE_X86_AESNI], [test "$enable_x86_aesni" = "yes"])
AM_CONDITIONAL([ENABLE_X86_SHANI], [test "$enable_x86_shani" = "yes"])
AM_CONDITIONAL([ENABLE_ARM_AES], [test "$enable_arm_aes" = "yes"])
AM_CONDITIONAL([ENABLE_ARM_CRC], [test "$enable_arm_crc" = "yes"])
AM_CONDITIONAL([ENABLE_ARM_NEON], [test "$enable_arm_neon" = "yes"])
AM_CONDITIONAL([ENABLE_ARM_SHANI], [test "$enable_arm_shani" = "yes"])
AM_CONDITIONAL([WORDS_BIGENDIAN], [test "$ac_cv_c_bigendian" = "yes"])
AM_CONDITIONAL([USE_NATPMP], [test "$use_natpmp" = "yes"])
Expand Down Expand Up @@ -1877,13 +1954,17 @@ AC_SUBST(PIC_FLAGS)
AC_SUBST(PIE_FLAGS)
AC_SUBST(SANITIZER_CXXFLAGS)
AC_SUBST(SANITIZER_LDFLAGS)
AC_SUBST(SPHLIB_CFLAGS)
AC_SUBST(SPHLIB_FLAGS)
AC_SUBST(SSSE3_CXXFLAGS)
AC_SUBST(SSE42_CXXFLAGS)
AC_SUBST(SSE41_CXXFLAGS)
AC_SUBST(CLMUL_CXXFLAGS)
AC_SUBST(AVX2_CXXFLAGS)
AC_SUBST(X86_AESNI_CXXFLAGS)
AC_SUBST(X86_SHANI_CXXFLAGS)
AC_SUBST(ARM_AES_CXXFLAGS)
AC_SUBST(ARM_CRC_CXXFLAGS)
AC_SUBST(ARM_NEON_CXXFLAGS)
AC_SUBST(ARM_SHANI_CXXFLAGS)
AC_SUBST(LIBTOOL_APP_LDFLAGS)
AC_SUBST(USE_SQLITE)
Expand Down
75 changes: 69 additions & 6 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,17 @@ endif
LIBBITCOIN_CRYPTO = $(LIBBITCOIN_CRYPTO_BASE)
LIBBITCOIN_CRYPTO_SPH = crypto/libbitcoin_crypto_sph.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_SPH)
if ENABLE_SSSE3
LIBBITCOIN_CRYPTO_SSSE3 = crypto/libbitcoin_crypto_ssse3.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_SSSE3)
endif
if ENABLE_SSE41
LIBBITCOIN_CRYPTO_SSE41 = crypto/libbitcoin_crypto_sse41.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_SSE41)
if ENABLE_X86_AESNI
LIBBITCOIN_CRYPTO_X86_AESNI = crypto/libbitcoin_crypto_x86_aesni.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_X86_AESNI)
endif
if ENABLE_X86_SHANI
LIBBITCOIN_CRYPTO_X86_SHANI = crypto/libbitcoin_crypto_x86_shani.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_X86_SHANI)
Expand All @@ -87,6 +95,14 @@ if ENABLE_AVX2
LIBBITCOIN_CRYPTO_AVX2 = crypto/libbitcoin_crypto_avx2.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_AVX2)
endif
if ENABLE_ARM_AES
LIBBITCOIN_CRYPTO_ARM_AES = crypto/libbitcoin_crypto_arm_aes.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_AES)
endif
if ENABLE_ARM_NEON
LIBBITCOIN_CRYPTO_ARM_NEON = crypto/libbitcoin_crypto_arm_neon.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_NEON)
endif
if ENABLE_ARM_SHANI
LIBBITCOIN_CRYPTO_ARM_SHANI = crypto/libbitcoin_crypto_arm_shani.la
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_SHANI)
Expand Down Expand Up @@ -728,23 +744,26 @@ crypto_libbitcoin_crypto_avx2_la_SOURCES = crypto/sha256_avx2.cpp
# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
# CXXFLAGS above
crypto_libbitcoin_crypto_sph_la_LDFLAGS = $(AM_LDFLAGS) -static
crypto_libbitcoin_crypto_sph_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
crypto_libbitcoin_crypto_sph_la_CXXFLAGS = $(AM_CXXFLAGS) $(SPHLIB_FLAGS) $(PIE_FLAGS) -static
crypto_libbitcoin_crypto_sph_la_CPPFLAGS = $(AM_CPPFLAGS)
crypto_libbitcoin_crypto_sph_la_CFLAGS = $(SPHLIB_CFLAGS)
crypto_libbitcoin_crypto_sph_la_CFLAGS = $(SPHLIB_FLAGS)
crypto_libbitcoin_crypto_sph_la_CPPFLAGS += \
-DSPH_SMALL_FOOTPRINT_CUBEHASH=1 \
-DSPH_SMALL_FOOTPRINT_JH=1
crypto_libbitcoin_crypto_sph_la_SOURCES = \
crypto/x11/aes_helper.c \
crypto/x11/aes.cpp \
crypto/x11/aes.h \
crypto/x11/blake.c \
crypto/x11/bmw.c \
crypto/x11/cubehash.c \
crypto/x11/echo.c \
crypto/x11/dispatch.cpp \
crypto/x11/dispatch.h \
crypto/x11/echo.cpp \
crypto/x11/groestl.c \
crypto/x11/jh.c \
crypto/x11/keccak.c \
crypto/x11/luffa.c \
crypto/x11/shavite.c \
crypto/x11/shavite.cpp \
crypto/x11/simd.c \
crypto/x11/skein.c \
crypto/x11/sph_blake.h \
Expand All @@ -758,7 +777,51 @@ crypto_libbitcoin_crypto_sph_la_SOURCES = \
crypto/x11/sph_shavite.h \
crypto/x11/sph_simd.h \
crypto/x11/sph_skein.h \
crypto/x11/sph_types.h
crypto/x11/sph_types.h \
crypto/x11/util/consts_aes.hpp \
crypto/x11/util/util.hpp

# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
# CXXFLAGS above
crypto_libbitcoin_crypto_arm_aes_la_LDFLAGS = $(AM_LDFLAGS) -static
crypto_libbitcoin_crypto_arm_aes_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
crypto_libbitcoin_crypto_arm_aes_la_CPPFLAGS = $(AM_CPPFLAGS)
crypto_libbitcoin_crypto_arm_aes_la_CXXFLAGS += $(ARM_AES_CXXFLAGS)
crypto_libbitcoin_crypto_arm_aes_la_CPPFLAGS += -DENABLE_ARM_AES
crypto_libbitcoin_crypto_arm_aes_la_SOURCES = \
crypto/x11/arm_crypto/echo.cpp \
crypto/x11/arm_crypto/shavite.cpp

# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
# CXXFLAGS above
crypto_libbitcoin_crypto_arm_neon_la_LDFLAGS = $(AM_LDFLAGS) -static
crypto_libbitcoin_crypto_arm_neon_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
crypto_libbitcoin_crypto_arm_neon_la_CPPFLAGS = $(AM_CPPFLAGS)
crypto_libbitcoin_crypto_arm_neon_la_CXXFLAGS += $(ARM_NEON_CXXFLAGS)
crypto_libbitcoin_crypto_arm_neon_la_CPPFLAGS += -DENABLE_ARM_NEON
crypto_libbitcoin_crypto_arm_neon_la_SOURCES = \
crypto/x11/arm_neon/echo.cpp

# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
# CXXFLAGS above
crypto_libbitcoin_crypto_ssse3_la_LDFLAGS = $(AM_LDFLAGS) -static
crypto_libbitcoin_crypto_ssse3_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
crypto_libbitcoin_crypto_ssse3_la_CPPFLAGS = $(AM_CPPFLAGS)
crypto_libbitcoin_crypto_ssse3_la_CXXFLAGS += $(SSSE3_CXXFLAGS)
crypto_libbitcoin_crypto_ssse3_la_CPPFLAGS += -DENABLE_SSSE3
crypto_libbitcoin_crypto_ssse3_la_SOURCES = \
crypto/x11/ssse3/echo.cpp

# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
# CXXFLAGS above
crypto_libbitcoin_crypto_x86_aesni_la_LDFLAGS = $(AM_LDFLAGS) -static
crypto_libbitcoin_crypto_x86_aesni_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
crypto_libbitcoin_crypto_x86_aesni_la_CPPFLAGS = $(AM_CPPFLAGS)
crypto_libbitcoin_crypto_x86_aesni_la_CXXFLAGS += $(X86_AESNI_CXXFLAGS)
crypto_libbitcoin_crypto_x86_aesni_la_CPPFLAGS += -DENABLE_SSE41 -DENABLE_X86_AESNI
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

🧩 Analysis chain

Compound preprocessor definition needs attention.

The X86 AES-NI module defines both ENABLE_SSE41 and ENABLE_X86_AESNI, indicating a dependency on SSE4.1 for the AES-NI implementation. This is architecturally correct as AES-NI requires SSE4.1, but ensure this dependency is documented.


🏁 Script executed:

#!/bin/bash
# Verify SSE4.1 is properly checked before enabling X86 AES-NI in configure
echo "Checking configure.ac for SSE4.1/AES-NI dependency..."
rg -A10 -B10 "X86_AESNI" configure.ac | grep -E "(SSE41|SSE4\.1)"

Length of output: 227


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "Search repo for SSE4/AES-NI mentions in docs (README, INSTALL, docs/, doc/, CHANGELOG, NEWS):"
rg -n -S -i 'sse4|sse4\.1|sse41|aes-?ni|aesni' README* INSTALL* docs/** doc/** CHANGELOG* NEWS* || true
echo
echo "Search whole repo (excluding common noise dirs) for SSE4/AES-NI:"
rg -n -S -i 'sse4|sse4\.1|sse41|aes-?ni|aesni' --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' || true
echo
echo "Show configure.ac context for SSE41/X86_AESNI:"
rg -n -C3 -S -i 'x86_aesni|aesni|aes-?ni|sse4|sse4\.1|sse41' configure.ac || true
echo
echo "Show src/Makefile.am lines 800-840:"
sed -n '800,840p' src/Makefile.am || true

Length of output: 7068


Document SSE4.1 dependency for AES-NI support
Configure.ac correctly checks for SSE4.1 intrinsics before enabling AES-NI (AX_CHECK_COMPILE_FLAG for -msse4.1 then AES-NI check with -msse4.1 -maes), but I found no mention of this requirement in INSTALL or README. Add a note that building with AES-NI support requires SSE4.1 (compiler and hardware support).

🤖 Prompt for AI Agents
In src/Makefile.am around line 821, the build enables AES-NI but Configure.ac
only enables that when SSE4.1 intrinsics are available; update project
documentation to state that building with AES-NI support requires SSE4.1 (both
compiler support and CPU hardware), and show the relevant compiler flag and
configure behavior. Edit INSTALL and README to add a short note that AES-NI
support requires SSE4.1 (e.g., compilers must accept -msse4.1 and CPUs must
expose SSE4.1), mention that the autoconf checks will pass -msse4.1 during
detection and that builds will fall back to non-AES-NI if SSE4.1 is absent, and
include guidance on forcing or disabling AES-NI via configure flags or
environment variables.

crypto_libbitcoin_crypto_x86_aesni_la_SOURCES = \
crypto/x11/x86_aesni/echo.cpp \
crypto/x11/x86_aesni/shavite.cpp

# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
# CXXFLAGS above
Expand Down
2 changes: 2 additions & 0 deletions src/bench/bench_bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include <clientversion.h>
#include <crypto/sha256.h>
#include <crypto/x11/dispatch.h>
#include <fs.h>
#include <util/strencodings.h>
#include <util/system.h>
Expand Down Expand Up @@ -61,6 +62,7 @@ int main(int argc, char** argv)
{
ArgsManager argsman;
SetupBenchArgs(argsman);
SapphireAutoDetect();
SHA256AutoDetect();
std::string error;
if (!argsman.ParseParameters(argc, argv, error)) {
Expand Down
Loading
Loading