Skip to content

Commit 0e2287c

Browse files
committed
cmake: Build minisketch static library
1 parent a06290e commit 0e2287c

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ include(cmake/introspection.cmake)
100100

101101
include(cmake/crc32c.cmake)
102102
include(cmake/leveldb.cmake)
103+
include(cmake/minisketch.cmake)
103104

104105
include(CheckStdFilesystem)
105106
check_std_filesystem()

cmake/minisketch.cmake

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Copyright (c) 2023 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+
# Check for clmul instructions support.
6+
if(MSVC)
7+
set(CLMUL_CXXFLAGS)
8+
else()
9+
set(CLMUL_CXXFLAGS -mpclmul)
10+
endif()
11+
check_cxx_source_compiles_with_flags("${CLMUL_CXXFLAGS}" "
12+
#include <immintrin.h>
13+
#include <cstdint>
14+
15+
int main()
16+
{
17+
__m128i a = _mm_cvtsi64_si128((uint64_t)7);
18+
__m128i b = _mm_clmulepi64_si128(a, a, 37);
19+
__m128i c = _mm_srli_epi64(b, 41);
20+
__m128i d = _mm_xor_si128(b, c);
21+
uint64_t e = _mm_cvtsi128_si64(d);
22+
return e == 0;
23+
}
24+
" HAVE_CLMUL
25+
)
26+
27+
add_library(minisketch_defs INTERFACE)
28+
target_compile_definitions(minisketch_defs INTERFACE
29+
DISABLE_DEFAULT_FIELDS
30+
ENABLE_FIELD_32
31+
$<$<AND:$<BOOL:${HAVE_BUILTIN_CLZL}>,$<BOOL:${HAVE_BUILTIN_CLZLL}>>:HAVE_CLZ>
32+
)
33+
34+
if(HAVE_CLMUL)
35+
add_library(minisketch_clmul OBJECT EXCLUDE_FROM_ALL
36+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_1byte.cpp
37+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_2bytes.cpp
38+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_3bytes.cpp
39+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_4bytes.cpp
40+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_5bytes.cpp
41+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_6bytes.cpp
42+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_7bytes.cpp
43+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/clmul_8bytes.cpp
44+
)
45+
target_compile_definitions(minisketch_clmul PUBLIC HAVE_CLMUL)
46+
target_compile_options(minisketch_clmul PRIVATE ${CLMUL_CXXFLAGS})
47+
target_link_libraries(minisketch_clmul PRIVATE minisketch_defs)
48+
endif()
49+
50+
add_library(minisketch STATIC EXCLUDE_FROM_ALL
51+
${PROJECT_SOURCE_DIR}/src/minisketch/src/minisketch.cpp
52+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_1byte.cpp
53+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_2bytes.cpp
54+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_3bytes.cpp
55+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_4bytes.cpp
56+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_5bytes.cpp
57+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_6bytes.cpp
58+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_7bytes.cpp
59+
${PROJECT_SOURCE_DIR}/src/minisketch/src/fields/generic_8bytes.cpp
60+
)
61+
62+
target_include_directories(minisketch
63+
PUBLIC
64+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/minisketch/include>
65+
)
66+
67+
target_link_libraries(minisketch
68+
PRIVATE
69+
minisketch_defs
70+
$<TARGET_NAME_IF_EXISTS:minisketch_clmul>
71+
)

0 commit comments

Comments
 (0)