Merge pull request #55 from rongjiecomputer/master

MSVC fixes
This commit is contained in:
zhangxy988 2017-12-01 13:55:00 -05:00 committed by GitHub
commit 3562f9bb79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 7 deletions

View file

@ -43,6 +43,16 @@
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ ${CMAKE_CXX_FLAGS}")
if (MSVC)
# /wd4005 macro-redefinition
# /wd4068 unknown pragma
# /wd4244 conversion from 'type1' to 'type2'
# /wd4267 conversion from 'size_t' to 'type2'
# /wd4800 force value to bool 'true' or 'false' (performance warning)
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(googletest)
add_subdirectory(cctz) add_subdirectory(cctz)
add_subdirectory(abseil-cpp) add_subdirectory(abseil-cpp)
@ -51,7 +61,7 @@
target_link_libraries(my_exe absl::base absl::synchronization absl::strings) 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 You will find here a non exhaustive list of absl public targets

View file

@ -26,7 +26,17 @@ include(AbseilHelpers)
# config options # config options
set(ABSL_STD_CXX_FLAG "-std=c++11" CACHE STRING "c++ std flag (default: c++11)") if (MSVC)
# /wd4005 macro-redefinition
# /wd4068 unknown pragma
# /wd4244 conversion from 'type1' to 'type2'
# /wd4267 conversion from 'size_t' to 'type2'
# /wd4800 force value to bool 'true' or 'false' (performance warning)
add_compile_options(/W3 /WX /wd4005 /wd4068 /wd4244 /wd4267 /wd4800)
add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS)
else()
set(ABSL_STD_CXX_FLAG "-std=c++11" CACHE STRING "c++ std flag (default: c++11)")
endif()
@ -66,9 +76,6 @@ check_target(gmock)
# -fexceptions # -fexceptions
set(ABSL_EXCEPTIONS_FLAG "${CMAKE_CXX_EXCEPTIONS}") 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 list(APPEND ABSL_TEST_COMMON_LIBRARIES
gtest_main gtest_main
gtest gtest

View file

@ -103,7 +103,9 @@ MSVC_FLAGS = [
"/wd4244", # conversion from 'type1' to 'type2', possible loss of data "/wd4244", # conversion from 'type1' to 'type2', possible loss of data
"/wd4267", # conversion from 'size_t' to 'type', 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) "/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. "/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 = [ MSVC_TEST_FLAGS = [

View file

@ -510,7 +510,7 @@ namespace {
// Returns the maximum duration that SleepOnce() can sleep for. // Returns the maximum duration that SleepOnce() can sleep for.
constexpr absl::Duration MaxSleep() { constexpr absl::Duration MaxSleep() {
#ifdef _WIN32 #ifdef _WIN32
// Windows _sleep() takes unsigned long argument in milliseconds. // Windows Sleep() takes unsigned long argument in milliseconds.
return absl::Milliseconds( return absl::Milliseconds(
std::numeric_limits<unsigned long>::max()); // NOLINT(runtime/int) std::numeric_limits<unsigned long>::max()); // NOLINT(runtime/int)
#else #else
@ -522,7 +522,7 @@ constexpr absl::Duration MaxSleep() {
// REQUIRES: to_sleep <= MaxSleep(). // REQUIRES: to_sleep <= MaxSleep().
void SleepOnce(absl::Duration to_sleep) { void SleepOnce(absl::Duration to_sleep) {
#ifdef _WIN32 #ifdef _WIN32
_sleep(to_sleep / absl::Milliseconds(1)); Sleep(to_sleep / absl::Milliseconds(1));
#else #else
struct timespec sleep_time = absl::ToTimespec(to_sleep); struct timespec sleep_time = absl::ToTimespec(to_sleep);
while (nanosleep(&sleep_time, &sleep_time) != 0 && errno == EINTR) { while (nanosleep(&sleep_time, &sleep_time) != 0 && errno == EINTR) {