From 79ae60ed9737f6c0ec652eab5492b1359aaea9cf Mon Sep 17 00:00:00 2001 From: Loo Rong Jie Date: Tue, 28 Nov 2017 13:36:16 +0800 Subject: MSVC fixes --- CMake/README.md | 7 ++++++- CMakeLists.txt | 10 ++++++---- absl/copts.bzl | 2 ++ absl/time/clock.cc | 4 ++-- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CMake/README.md b/CMake/README.md index 11160a9..9c2d689 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 e87f4a8..a740088 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 cc8db2f..f687f58 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 6398170..9f2e078 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::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) { -- cgit v1.2.3