Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 28 additions & 11 deletions cmake/IgnSetCompilerFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -294,23 +294,35 @@ macro(ign_setup_msvc)
# W2: Warning level 2: significant warnings.
# TODO: Recommend Wall in the future.
# Note: MSVC /Wall generates tons of warnings on gtest code.
set(MSVC_MINIMAL_FLAGS "/Gy /W2")
# bigobj: Increase the number of sections in an object file, which is often needed
# for complex templated code or when using Whole Program Optimization (/GL).
set(MSVC_MINIMAL_FLAGS "/Gy /W2 /bigobj")

# Zi: Produce complete debug information
# Note: We provide Zi to ordinary release mode because it does not impact
# performance and can be helpful for debugging.
set(MSVC_DEBUG_FLAGS "${MSVC_MINIMAL_FLAGS} /Zi")

# GL: Enable Whole Program Optimization
set(MSVC_RELEASE_FLAGS "${MSVC_DEBUG_FLAGS} /GL")

# UNDEBUG: Undefine NDEBUG so that assertions can be triggered
set(MSVC_RELWITHDEBINFO_FLAGS "${MSVC_RELEASE_FLAGS} /UNDEBUG")

# INCREMENTAL:NO fix LNK4075 warning
# LTCG: need when using /GL above
# see https://docs.microsoft.com/en-us/cpp/build/reference/gl-whole-program-optimization
set(MSVC_RELWITHDEBINFO_LINKER_FLAGS "/INCREMENTAL:NO /LTCG")
option(GZ_MSVC_WPO "Enable Whole Program Optimization on MSVC" ON)
if(GZ_MSVC_WPO)
# GL: Enable Whole Program Optimization
set(MSVC_RELEASE_FLAGS "${MSVC_DEBUG_FLAGS} /GL")

# UNDEBUG: Undefine NDEBUG so that assertions can be triggered
set(MSVC_RELWITHDEBINFO_FLAGS "${MSVC_RELEASE_FLAGS} /UNDEBUG")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as #533 (comment). @j-rivero mind taking a look?


# LTCG: need when using /GL above
set(MSVC_RELEASE_LINKER_FLAGS "/LTCG")

# INCREMENTAL:NO fix LNK4075 warning
# see https://docs.microsoft.com/en-us/cpp/build/reference/gl-whole-program-optimization
set(MSVC_RELWITHDEBINFO_LINKER_FLAGS "/INCREMENTAL:NO /LTCG")
else()
set(MSVC_RELEASE_FLAGS "${MSVC_DEBUG_FLAGS}")
set(MSVC_RELWITHDEBINFO_FLAGS "${MSVC_RELEASE_FLAGS} /UNDEBUG")
set(MSVC_RELEASE_LINKER_FLAGS "")
set(MSVC_RELWITHDEBINFO_LINKER_FLAGS "/INCREMENTAL:NO")
endif()

# cmake automatically provides /Zi /Ob0 /Od /RTC1
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${MSVC_DEBUG_FLAGS}")
Expand All @@ -319,11 +331,16 @@ macro(ign_setup_msvc)
# cmake automatically provides /O2 /Ob2 /DNDEBUG
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${MSVC_RELEASE_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MSVC_RELEASE_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${MSVC_RELEASE_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MSVC_RELEASE_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} ${MSVC_RELEASE_LINKER_FLAGS}")

# cmake automatically provides /Zi /O2 /Ob1 /DNDEBUG
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${MSVC_RELWITHDEBINFO_FLAGS}")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${MSVC_RELWITHDEBINFO_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} ${MSVC_RELWITHDEBINFO_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} ${MSVC_RELWITHDEBINFO_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} ${MSVC_RELWITHDEBINFO_LINKER_FLAGS}")

# cmake automatically provides /O1 /Ob1 /DNDEBUG
set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} ${MSVC_MINIMAL_FLAGS}")
Expand Down
Loading