FindMbedTLS.cmake 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # Once done these will be defined:
  2. #
  3. # LIBMBEDTLS_FOUND
  4. # LIBMBEDTLS_INCLUDE_DIRS
  5. # LIBMBEDTLS_LIBRARIES
  6. #
  7. # For use in OBS:
  8. #
  9. # MBEDTLS_INCLUDE_DIR
  10. find_package(PkgConfig QUIET)
  11. if (PKG_CONFIG_FOUND)
  12. pkg_check_modules(_MBEDTLS QUIET mbedtls)
  13. endif()
  14. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  15. set(_lib_suffix 64)
  16. else()
  17. set(_lib_suffix 32)
  18. endif()
  19. # If we're on MacOS or Linux, please try to statically-link mbedtls.
  20. if(STATIC_MBEDTLS AND (APPLE OR UNIX))
  21. set(_MBEDTLS_LIBRARIES libmbedtls.a)
  22. set(_MBEDCRYPTO_LIBRARIES libmbedcrypto.a)
  23. set(_MBEDX509_LIBRARIES libmbedx509.a)
  24. endif()
  25. find_path(MBEDTLS_INCLUDE_DIR
  26. NAMES mbedtls/ssl.h
  27. HINTS
  28. ENV mbedtlsPath${_lib_suffix}
  29. ENV mbedtlsPath
  30. ENV DepsPath${_lib_suffix}
  31. ENV DepsPath
  32. ${mbedtlsPath${_lib_suffix}}
  33. ${mbedtlsPath}
  34. ${DepsPath${_lib_suffix}}
  35. ${DepsPath}
  36. ${_MBEDTLS_INCLUDE_DIRS}
  37. PATHS
  38. /usr/include /usr/local/include /opt/local/include /sw/include
  39. PATH_SUFFIXES
  40. include)
  41. find_library(MBEDTLS_LIB
  42. NAMES ${_MBEDTLS_LIBRARIES} mbedtls libmbedtls
  43. HINTS
  44. ENV mbedtlsPath${_lib_suffix}
  45. ENV mbedtlsPath
  46. ENV DepsPath${_lib_suffix}
  47. ENV DepsPath
  48. ${mbedtlsPath${_lib_suffix}}
  49. ${mbedtlsPath}
  50. ${DepsPath${_lib_suffix}}
  51. ${DepsPath}
  52. ${_MBEDTLS_LIBRARY_DIRS}
  53. PATHS
  54. /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  55. PATH_SUFFIXES
  56. lib${_lib_suffix} lib
  57. libs${_lib_suffix} libs
  58. bin${_lib_suffix} bin
  59. ../lib${_lib_suffix} ../lib
  60. ../libs${_lib_suffix} ../libs
  61. ../bin${_lib_suffix} ../bin)
  62. find_library(MBEDCRYPTO_LIB
  63. NAMES ${_MBEDCRYPTO_LIBRARIES} mbedcrypto libmbedcrypto
  64. HINTS
  65. ENV mbedcryptoPath${_lib_suffix}
  66. ENV mbedcryptoPath
  67. ENV DepsPath${_lib_suffix}
  68. ENV DepsPath
  69. ${mbedcryptoPath${_lib_suffix}}
  70. ${mbedcryptoPath}
  71. ${DepsPath${_lib_suffix}}
  72. ${DepsPath}
  73. ${_MBEDCRYPTO_LIBRARY_DIRS}
  74. PATHS
  75. /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  76. PATH_SUFFIXES
  77. lib${_lib_suffix} lib
  78. libs${_lib_suffix} libs
  79. bin${_lib_suffix} bin
  80. ../lib${_lib_suffix} ../lib
  81. ../libs${_lib_suffix} ../libs
  82. ../bin${_lib_suffix} ../bin)
  83. find_library(MBEDX509_LIB
  84. NAMES ${_MBEDX509_LIBRARIES} mbedx509 libmbedx509
  85. HINTS
  86. ENV mbedx509Path${_lib_suffix}
  87. ENV mbedx509Path
  88. ENV DepsPath${_lib_suffix}
  89. ENV DepsPath
  90. ${mbedx509Path${_lib_suffix}}
  91. ${mbedx509Path}
  92. ${DepsPath${_lib_suffix}}
  93. ${DepsPath}
  94. ${_MBEDX509_LIBRARY_DIRS}
  95. PATHS
  96. /usr/lib /usr/local/lib /opt/local/lib /sw/lib
  97. PATH_SUFFIXES
  98. lib${_lib_suffix} lib
  99. libs${_lib_suffix} libs
  100. bin${_lib_suffix} bin
  101. ../lib${_lib_suffix} ../lib
  102. ../libs${_lib_suffix} ../libs
  103. ../bin${_lib_suffix} ../bin)
  104. # Sometimes mbedtls is split between three libs, and sometimes it isn't.
  105. # If it isn't, let's check if the symbols we need are all in MBEDTLS_LIB.
  106. if(MBEDTLS_LIB AND NOT MBEDCRYPTO_LIB AND NOT MBEDX509_LIB)
  107. set(CMAKE_REQUIRED_LIBRARIES ${MBEDTLS_LIB})
  108. set(CMAKE_REQUIRED_INCLUDES ${MBEDTLS_INCLUDE_DIR})
  109. check_symbol_exists(mbedtls_x509_crt_init "mbedtls/x509_crt.h" MBEDTLS_INCLUDES_X509)
  110. check_symbol_exists(mbedtls_sha256_init "mbedtls/sha256.h" MBEDTLS_INCLUDES_CRYPTO)
  111. unset(CMAKE_REQUIRED_INCLUDES)
  112. unset(CMAKE_REQUIRED_LIBRARIES)
  113. endif()
  114. # If we find all three libraries, then go ahead.
  115. if(MBEDTLS_LIB AND MBEDCRYPTO_LIB AND MBEDX509_LIB)
  116. set(LIBMBEDTLS_INCLUDE_DIRS ${MBEDTLS_INCLUDE_DIR})
  117. set(LIBMBEDTLS_LIBRARIES ${MBEDTLS_LIB} ${MBEDCRYPTO_LIB} ${MBEDX509_LIB})
  118. set(MBEDTLS_INCLUDE_DIRS ${LIBMBEDTLS_INCLUDE_DIRS})
  119. set(MBEDTLS_LIBRARIES ${LIBMBEDTLS_LIBRARIES})
  120. # Otherwise, if we find MBEDTLS_LIB, and it has both CRYPTO and x509
  121. # within the single lib (i.e. a windows build environment), then also
  122. # feel free to go ahead.
  123. elseif(MBEDTLS_LIB AND MBEDTLS_INCLUDES_CRYPTO AND MBEDTLS_INCLUDES_X509)
  124. set(LIBMBEDTLS_INCLUDE_DIRS ${MBEDTLS_INCLUDE_DIR})
  125. set(LIBMBEDTLS_LIBRARIES ${MBEDTLS_LIB})
  126. set(MBEDTLS_INCLUDE_DIRS ${LIBMBEDTLS_INCLUDE_DIRS})
  127. set(MBEDTLS_LIBRARIES ${LIBMBEDTLS_LIBRARIES})
  128. endif()
  129. # Now we've accounted for the 3-vs-1 library case:
  130. include(FindPackageHandleStandardArgs)
  131. find_package_handle_standard_args(Libmbedtls DEFAULT_MSG MBEDTLS_LIBRARIES MBEDTLS_INCLUDE_DIRS)
  132. mark_as_advanced(MBEDTLS_INCLUDE_DIR MBEDTLS_LIBRARIES MBEDTLS_INCLUDE_DIRS)