crypto: remove use of BUILD_BITCOIN_INTERNAL macro in sha256

Replace it with a more explicit DISABLE_OPTIMIZED_SHA256 and clean up some.

The macro was originally used by libbitcoinconsensus which opts out of
optimized sha256 for the sake of simplicity.

Also remove the BUILD_BITCOIN_INTERNAL define from libbitcoinkernel for now
as it does not export an api. When it does we can pick a less confusing define
to control its exports.

Removing the define should have the effect of enabling sha256 optimizations
for the kernel.
This commit is contained in:
Cory Fields
2024-01-04 16:23:01 +00:00
parent 65c05db660
commit 4dbd0475d8
2 changed files with 14 additions and 8 deletions

View File

@ -906,7 +906,7 @@ lib_LTLIBRARIES += $(LIBBITCOINKERNEL)
libbitcoinkernel_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) $(PTHREAD_FLAGS) libbitcoinkernel_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) $(PTHREAD_FLAGS)
libbitcoinkernel_la_LIBADD = $(LIBBITCOIN_CRYPTO) $(LIBLEVELDB) $(LIBMEMENV) $(LIBSECP256K1) libbitcoinkernel_la_LIBADD = $(LIBBITCOIN_CRYPTO) $(LIBLEVELDB) $(LIBMEMENV) $(LIBSECP256K1)
libbitcoinkernel_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) libbitcoinkernel_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS)
# libbitcoinkernel requires default symbol visibility, explicitly specify that # libbitcoinkernel requires default symbol visibility, explicitly specify that
# here so that things still work even when user configures with # here so that things still work even when user configures with
@ -1012,7 +1012,7 @@ libbitcoinconsensus_la_SOURCES = support/cleanse.cpp $(crypto_libbitcoin_crypto_
libbitcoinconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) libbitcoinconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS)
libbitcoinconsensus_la_LIBADD = $(LIBSECP256K1) libbitcoinconsensus_la_LIBADD = $(LIBSECP256K1)
libbitcoinconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL libbitcoinconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL -DDISABLE_OPTIMIZED_SHA256
libbitcoinconsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libbitcoinconsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
endif endif

View File

@ -8,14 +8,15 @@
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
#if !defined(DISABLE_OPTIMIZED_SHA256)
#include <compat/cpuid.h> #include <compat/cpuid.h>
#if defined(__linux__) && defined(ENABLE_ARM_SHANI) && !defined(BUILD_BITCOIN_INTERNAL) #if defined(__linux__) && defined(ENABLE_ARM_SHANI)
#include <sys/auxv.h> #include <sys/auxv.h>
#include <asm/hwcap.h> #include <asm/hwcap.h>
#endif #endif
#if defined(MAC_OSX) && defined(ENABLE_ARM_SHANI) && !defined(BUILD_BITCOIN_INTERNAL) #if defined(MAC_OSX) && defined(ENABLE_ARM_SHANI)
#include <sys/types.h> #include <sys/types.h>
#include <sys/sysctl.h> #include <sys/sysctl.h>
#endif #endif
@ -58,6 +59,7 @@ namespace sha256d64_arm_shani
{ {
void Transform_2way(unsigned char* out, const unsigned char* in); void Transform_2way(unsigned char* out, const unsigned char* in);
} }
#endif // DISABLE_OPTIMIZED_SHA256
// Internal implementation code. // Internal implementation code.
namespace namespace
@ -567,6 +569,7 @@ bool SelfTest() {
return true; return true;
} }
#if !defined(DISABLE_OPTIMIZED_SHA256)
#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__)) #if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__))
/** Check whether the OS has enabled AVX registers. */ /** Check whether the OS has enabled AVX registers. */
bool AVXEnabled() bool AVXEnabled()
@ -576,6 +579,7 @@ bool AVXEnabled()
return (a & 6) == 6; return (a & 6) == 6;
} }
#endif #endif
#endif // DISABLE_OPTIMIZED_SHA256
} // namespace } // namespace
@ -588,6 +592,7 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
TransformD64_4way = nullptr; TransformD64_4way = nullptr;
TransformD64_8way = nullptr; TransformD64_8way = nullptr;
#if !defined(DISABLE_OPTIMIZED_SHA256)
#if defined(USE_ASM) && defined(HAVE_GETCPUID) #if defined(USE_ASM) && defined(HAVE_GETCPUID)
bool have_sse4 = false; bool have_sse4 = false;
bool have_xsave = false; bool have_xsave = false;
@ -616,7 +621,7 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
} }
} }
#if defined(ENABLE_X86_SHANI) && !defined(BUILD_BITCOIN_INTERNAL) #if defined(ENABLE_X86_SHANI)
if (have_x86_shani) { if (have_x86_shani) {
Transform = sha256_x86_shani::Transform; Transform = sha256_x86_shani::Transform;
TransformD64 = TransformD64Wrapper<sha256_x86_shani::Transform>; TransformD64 = TransformD64Wrapper<sha256_x86_shani::Transform>;
@ -633,13 +638,13 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
TransformD64 = TransformD64Wrapper<sha256_sse4::Transform>; TransformD64 = TransformD64Wrapper<sha256_sse4::Transform>;
ret = "sse4(1way)"; ret = "sse4(1way)";
#endif #endif
#if defined(ENABLE_SSE41) && !defined(BUILD_BITCOIN_INTERNAL) #if defined(ENABLE_SSE41)
TransformD64_4way = sha256d64_sse41::Transform_4way; TransformD64_4way = sha256d64_sse41::Transform_4way;
ret += ",sse41(4way)"; ret += ",sse41(4way)";
#endif #endif
} }
#if defined(ENABLE_AVX2) && !defined(BUILD_BITCOIN_INTERNAL) #if defined(ENABLE_AVX2)
if (have_avx2 && have_avx && enabled_avx) { if (have_avx2 && have_avx && enabled_avx) {
TransformD64_8way = sha256d64_avx2::Transform_8way; TransformD64_8way = sha256d64_avx2::Transform_8way;
ret += ",avx2(8way)"; ret += ",avx2(8way)";
@ -647,7 +652,7 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
#endif #endif
#endif // defined(USE_ASM) && defined(HAVE_GETCPUID) #endif // defined(USE_ASM) && defined(HAVE_GETCPUID)
#if defined(ENABLE_ARM_SHANI) && !defined(BUILD_BITCOIN_INTERNAL) #if defined(ENABLE_ARM_SHANI)
bool have_arm_shani = false; bool have_arm_shani = false;
if (use_implementation & sha256_implementation::USE_SHANI) { if (use_implementation & sha256_implementation::USE_SHANI) {
#if defined(__linux__) #if defined(__linux__)
@ -679,6 +684,7 @@ std::string SHA256AutoDetect(sha256_implementation::UseImplementation use_implem
ret = "arm_shani(1way,2way)"; ret = "arm_shani(1way,2way)";
} }
#endif #endif
#endif // DISABLE_OPTIMIZED_SHA256
assert(SelfTest()); assert(SelfTest());
return ret; return ret;