Imported Upstream version 1.27.0
[platform/upstream/grpc.git] / cmake / ssl.cmake
index 2c6a0ad..d42720e 100644 (file)
@@ -20,25 +20,42 @@ if(gRPC_SSL_PROVIDER STREQUAL "module")
   if(NOT BORINGSSL_ROOT_DIR)
     set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/boringssl)
   endif()
+
   if(EXISTS "${BORINGSSL_ROOT_DIR}/CMakeLists.txt")
-    if (MSVC AND NOT CMAKE_GENERATOR STREQUAL "Ninja")
-      # Visual Studio build with assembly optimizations is broken,
-      # but it works with Ninja generator.
-      # This will get eventually fixed in cmake, but until then
-      # we need to disable assembly optimizations.
-      # See https://github.com/grpc/grpc/issues/16376
-      set(OPENSSL_NO_ASM ON)
+    if(CMAKE_GENERATOR MATCHES "Visual Studio")
+      if(CMAKE_VERSION VERSION_LESS 3.13)
+        # Visual Studio build with assembly optimizations is broken for older
+        # version of CMake (< 3.13).
+        message(WARNING "Disabling SSL assembly support because CMake version ${CMAKE_VERSION} is too old (less than 3.13)")
+        set(OPENSSL_NO_ASM ON)
+      else()
+        # If we're using a new enough version of CMake, make sure that the
+        # NASM assembler can be found.
+        include(CheckLanguage)
+        check_language(ASM_NASM)
+        if(NOT CMAKE_ASM_NASM_COMPILER)
+          message(WARNING "Disabling SSL assembly support because NASM could not be found")
+          set(OPENSSL_NO_ASM ON)
+        endif()
+      endif()
     endif()
+
     add_subdirectory(${BORINGSSL_ROOT_DIR} third_party/boringssl)
     if(TARGET ssl)
       set(_gRPC_SSL_LIBRARIES ssl)
       set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/include)
+      if(gRPC_INSTALL AND _gRPC_INSTALL_SUPPORTED_FROM_MODULE)
+        install(TARGETS ssl crypto EXPORT gRPCTargets
+          RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR}
+          LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR}
+          ARCHIVE DESTINATION ${gRPC_INSTALL_LIBDIR})
+      endif()
     endif()
   else()
     message(WARNING "gRPC_SSL_PROVIDER is \"module\" but BORINGSSL_ROOT_DIR is wrong")
   endif()
-  if(gRPC_INSTALL)
-    message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_SSL_PROVIDER is \"module\"")
+  if(gRPC_INSTALL AND NOT _gRPC_INSTALL_SUPPORTED_FROM_MODULE)
+    message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_SSL_PROVIDER is \"module\" and CMake version (${CMAKE_VERSION}) is less than 3.13.")
     set(gRPC_INSTALL FALSE)
   endif()
 elseif(gRPC_SSL_PROVIDER STREQUAL "package")