@@ -112,6 +112,7 @@ option(QUIC_SKIP_CI_CHECKS "Disable CI specific build checks" OFF)
112112option (QUIC_TELEMETRY_ASSERTS "Enable telemetry asserts in release builds" OFF )
113113option (QUIC_USE_SYSTEM_LIBCRYPTO "Use system libcrypto if quictls TLS" OFF )
114114option (QUIC_USE_EXTERNAL_OPENSSL "Use external OpenSSL instead of building from submodules" OFF )
115+ set (QUIC_OPENSSL_DIR "" CACHE PATH "Path to OpenSSL directory" )
115116set (QUIC_OPENSSL_INCLUDE_DIR "" CACHE PATH "Path to OpenSSL include directory" )
116117set (QUIC_OPENSSL_LIB_DIR "" CACHE PATH "Path to OpenSSL library directory" )
117118option (QUIC_HIGH_RES_TIMERS "Configure the system to use high resolution timers" OFF )
@@ -772,20 +773,38 @@ if(QUIC_TLS_LIB STREQUAL "quictls" OR QUIC_TLS_LIB STREQUAL "openssl")
772773 add_library (OpenSSLQuic INTERFACE )
773774 if (QUIC_OPENSSL_INCLUDE_DIR AND QUIC_OPENSSL_LIB_DIR)
774775 target_include_directories (OpenSSLQuic INTERFACE ${QUIC_OPENSSL_INCLUDE_DIR} )
775- find_library (LIB_CRYPTO NAMES crypto libcrypto PATHS ${QUIC_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
776+ if (BUILD_SHARED_LIBS )
777+ find_library (LIB_CRYPTO NAMES crypto libcrypto PATHS ${QUIC_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
778+ else ()
779+ find_library (LIB_CRYPTO NAMES "crypto${CMAKE_STATIC_LIBRARY_SUFFIX} " "libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX} " PATHS ${QUIC_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
780+ endif ()
776781 if (NOT LIB_CRYPTO)
777782 message (FATAL_ERROR "libcrypto not found in ${QUIC_OPENSSL_LIB_DIR} " )
778783 endif ()
779- find_library (LIB_SSL NAMES ssl libssl PATHS ${QUIC_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
784+ if (BUILD_SHARED_LIBS )
785+ find_library (LIB_SSL NAMES ssl libssl PATHS ${QUIC_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
786+ else ()
787+ find_library (LIB_SSL NAMES "ssl${CMAKE_STATIC_LIBRARY_SUFFIX} " "libssl${CMAKE_STATIC_LIBRARY_SUFFIX} " PATHS ${QUIC_OPENSSL_LIB_DIR} NO_DEFAULT_PATH)
788+ endif ()
780789 if (NOT LIB_SSL)
781790 message (FATAL_ERROR "libssl not found in ${QUIC_OPENSSL_LIB_DIR} " )
782791 endif ()
783792 target_link_libraries (OpenSSLQuic INTERFACE ${LIB_SSL} ${LIB_CRYPTO} )
784793 elseif (QUIC_OPENSSL_INCLUDE_DIR OR QUIC_OPENSSL_LIB_DIR)
785794 message (FATAL_ERROR "Both QUIC_OPENSSL_INCLUDE_DIR and QUIC_OPENSSL_LIB_DIR must be set to select custom OpenSSL version." )
786795 else ()
796+ if (QUIC_OPENSSL_DIR)
797+ set (OPENSSL_ROOT_DIR "${QUIC_OPENSSL_DIR} " )
798+ endif ()
799+ if (NOT BUILD_SHARED_LIBS )
800+ set (OPENSSL_USE_STATIC_LIBS TRUE )
801+ endif ()
787802 find_package (OpenSSL 3.5.0 REQUIRED)
788- target_link_libraries (OpenSSLQuic INTERFACE OpenSSL::SSL OpenSSL::Crypto)
803+ # OpenSSL::SSL and OpenSSL::Crypto imported targets include their dependencies such as zstd.
804+ # However, these dependencies will be linked in src/platform/CMakeLists.txt,
805+ # so link only the main OpenSSL targets here to avoid duplication.
806+ target_include_directories (OpenSSLQuic INTERFACE ${OPENSSL_INCLUDE_DIR} )
807+ target_link_libraries (OpenSSLQuic INTERFACE ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY} )
789808 endif ()
790809 add_library (MsQuic::OpenSSL ALIAS OpenSSLQuic)
791810 else ()
0 commit comments