FindOpenSSL.cmake.template 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #
  2. # Copyright (c) Contributors to the Open 3D Engine Project.
  3. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. #
  5. # SPDX-License-Identifier: Apache-2.0 OR MIT
  6. #
  7. #
  8. set(OPENSSL_O3DE_NAMESPACE "3rdParty::OpenSSL")
  9. if (TARGET $${OPENSSL_O3DE_NAMESPACE})
  10. return()
  11. endif()
  12. set(SSL_TARGETNAME "OpenSSL::SSL")
  13. set(CRYPTO_TARGETNAME "OpenSSL::Crypto")
  14. # we're trying to be a drop-in replacement for the FindOpenSSL.cmake that is shipped
  15. # with CMake itself, so we set the same variables with the same uppercase for compatibility
  16. # for questions about these variables, see https://cmake.org/cmake/help/latest/module/FindOpenSSL.html
  17. set(OPENSSL_FOUND True)
  18. set(OPENSSL_INCLUDE_DIR $${CMAKE_CURRENT_LIST_DIR}/OpenSSL/include)
  19. # c-only packages can be released containing only Release executables
  20. set(OPENSSL_LIBS_DIR $${CMAKE_CURRENT_LIST_DIR}/OpenSSL/lib)
  21. set(OPENSSL_CRYPTO_LIBRARY $${OPENSSL_LIBS_DIR}/libcrypto$${CMAKE_STATIC_LIBRARY_SUFFIX})
  22. set(OPENSSL_CRYPTO_LIBRARIES
  23. $${OPENSSL_CRYPTO_LIBRARY}
  24. ${CRYPTO_LIBRARY_DEPENDENCIES})
  25. set(OPENSSL_SSL_LIBRARY $${OPENSSL_LIBS_DIR}/libssl$${CMAKE_STATIC_LIBRARY_SUFFIX})
  26. set(OPENSSL_SSL_LIBRARIES
  27. $${OPENSSL_SSL_LIBRARY}
  28. $${OPENSSL_CRYPTO_LIBRARIES})
  29. set(OPENSSL_LIBRARIES $${OPENSSL_SSL_LIBRARIES})
  30. set(OPENSSL_VERSION "${OPENSSL_VERSION_STRING}")
  31. add_library($${CRYPTO_TARGETNAME} STATIC IMPORTED GLOBAL)
  32. set_target_properties($${CRYPTO_TARGETNAME} PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C")
  33. set_target_properties($${CRYPTO_TARGETNAME} PROPERTIES IMPORTED_LOCATION "$${OPENSSL_CRYPTO_LIBRARY}")
  34. # anyone who links to the CRYPTO target also links to its dependencies:
  35. target_link_libraries($${CRYPTO_TARGETNAME} INTERFACE ${CRYPTO_LIBRARY_DEPENDENCIES})
  36. add_library($${SSL_TARGETNAME} STATIC IMPORTED GLOBAL)
  37. set_target_properties($${SSL_TARGETNAME} PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C")
  38. set_target_properties($${SSL_TARGETNAME} PROPERTIES IMPORTED_LOCATION "$${OPENSSL_SSL_LIBRARY}")
  39. # anyone who links to the SSL target also links to CRYPTO since SSL depends on CRYPTO:
  40. target_link_libraries($${SSL_TARGETNAME} INTERFACE $${CRYPTO_TARGETNAME})
  41. # cmake < 3.21 and visual studio < 16.10 don't properly implement SYSTEM includes
  42. # so we use O3DEs patched implementation if it is available and fallback to default if not.
  43. # this is futureproof so that when O3DE no longer needs to define this and CMake's system
  44. # works without fixes, O3DE can erase this implementation and this script will still function.
  45. if (COMMAND ly_target_include_system_directories)
  46. ly_target_include_system_directories(TARGET $${SSL_TARGETNAME} INTERFACE $${OPENSSL_INCLUDE_DIR})
  47. ly_target_include_system_directories(TARGET $${CRYPTO_TARGETNAME} INTERFACE $${OPENSSL_INCLUDE_DIR})
  48. else()
  49. target_include_directories($${SSL_TARGETNAME} SYSTEM INTERFACE $${OPENSSL_INCLUDE_DIR})
  50. target_include_directories($${CRYPTO_TARGETNAME} SYSTEM INTERFACE $${OPENSSL_INCLUDE_DIR})
  51. endif()
  52. # alias the O3DE name to the official name:
  53. add_library($${OPENSSL_O3DE_NAMESPACE} ALIAS $${SSL_TARGETNAME})
  54. # if we're not in O3DE, it's also extremely helpful to show a message to logs that indicate that this
  55. # library was successfully picked up, as opposed to the system one.
  56. # A good way to know if you're in O3DE or not is that O3DE sets various cache variables before
  57. # calling find_package, specifically, LY_VERSION_ENGINE_NAME is always set very early:
  58. if (NOT LY_VERSION_ENGINE_NAME)
  59. message(STATUS "Using O3DE's OpenSSL ($${OPENSSL_VERSION}) from $${CMAKE_CURRENT_LIST_DIR}")
  60. endif()