summaryrefslogtreecommitdiff
path: root/extra/wolfssl/CMakeLists.txt
blob: e2ba345e3c8b4acd14fb720ffc5aaca450e29bcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
IF(MSVC)
  PROJECT(wolfssl C ASM_MASM)
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
   PROJECT(wolfssl C ASM)
ELSE()
  PROJECT(wolfssl C)
ENDIF()

IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
IF(MSVC)
  SET(WOLFSSL_INTELASM ON)
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
  IF(CMAKE_C_COMPILER_ID MATCHES GNU  AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
    MESSAGE_ONCE(NO_INTEL_ASSEMBLY "Disable Intel assembly for WolfSSL - compiler is too old")
  ELSEIF(WITH_MSAN)
    MESSAGE_ONCE(MSAN_CANT_HANDLE_IT
      "Disable Intel assembly for WolfSSL - MSAN can't handle it")
  ELSE()
    MY_CHECK_C_COMPILER_FLAG(-maes)
    MY_CHECK_C_COMPILER_FLAG(-msse4)
    MY_CHECK_C_COMPILER_FLAG(-mpclmul)
    IF(have_C__maes AND have_C__msse4 AND have_C__mpclmul)
      SET(WOLFSSL_INTELASM ON)
    ENDIF()
  ENDIF()
ENDIF()
ENDIF()

SET(WOLFSSL_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/src)
ADD_DEFINITIONS(${SSL_DEFINES})

SET(WOLFSSL_SOURCES  
   ${WOLFSSL_SRCDIR}/crl.c
   ${WOLFSSL_SRCDIR}/internal.c
   ${WOLFSSL_SRCDIR}/keys.c
   ${WOLFSSL_SRCDIR}/tls.c
   ${WOLFSSL_SRCDIR}/wolfio.c
   ${WOLFSSL_SRCDIR}/ocsp.c
   ${WOLFSSL_SRCDIR}/ssl.c)
ADD_DEFINITIONS(-DWOLFSSL_LIB -DBUILDING_WOLFSSL)

INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl)
IF(MSVC)
  # size_t to long truncation warning
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd4267 -wd4334 -wd4028")
ENDIF()

ADD_CONVENIENCE_LIBRARY(wolfssl ${WOLFSSL_SOURCES})

# Workaround linker crash with older Ubuntu binutils
# e.g aborting at ../../bfd/merge.c line 873 in _bfd_merged_section_offset
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  STRING(REPLACE "-g " "-g1 " CMAKE_C_FLAGS_RELWITHDEBINFO 
   ${CMAKE_C_FLAGS_RELWITHDEBINFO})
  STRING(REPLACE "-g " "-g1 " CMAKE_C_FLAGS_DEBUG 
     ${CMAKE_C_FLAGS_DEBUG})
  STRING(REPLACE "-ggdb3 " " " CMAKE_C_FLAGS_RELWITHDEBINFO 
    ${CMAKE_C_FLAGS_RELWITHDEBINFO})
  STRING(REPLACE "-ggdb3 " " " CMAKE_C_FLAGS_DEBUG 
     ${CMAKE_C_FLAGS_DEBUG})
ENDIF()

SET(WOLFCRYPT_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl/wolfcrypt/src)
SET(WOLFCRYPT_SOURCES
${WOLFCRYPT_SRCDIR}/aes.c
${WOLFCRYPT_SRCDIR}/arc4.c
${WOLFCRYPT_SRCDIR}/asn.c
${WOLFCRYPT_SRCDIR}/coding.c
${WOLFCRYPT_SRCDIR}/des3.c
${WOLFCRYPT_SRCDIR}/dh.c
${WOLFCRYPT_SRCDIR}/dsa.c
${WOLFCRYPT_SRCDIR}/ecc.c
${WOLFCRYPT_SRCDIR}/error.c
${WOLFCRYPT_SRCDIR}/hmac.c
${WOLFCRYPT_SRCDIR}/logging.c
${WOLFCRYPT_SRCDIR}/md4.c
${WOLFCRYPT_SRCDIR}/md5.c
${WOLFCRYPT_SRCDIR}/memory.c
${WOLFCRYPT_SRCDIR}/pkcs12.c
${WOLFCRYPT_SRCDIR}/pwdbased.c
${WOLFCRYPT_SRCDIR}/rabbit.c
${WOLFCRYPT_SRCDIR}/random.c
${WOLFCRYPT_SRCDIR}/rsa.c
${WOLFCRYPT_SRCDIR}/sha.c
${WOLFCRYPT_SRCDIR}/sha256.c
${WOLFCRYPT_SRCDIR}/sha512.c
${WOLFCRYPT_SRCDIR}/wc_port.c
${WOLFCRYPT_SRCDIR}/wc_encrypt.c
${WOLFCRYPT_SRCDIR}/hash.c
${WOLFCRYPT_SRCDIR}/wolfmath.c
)

# Use fastmath large number math library.
IF(NOT (MSVC AND CMAKE_C_COMPILER_ID MATCHES Clang)
   AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
  SET(WOLFSSL_FASTMATH 1)
ENDIF()

IF(WOLFSSL_FASTMATH)
  SET(USE_FAST_MATH 1)
  SET(TFM_TIMING_RESISTANT 1)
  # FP_MAX_BITS is set high solely to satisfy ssl_8k_key.test
  # WolfSSL will use more stack space with it
  SET(FP_MAX_BITS 16384)
  SET(WOLFCRYPT_SOURCES  ${WOLFCRYPT_SOURCES} ${WOLFCRYPT_SRCDIR}/tfm.c)
ELSE()
  SET(WOLFCRYPT_SOURCES  ${WOLFCRYPT_SOURCES} ${WOLFCRYPT_SRCDIR}/integer.c)
ENDIF()

IF(WOLFSSL_INTELASM)
  SET(WOLFSSL_AESNI 1)

  LIST(APPEND WOLFCRYPT_SOURCES ${WOLFCRYPT_SRCDIR}/cpuid.c)
  IF(MSVC)
    LIST(APPEND WOLFCRYPT_SOURCES ${WOLFCRYPT_SRCDIR}/aes_asm.asm)
    IF(CMAKE_C_COMPILER_ID MATCHES Clang)
      SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
    ELSE()
      SET(HAVE_INTEL_RDSEED 1)
      SET(WOLFSSL_X86_64_BUILD 1)
    ENDIF()
  ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
    SET(HAVE_INTEL_RDSEED 1)
    SET(USE_INTEL_SPEEDUP 1)
    LIST(APPEND WOLFCRYPT_SOURCES
        ${WOLFCRYPT_SRCDIR}/aes_asm.S
        ${WOLFCRYPT_SRCDIR}/sha512_asm.S
        ${WOLFCRYPT_SRCDIR}/sha256_asm.S)
    ADD_DEFINITIONS(-maes -msse4 -mpclmul)
  ENDIF()
ENDIF()

CONFIGURE_FILE(user_settings.h.in user_settings.h)
INCLUDE_DIRECTORIES(${SSL_INCLUDE_DIRS})
ADD_CONVENIENCE_LIBRARY(wolfcrypt ${WOLFCRYPT_SOURCES})