diff --git a/CMake/README.md b/CMake/README.md index 11160a9d6..9c2d6897f 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 e87f4a84a..a740088a6 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 cc8db2f45..f687f58ff 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 6398170d0..9f2e07818 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) {