Skip to content

Commit 22d1118

Browse files
committed
Merge #17398: build: Update leveldb to 1.22+
677fb8e test: Add ubsan surpression for crc32c (Wladimir J. van der Laan) 8e68bb1 build: Disable msvc warning 4722 for leveldb build (Aaron Clauson) be23949 build: MSVC changes for leveldb update (Aaron Clauson) 9ebdf04 build: CRC32C build system integration (Wladimir J. van der Laan) 402252a build: Add LCOV exception for crc32c (Wladimir J. van der Laan) 3a037d0 test: Add crc32c exception to various linters and generation scripts (Wladimir J. van der Laan) 84ff1b2 test: Add crc32c to subtree check linter (Wladimir J. van der Laan) 7cf13a5 doc: Add crc32c subtree to developer notes (Wladimir J. van der Laan) 24d02a9 build: Update build system for new leveldb (Wladimir J. van der Laan) 2e18193 Squashed 'src/crc32c/' content from commit 224988680f7673cd7c769963d4035cb315aa3388 (Wladimir J. van der Laan) 6648082 Squashed 'src/leveldb/' changes from f545dfabff4c2e9836efed094dba99a34fbc6b88..f8ae182c1e5176d12e816fb2217ae33a5472fdd7 (Wladimir J. van der Laan) Pull request description: This updates leveldb to currently newest upstream commit bitcoin-core/leveldb-subtree@0c40829: - CRC32C hardware acceleration is now an external library [crc32c](https://github.com/google/crc32c). This adds acceleration on ARM, and should be faster on x86 because of using prefetch. It also makes it easy to support similar instruction sets on other platforms in the future. - Thread handling uses C++11, instead of platform specific code. - Native windows environment was added. No need to maintain our own hacky one, anymore. - Upstream now builds using CMake. This doesn't mean we need to use that (phew), but internal configuration changed to a a series of checks, instead of OS profiles. This means the blanket error "Cannot build leveldb for $host. Please file a bug report' is removed. All changes: google/leveldb@a53934a...0c40829 Pretty much all our changes have been subsumed by upstream, so we figured it was cleaner to start over with a new branch from upstream with the still-relevant patches applied: https://github.com/bitcoin-core/leveldb/tree/bitcoin-fork-new There's quite some testing to be done (see below). See bitcoin-core/leveldb-subtree#25 and bitcoin-core/leveldb-subtree#26 for more history and context. TODO: - [x] Subtree `crc32c` - [x] Make linters happy about crc32 subtree - [x] Integrate `crc32c` library into build system - [x] MSVC build system ACKs for top commit: sipa: ACK 677fb8e Tree-SHA512: 37ee92a750e053e924bc4626b12bb3fd81faa9f8c5ebaa343931fee810c45ba05aa6051fdea82535fa351bf2be7297801b98af9469865fc5ead771650a5d6240
2 parents 75fb37c + 677fb8e commit 22d1118

File tree

212 files changed

+11520
-7937
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+11520
-7937
lines changed

Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ LCOV_FILTER_PATTERN = \
194194
-p "/usr/lib/" \
195195
-p "/usr/lib64/" \
196196
-p "src/leveldb/" \
197+
-p "src/crc32c/" \
197198
-p "src/bench/" \
198199
-p "src/univalue" \
199200
-p "src/crypto/ctaes" \

build_msvc/libleveldb/libleveldb.vcxproj

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
<ClCompile Include="..\..\src\leveldb\db\version_set.cc" />
2525
<ClCompile Include="..\..\src\leveldb\db\write_batch.cc" />
2626
<ClCompile Include="..\..\src\leveldb\helpers\memenv\memenv.cc" />
27-
<ClCompile Include="..\..\src\leveldb\port\port_posix_sse.cc" />
28-
<ClCompile Include="..\..\src\leveldb\port\port_win.cc" />
2927
<ClCompile Include="..\..\src\leveldb\table\block.cc" />
3028
<ClCompile Include="..\..\src\leveldb\table\block_builder.cc" />
3129
<ClCompile Include="..\..\src\leveldb\table\filter_block.cc" />
@@ -42,7 +40,7 @@
4240
<ClCompile Include="..\..\src\leveldb\util\comparator.cc" />
4341
<ClCompile Include="..\..\src\leveldb\util\crc32c.cc" />
4442
<ClCompile Include="..\..\src\leveldb\util\env.cc" />
45-
<ClCompile Include="..\..\src\leveldb\util\env_win.cc" />
43+
<ClCompile Include="..\..\src\leveldb\util\env_windows.cc" />
4644
<ClCompile Include="..\..\src\leveldb\util\filter_policy.cc" />
4745
<ClCompile Include="..\..\src\leveldb\util\hash.cc" />
4846
<ClCompile Include="..\..\src\leveldb\util\histogram.cc" />
@@ -51,11 +49,11 @@
5149
<ClCompile Include="..\..\src\leveldb\util\status.cc" />
5250
</ItemGroup>
5351
<ItemDefinitionGroup>
54-
<ClCompile>
55-
<PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;LEVELDB_PLATFORM_WINDOWS;LEVELDB_ATOMIC_PRESENT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
56-
<DisableSpecificWarnings>4244;4267;4312;</DisableSpecificWarnings>
57-
<AdditionalIncludeDirectories>..\..\src\leveldb;..\..\src\leveldb\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
58-
</ClCompile>
52+
<ClCompile>
53+
<PreprocessorDefinitions>HAVE_CRC32C=0;HAVE_SNAPPY=0;__STDC_LIMIT_MACROS;LEVELDB_IS_BIG_ENDIAN=0;_UNICODE;UNICODE;_CRT_NONSTDC_NO_DEPRECATE;LEVELDB_PLATFORM_WINDOWS;LEVELDB_ATOMIC_PRESENT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
54+
<DisableSpecificWarnings>4244;4267;4312;4722;</DisableSpecificWarnings>
55+
<AdditionalIncludeDirectories>..\..\src\leveldb;..\..\src\leveldb\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
56+
</ClCompile>
5957
</ItemDefinitionGroup>
6058
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
6159
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

ci/lint/06_script.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ test/lint/git-subtree-check.sh src/crypto/ctaes
1414
test/lint/git-subtree-check.sh src/secp256k1
1515
test/lint/git-subtree-check.sh src/univalue
1616
test/lint/git-subtree-check.sh src/leveldb
17+
test/lint/git-subtree-check.sh src/crc32c
1718
test/lint/check-doc.py
1819
test/lint/check-rpc-mappings.py .
1920
test/lint/lint-all.sh

configure.ac

Lines changed: 100 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ if test "x$CXXFLAGS_overridden" = "xno"; then
355355
AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]])
356356
fi
357357

358-
enable_hwcrc32=no
358+
enable_sse42=no
359359
enable_sse41=no
360360
enable_avx2=no
361361
enable_shani=no
@@ -365,14 +365,16 @@ if test "x$use_asm" = "xyes"; then
365365
dnl Check for optional instruction set support. Enabling these does _not_ imply that all code will
366366
dnl be compiled with them, rather that specific objects/libs may use them after checking for runtime
367367
dnl compatibility.
368+
369+
dnl x86
368370
AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]])
369371
AX_CHECK_COMPILE_FLAG([-msse4.1],[[SSE41_CXXFLAGS="-msse4.1"]],,[[$CXXFLAG_WERROR]])
370372
AX_CHECK_COMPILE_FLAG([-mavx -mavx2],[[AVX2_CXXFLAGS="-mavx -mavx2"]],,[[$CXXFLAG_WERROR]])
371373
AX_CHECK_COMPILE_FLAG([-msse4 -msha],[[SHANI_CXXFLAGS="-msse4 -msha"]],,[[$CXXFLAG_WERROR]])
372374

373375
TEMP_CXXFLAGS="$CXXFLAGS"
374376
CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS"
375-
AC_MSG_CHECKING(for assembler crc32 support)
377+
AC_MSG_CHECKING(for SSE4.2 intrinsics)
376378
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
377379
#include <stdint.h>
378380
#if defined(_MSC_VER)
@@ -387,7 +389,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
387389
l = _mm_crc32_u64(l, 0);
388390
return l;
389391
]])],
390-
[ AC_MSG_RESULT(yes); enable_hwcrc32=yes],
392+
[ AC_MSG_RESULT(yes); enable_sse42=yes],
391393
[ AC_MSG_RESULT(no)]
392394
)
393395
CXXFLAGS="$TEMP_CXXFLAGS"
@@ -439,6 +441,24 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
439441
)
440442
CXXFLAGS="$TEMP_CXXFLAGS"
441443

444+
# ARM
445+
AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto],[[ARM_CRC_CXXFLAGS="-march=armv8-a+crc+crypto"]],,[[$CXXFLAG_WERROR]])
446+
447+
TEMP_CXXFLAGS="$CXXFLAGS"
448+
CXXFLAGS="$CXXFLAGS $ARM_CRC_CXXFLAGS"
449+
AC_MSG_CHECKING(for ARM CRC32 intrinsics)
450+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
451+
#include <arm_acle.h>
452+
#include <arm_neon.h>
453+
]],[[
454+
__crc32cb(0, 0); __crc32ch(0, 0); __crc32cw(0, 0); __crc32cd(0, 0);
455+
vmull_p64(0, 0);
456+
]])],
457+
[ AC_MSG_RESULT(yes); enable_arm_crc=yes; ],
458+
[ AC_MSG_RESULT(no)]
459+
)
460+
CXXFLAGS="$TEMP_CXXFLAGS"
461+
442462
fi
443463

444464
CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS"
@@ -517,7 +537,6 @@ case $host in
517537
fi
518538

519539
CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -D_WIN32_WINNT=0x0601"
520-
LEVELDB_TARGET_FLAGS="-DOS_WINDOWS"
521540
if test "x$CXXFLAGS_overridden" = "xno"; then
522541
CXXFLAGS="$CXXFLAGS -w"
523542
fi
@@ -533,7 +552,6 @@ case $host in
533552
;;
534553
*darwin*)
535554
TARGET_OS=darwin
536-
LEVELDB_TARGET_FLAGS="-DOS_MACOSX"
537555
if test x$cross_compiling != xyes; then
538556
BUILD_OS=darwin
539557
AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert)
@@ -585,35 +603,9 @@ case $host in
585603
*android*)
586604
dnl make sure android stays above linux for hosts like *linux-android*
587605
TARGET_OS=android
588-
LEVELDB_TARGET_FLAGS="-DOS_ANDROID"
589606
;;
590607
*linux*)
591608
TARGET_OS=linux
592-
LEVELDB_TARGET_FLAGS="-DOS_LINUX"
593-
;;
594-
*kfreebsd*)
595-
LEVELDB_TARGET_FLAGS="-DOS_KFREEBSD"
596-
;;
597-
*freebsd*)
598-
LEVELDB_TARGET_FLAGS="-DOS_FREEBSD"
599-
;;
600-
*openbsd*)
601-
LEVELDB_TARGET_FLAGS="-DOS_OPENBSD"
602-
;;
603-
*netbsd*)
604-
LEVELDB_TARGET_FLAGS="-DOS_NETBSD"
605-
;;
606-
*dragonfly*)
607-
LEVELDB_TARGET_FLAGS="-DOS_DRAGONFLYBSD"
608-
;;
609-
*solaris*)
610-
LEVELDB_TARGET_FLAGS="-DOS_SOLARIS"
611-
;;
612-
*hpux*)
613-
LEVELDB_TARGET_FLAGS="-DOS_HPUX"
614-
;;
615-
*)
616-
AC_MSG_ERROR(Cannot build leveldb for $host. Please file a bug report.)
617609
;;
618610
esac
619611

@@ -960,6 +952,72 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdint.h>
960952
[ AC_MSG_RESULT(no)]
961953
)
962954

955+
dnl LevelDB platform checks
956+
AC_MSG_CHECKING(for fdatasync)
957+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
958+
[[ fdatasync(0); ]])],
959+
[ AC_MSG_RESULT(yes); HAVE_FDATASYNC=1 ],
960+
[ AC_MSG_RESULT(no); HAVE_FDATASYNC=0 ]
961+
)
962+
963+
AC_MSG_CHECKING(for F_FULLFSYNC)
964+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <fcntl.h>]],
965+
[[ fcntl(0, F_FULLFSYNC, 0); ]])],
966+
[ AC_MSG_RESULT(yes); HAVE_FULLFSYNC=1 ],
967+
[ AC_MSG_RESULT(no); HAVE_FULLFSYNC=0 ]
968+
)
969+
970+
AC_MSG_CHECKING(for O_CLOEXEC)
971+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <fcntl.h>]],
972+
[[ open("", O_CLOEXEC); ]])],
973+
[ AC_MSG_RESULT(yes); HAVE_O_CLOEXEC=1 ],
974+
[ AC_MSG_RESULT(no); HAVE_O_CLOEXEC=0 ]
975+
)
976+
977+
dnl crc32c platform checks
978+
AC_MSG_CHECKING(for __builtin_prefetch)
979+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
980+
char data = 0;
981+
const char* address = &data;
982+
__builtin_prefetch(address, 0, 0);
983+
]])],
984+
[ AC_MSG_RESULT(yes); HAVE_BUILTIN_PREFETCH=1 ],
985+
[ AC_MSG_RESULT(no); HAVE_BUILTIN_PREFETCH=0 ]
986+
)
987+
988+
AC_MSG_CHECKING(for _mm_prefetch)
989+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <xmmintrin.h>]], [[
990+
char data = 0;
991+
const char* address = &data;
992+
_mm_prefetch(address, _MM_HINT_NTA);
993+
]])],
994+
[ AC_MSG_RESULT(yes); HAVE_MM_PREFETCH=1 ],
995+
[ AC_MSG_RESULT(no); HAVE_MM_PREFETCH=0 ]
996+
)
997+
998+
AC_MSG_CHECKING(for strong getauxval support in the system headers)
999+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1000+
#include <arm_acle.h>
1001+
#include <arm_neon.h>
1002+
#include <sys/auxv.h>
1003+
]], [[
1004+
getauxval(AT_HWCAP);
1005+
]])],
1006+
[ AC_MSG_RESULT(yes); HAVE_STRONG_GETAUXVAL=1 ],
1007+
[ AC_MSG_RESULT(no); HAVE_STRONG_GETAUXVAL=0 ]
1008+
)
1009+
1010+
AC_MSG_CHECKING(for weak getauxval support in the compiler)
1011+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1012+
unsigned long getauxval(unsigned long type) __attribute__((weak));
1013+
#define AT_HWCAP 16
1014+
]], [[
1015+
getauxval(AT_HWCAP);
1016+
]])],
1017+
[ AC_MSG_RESULT(yes); HAVE_WEAK_GETAUXVAL=1 ],
1018+
[ AC_MSG_RESULT(no); HAVE_WEAK_GETAUXVAL=0 ]
1019+
)
1020+
9631021
dnl Check for reduced exports
9641022
if test x$use_reduce_exports = xyes; then
9651023
AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"],
@@ -1515,11 +1573,13 @@ AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes])
15151573
AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes])
15161574
AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes])
15171575
AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes])
1518-
AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes])
1576+
AM_CONDITIONAL([ENABLE_SSE42],[test x$enable_sse42 = xyes])
15191577
AM_CONDITIONAL([ENABLE_SSE41],[test x$enable_sse41 = xyes])
15201578
AM_CONDITIONAL([ENABLE_AVX2],[test x$enable_avx2 = xyes])
15211579
AM_CONDITIONAL([ENABLE_SHANI],[test x$enable_shani = xyes])
1580+
AM_CONDITIONAL([ENABLE_ARM_CRC],[test x$enable_arm_crc = xyes])
15221581
AM_CONDITIONAL([USE_ASM],[test x$use_asm = xyes])
1582+
AM_CONDITIONAL([WORDS_BIGENDIAN],[test x$ac_cv_c_bigendian = xyes])
15231583

15241584
AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version])
15251585
AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version])
@@ -1566,18 +1626,25 @@ AC_SUBST(SSE42_CXXFLAGS)
15661626
AC_SUBST(SSE41_CXXFLAGS)
15671627
AC_SUBST(AVX2_CXXFLAGS)
15681628
AC_SUBST(SHANI_CXXFLAGS)
1629+
AC_SUBST(ARM_CRC_CXXFLAGS)
15691630
AC_SUBST(LIBTOOL_APP_LDFLAGS)
15701631
AC_SUBST(USE_UPNP)
15711632
AC_SUBST(USE_QRCODE)
15721633
AC_SUBST(BOOST_LIBS)
15731634
AC_SUBST(TESTDEFS)
1574-
AC_SUBST(LEVELDB_TARGET_FLAGS)
15751635
AC_SUBST(MINIUPNPC_CPPFLAGS)
15761636
AC_SUBST(MINIUPNPC_LIBS)
15771637
AC_SUBST(EVENT_LIBS)
15781638
AC_SUBST(EVENT_PTHREADS_LIBS)
15791639
AC_SUBST(ZMQ_LIBS)
15801640
AC_SUBST(QR_LIBS)
1641+
AC_SUBST(HAVE_FDATASYNC)
1642+
AC_SUBST(HAVE_FULLFSYNC)
1643+
AC_SUBST(HAVE_O_CLOEXEC)
1644+
AC_SUBST(HAVE_BUILTIN_PREFETCH)
1645+
AC_SUBST(HAVE_MM_PREFETCH)
1646+
AC_SUBST(HAVE_STRONG_GETAUXVAL)
1647+
AC_SUBST(HAVE_WEAK_GETAUXVAL)
15811648
AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
15821649
AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
15831650
AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])])

contrib/devtools/copyright_header.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"src/leveldb/",
3535
"src/secp256k1/",
3636
"src/univalue/",
37+
"src/crc32c/",
3738
]
3839

3940
INCLUDE = ['*.h', '*.cpp', '*.cc', '*.c', '*.mm', '*.py', '*.sh', '*.bash-completion']

doc/Doxyfile.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,8 @@ RECURSIVE = YES
861861
# Note that relative paths are relative to the directory from which doxygen is
862862
# run.
863863

864-
EXCLUDE = src/leveldb \
864+
EXCLUDE = src/crc32c \
865+
src/leveldb \
865866
src/json \
866867
src/test \
867868
src/qt/test

doc/developer-notes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,10 @@ Current subtrees include:
858858
- **Note**: Follow the instructions in [Upgrading LevelDB](#upgrading-leveldb) when
859859
merging upstream changes to the LevelDB subtree.
860860

861+
- src/crc32c
862+
- Used by leveldb for hardware acceleration of CRC32C checksums for data integrity.
863+
- Upstream at https://github.com/google/crc32c ; Maintained by Google.
864+
861865
- src/secp256k1
862866
- Upstream at https://github.com/bitcoin-core/secp256k1/ ; actively maintained by Core contributors.
863867

src/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@ if HARDEN
718718
endif
719719

720720
if EMBEDDED_LEVELDB
721+
include Makefile.crc32c.include
721722
include Makefile.leveldb.include
722723
endif
723724

src/Makefile.crc32c.include

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Copyright (c) 2019 The Bitcoin Core developers
2+
# Distributed under the MIT software license, see the accompanying
3+
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
LIBCRC32C_INT = crc32c/libcrc32c.a
6+
LIBLEVELDB_SSE42_INT = leveldb/libleveldb_sse42.a
7+
8+
EXTRA_LIBRARIES += $(LIBCRC32C_INT)
9+
10+
LIBCRC32C = $(LIBCRC32C_INT)
11+
12+
CRC32C_CPPFLAGS_INT =
13+
CRC32C_CPPFLAGS_INT += -I$(srcdir)/crc32c/include
14+
CRC32C_CPPFLAGS_INT += -DHAVE_BUILTIN_PREFETCH=@HAVE_BUILTIN_PREFETCH@
15+
CRC32C_CPPFLAGS_INT += -DHAVE_MM_PREFETCH=@HAVE_MM_PREFETCH@
16+
CRC32C_CPPFLAGS_INT += -DHAVE_STRONG_GETAUXVAL=@HAVE_STRONG_GETAUXVAL@
17+
CRC32C_CPPFLAGS_INT += -DHAVE_WEAK_GETAUXVAL=@HAVE_WEAK_GETAUXVAL@
18+
CRC32C_CPPFLAGS_INT += -DCRC32C_TESTS_BUILT_WITH_GLOG=0
19+
20+
if ENABLE_SSE42
21+
CRC32C_CPPFLAGS_INT += -DHAVE_SSE42=1
22+
else
23+
CRC32C_CPPFLAGS_INT += -DHAVE_SSE42=0
24+
endif
25+
26+
if ENABLE_ARM_CRC
27+
CRC32C_CPPFLAGS_INT += -DHAVE_ARM64_CRC32C=1
28+
else
29+
CRC32C_CPPFLAGS_INT += -DHAVE_ARM64_CRC32C=0
30+
endif
31+
32+
if WORDS_BIGENDIAN
33+
CRC32C_CPPFLAGS_INT += -DBYTE_ORDER_BIG_ENDIAN=1
34+
else
35+
CRC32C_CPPFLAGS_INT += -DBYTE_ORDER_BIG_ENDIAN=0
36+
endif
37+
38+
crc32c_libcrc32c_a_CPPFLAGS = $(AM_CPPFLAGS) $(CRC32C_CPPFLAGS_INT) $(CRC32C_CPPFLAGS)
39+
crc32c_libcrc32c_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
40+
41+
crc32c_libcrc32c_a_SOURCES =
42+
crc32c_libcrc32c_a_SOURCES += crc32c/include/crc32c/crc32c.h
43+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_arm64.h
44+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_arm64_linux_check.h
45+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_internal.h
46+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_prefetch.h
47+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_read_le.h
48+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_round_up.h
49+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_sse42_check.h
50+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_sse42.h
51+
52+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c.cc
53+
crc32c_libcrc32c_a_SOURCES += crc32c/src/crc32c_portable.cc
54+
55+
if ENABLE_SSE42
56+
LIBCRC32C_SSE42_INT = crc32c/libcrc32c_sse42.a
57+
EXTRA_LIBRARIES += $(LIBCRC32C_SSE42_INT)
58+
LIBCRC32C += $(LIBCRC32C_SSE42_INT)
59+
60+
crc32c_libcrc32c_sse42_a_CPPFLAGS = $(crc32c_libcrc32c_a_CPPFLAGS)
61+
crc32c_libcrc32c_sse42_a_CXXFLAGS = $(crc32c_libcrc32c_a_CXXFLAGS) $(SSE42_CXXFLAGS)
62+
63+
crc32c_libcrc32c_sse42_a_SOURCES = crc32c/src/crc32c_sse42.cc
64+
endif
65+
66+
if ENABLE_ARM_CRC
67+
LIBCRC32C_ARM_CRC_INT = crc32c/libcrc32c_arm_crc.a
68+
EXTRA_LIBRARIES += $(LIBCRC32C_ARM_CRC_INT)
69+
LIBCRC32C += $(LIBCRC32C_ARM_CRC_INT)
70+
71+
crc32c_libcrc32c_arm_crc_a_CPPFLAGS = $(crc32c_libcrc32c_a_CPPFLAGS)
72+
crc32c_libcrc32c_arm_crc_a_CXXFLAGS = $(crc32c_libcrc32c_a_CXXFLAGS) $(ARM_CRC_CXXFLAGS)
73+
74+
crc32c_libcrc32c_arm_crc_a_SOURCES = crc32c/src/crc32c_arm64.cc
75+
endif

0 commit comments

Comments
 (0)