From 11589f8abb81be9f89bd0932623c83221aa125ae Mon Sep 17 00:00:00 2001
From: Yabin Li <wucong.lyb@alibaba-inc.com>
Date: 星期四, 16 十一月 2023 09:35:17 +0800
Subject: [PATCH] modify cmakelist & glog for wins (#1094)

---
 runtime/onnxruntime/third_party/glog/CMakeLists.txt |  148 ++++++++++++++++++++++--------------------------
 1 files changed, 68 insertions(+), 80 deletions(-)

diff --git a/runtime/onnxruntime/third_party/glog/CMakeLists.txt b/runtime/onnxruntime/third_party/glog/CMakeLists.txt
index b6b3a1a..f5c1e55 100644
--- a/runtime/onnxruntime/third_party/glog/CMakeLists.txt
+++ b/runtime/onnxruntime/third_party/glog/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.21)
+cmake_minimum_required (VERSION 3.16)
 project (glog
   VERSION 0.7.0
   DESCRIPTION "C++ implementation of the Google logging module"
@@ -131,7 +131,6 @@
 check_cxx_symbol_exists (backtrace execinfo.h HAVE_EXECINFO_BACKTRACE)
 check_cxx_symbol_exists (backtrace_symbols execinfo.h
   HAVE_EXECINFO_BACKTRACE_SYMBOLS)
-check_cxx_symbol_exists (_chsize_s io.h HAVE__CHSIZE_S)
 
 # NOTE gcc does not fail if you pass a non-existent -Wno-* option as an
 # argument. However, it will happily fail if you pass the corresponding -W*
@@ -214,61 +213,50 @@
 endif (WITH_TLS)
 
 set (_PC_FIELDS
-  "uc_mcontext.gregs[REG_PC]"          # Solaris x86 (32 + 64 bit)
-  "uc_mcontext.gregs[REG_EIP]"         # Linux (i386)
-  "uc_mcontext.gregs[REG_RIP]"         # Linux (x86_64)
-  "uc_mcontext.sc_ip"                  # Linux (ia64)
-  "uc_mcontext.pc"                     # Linux (mips)
-  "uc_mcontext.uc_regs->gregs[PT_NIP]" # Linux (ppc)
-  "uc_mcontext.gregs[R15]"             # Linux (arm old [untested])
-  "uc_mcontext.arm_pc"                 # Linux (arm arch 5)
-  "uc_mcontext.gp_regs[PT_NIP]"        # Suse SLES 11 (ppc64)
-  "uc_mcontext.mc_eip"                 # FreeBSD (i386)
-  "uc_mcontext.mc_rip"                 # FreeBSD (x86_64 [untested])
-  "uc_mcontext.__gregs[_REG_EIP]"      # NetBSD (i386)
-  "uc_mcontext.__gregs[_REG_RIP]"      # NetBSD (x86_64)
-  "uc_mcontext->ss.eip"                # OS X (i386, <=10.4)
-  "uc_mcontext->__ss.__eip"            # OS X (i386, >=10.5)
-  "uc_mcontext->ss.rip"                # OS X (x86_64)
-  "uc_mcontext->__ss.__rip"            # OS X (>=10.5 [untested])
-  "uc_mcontext->ss.srr0"               # OS X (ppc, ppc64 [untested])
-  "uc_mcontext->__ss.__srr0"           # OS X (>=10.5 [untested])
+  "gregs[REG_PC]"
+  "gregs[REG_EIP]"
+  "gregs[REG_RIP]"
+  "sc_ip"
+  "uc_regs->gregs[PT_NIP]"
+  "gregs[R15]"
+  "arm_pc"
+  "mc_eip"
+  "mc_rip"
+  "__gregs[REG_EIP]"
+  "__gregs[REG_RIP]"
+  "ss.eip"
+  "__ss.__eip"
+  "ss.rip"
+  "__ss.__rip"
+  "ss.srr0"
+  "__ss.__srr0"
 )
 
-if (HAVE_UCONTEXT_H AND NOT DEFINED PC_FROM_UCONTEXT)
-  cmake_push_check_state (RESET)
+set (_PC_HEADERS ucontext.h signal.h)
 
-  set (CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
-  set (_PC_HEADERS ucontext.h signal.h)
+if (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
+  foreach (_PC_FIELD ${_PC_FIELDS})
+    foreach (_PC_HEADER ${_PC_HEADERS})
+      set (_TMP
+      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/uctfield.cpp)
+      file (WRITE ${_TMP} "
+#define _GNU_SOURCE 1
+#include <${_PC_HEADER}>
+int main(void)
+{
+  ucontext_t u;
+  return u.${_PC_FIELD} == 0;
+}
+")
+      try_compile (HAVE_PC_FROM_UCONTEXT ${CMAKE_CURRENT_BINARY_DIR} ${_TMP}
+        COMPILE_DEFINITIONS _GNU_SOURCE=1)
 
-  foreach (_PC_FIELD IN LISTS _PC_FIELDS)
-    foreach (_PC_HEADER IN LISTS _PC_HEADERS)
-      # Replace non-alphanumeric characters by underscores since the name will be
-      # used as preprocessor definition.
-      string (REGEX REPLACE "[^a-zA-Z0-9]" "_" HAVE_UCONTEXT_FIELD_NAME
-        "HAVE_PC_FROM_UCONTEXT_${_PC_FIELD}")
-      # Strip trailing underscores for readability
-      string (REGEX REPLACE "_+$" "" HAVE_UCONTEXT_FIELD_NAME
-        "${HAVE_UCONTEXT_FIELD_NAME}")
-
-      check_struct_has_member (ucontext_t ${_PC_FIELD} ${_PC_HEADER}
-        ${HAVE_UCONTEXT_FIELD_NAME} LANGUAGE CXX)
-
-      if (${HAVE_UCONTEXT_FIELD_NAME})
-        set (PC_FROM_UCONTEXT ${_PC_FIELD} CACHE STRING
-          "<${_PC_HEADER}> ucontext_t PC member")
-        mark_as_advanced (PC_FROM_UCONTEXT)
-        break ()
-      endif (${HAVE_UCONTEXT_FIELD_NAME})
+      if (HAVE_PC_FROM_UCONTEXT)
+        set (PC_FROM_UCONTEXT ${_PC_FIELD} CACHE)
+      endif (HAVE_PC_FROM_UCONTEXT)
     endforeach (_PC_HEADER)
-
-    if (${HAVE_UCONTEXT_FIELD_NAME})
-      break ()
-    endif (${HAVE_UCONTEXT_FIELD_NAME})
   endforeach (_PC_FIELD)
-
-  cmake_pop_check_state ()
-endif (HAVE_UCONTEXT_H AND NOT DEFINED PC_FROM_UCONTEXT)
+endif  (HAVE_UCONTEXT_H AND NOT PC_FROM_UCONTEXT)
 
 set (GOOGLE_NAMESPACE google)
 set (_START_GOOGLE_NAMESPACE_ "namespace ${GOOGLE_NAMESPACE} {")
@@ -480,13 +468,16 @@
   src/demangle.h
   src/logging.cc
   src/raw_logging.cc
-  src/signalhandler.cc
   src/symbolize.cc
   src/symbolize.h
   src/utilities.cc
   src/utilities.h
   src/vlog_is_on.cc
 )
+
+if (HAVE_PTHREAD OR WIN32 OR CYGWIN)
+  list (APPEND GLOG_SRCS src/signalhandler.cc)
+endif (HAVE_PTHREAD OR WIN32 OR CYGWIN)
 
 if (CYGWIN OR WIN32)
   list (APPEND GLOG_SRCS
@@ -500,20 +491,9 @@
   ${GLOG_SRCS}
 )
 target_compile_features (glog_internal PUBLIC $<TARGET_PROPERTY:glog,COMPILE_FEATURES>)
-set_target_properties (glog_internal PROPERTIES DEFINE_SYMBOL GOOGLE_GLOG_IS_A_DLL)
-
-# Some generators (such as Xcode) do not generate any output if the target does
-# not reference at least one source file.
-set (_glog_EMPTY_SOURCE ${glog_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/glog.cc)
-
-add_custom_command (
-  OUTPUT ${_glog_EMPTY_SOURCE}
-  COMMAND ${CMAKE_COMMAND} -E touch ${_glog_EMPTY_SOURCE}
-)
 
 add_library (glog
   $<TARGET_OBJECTS:glog_internal>
-  ${_glog_EMPTY_SOURCE}
 )
 target_compile_features (glog PUBLIC cxx_std_14)
 
@@ -635,30 +615,38 @@
 endif (NOT WITH_FUZZING STREQUAL "none")
 
 if (BUILD_TESTING)
-  add_library (glog_test INTERFACE)
-  target_link_libraries (glog_test INTERFACE $<TARGET_OBJECTS:glog_internal> $<TARGET_PROPERTY:glog,LINK_LIBRARIES>)
-  target_compile_definitions (glog_test INTERFACE GLOG_STATIC_DEFINE $<TARGET_PROPERTY:glog,COMPILE_DEFINITIONS>)
-  target_include_directories (glog_test INTERFACE $<TARGET_PROPERTY:glog,INCLUDE_DIRECTORIES>)
+  add_library (glogtest STATIC
+    $<TARGET_OBJECTS:glog_internal>
+  )
+
+  target_include_directories (glogtest PUBLIC
+    $<TARGET_PROPERTY:glog,INCLUDE_DIRECTORIES>)
+  target_compile_definitions (glogtest PUBLIC
+    $<TARGET_PROPERTY:glog,COMPILE_DEFINITIONS> GLOG_STATIC_DEFINE)
+  target_link_libraries (glogtest PUBLIC
+    $<TARGET_PROPERTY:glog,LINK_LIBRARIES>)
+
+  set (_GLOG_TEST_LIBS glogtest)
 
   if (HAVE_LIB_GTEST)
-    target_link_libraries (glog_test INTERFACE GTest::gtest)
+    list (APPEND _GLOG_TEST_LIBS GTest::gtest)
   endif (HAVE_LIB_GTEST)
 
   if (HAVE_LIB_GMOCK)
-    target_link_libraries (glog_test INTERFACE GTest::gmock)
+    list (APPEND _GLOG_TEST_LIBS GTest::gmock)
   endif (HAVE_LIB_GMOCK)
 
   add_executable (logging_unittest
     src/logging_unittest.cc
   )
 
-  target_link_libraries (logging_unittest PRIVATE glog_test)
+  target_link_libraries (logging_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   add_executable (stl_logging_unittest
     src/stl_logging_unittest.cc
   )
 
-  target_link_libraries (stl_logging_unittest PRIVATE glog_test)
+  target_link_libraries (stl_logging_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   if (HAVE_NO_DEPRECATED)
     set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
@@ -675,35 +663,35 @@
       src/symbolize_unittest.cc
     )
 
-    target_link_libraries (symbolize_unittest PRIVATE glog_test)
+    target_link_libraries (symbolize_unittest PRIVATE ${_GLOG_TEST_LIBS})
   endif (HAVE_SYMBOLIZE)
 
   add_executable (demangle_unittest
     src/demangle_unittest.cc
   )
 
-  target_link_libraries (demangle_unittest PRIVATE glog_test)
+  target_link_libraries (demangle_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   if (HAVE_STACKTRACE)
     add_executable (stacktrace_unittest
       src/stacktrace_unittest.cc
     )
 
-    target_link_libraries (stacktrace_unittest PRIVATE glog_test)
+    target_link_libraries (stacktrace_unittest PRIVATE ${_GLOG_TEST_LIBS})
   endif (HAVE_STACKTRACE)
 
   add_executable (utilities_unittest
     src/utilities_unittest.cc
   )
 
-  target_link_libraries (utilities_unittest PRIVATE glog_test)
+  target_link_libraries (utilities_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
     add_executable (signalhandler_unittest
       src/signalhandler_unittest.cc
     )
 
-    target_link_libraries (signalhandler_unittest PRIVATE glog_test)
+    target_link_libraries (signalhandler_unittest PRIVATE ${_GLOG_TEST_LIBS})
   endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
 
   add_test (NAME demangle COMMAND demangle_unittest)
@@ -749,7 +737,7 @@
       src/mock-log.h
     )
 
-    target_link_libraries (mock-log_unittest PRIVATE glog_test)
+    target_link_libraries (mock-log_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
     add_test (NAME mock-log COMMAND mock-log_unittest)
   endif (HAVE_LIB_GMOCK)
@@ -811,17 +799,17 @@
   add_executable (cleanup_immediately_unittest
     src/cleanup_immediately_unittest.cc)
 
-  target_link_libraries (cleanup_immediately_unittest PRIVATE glog_test)
+  target_link_libraries (cleanup_immediately_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   add_executable (cleanup_with_absolute_prefix_unittest
     src/cleanup_with_absolute_prefix_unittest.cc)
 
-  target_link_libraries (cleanup_with_absolute_prefix_unittest PRIVATE glog_test)
+  target_link_libraries (cleanup_with_absolute_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   add_executable (cleanup_with_relative_prefix_unittest
     src/cleanup_with_relative_prefix_unittest.cc)
 
-  target_link_libraries (cleanup_with_relative_prefix_unittest PRIVATE glog_test)
+  target_link_libraries (cleanup_with_relative_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS})
 
   set (CLEANUP_LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/cleanup_tests)
 

--
Gitblit v1.9.1