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(WIN32) 102 set(libs ${libs} ws2_32) 103endif(WIN32) 104 105if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") 106 SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") 107 SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>") 108 SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") 109 SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>") 110endif() 111 112if(HAIKU) 113 set(libs ${libs} network) 114endif(HAIKU) 115 116if(USE_PKCS11_HELPER_LIBRARY) 117 set(libs ${libs} pkcs11-helper) 118endif(USE_PKCS11_HELPER_LIBRARY) 119 120if(ENABLE_ZLIB_SUPPORT) 121 set(libs ${libs} ${ZLIB_LIBRARIES}) 122endif(ENABLE_ZLIB_SUPPORT) 123 124if(LINK_WITH_PTHREAD) 125 set(libs ${libs} pthread) 126endif() 127 128if (NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) 129 message(FATAL_ERROR "Need to choose static or shared mbedtls build!") 130endif(NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) 131 132if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) 133 set(mbedtls_static_target "mbedtls_static") 134 set(mbedx509_static_target "mbedx509_static") 135 set(mbedcrypto_static_target "mbedcrypto_static") 136elseif(USE_STATIC_MBEDTLS_LIBRARY) 137 set(mbedtls_static_target "mbedtls") 138 set(mbedx509_static_target "mbedx509") 139 set(mbedcrypto_static_target "mbedcrypto") 140endif() 141 142if(USE_STATIC_MBEDTLS_LIBRARY) 143 add_library(${mbedcrypto_static_target} STATIC ${src_crypto}) 144 set_target_properties(${mbedcrypto_static_target} PROPERTIES OUTPUT_NAME mbedcrypto) 145 target_link_libraries(${mbedcrypto_static_target} ${libs}) 146 147 add_library(${mbedx509_static_target} STATIC ${src_x509}) 148 set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509) 149 target_link_libraries(${mbedx509_static_target} ${libs} ${mbedcrypto_static_target}) 150 151 add_library(${mbedtls_static_target} STATIC ${src_tls}) 152 set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls) 153 target_link_libraries(${mbedtls_static_target} ${libs} ${mbedx509_static_target}) 154 155 install(TARGETS ${mbedtls_static_target} ${mbedx509_static_target} ${mbedcrypto_static_target} 156 DESTINATION ${LIB_INSTALL_DIR} 157 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) 158endif(USE_STATIC_MBEDTLS_LIBRARY) 159 160if(USE_SHARED_MBEDTLS_LIBRARY) 161 add_library(mbedcrypto SHARED ${src_crypto}) 162 set_target_properties(mbedcrypto PROPERTIES VERSION 2.16.0 SOVERSION 3) 163 target_link_libraries(mbedcrypto ${libs}) 164 165 add_library(mbedx509 SHARED ${src_x509}) 166 set_target_properties(mbedx509 PROPERTIES VERSION 2.16.0 SOVERSION 0) 167 target_link_libraries(mbedx509 ${libs} mbedcrypto) 168 169 add_library(mbedtls SHARED ${src_tls}) 170 set_target_properties(mbedtls PROPERTIES VERSION 2.16.0 SOVERSION 12) 171 target_link_libraries(mbedtls ${libs} mbedx509) 172 173 install(TARGETS mbedtls mbedx509 mbedcrypto 174 DESTINATION ${LIB_INSTALL_DIR} 175 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) 176endif(USE_SHARED_MBEDTLS_LIBRARY) 177 178add_custom_target(lib DEPENDS mbedcrypto mbedx509 mbedtls) 179if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) 180 add_dependencies(lib mbedcrypto_static mbedx509_static mbedtls_static) 181endif() 182