diff --git a/CMakePresets.json b/CMakePresets.json index feb7624772..57be860b38 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -12,6 +12,7 @@ "generator": "NMake Makefiles", "hidden": false, "binaryDir": "${sourceDir}/build/${presetName}", + "toolchainFile": "${sourceDir}/cmake/vc6toolchain.cmake", "cacheVariables": { "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$:Debug>DLL", diff --git a/cmake/config-build.cmake b/cmake/config-build.cmake index a001e42c59..e8b97c9e10 100644 --- a/cmake/config-build.cmake +++ b/cmake/config-build.cmake @@ -61,7 +61,11 @@ if(UNIX) endif() if(RTS_BUILD_OPTION_DEBUG) - target_compile_definitions(core_config INTERFACE RTS_DEBUG WWDEBUG DEBUG) + if(NOT IS_VS6_BUILD) + target_compile_definitions(core_config INTERFACE RTS_DEBUG WWDEBUG DEBUG) + else() + target_compile_definitions(core_config INTERFACE RTS_DEBUG WWDEBUG) + endif() else() target_compile_definitions(core_config INTERFACE RTS_RELEASE) diff --git a/cmake/vc6toolchain.cmake b/cmake/vc6toolchain.cmake new file mode 100644 index 0000000000..7f50d7d3dc --- /dev/null +++ b/cmake/vc6toolchain.cmake @@ -0,0 +1,63 @@ +# Setting C++ default compiler flags for VC6 + +string(JOIN " " VC6_CXX_FLAGS + "/DWIN32" # Define WIN32 macro + "/D_WINDOWS" # Define _WINDOWS macro + "/Zm800" # Cap precompiled header memory allocation to prevent running out of heap space + "/Gd" # __cdecl calling convention for all functions (C/C++ standard behaviour) + "/GR" # Enable RTTI (Run-Time Type Information, needed for things like dynamic_cast) + "/EHs" # Synchronous C++ exception handling (ISO-standard C++ exception handling) + "/EHc" # Assume extern "C" functions never throw (safe for release) +) +string(JOIN " " VC6_CXX_FLAGS_RELEASE + "/O2" # Optimize for speed + "/Ob2" # Inline any suitable function + "/Oy" # Omit frame pointer (smaller/faster code) + "/DNDEBUG" + "/O2" # Optimize for speed + "/nologo" # Suppress copyright message +) +string(JOIN " " VC6_CXX_FLAGS_DEBUG + "/Og /Oi /Gs" # Optimize for speed (for compatibility) + "/Ob2" # Inline any suitable function (for compatibility) + "/Oy-" # Don't omit frame pointer + "/DNDEBUG" # (for compatibility) +) +string(JOIN " " VC6_EXE_LINKER_FLAGS + "/machine:IX86" # Target x86 architecture + "/LARGEADDRESSAWARE"# Allow addresses larger than 2 gigabytes" +) +string(JOIN " " VC6_EXE_LINKER_FLAGS_RELEASE + "/RELEASE" # Set the checksum in the header and mark as release + "/OPT:REF,ICF" # Remove unreferenced code/data, COMDAT folding + "/NOLOGO" # Suppress linker startup banner +) +string(JOIN " " VC6_EXE_LINKER_FLAGS_DEBUG + "/DEBUG" # Generate debug info + "/OPT:NOREF,ICF" # Don't remove unreferenced code/data, COMDAT folding +) +set(CMAKE_CXX_FLAGS "${VC6_CXX_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "${VC6_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_DEBUG "${VC6_CXX_FLAGS_DEBUG}" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS "${VC6_CXX_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS_RELEASE "${VC6_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS_DEBUG "${VC6_CXX_FLAGS_DEBUG}" CACHE STRING "" FORCE) + + +set(CMAKE_EXE_LINKER_FLAGS "${VC6_EXE_LINKER_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS "${VC6_EXE_LINKER_FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_MODULE_LINKER_FLAGS "${VC6_EXE_LINKER_FLAGS}" CACHE STRING "" FORCE) + +set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${VC6_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${VC6_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE) +set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${VC6_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "" FORCE) + +set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${VC6_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${VC6_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE) +set(CMAKE_SHARED_MODULE_FLAGS_RELEASE "${VC6_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "" FORCE) + +set(CMAKE_STATIC_LINKER_FLAGS "/machine:IX86" CACHE STRING "" FORCE) +set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "" CACHE STRING "" FORCE) +set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "" CACHE STRING "" FORCE) + +