3
3
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
4
5
5
if (ASM AND NOT MSVC )
6
+ include (CheckSourceCompilesAndLinks)
7
+
6
8
# Check for SSE4.1 intrinsics.
7
9
set (SSE41_CXXFLAGS -msse4.1)
8
10
check_cxx_source_compiles_with_flags("${SSE41_CXXFLAGS} " "
@@ -64,10 +66,9 @@ endif()
64
66
include (CheckCXXSymbolExists)
65
67
check_cxx_symbol_exists(timingsafe_bcmp "string.h" HAVE_TIMINGSAFE_BCMP)
66
68
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
68
70
# 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
71
72
aes.cpp
72
73
chacha20.cpp
73
74
chacha20poly1305.cpp
@@ -79,46 +80,85 @@ add_library(bitcoin_crypto OBJECT EXCLUDE_FROM_ALL
79
80
ripemd160.cpp
80
81
sha1.cpp
81
82
sha256.cpp
83
+ $<$<BOOL :${ASM} >:sha256_sse4.cpp>
82
84
sha3.cpp
83
85
sha512.cpp
84
86
siphash.cpp
85
87
)
86
- target_compile_definitions (bitcoin_crypto
88
+ target_compile_definitions (bitcoin_crypto_base
87
89
PRIVATE
88
90
$<$<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>
93
91
$<$<BOOL :${HAVE_TIMINGSAFE_BCMP} >:HAVE_TIMINGSAFE_BCMP>
94
92
)
93
+ target_link_libraries (bitcoin_crypto_base PRIVATE core)
95
94
96
95
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
100
102
)
103
+ target_compile_options (bitcoin_crypto_sse41
104
+ PRIVATE
105
+ ${SSE41_CXXFLAGS}
106
+ )
107
+ target_link_libraries (bitcoin_crypto_sse41 PRIVATE core)
101
108
endif ()
102
109
103
110
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}
107
121
)
122
+ target_link_libraries (bitcoin_crypto_avx2 PRIVATE core)
108
123
endif ()
109
124
110
125
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
114
128
)
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)
115
138
endif ()
116
139
117
140
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
121
147
)
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)
122
153
endif ()
123
154
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