1option(USE_STATIC_MBEDTLS_LIBRARY "Build mbed TLS static library." ON) 2option(USE_SHARED_MBEDTLS_LIBRARY "Build mbed TLS shared library." OFF) 3option(LINK_WITH_PTHREAD "Explicitly link mbed TLS library to pthread." OFF) 4 5set(src_crypto 6 aes.c 7 aesni.c 8 arc4.c 9 aria.c 10 asn1parse.c 11 asn1write.c 12 base64.c 13 bignum.c 14 blowfish.c 15 camellia.c 16 ccm.c 17 chacha20.c 18 chachapoly.c 19 cipher.c 20 cipher_wrap.c 21 cmac.c 22 ctr_drbg.c 23 des.c 24 dhm.c 25 ecdh.c 26 ecdsa.c 27 ecjpake.c 28 ecp.c 29 ecp_curves.c 30 entropy.c 31 entropy_poll.c 32 error.c 33 gcm.c 34 havege.c 35 hkdf.c 36 hmac_drbg.c 37 md.c 38 md2.c 39 md4.c 40 md5.c 41 md_wrap.c 42 memory_buffer_alloc.c 43 nist_kw.c 44 oid.c 45 padlock.c 46 pem.c 47 pk.c 48 pk_wrap.c 49 pkcs12.c 50 pkcs5.c 51 pkparse.c 52 pkwrite.c 53 platform.c 54 platform_util.c 55 poly1305.c 56 ripemd160.c 57 rsa.c 58 rsa_internal.c 59 sha1.c 60 sha256.c 61 sha512.c 62 threading.c 63 timing.c 64 version.c 65 version_features.c 66 xtea.c 67) 68 69set(src_x509 70 certs.c 71 pkcs11.c 72 x509.c 73 x509_create.c 74 x509_crl.c 75 x509_crt.c 76 x509_csr.c 77 x509write_crt.c 78 x509write_csr.c 79) 80 81set(src_tls 82 debug.c 83 net_sockets.c 84 ssl_cache.c 85 ssl_ciphersuites.c 86 ssl_cli.c 87 ssl_cookie.c 88 ssl_srv.c 89 ssl_ticket.c 90 ssl_tls.c 91) 92 93if(CMAKE_COMPILER_IS_GNUCC) 94 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes") 95endif(CMAKE_COMPILER_IS_GNUCC) 96 97if(CMAKE_COMPILER_IS_CLANG) 98 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code") 99endif(CMAKE_COMPILER_IS_CLANG) 100 101if(UNSAFE_BUILD) 102 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error") 103 set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS_ASAN} -Wno-error") 104 set(CMAKE_C_FLAGS_ASANDBG "${CMAKE_C_FLAGS_ASANDBG} -Wno-error") 105endif(UNSAFE_BUILD) 106 107if(WIN32) 108 set(libs ${libs} ws2_32) 109endif(WIN32) 110 111if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 112 SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") 113 SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") 114 SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") 115 SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") 116endif() 117 118if(HAIKU) 119 set(libs ${libs} network) 120endif(HAIKU) 121 122if(USE_PKCS11_HELPER_LIBRARY) 123 set(libs ${libs} pkcs11-helper) 124endif(USE_PKCS11_HELPER_LIBRARY) 125 126if(ENABLE_ZLIB_SUPPORT) 127 set(libs ${libs} ${ZLIB_LIBRARIES}) 128endif(ENABLE_ZLIB_SUPPORT) 129 130if(LINK_WITH_PTHREAD) 131 set(libs ${libs} pthread) 132endif() 133 134if (NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) 135 message(FATAL_ERROR "Need to choose static or shared mbedtls build!") 136endif(NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) 137 138if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) 139 set(mbedtls_static_target "mbedtls_static") 140 set(mbedx509_static_target "mbedx509_static") 141 set(mbedcrypto_static_target "mbedcrypto_static") 142elseif(USE_STATIC_MBEDTLS_LIBRARY) 143 set(mbedtls_static_target "mbedtls") 144 set(mbedx509_static_target "mbedx509") 145 set(mbedcrypto_static_target "mbedcrypto") 146endif() 147 148if(USE_STATIC_MBEDTLS_LIBRARY) 149 add_library(${mbedcrypto_static_target} STATIC ${src_crypto}) 150 set_target_properties(${mbedcrypto_static_target} PROPERTIES OUTPUT_NAME mbedcrypto) 151 target_link_libraries(${mbedcrypto_static_target} ${libs}) 152 153 add_library(${mbedx509_static_target} STATIC ${src_x509}) 154 set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509) 155 target_link_libraries(${mbedx509_static_target} ${libs} ${mbedcrypto_static_target}) 156 157 add_library(${mbedtls_static_target} STATIC ${src_tls}) 158 set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls) 159 target_link_libraries(${mbedtls_static_target} ${libs} ${mbedx509_static_target}) 160 161 install(TARGETS ${mbedtls_static_target} ${mbedx509_static_target} ${mbedcrypto_static_target} 162 DESTINATION ${LIB_INSTALL_DIR} 163 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) 164endif(USE_STATIC_MBEDTLS_LIBRARY) 165 166if(USE_SHARED_MBEDTLS_LIBRARY) 167 add_library(mbedcrypto SHARED ${src_crypto}) 168 set_target_properties(mbedcrypto PROPERTIES VERSION 2.16.11 SOVERSION 3) 169 target_link_libraries(mbedcrypto ${libs}) 170 171 add_library(mbedx509 SHARED ${src_x509}) 172 set_target_properties(mbedx509 PROPERTIES VERSION 2.16.11 SOVERSION 0) 173 target_link_libraries(mbedx509 ${libs} mbedcrypto) 174 175 add_library(mbedtls SHARED ${src_tls}) 176 set_target_properties(mbedtls PROPERTIES VERSION 2.16.11 SOVERSION 12) 177 target_link_libraries(mbedtls ${libs} mbedx509) 178 179 install(TARGETS mbedtls mbedx509 mbedcrypto 180 DESTINATION ${LIB_INSTALL_DIR} 181 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) 182endif(USE_SHARED_MBEDTLS_LIBRARY) 183 184add_custom_target(lib DEPENDS mbedcrypto mbedx509 mbedtls) 185if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) 186 add_dependencies(lib mbedcrypto_static mbedx509_static mbedtls_static) 187endif() 188