aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2018-01-16 13:56:58 -0800
committerAnders Broman <a.broman58@gmail.com>2018-01-24 11:43:56 +0000
commit7e37a7db558563e665f7b356d6ee4e8a1bd82f9c (patch)
treee16ed8da4f1ea55da9cbd3c6624f1c9a5b1f6a21
parentd672ee93724999d93763fa513dcefef5858e919c (diff)
CMake: Compile and link flag updates.
Add /guard:cf and /Qspectre to the Visual C++ 2015 compile and link flags. Don't bother trying to pass -Wl,--as-needed or -pie to Visual C++. Remove some unneeded quotes. Change-Id: I4d89d61ce9dd579e7cfbcd49df6116810bfb0178 Reviewed-on: https://code.wireshark.org/review/25356 Reviewed-by: Gerald Combs <gerald@wireshark.org> Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--CMakeLists.txt57
1 files changed, 31 insertions, 26 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7a9db3fc9c..8bd2d010f9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -338,20 +338,27 @@ if( CMAKE_C_COMPILER_ID MATCHES "MSVC")
/MP
)
+ set(WS_LINK_FLAGS "/LARGEADDRESSAWARE /MANIFEST:NO /INCREMENTAL:NO /RELEASE")
+
if(MSVC12)
# /Zo Enhanced debugging of optimised code for VS2013 Update 3 and beyond,
# Assume all VS2013 builds are at least Update 3.
# See http://msdn.microsoft.com/en-us/library/dn785163.aspx
- set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/Zo")
+ set(LOCAL_CFLAGS ${LOCAL_CFLAGS} /Zo)
elseif(MSVC14)
# /Zo Enhanced debugging of optimised code
# /utf-8 Set Source and Executable character sets to UTF-8
# VS2015(MSVC14): On by default when /Zi or /Z7 used.
- set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/Zo" "/utf-8")
+ # /guard:cf Control Flow Guard (compile and link).
+ # See https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065.aspx
+ # /Qspectre Speculative execution attack mitigation
+ # See https://blogs.msdn.microsoft.com/vcblog/2018/01/15/spectre-mitigations-in-msvc/
+ set(LOCAL_CFLAGS ${LOCAL_CFLAGS} /Zo /utf-8 /guard:cf /Qspectre)
+ set(WS_LINK_FLAGS "${WS_LINK_FLAGS} /guard:cf")
endif()
if(ENABLE_CODE_ANALYSIS)
- set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/analyze:WX-")
+ set(LOCAL_CFLAGS ${LOCAL_CFLAGS} /analyze:WX-)
endif()
# Additional compiler warnings to be treated as "Level 3"
@@ -360,16 +367,14 @@ if( CMAKE_C_COMPILER_ID MATCHES "MSVC")
## 4189: local variable is initialized but not referenced
# Disable warnings about about use of flexible array members:
## 4200: nonstandard extension used : zero-sized array in struct/union
- set(WARNINGS_CFLAGS "/w34295 /w34189 /wd4200")
+ set(WARNINGS_CFLAGS /w34295 /w34189 /wd4200)
set(WIRESHARK_COMMON_FLAGS
${LOCAL_CFLAGS}
${WARNINGS_CFLAGS}
)
- set(WS_LINK_FLAGS "/LARGEADDRESSAWARE /MANIFEST:NO /INCREMENTAL:NO /RELEASE")
-
-else()
+else() # ! MSVC
if(CMAKE_OSX_DEPLOYMENT_TARGET)
if(APPLE)
if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.0")
@@ -633,7 +638,25 @@ else()
-DG_DISABLE_DEPRECATED
-DG_DISABLE_SINGLE_INCLUDES
)
-endif()
+
+ set(WIRESHARK_LD_FLAGS
+ -Wl,--as-needed
+ # -flto
+ # -fwhopr
+ # -fwhole-program
+ )
+ # CMAKE_POSITION_INDEPENDENT_CODE is only supported starting with CMake
+ # 2.8.9. Do not add -pie automatically for older versions.
+ #
+ # XXX - are there other compilers that don't support -pie? It's
+ # not as if the only platforms we support are Windows and Linux....
+ #
+ if(NOT CMAKE_VERSION VERSION_LESS "2.8.9")
+ set(WIRESHARK_LD_FLAGS ${WIRESHARK_LD_FLAGS}
+ -pie
+ )
+ endif()
+endif() # ! MSVC
set( C_FLAG_TESTS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_C_ONLY_FLAGS} )
set( CXX_FLAG_TESTS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_CXX_ONLY_FLAGS} )
@@ -800,24 +823,6 @@ if( NOT CMAKE_C_COMPILER_ID MATCHES "MSVC")
endif()
endif()
-set(WIRESHARK_LD_FLAGS
- -Wl,--as-needed
- # -flto
- # -fwhopr
- # -fwhole-program
-)
-# CMAKE_POSITION_INDEPENDENT_CODE is only supported starting with CMake
-# 2.8.9. Do not add -pie automatically for older versions.
-#
-# XXX - are there other compilers that don't support -pie? It's
-# not as if the only platforms we support are Windows and Linux....
-#
-if(NOT CMAKE_VERSION VERSION_LESS "2.8.9")
- set(WIRESHARK_LD_FLAGS ${WIRESHARK_LD_FLAGS}
- -pie
- )
-endif()
-
include(CheckCLinkerFlag)
set(_C 0)
# Sigh: Have to use THIS_FLAG instead of ${F} for some reason