|
1 | | -IF(MSVC) |
| 1 | +IF(MSVC_INTEL) |
2 | 2 | PROJECT(wolfssl C ASM_MASM) |
3 | 3 | ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64") |
4 | | - PROJECT(wolfssl C ASM) |
| 4 | + PROJECT(wolfssl C ASM) |
5 | 5 | ELSE() |
6 | 6 | PROJECT(wolfssl C) |
7 | 7 | ENDIF() |
8 | 8 |
|
9 | 9 | IF(CMAKE_SIZEOF_VOID_P MATCHES 8) |
10 | | -IF(MSVC) |
| 10 | +IF(MSVC_INTEL AND NOT (CMAKE_C_COMPILER_ID MATCHES Clang)) |
11 | 11 | SET(WOLFSSL_INTELASM ON) |
12 | | - SET(WOLFSSL_X86_64_BUILD 1) |
13 | 12 | SET(HAVE_INTEL_RDSEED 1) |
14 | 13 | SET(HAVE_INTEL_RDRAND 1) |
15 | | -ELSEIF(CMAKE_ASM_COMPILER_ID MATCHES "Clang" AND CMAKE_VERSION VERSION_LESS 3.16) |
16 | | - |
17 | | - # WolfSSL 5.5.4 bug workaround below does not work, due to some CMake bug |
18 | 14 | ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64") |
19 | | - SET(WOLFSSL_X86_64_BUILD 1) |
20 | 15 | IF(CMAKE_C_COMPILER_ID MATCHES GNU AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9) |
21 | 16 | MESSAGE_ONCE(NO_INTEL_ASSEMBLY "Disable Intel assembly for WolfSSL - compiler is too old") |
| 17 | + ELSEIF(WITH_MSAN) |
| 18 | + MESSAGE_ONCE(MSAN_CANT_HANDLE_IT "Disable Intel assembly for WolfSSL - MSAN can't handle it") |
22 | 19 | ELSE() |
23 | | - IF(WITH_MSAN) |
24 | | - MESSAGE_ONCE(MSAN_CANT_HANDLE_IT |
25 | | -"Disable Intel assembly for WolfSSL - MSAN can't handle it") |
26 | | - ELSE() |
27 | | - MY_CHECK_C_COMPILER_FLAG(-maes) |
28 | | - MY_CHECK_C_COMPILER_FLAG(-msse4) |
29 | | - MY_CHECK_C_COMPILER_FLAG(-mpclmul) |
30 | | - IF(have_C__maes AND have_C__msse4 AND have_C__mpclmul) |
31 | | - SET(WOLFSSL_INTELASM ON) |
| 20 | + MY_CHECK_C_COMPILER_FLAG(-maes) |
| 21 | + MY_CHECK_C_COMPILER_FLAG(-msse4) |
| 22 | + MY_CHECK_C_COMPILER_FLAG(-mpclmul) |
| 23 | + IF(have_C__maes AND have_C__msse4 AND have_C__mpclmul) |
| 24 | + SET(WOLFSSL_INTELASM ON) |
| 25 | + MY_CHECK_C_COMPILER_FLAG(-mrdrnd) |
| 26 | + MY_CHECK_C_COMPILER_FLAG(-mrdseed) |
| 27 | + IF(have_C__mrdrnd) |
| 28 | + SET(HAVE_INTEL_RDRAND ON) |
| 29 | + ENDIF() |
| 30 | + IF(have_C__mrdseed) |
| 31 | + SET(HAVE_INTEL_RDSEED ON) |
32 | 32 | ENDIF() |
33 | | - ENDIF() |
34 | | - MY_CHECK_C_COMPILER_FLAG(-mrdrnd) |
35 | | - MY_CHECK_C_COMPILER_FLAG(-mrdseed) |
36 | | - IF(have_C__mrdrnd) |
37 | | - SET(HAVE_INTEL_RDRAND ON) |
38 | | - ENDIF() |
39 | | - IF(have_C__mrdseed) |
40 | | - SET(HAVE_INTEL_RDSEED ON) |
41 | 33 | ENDIF() |
42 | 34 | ENDIF() |
43 | 35 | ENDIF() |
44 | 36 | ENDIF() |
45 | 37 |
|
46 | 38 | SET(WOLFSSL_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/src) |
| 39 | +SET(WOLFCRYPT_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/wolfcrypt/src) |
47 | 40 | ADD_DEFINITIONS(${SSL_DEFINES}) |
48 | | - |
49 | | -SET(WOLFSSL_SOURCES |
50 | | - ${WOLFSSL_SRCDIR}/crl.c |
51 | | - ${WOLFSSL_SRCDIR}/internal.c |
52 | | - ${WOLFSSL_SRCDIR}/keys.c |
53 | | - ${WOLFSSL_SRCDIR}/tls.c |
54 | | - ${WOLFSSL_SRCDIR}/wolfio.c |
55 | | - ${WOLFSSL_SRCDIR}/ocsp.c |
56 | | - ${WOLFSSL_SRCDIR}/ssl.c |
57 | | - ${WOLFSSL_SRCDIR}/tls13.c) |
58 | | - |
59 | 41 | ADD_DEFINITIONS(-DWOLFSSL_LIB -DBUILDING_WOLFSSL) |
60 | | - |
| 42 | +ADD_DEFINITIONS(-DWOLFSSL_SP_4096) |
61 | 43 | INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl) |
62 | | -IF(MSVC) |
63 | | - # size_t to long truncation warning |
64 | | - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd4267 -wd4334 -wd4028 -wd4244") |
65 | | -ENDIF() |
66 | | - |
67 | | -ADD_CONVENIENCE_LIBRARY(wolfssl ${WOLFSSL_SOURCES}) |
68 | | - |
69 | | -# Workaround linker crash with older Ubuntu binutils |
70 | | -# e.g aborting at ../../bfd/merge.c line 873 in _bfd_merged_section_offset |
71 | | -IF(CMAKE_SYSTEM_NAME MATCHES "Linux") |
72 | | - STRING(REPLACE "-g " "-g1 " CMAKE_C_FLAGS_RELWITHDEBINFO |
73 | | - ${CMAKE_C_FLAGS_RELWITHDEBINFO}) |
74 | | - STRING(REPLACE "-g " "-g1 " CMAKE_C_FLAGS_DEBUG |
75 | | - ${CMAKE_C_FLAGS_DEBUG}) |
76 | | - STRING(REPLACE "-ggdb3 " " " CMAKE_C_FLAGS_RELWITHDEBINFO |
77 | | - ${CMAKE_C_FLAGS_RELWITHDEBINFO}) |
78 | | - STRING(REPLACE "-ggdb3 " " " CMAKE_C_FLAGS_DEBUG |
79 | | - ${CMAKE_C_FLAGS_DEBUG}) |
80 | | -ENDIF() |
| 44 | +INCLUDE_DIRECTORIES(${SSL_INCLUDE_DIRS}) |
81 | 45 |
|
82 | | -SET(WOLFCRYPT_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/wolfcrypt/src) |
83 | | -SET(WOLFCRYPT_SOURCES |
| 46 | +add_library(wolfssl STATIC |
| 47 | +${WOLFSSL_SRCDIR}/crl.c |
| 48 | +${WOLFSSL_SRCDIR}/internal.c |
| 49 | +${WOLFSSL_SRCDIR}/keys.c |
| 50 | +${WOLFSSL_SRCDIR}/tls.c |
| 51 | +${WOLFSSL_SRCDIR}/wolfio.c |
| 52 | +${WOLFSSL_SRCDIR}/ocsp.c |
| 53 | +${WOLFSSL_SRCDIR}/ssl.c |
| 54 | +${WOLFSSL_SRCDIR}/tls13.c |
84 | 55 | ${WOLFCRYPT_SRCDIR}/aes.c |
85 | 56 | ${WOLFCRYPT_SRCDIR}/arc4.c |
86 | 57 | ${WOLFCRYPT_SRCDIR}/asn.c |
@@ -110,69 +81,56 @@ ${WOLFCRYPT_SRCDIR}/wc_encrypt.c |
110 | 81 | ${WOLFCRYPT_SRCDIR}/hash.c |
111 | 82 | ${WOLFCRYPT_SRCDIR}/wolfmath.c |
112 | 83 | ${WOLFCRYPT_SRCDIR}/kdf.c |
| 84 | +${WOLFCRYPT_SRCDIR}/sp_int.c |
| 85 | +${WOLFCRYPT_SRCDIR}/sp_c32.c |
| 86 | +${WOLFCRYPT_SRCDIR}/sp_c64.c |
113 | 87 | ) |
114 | 88 |
|
115 | | -# Use fastmath large number math library. |
116 | | -IF(NOT (MSVC AND CMAKE_C_COMPILER_ID MATCHES Clang)) |
117 | | - # Can't use clang-cl with WOLFSSL_FASTMATH |
118 | | - # due to https://bugs.llvm.org/show_bug.cgi?id=25305 |
119 | | - SET(WOLFSSL_FASTMATH 1) |
120 | | -ENDIF() |
121 | | - |
122 | | -IF(WOLFSSL_FASTMATH) |
123 | | - SET(USE_FAST_MATH 1) |
124 | | - SET(TFM_TIMING_RESISTANT 1) |
125 | | - # FP_MAX_BITS is set high solely to satisfy ssl_8k_key.test |
126 | | - # WolfSSL will use more stack space with it |
127 | | - SET(FP_MAX_BITS 16384) |
128 | | - SET(WOLFCRYPT_SOURCES ${WOLFCRYPT_SOURCES} ${WOLFCRYPT_SRCDIR}/tfm.c) |
129 | | - IF((CMAKE_SIZEOF_VOID_P MATCHES 4) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "86") |
130 | | - AND (NOT MSVC)) |
131 | | - # Workaround https://github.com/wolfSSL/wolfssl/issues/4245 |
132 | | - # On 32bit Intel, to satisfy inline assembly's wish for free registers |
133 | | - # 1. use -fomit-frame-pointer |
134 | | - # 2. With GCC 4, additionally use -fno-PIC, which works on x86 |
135 | | - # (modern GCC has PIC optimizations, that make it unnecessary) |
136 | | - # The following assumes GCC or Clang |
137 | | - SET(TFM_COMPILE_FLAGS "-fomit-frame-pointer") |
138 | | - IF(CMAKE_C_COMPILER_VERSION VERSION_LESS "5") |
139 | | - SET(TFM_COMPILE_FLAGS "${TFM_COMPILE_FLAGS} -fno-PIC") |
140 | | - ENDIF() |
141 | | - SET_SOURCE_FILES_PROPERTIES(${WOLFCRYPT_SRCDIR}/tfm.c |
142 | | - PROPERTIES COMPILE_FLAGS ${TFM_COMPILE_FLAGS}) |
143 | | - ENDIF() |
144 | | -ELSE() |
145 | | - SET(WOLFSSL_SP_MATH_ALL 1) |
146 | | - SET(WOLFCRYPT_SOURCES ${WOLFCRYPT_SOURCES} ${WOLFCRYPT_SRCDIR}/sp_int.c) |
147 | | -ENDIF() |
148 | | - |
149 | | -IF(WOLFSSL_X86_64_BUILD) |
150 | | - LIST(APPEND WOLFCRYPT_SOURCES ${WOLFCRYPT_SRCDIR}/cpuid.c) |
151 | | - IF(MSVC) |
152 | | - SET(WOLFSSL_AESNI 1) |
153 | | - LIST(APPEND WOLFCRYPT_SOURCES |
154 | | - ${WOLFCRYPT_SRCDIR}/aes_asm.asm |
155 | | - ${WOLFCRYPT_SRCDIR}/aes_gcm_asm.asm) |
156 | | - IF(CMAKE_C_COMPILER_ID MATCHES Clang) |
157 | | - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes -msse4.2 -mpclmul -mrdrnd -mrdseed") |
158 | | - ENDIF() |
159 | | - ELSEIF(WOLFSSL_INTELASM) |
160 | | - SET(WOLFSSL_AESNI 1) |
161 | | - SET(USE_INTEL_SPEEDUP 1) |
162 | | - LIST(APPEND WOLFCRYPT_SOURCES |
| 89 | +# Optimizations, assembly |
| 90 | +if(WOLFSSL_INTELASM) |
| 91 | + set(WOLFSSL_X86_64_BUILD 1) |
| 92 | + set(WOLFSSL_SP_X86_64 1) |
| 93 | + set(WOLFSSL_SP_X86_64_ASM 1) |
| 94 | + set(WOLFSSL_AESNI 1) |
| 95 | + target_sources(wolfssl PRIVATE |
| 96 | + ${WOLFCRYPT_SRCDIR}/cpuid.c |
| 97 | + ${WOLFCRYPT_SRCDIR}/sp_x86_64.c |
| 98 | + ) |
| 99 | + if(MSVC_INTEL) |
| 100 | + target_sources(wolfssl PRIVATE |
| 101 | + ${WOLFCRYPT_SRCDIR}/aes_asm.asm |
| 102 | + ${WOLFCRYPT_SRCDIR}/aes_gcm_asm.asm |
| 103 | + ${WOLFCRYPT_SRCDIR}/sp_x86_64_asm.asm |
| 104 | + ) |
| 105 | + target_compile_options(wolfssl PRIVATE |
| 106 | + $<$<COMPILE_LANG_AND_ID:C,Clang>:-maes -msse4.2 -mpclmul -mrdrnd -mrdseed> |
| 107 | + $<$<COMPILE_LANGUAGE:ASM_MASM>:/Zi> |
| 108 | + ) |
| 109 | + else() |
| 110 | + set(USE_INTEL_SPEEDUP 1) |
| 111 | + target_sources(wolfssl PRIVATE |
163 | 112 | ${WOLFCRYPT_SRCDIR}/aes_asm.S |
164 | 113 | ${WOLFCRYPT_SRCDIR}/aes_gcm_asm.S |
165 | 114 | ${WOLFCRYPT_SRCDIR}/chacha_asm.S |
166 | 115 | ${WOLFCRYPT_SRCDIR}/poly1305_asm.S |
167 | 116 | ${WOLFCRYPT_SRCDIR}/sha512_asm.S |
168 | | - ${WOLFCRYPT_SRCDIR}/sha256_asm.S) |
169 | | - ADD_DEFINITIONS(-maes -msse4.2 -mpclmul) |
170 | | - # WolfSSL 5.5.4 bug - user_settings.h not included into aes_asm.S |
171 | | - SET_PROPERTY(SOURCE ${WOLFCRYPT_SRCDIR}/aes_asm.S APPEND PROPERTY COMPILE_OPTIONS "-DWOLFSSL_X86_64_BUILD") |
172 | | - ENDIF() |
173 | | -ENDIF() |
| 117 | + ${WOLFCRYPT_SRCDIR}/sha256_asm.S |
| 118 | + ${WOLFCRYPT_SRCDIR}/sp_x86_64_asm.S |
| 119 | + ) |
| 120 | + target_compile_options(wolfssl PRIVATE -maes -msse4.2 -mpclmul) |
| 121 | + # Workaround 5.5.4 bug (user_settings.h not included into aes_asm.S) |
| 122 | + set_property(SOURCE ${WOLFCRYPT_SRCDIR}/aes_asm.S APPEND PROPERTY COMPILE_OPTIONS "-DWOLFSSL_X86_64_BUILD") |
| 123 | + endif() |
| 124 | +endif() |
| 125 | + |
| 126 | +# Silence some warnings |
| 127 | +if(MSVC) |
| 128 | + # truncation warnings |
| 129 | + target_compile_options(wolfssl PRIVATE $<$<COMPILE_LANGUAGE:C>:/wd4244>) |
| 130 | + if(CMAKE_C_COMPILER_ID MATCHES Clang) |
| 131 | + target_compile_options(wolfssl PRIVATE $<$<COMPILE_LANGUAGE:C>:-Wno-incompatible-function-pointer-types>) |
| 132 | + endif() |
| 133 | +endif() |
174 | 134 |
|
175 | 135 | CONFIGURE_FILE(user_settings.h.in user_settings.h) |
176 | | -INCLUDE_DIRECTORIES(${SSL_INCLUDE_DIRS}) |
177 | | -ADD_CONVENIENCE_LIBRARY(wolfcrypt ${WOLFCRYPT_SOURCES}) |
178 | 136 |
|
0 commit comments