Skip to content

Commit 0681f42

Browse files
Use more standard MSVC project compile flags instead of whatever weird default CMake uses
1 parent e5e0fed commit 0681f42

File tree

1 file changed

+50
-2
lines changed

1 file changed

+50
-2
lines changed

native/CMakeLists.txt

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,33 @@ option(SENPATCHER_BUILD_GTESTS "build tests" ON)
2222

2323
option(SENPATCHER_WITH_IMGUI "enable imgui GUI for tools" ON)
2424

25+
if (MSVC)
26+
# set the cmake default linker options to something closer to what MSVC projects have, especially for release builds
27+
# note that "/DEBUG" is always set, because it just means "generate symbols"
28+
add_link_options(
29+
/DEBUG
30+
$<$<NOT:$<CONFIG:DEBUG>>:/OPT:REF>
31+
$<$<NOT:$<CONFIG:DEBUG>>:/SAFESEH:NO>
32+
$<$<NOT:$<CONFIG:DEBUG>>:/INCREMENTAL:NO>
33+
$<$<NOT:$<CONFIG:DEBUG>>:/OPT:ICF>
34+
$<$<CONFIG:DEBUG>:/OPT:NOREF>
35+
$<$<CONFIG:DEBUG>:/INCREMENTAL>
36+
$<$<CONFIG:DEBUG>:/OPT:NOICF>
37+
)
38+
endif()
39+
2540
if (DEFINED SENPATCHER_BUILDFLAGS OR DEFINED SENPATCHER_BUILDFLAGS_RELEASE OR DEFINED SENPATCHER_BUILDFLAGS_DEBUG)
2641
# user has explicitly set buildflags
2742
separate_arguments(SENPATCHER_BUILDFLAGS_INTERNAL NATIVE_COMMAND "${SENPATCHER_BUILDFLAGS}")
2843
separate_arguments(SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE NATIVE_COMMAND "${SENPATCHER_BUILDFLAGS_RELEASE}")
2944
separate_arguments(SENPATCHER_BUILDFLAGS_INTERNAL_DEBUG NATIVE_COMMAND "${SENPATCHER_BUILDFLAGS_DEBUG}")
3045
else()
3146
if (MSVC)
47+
# standard win32 build defines
48+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/DWIN32")
49+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/D_WINDOWS")
50+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/DNDEBUG")
51+
3252
# we want utf8 as our execution charset
3353
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/utf-8")
3454

@@ -89,20 +109,48 @@ else()
89109
# generate .pdb files
90110
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/Zi")
91111

112+
# wchar_t is a native type
113+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/Zc:wchar_t")
114+
115+
# remove unreferenced functions or data
116+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/Zc:inline")
117+
118+
# sane for loop scoping rules
119+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/Zc:forScope")
120+
121+
# default win32 calling convention rules
122+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL "/Gd")
92123

93124
# for debug build:
94125

126+
# enable buffer security check
127+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_DEBUG "/GS")
128+
95129
# disable optimizations
96130
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_DEBUG "/Od")
97131

132+
# disable frame-pointer omission
133+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_DEBUG "/Oy-")
134+
135+
# enable run-time error checks
136+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_DEBUG "/RTC1")
98137

99138
# for release build:
100139

140+
# disable buffer security check
141+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/GS-")
142+
143+
# enable function-level linking
144+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/Gy")
145+
101146
# optimize as fast code
102147
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/O2")
103148

104-
# remove unreferenced functions or data
105-
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/Zc:inline")
149+
# enable frame-pointer omission
150+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/Oy")
151+
152+
# generate intrinsic functions
153+
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/Oi")
106154

107155
# handle the intel JCC performance erratum
108156
list(APPEND SENPATCHER_BUILDFLAGS_INTERNAL_RELEASE "/QIntel-jcc-erratum")

0 commit comments

Comments
 (0)