diff --git a/CMakeLists.txt b/CMakeLists.txt index fee242fca5..812d07fd9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,9 +64,11 @@ INCLUDE(ExternalProject) # # Compiler specific flags # -set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") -set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +if (NOT MSVC) + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +endif () message(STATUS "compiler ${CMAKE_CXX_COMPILER_ID} version ${CMAKE_CXX_COMPILER_VERSION}") if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set (CXX11_FLAGS "-std=c++11") @@ -87,16 +89,9 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") elseif (MSVC) add_definitions (-D_SCL_SECURE_NO_WARNINGS) add_definitions (-D_CRT_SECURE_NO_WARNINGS) - # TODO: We assume MSVC debug mode. In the future, set these flags - # appropriately for all build mode. - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libc.lib") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:msvcrt.lib") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcd.lib") - - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:msvcrtd.lib") + add_definitions (-D_CRT_NONSTDC_NO_DEPRECATE) # The POSIX name for this item is deprecated + set (WARN_FLAGS "${WARN_FLAGS} -wd4521") # multiple copy constructors specified + set (WARN_FLAGS "${WARN_FLAGS} -wd4146") # unary minus operator applied to unsigned type, result still unsigned endif () enable_testing() diff --git a/c++/src/Adaptor.hh.in b/c++/src/Adaptor.hh.in index c09fa02272..5d9ea15085 100644 --- a/c++/src/Adaptor.hh.in +++ b/c++/src/Adaptor.hh.in @@ -65,6 +65,9 @@ #elif defined(__GNUC__) #define DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") #define DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") + #elif defined(_MSC_VER) + #define DIAGNOSTIC_PUSH __pragma(warning(push)) + #define DIAGNOSTIC_POP __pragma(warning(pop)) #else #error("Unknown compiler") #endif @@ -79,6 +82,8 @@ #define DIAGNOSTIC_IGNORE(XXX) PRAGMA(clang diagnostic ignored XXX) #elif defined(__GNUC__) #define DIAGNOSTIC_IGNORE(XXX) PRAGMA(GCC diagnostic ignored XXX) +#elif defined(_MSC_VER) + #define DIAGNOSTIC_IGNORE(XXX) __pragma(warning(disable : XXX)) #else #define DIAGNOSTIC_IGNORE(XXX) #endif diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt index c76f793d37..8254574989 100644 --- a/c++/src/CMakeLists.txt +++ b/c++/src/CMakeLists.txt @@ -51,6 +51,10 @@ CHECK_CXX_SOURCE_COMPILES(" #pragma GCC diagnostic push #pragma GCC diagnostic ignored \"-Wdeprecated\" #pragma GCC diagnostic pop + #elif defined(_MSC_VER) + #pragma warning( push ) + #pragma warning( disable : 4996 ) + #pragma warning( pop ) #else unknownCompiler! #endif diff --git a/c++/src/Compression.cc b/c++/src/Compression.cc index 2f81c5d96e..cb4bcdd237 100644 --- a/c++/src/Compression.cc +++ b/c++/src/Compression.cc @@ -266,7 +266,10 @@ namespace orc { } DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE("-Wold-style-cast") + +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wold-style-cast") +#endif void ZlibCompressionStream::init() { strm.zalloc = nullptr; @@ -370,7 +373,10 @@ DIAGNOSTIC_PUSH }; DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE("-Wold-style-cast") + +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wold-style-cast") +#endif ZlibDecompressionStream::ZlibDecompressionStream (std::unique_ptr inStream, diff --git a/c++/src/wrap/coded-stream-wrapper.h b/c++/src/wrap/coded-stream-wrapper.h index 07af410d83..605fbf826c 100644 --- a/c++/src/wrap/coded-stream-wrapper.h +++ b/c++/src/wrap/coded-stream-wrapper.h @@ -24,7 +24,9 @@ DIAGNOSTIC_PUSH DIAGNOSTIC_IGNORE("-Wreserved-id-macro") #endif -DIAGNOSTIC_IGNORE("-Wconversion") +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wconversion") +#endif #include diff --git a/c++/src/wrap/gmock.h b/c++/src/wrap/gmock.h index cca2a8a980..a130a84fbf 100644 --- a/c++/src/wrap/gmock.h +++ b/c++/src/wrap/gmock.h @@ -21,12 +21,15 @@ #include "Adaptor.hh" DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE("-Wdeprecated") -DIAGNOSTIC_IGNORE("-Wmissing-noreturn") -DIAGNOSTIC_IGNORE("-Wpadded") -DIAGNOSTIC_IGNORE("-Wsign-compare") -DIAGNOSTIC_IGNORE("-Wsign-conversion") -DIAGNOSTIC_IGNORE("-Wundef") + +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wdeprecated") + DIAGNOSTIC_IGNORE("-Wmissing-noreturn") + DIAGNOSTIC_IGNORE("-Wpadded") + DIAGNOSTIC_IGNORE("-Wsign-compare") + DIAGNOSTIC_IGNORE("-Wsign-conversion") + DIAGNOSTIC_IGNORE("-Wundef") +#endif #ifdef __clang__ DIAGNOSTIC_IGNORE("-Wnull-dereference") diff --git a/c++/src/wrap/gtest-wrapper.h b/c++/src/wrap/gtest-wrapper.h index a14f6c3898..b1bdcc77f7 100644 --- a/c++/src/wrap/gtest-wrapper.h +++ b/c++/src/wrap/gtest-wrapper.h @@ -20,7 +20,9 @@ // we need to disable a whole set of warnings as we include gtest.h // restore most of the warnings after the file is loaded. -DIAGNOSTIC_IGNORE("-Wsign-compare") +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wsign-compare") +#endif #ifdef __clang__ DIAGNOSTIC_IGNORE("-Wconversion-null") @@ -33,11 +35,13 @@ DIAGNOSTIC_IGNORE("-Wsign-compare") DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE("-Wdeprecated") -DIAGNOSTIC_IGNORE("-Wmissing-noreturn") -DIAGNOSTIC_IGNORE("-Wpadded") -DIAGNOSTIC_IGNORE("-Wsign-compare") -DIAGNOSTIC_IGNORE("-Wundef") +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wdeprecated") + DIAGNOSTIC_IGNORE("-Wmissing-noreturn") + DIAGNOSTIC_IGNORE("-Wpadded") + DIAGNOSTIC_IGNORE("-Wsign-compare") + DIAGNOSTIC_IGNORE("-Wundef") +#endif #ifdef __clang__ DIAGNOSTIC_IGNORE("-Wshift-sign-overflow") @@ -45,6 +49,11 @@ DIAGNOSTIC_IGNORE("-Wundef") DIAGNOSTIC_IGNORE("-Wweak-vtables") #endif +#ifdef _MSC_VER + DIAGNOSTIC_IGNORE(4146) // unary minus operator applied to unsigned type, result still unsigned + DIAGNOSTIC_IGNORE(4805) // '==': unsafe mix of type 'const bool' and type 'const int64_t' in operation +#endif + #include "gtest/gtest.h" DIAGNOSTIC_POP diff --git a/c++/src/wrap/orc-proto-wrapper.cc b/c++/src/wrap/orc-proto-wrapper.cc index 8b10caee44..dd00c9fc06 100644 --- a/c++/src/wrap/orc-proto-wrapper.cc +++ b/c++/src/wrap/orc-proto-wrapper.cc @@ -14,13 +14,15 @@ #include "Adaptor.hh" -DIAGNOSTIC_IGNORE("-Wconversion") -DIAGNOSTIC_IGNORE("-Wdeprecated") -DIAGNOSTIC_IGNORE("-Wignored-qualifiers") -DIAGNOSTIC_IGNORE("-Wpadded") -DIAGNOSTIC_IGNORE("-Wsign-compare") -DIAGNOSTIC_IGNORE("-Wsign-conversion") -DIAGNOSTIC_IGNORE("-Wunused-parameter") +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wconversion") + DIAGNOSTIC_IGNORE("-Wdeprecated") + DIAGNOSTIC_IGNORE("-Wignored-qualifiers") + DIAGNOSTIC_IGNORE("-Wpadded") + DIAGNOSTIC_IGNORE("-Wsign-compare") + DIAGNOSTIC_IGNORE("-Wsign-conversion") + DIAGNOSTIC_IGNORE("-Wunused-parameter") +#endif #ifdef __clang__ DIAGNOSTIC_IGNORE("-Wdisabled-macro-expansion") @@ -34,4 +36,9 @@ DIAGNOSTIC_IGNORE("-Wunused-parameter") DIAGNOSTIC_IGNORE("-Wzero-as-null-pointer-constant") #endif +#if defined(_MSC_VER) + DIAGNOSTIC_IGNORE(4146) // unary minus operator applied to unsigned type, result still unsigned + DIAGNOSTIC_IGNORE(4800) // forcing value to bool 'true' or 'false' +#endif + #include "orc_proto.pb.cc" diff --git a/c++/src/wrap/orc-proto-wrapper.hh b/c++/src/wrap/orc-proto-wrapper.hh index 5fc9558e63..f902ffd624 100644 --- a/c++/src/wrap/orc-proto-wrapper.hh +++ b/c++/src/wrap/orc-proto-wrapper.hh @@ -18,10 +18,13 @@ #include "Adaptor.hh" DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE("-Wconversion") -DIAGNOSTIC_IGNORE("-Wdeprecated") -DIAGNOSTIC_IGNORE("-Wsign-conversion") -DIAGNOSTIC_IGNORE("-Wunused-parameter") + +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wconversion") + DIAGNOSTIC_IGNORE("-Wdeprecated") + DIAGNOSTIC_IGNORE("-Wsign-conversion") + DIAGNOSTIC_IGNORE("-Wunused-parameter") +#endif #ifdef __clang__ DIAGNOSTIC_IGNORE("-Wnested-anon-types") @@ -32,6 +35,11 @@ DIAGNOSTIC_IGNORE("-Wunused-parameter") DIAGNOSTIC_IGNORE("-Wzero-as-null-pointer-constant") #endif +#if defined(_MSC_VER) + DIAGNOSTIC_IGNORE(4146) // unary minus operator applied to unsigned type, result still unsigned + DIAGNOSTIC_IGNORE(4800) // forcing value to bool 'true' or 'false' +#endif + #include "orc_proto.pb.h" DIAGNOSTIC_POP diff --git a/c++/src/wrap/zero-copy-stream-wrapper.h b/c++/src/wrap/zero-copy-stream-wrapper.h index 6f03113e0d..1af0bd002d 100644 --- a/c++/src/wrap/zero-copy-stream-wrapper.h +++ b/c++/src/wrap/zero-copy-stream-wrapper.h @@ -19,9 +19,11 @@ DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE("-Wdeprecated") -DIAGNOSTIC_IGNORE("-Wpadded") -DIAGNOSTIC_IGNORE("-Wunused-parameter") +#if defined(__GNUC__) || defined(__clang__) + DIAGNOSTIC_IGNORE("-Wdeprecated") + DIAGNOSTIC_IGNORE("-Wpadded") + DIAGNOSTIC_IGNORE("-Wunused-parameter") +#endif #ifdef __clang__ DIAGNOSTIC_IGNORE("-Wreserved-id-macro")