option(USE_STATIC_MBEDTLS_LIBRARY "Build mbed TLS static library." ON) option(USE_SHARED_MBEDTLS_LIBRARY "Build mbed TLS shared library." OFF) option(LINK_WITH_PTHREAD "Explicitly link mbed TLS library to pthread." OFF) set(src aes.c aesni.c arc4.c asn1parse.c asn1write.c base64.c bignum.c blowfish.c camellia.c ccm.c certs.c cipher.c cipher_wrap.c ctr_drbg.c debug.c des.c dhm.c ecp.c ecp_curves.c ecdh.c ecdsa.c entropy.c entropy_poll.c error.c gcm.c havege.c hmac_drbg.c md.c md_wrap.c md2.c md4.c md5.c memory_buffer_alloc.c net.c oid.c padlock.c pbkdf2.c pem.c pkcs5.c pkcs11.c pkcs12.c pk.c pk_wrap.c pkparse.c pkwrite.c platform.c ripemd160.c rsa.c sha1.c sha256.c sha512.c ssl_cache.c ssl_ciphersuites.c ssl_cli.c ssl_srv.c ssl_tls.c threading.c timing.c version.c version_features.c x509.c x509_crt.c x509_crl.c x509_csr.c x509_create.c x509write_crt.c x509write_csr.c xtea.c ) if(WIN32) set(libs ws2_32) endif(WIN32) if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes") endif(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-declarations -Wmissing-prototypes -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code") endif(CMAKE_COMPILER_IS_CLANG) if (NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) message(FATAL_ERROR "Need to choose static or shared mbedtls build!") endif(NOT USE_STATIC_MBEDTLS_LIBRARY AND NOT USE_SHARED_MBEDTLS_LIBRARY) if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) # if we build both static an shared, then let # tests and programs link to the shared lib target set(mbedtls_static_target "mbedtls_static") elseif(USE_STATIC_MBEDTLS_LIBRARY) set(mbedtls_static_target "mbedtls") endif() if(USE_STATIC_MBEDTLS_LIBRARY) add_library(${mbedtls_static_target} STATIC ${src}) set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls) target_link_libraries(${mbedtls_static_target} ${libs}) if(ZLIB_FOUND) target_link_libraries(${mbedtls_static_target} ${ZLIB_LIBRARIES}) endif(ZLIB_FOUND) if(LINK_WITH_PTHREAD) target_link_libraries(${mbedtls_static_target} pthread) endif() install(TARGETS ${mbedtls_static_target} DESTINATION ${LIB_INSTALL_DIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif() if(USE_SHARED_MBEDTLS_LIBRARY) add_library(mbedtls SHARED ${src}) set_target_properties(mbedtls PROPERTIES VERSION 1.3.18 SOVERSION 9) target_link_libraries(mbedtls ${libs}) if(ZLIB_FOUND) target_link_libraries(mbedtls ${ZLIB_LIBRARIES}) endif(ZLIB_FOUND) if(LINK_WITH_PTHREAD) target_link_libraries(mbedtls pthread) endif() install(TARGETS mbedtls DESTINATION ${LIB_INSTALL_DIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif(USE_SHARED_MBEDTLS_LIBRARY) if(UNIX) add_custom_target(polarssl DEPENDS mbedtls # TODO: and mbedtls_static is shared is defined COMMAND ${CMAKE_SOURCE_DIR}/scripts/polarssl_symlinks.sh ${CMAKE_BINARY_DIR}/library ) if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY) add_dependencies(polarssl mbedtls_static) endif() add_custom_target(polarssl-clean COMMAND make clean COMMAND rm -f ${CMAKE_BINARY_DIR}/library/libpolarssl.* ) add_custom_target(polarssl-install COMMAND make install COMMAND ${CMAKE_SOURCE_DIR}/scripts/polarssl_symlinks.sh ${DESTDIR}/${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} ) endif(UNIX)