about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLoo Rong Jie <loorongjie@gmail.com>2017-11-28T05·36+0800
committerLoo Rong Jie <loorongjie@gmail.com>2017-11-28T05·36+0800
commit79ae60ed9737f6c0ec652eab5492b1359aaea9cf (patch)
tree95f1895b0824990b7204d37618739c62655fba18
parent79610733f46c888b56d05d7ca981350655c55a5d (diff)
MSVC fixes
-rw-r--r--CMake/README.md7
-rw-r--r--CMakeLists.txt10
-rw-r--r--absl/copts.bzl2
-rw-r--r--absl/time/clock.cc4
4 files changed, 16 insertions, 7 deletions
diff --git a/CMake/README.md b/CMake/README.md
index 11160a9d66c2..9c2d6897f8d8 100644
--- a/CMake/README.md
+++ b/CMake/README.md
@@ -43,6 +43,11 @@
 
       set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}")
 
+      if (MSVC)
+        add_compile_options(/wd4005 /wd4068 /wd4244 /wd4267 /wd4800)
+        add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS)
+      endif()
+
       add_subdirectory(googletest)
       add_subdirectory(cctz)
       add_subdirectory(abseil-cpp)
@@ -51,7 +56,7 @@
       target_link_libraries(my_exe absl::base absl::synchronization absl::strings)
 
 
-You will need to create your own CMake files for cctz until https://github.com/google/cctz/pull/54 lands.  As of this writing, that pull request requires -DBUILD_TESTING=OFF as it doesn't correctly export cctz's dependency on Google Benchmark.
+As of this writing, that pull request requires -DBUILD_TESTING=OFF as it doesn't correctly export cctz's dependency on Google Benchmark.
 
     You will find here a non exhaustive list of absl public targets
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e87f4a84abf6..a740088a6399 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -26,7 +26,12 @@ include(AbseilHelpers)
 
 
 # config options
-set(ABSL_STD_CXX_FLAG "-std=c++11" CACHE STRING "c++ std flag (default: c++11)")
+if (MSVC)
+  add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS)
+  add_compile_options(/W3 /WX /wd4005 /wd4068 /wd4244 /wd4267 /wd4800)
+else()
+  set(ABSL_STD_CXX_FLAG "-std=c++11" CACHE STRING "c++ std flag (default: c++11)")
+endif()
 
 
 
@@ -66,9 +71,6 @@ check_target(gmock)
 # -fexceptions
 set(ABSL_EXCEPTIONS_FLAG "${CMAKE_CXX_EXCEPTIONS}")
 
-# fix stuff
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FIX_MSVC} ${CMAKE_CXX_FLAGS}")
-
 list(APPEND ABSL_TEST_COMMON_LIBRARIES
   gtest_main
   gtest
diff --git a/absl/copts.bzl b/absl/copts.bzl
index cc8db2f45108..f687f58ffa24 100644
--- a/absl/copts.bzl
+++ b/absl/copts.bzl
@@ -103,7 +103,9 @@ MSVC_FLAGS = [
     "/wd4244",  # conversion from 'type1' to 'type2', possible loss of data
     "/wd4267",  # conversion from 'size_t' to 'type', possible loss of data
     "/wd4800",  # forcing value to bool 'true' or 'false' (performance warning)
+    "/DNOMINMAX",  # Don't define min and max macros (windows.h)
     "/DWIN32_LEAN_AND_MEAN",  # Don't bloat namespace with incompatible winsock versions.
+    "/D_CRT_SECURE_NO_WARNINGS",  # Don't warn about usage of insecure C functions
 ]
 
 MSVC_TEST_FLAGS = [
diff --git a/absl/time/clock.cc b/absl/time/clock.cc
index 6398170d0d1a..9f2e0781868a 100644
--- a/absl/time/clock.cc
+++ b/absl/time/clock.cc
@@ -510,7 +510,7 @@ namespace {
 // Returns the maximum duration that SleepOnce() can sleep for.
 constexpr absl::Duration MaxSleep() {
 #ifdef _WIN32
-  // Windows _sleep() takes unsigned long argument in milliseconds.
+  // Windows Sleep() takes unsigned long argument in milliseconds.
   return absl::Milliseconds(
       std::numeric_limits<unsigned long>::max());  // NOLINT(runtime/int)
 #else
@@ -522,7 +522,7 @@ constexpr absl::Duration MaxSleep() {
 // REQUIRES: to_sleep <= MaxSleep().
 void SleepOnce(absl::Duration to_sleep) {
 #ifdef _WIN32
-  _sleep(to_sleep / absl::Milliseconds(1));
+  Sleep(to_sleep / absl::Milliseconds(1));
 #else
   struct timespec sleep_time = absl::ToTimespec(to_sleep);
   while (nanosleep(&sleep_time, &sleep_time) != 0 && errno == EINTR) {