Skip to content

Commit bcffd51

Browse files
committed
fixup! cmake: Build bitcoin_crypto library
1 parent e2bdff6 commit bcffd51

File tree

1 file changed

+61
-21
lines changed

1 file changed

+61
-21
lines changed

Diff for: src/crypto/CMakeLists.txt

+61-21
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

55
if(ASM AND NOT MSVC)
6+
include(CheckSourceCompilesAndLinks)
7+
68
# Check for SSE4.1 intrinsics.
79
set(SSE41_CXXFLAGS -msse4.1)
810
check_cxx_source_compiles_with_flags("${SSE41_CXXFLAGS}" "
@@ -64,10 +66,9 @@ endif()
6466
include(CheckCXXSymbolExists)
6567
check_cxx_symbol_exists(timingsafe_bcmp "string.h" HAVE_TIMINGSAFE_BCMP)
6668

67-
# The `bitcoin_crypto` must be of an `OBJECT` type to include
69+
# The `bitcoin_crypto_base` must be of an `OBJECT` type to include
6870
# its object files into the output static library archives.
69-
add_library(bitcoin_crypto OBJECT EXCLUDE_FROM_ALL
70-
$<$<BOOL:${ASM}>:sha256_sse4.cpp>
71+
add_library(bitcoin_crypto_base OBJECT EXCLUDE_FROM_ALL
7172
aes.cpp
7273
chacha20.cpp
7374
chacha20poly1305.cpp
@@ -79,46 +80,85 @@ add_library(bitcoin_crypto OBJECT EXCLUDE_FROM_ALL
7980
ripemd160.cpp
8081
sha1.cpp
8182
sha256.cpp
83+
$<$<BOOL:${ASM}>:sha256_sse4.cpp>
8284
sha3.cpp
8385
sha512.cpp
8486
siphash.cpp
8587
)
86-
target_compile_definitions(bitcoin_crypto
88+
target_compile_definitions(bitcoin_crypto_base
8789
PRIVATE
8890
$<$<BOOL:${ASM}>:USE_ASM>
89-
$<$<BOOL:${HAVE_SSE41}>:ENABLE_SSE41>
90-
$<$<BOOL:${HAVE_AVX2}>:ENABLE_AVX2>
91-
$<$<BOOL:${HAVE_X86_SHANI}>:ENABLE_X86_SHANI>
92-
$<$<BOOL:${HAVE_ARM_SHANI}>:ENABLE_ARM_SHANI>
9391
$<$<BOOL:${HAVE_TIMINGSAFE_BCMP}>:HAVE_TIMINGSAFE_BCMP>
9492
)
93+
target_link_libraries(bitcoin_crypto_base PRIVATE core)
9594

9695
if(HAVE_SSE41)
97-
target_sources(bitcoin_crypto PRIVATE sha256_sse41.cpp)
98-
set_property(SOURCE sha256_sse41.cpp
99-
APPEND PROPERTY COMPILE_OPTIONS ${SSE41_CXXFLAGS}
96+
add_library(bitcoin_crypto_sse41 STATIC EXCLUDE_FROM_ALL
97+
sha256_sse41.cpp
98+
)
99+
target_compile_definitions(bitcoin_crypto_sse41
100+
PUBLIC
101+
ENABLE_SSE41
100102
)
103+
target_compile_options(bitcoin_crypto_sse41
104+
PRIVATE
105+
${SSE41_CXXFLAGS}
106+
)
107+
target_link_libraries(bitcoin_crypto_sse41 PRIVATE core)
101108
endif()
102109

103110
if(HAVE_AVX2)
104-
target_sources(bitcoin_crypto PRIVATE sha256_avx2.cpp)
105-
set_property(SOURCE sha256_avx2.cpp
106-
APPEND PROPERTY COMPILE_OPTIONS ${AVX2_CXXFLAGS}
111+
add_library(bitcoin_crypto_avx2 STATIC EXCLUDE_FROM_ALL
112+
sha256_sse41.cpp
113+
)
114+
target_compile_definitions(bitcoin_crypto_avx2
115+
PUBLIC
116+
ENABLE_AVX2
117+
)
118+
target_compile_options(bitcoin_crypto_avx2
119+
PRIVATE
120+
${AVX2_CXXFLAGS}
107121
)
122+
target_link_libraries(bitcoin_crypto_avx2 PRIVATE core)
108123
endif()
109124

110125
if(HAVE_X86_SHANI)
111-
target_sources(bitcoin_crypto PRIVATE sha256_x86_shani.cpp)
112-
set_property(SOURCE sha256_x86_shani.cpp
113-
APPEND PROPERTY COMPILE_OPTIONS ${X86_SHANI_CXXFLAGS}
126+
add_library(bitcoin_crypto_x86_shani STATIC EXCLUDE_FROM_ALL
127+
sha256_x86_shani.cpp
114128
)
129+
target_compile_definitions(bitcoin_crypto_x86_shani
130+
PUBLIC
131+
ENABLE_X86_SHANI
132+
)
133+
target_compile_options(bitcoin_crypto_x86_shani
134+
PRIVATE
135+
${X86_SHANI_CXXFLAGS}
136+
)
137+
target_link_libraries(bitcoin_crypto_x86_shani PRIVATE core)
115138
endif()
116139

117140
if(HAVE_ARM_SHANI)
118-
target_sources(bitcoin_crypto PRIVATE sha256_arm_shani.cpp)
119-
set_property(SOURCE sha256_arm_shani.cpp
120-
APPEND PROPERTY COMPILE_OPTIONS ${ARM_SHANI_CXXFLAGS}
141+
add_library(bitcoin_crypto_arm_shani STATIC EXCLUDE_FROM_ALL
142+
sha256_arm_shani.cpp
143+
)
144+
target_compile_definitions(bitcoin_crypto_arm_shani
145+
PUBLIC
146+
ENABLE_ARM_SHANI
121147
)
148+
target_compile_options(bitcoin_crypto_arm_shani
149+
PRIVATE
150+
${ARM_SHANI_CXXFLAGS}
151+
)
152+
target_link_libraries(bitcoin_crypto_arm_shani PRIVATE core)
122153
endif()
123154

124-
target_link_libraries(bitcoin_crypto PRIVATE core)
155+
add_library(bitcoin_crypto STATIC EXCLUDE_FROM_ALL
156+
$<TARGET_OBJECTS:bitcoin_crypto_base>
157+
)
158+
target_link_libraries(bitcoin_crypto
159+
PRIVATE
160+
$<TARGET_NAME_IF_EXISTS:bitcoin_crypto_sse41>
161+
$<TARGET_NAME_IF_EXISTS:bitcoin_crypto_avx2>
162+
$<TARGET_NAME_IF_EXISTS:bitcoin_crypto_x86_shani>
163+
$<TARGET_NAME_IF_EXISTS:bitcoin_crypto_arm_shani>
164+
)

0 commit comments

Comments
 (0)