@@ -22,13 +22,33 @@ option(SENPATCHER_BUILD_GTESTS "build tests" ON)
2222
2323option (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+
2540if (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} " )
3045else ()
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