Skip to content

Commit 1edfacb

Browse files
committed
[CMAKE] Make vc6 debug compatible with retail
1 parent 7e18d29 commit 1edfacb

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

CMakePresets.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"generator": "NMake Makefiles",
1313
"hidden": false,
1414
"binaryDir": "${sourceDir}/build/${presetName}",
15+
"toolchainFile": "${sourceDir}/cmake/vc6toolchain.cmake",
1516
"cacheVariables": {
1617
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
1718
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL",

cmake/config-build.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ if(UNIX)
6161
endif()
6262

6363
if(RTS_BUILD_OPTION_DEBUG)
64-
target_compile_definitions(core_config INTERFACE RTS_DEBUG WWDEBUG DEBUG)
64+
if(NOT IS_VS6_BUILD)
65+
target_compile_definitions(core_config INTERFACE RTS_DEBUG WWDEBUG DEBUG)
66+
else()
67+
target_compile_definitions(core_config INTERFACE RTS_DEBUG WWDEBUG)
68+
endif()
6569
else()
6670
target_compile_definitions(core_config INTERFACE RTS_RELEASE)
6771

cmake/vc6toolchain.cmake

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Setting C++ default compiler flags for VC6
2+
3+
string(JOIN " " VC6_CXX_FLAGS
4+
"/DWIN32" # Define WIN32 macro
5+
"/D_WINDOWS" # Define _WINDOWS macro
6+
"/Zm800" # Cap precompiled header memory allocation to prevent running out of heap space
7+
"/Gd" # __cdecl calling convention for all functions (C/C++ standard behaviour)
8+
"/GR" # Enable RTTI (Run-Time Type Information, needed for things like dynamic_cast)
9+
"/EHs" # Synchronous C++ exception handling (ISO-standard C++ exception handling)
10+
"/EHc" # Assume extern "C" functions never throw (safe for release)
11+
)
12+
string(JOIN " " VC6_CXX_FLAGS_RELEASE
13+
"/O2" # Optimize for speed
14+
"/Ob2" # Inline any suitable function
15+
"/Oy" # Omit frame pointer (smaller/faster code)
16+
"/DNDEBUG"
17+
"/O2" # Optimize for speed
18+
"/nologo" # Suppress copyright message
19+
)
20+
string(JOIN " " VC6_CXX_FLAGS_DEBUG
21+
"/Og /Oi /Gs" # Optimize for speed (for compatibility)
22+
"/Ob2" # Inline any suitable function (for compatibility)
23+
"/Oy-" # Don't omit frame pointer
24+
"/DNDEBUG" # (for compatibility)
25+
)
26+
string(JOIN " " VC6_EXE_LINKER_FLAGS
27+
"/machine:IX86" # Target x86 architecture
28+
)
29+
string(JOIN " " VC6_EXE_LINKER_FLAGS_RELEASE
30+
"/RELEASE" # Set the checksum in the header and mark as release
31+
"/OPT:REF,ICF" # Remove unreferenced code/data, COMDAT folding
32+
"/NOLOGO" # Suppress linker startup banner
33+
)
34+
string(JOIN " " VC6_EXE_LINKER_FLAGS_DEBUG
35+
"/DEBUG" # Generate debug info
36+
"/OPT:NOREF,ICF" # Don't remove unreferenced code/data, COMDAT folding
37+
)
38+
set(CMAKE_CXX_FLAGS "${VC6_CXX_FLAGS}" CACHE STRING "" FORCE)
39+
set(CMAKE_CXX_FLAGS_RELEASE "${VC6_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE)
40+
set(CMAKE_CXX_FLAGS_DEBUG "${VC6_CXX_FLAGS_DEBUG}" CACHE STRING "" FORCE)
41+
set(CMAKE_C_FLAGS "${VC6_CXX_FLAGS}" CACHE STRING "" FORCE)
42+
set(CMAKE_C_FLAGS_RELEASE "${VC6_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE)
43+
set(CMAKE_C_FLAGS_DEBUG "${VC6_CXX_FLAGS_DEBUG}" CACHE STRING "" FORCE)
44+
45+
46+
set(CMAKE_EXE_LINKER_FLAGS "${VC6_EXE_LINKER_FLAGS}" CACHE STRING "" FORCE)
47+
set(CMAKE_SHARED_LINKER_FLAGS "${VC6_EXE_LINKER_FLAGS}" CACHE STRING "" FORCE)
48+
set(CMAKE_MODULE_LINKER_FLAGS "${VC6_EXE_LINKER_FLAGS}" CACHE STRING "" FORCE)
49+
50+
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${VC6_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE)
51+
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${VC6_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE)
52+
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${VC6_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE)
53+
54+
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${VC6_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE)
55+
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${VC6_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE)
56+
set(CMAKE_SHARED_MODULE_FLAGS_RELEASE "${VC6_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE)
57+
58+
set(CMAKE_STATIC_LINKER_FLAGS "/machine:IX86" CACHE STRING "" FORCE)
59+
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "" CACHE STRING "" FORCE)
60+
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "" CACHE STRING "" FORCE)
61+
62+

0 commit comments

Comments
 (0)