diff --git a/CMakeLists.txt b/CMakeLists.txt index 27386aa8..6907d09d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ set(OPENTS_VERSION_PRERELEASE "") option(OPENTS_OFFICIAL_BUILD "Build as an official release of the declared version" OFF) option(OPENTS_EXPERIMENTAL_CLANG_CL "Build with clang-cl using the MSVC ABI" OFF) +option(OPENTS_EXPERIMENTAL_NATIVE "Configure a native build for the host platform" OFF) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") @@ -24,14 +25,24 @@ elseif(MSVC) if(MSVC_VERSION LESS 1930) message(FATAL_ERROR "OpenTS requires MSVC 19.30 or newer.") endif() +elseif(OPENTS_EXPERIMENTAL_NATIVE) + message(STATUS "OpenTS: configuring an unsupported native build for the host platform.") + + # The tree declares imports and exports with __declspec throughout, which clang only + # accepts with the Microsoft extensions enabled. + add_compile_options(-fms-extensions) else() message(FATAL_ERROR "OpenTS requires the Visual Studio 2022 MSVC toolchain. " "For the unsupported clang-cl experiment, configure with " - "-DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/clang-cl-msvc.cmake.") + "-DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/clang-cl-msvc.cmake. " + "For the unsupported native build, configure with " + "-DOPENTS_EXPERIMENTAL_NATIVE=ON.") endif() -enable_language(RC) +if(WIN32) + enable_language(RC) +endif() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 94876c52..b350a8fb 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -2,7 +2,7 @@ set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE STRING "" FORCE) # OpenTS currently supports 32-bit (x86) builds only. -if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4) +if(WIN32 AND NOT CMAKE_SIZEOF_VOID_P EQUAL 4) message(FATAL_ERROR "OpenTS must be built as 32-bit x86. Reconfigure with -A Win32.") endif() @@ -165,7 +165,7 @@ set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/bgfxbackend.cpp" PROPER "${BGFX_ROOT}/include;${CMAKE_SOURCE_DIR}/thirdparty/bgfx.cmake/bx/include;${BGFX_ROOT}/examples/common/imgui" COMPILE_DEFINITIONS "BX_CONFIG_DEBUG=$,1,$>" - COMPILE_OPTIONS "/Zc:preprocessor" + COMPILE_OPTIONS "$<$:/Zc:preprocessor>" ) # bx rewrites __stdcall while its headers are being parsed by clang-cl. Force the @@ -358,12 +358,14 @@ add_custom_command(TARGET OpenTS POST_BUILD "${TS_RUN_DIR}" ) -# Copy the linker-generated .pdb alongside the exe -add_custom_command(TARGET OpenTS POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "$" - "${TS_RUN_DIR}" -) +# Copy the linker-generated .pdb alongside the exe. Only the MSVC linker writes one. +if(MSVC) + add_custom_command(TARGET OpenTS POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "$" + "${TS_RUN_DIR}" + ) +endif() # Copy the linker-generated .map (sits next to the exe, no GenEx for it) add_custom_command(TARGET OpenTS POST_BUILD diff --git a/code/addon.cpp b/code/addon.cpp index fdeb7ea9..772f5527 100644 --- a/code/addon.cpp +++ b/code/addon.cpp @@ -14,7 +14,7 @@ #include "ccfile.h" #include "data.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "ownrdraw.h" BOOL CALLBACK Select_Game_Type_Dialog_Proc(HWND window, UINT message, WPARAM wparam, LPARAM lparam); diff --git a/code/chat.cpp b/code/chat.cpp index 659baf4c..10cec49b 100644 --- a/code/chat.cpp +++ b/code/chat.cpp @@ -19,7 +19,7 @@ #include "globals.h" #include "house.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "rules.h" #include "session.h" #include "stimer.h" diff --git a/code/conquer.cpp b/code/conquer.cpp index fbfc034c..3227f44e 100644 --- a/code/conquer.cpp +++ b/code/conquer.cpp @@ -89,7 +89,7 @@ #include "init.h" #include "ipxmgr.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "logic.h" #include "mainloop.h" #include "movie.h" diff --git a/code/credits.cpp b/code/credits.cpp index 5449b17d..5c709b1a 100644 --- a/code/credits.cpp +++ b/code/credits.cpp @@ -46,7 +46,7 @@ #include "dsurface.h" #include "globals.h" #include "house.h" -#include "language\language.h" +#include "language/language.h" #include "rules.h" #include "scenario.h" #include "scheme.h" diff --git a/code/display.cpp b/code/display.cpp index be765e85..f856fad3 100644 --- a/code/display.cpp +++ b/code/display.cpp @@ -124,7 +124,7 @@ #include "inline.h" #include "isotype.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "logic.h" #include "mixfile.h" #include "overtype.h" diff --git a/code/dropship.cpp b/code/dropship.cpp index 7325650d..960b13d1 100644 --- a/code/dropship.cpp +++ b/code/dropship.cpp @@ -33,7 +33,7 @@ #include "house.h" #include "infatype.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "misc.h" #include "mixfile.h" #include "mouse.h" diff --git a/code/dsaudio.cpp b/code/dsaudio.cpp index a4f60c7b..fb039196 100644 --- a/code/dsaudio.cpp +++ b/code/dsaudio.cpp @@ -19,7 +19,7 @@ #include "data.h" #include "dbgprint.h" #include "globals.h" // for GameInFocus -#include "language\language.h" +#include "language/language.h" #include "soscomp.h" #include "winfix.h" diff --git a/code/egos.cpp b/code/egos.cpp index 64d3cfc6..dab24256 100644 --- a/code/egos.cpp +++ b/code/egos.cpp @@ -54,7 +54,7 @@ #include "globals.h" #include "goptions.h" #include "gscreen.h" -#include "language\language.h" +#include "language/language.h" #include "misc.h" #include "ownrdraw.h" #include "scheme.h" diff --git a/code/event.cpp b/code/event.cpp index 19679101..866ab0c4 100644 --- a/code/event.cpp +++ b/code/event.cpp @@ -58,7 +58,7 @@ #include "foot.h" #include "goptions.h" #include "house.h" -#include "language\language.h" +#include "language/language.h" #include "mouse.h" #include "netsemantic.h" #include "rules.h" diff --git a/code/gamedlg.cpp b/code/gamedlg.cpp index 2440d99f..ba3c3999 100644 --- a/code/gamedlg.cpp +++ b/code/gamedlg.cpp @@ -43,7 +43,7 @@ #include "dsaudio.h" #include "globals.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "ownrdraw.h" #include "queue.h" #include "session.h" diff --git a/code/goptions.cpp b/code/goptions.cpp index c22beb60..4f2dfa67 100644 --- a/code/goptions.cpp +++ b/code/goptions.cpp @@ -40,7 +40,7 @@ #include "data.h" #include "dbgprint.h" #include "gamedlg.h" -#include "language\language.h" +#include "language/language.h" #include "loaddlg.h" #include "ownrdraw.h" #include "queue.h" diff --git a/code/house.cpp b/code/house.cpp index 931d66a1..e8e5b88c 100644 --- a/code/house.cpp +++ b/code/house.cpp @@ -159,7 +159,7 @@ #include "infatype.h" #include "inline.h" #include "ion.h" -#include "language\language.h" +#include "language/language.h" #include "lightcon.h" #include "logic.h" #include "mono.h" diff --git a/code/infantry.cpp b/code/infantry.cpp index 86b08d7f..5498ce30 100644 --- a/code/infantry.cpp +++ b/code/infantry.cpp @@ -113,7 +113,7 @@ #include "inline.h" #include "ion.h" #include "isotype.h" -#include "language\language.h" +#include "language/language.h" #include "lightcon.h" #include "mixfile.h" #include "mono.h" diff --git a/code/init.cpp b/code/init.cpp index 7bc8abe2..ba33dcc3 100644 --- a/code/init.cpp +++ b/code/init.cpp @@ -121,7 +121,7 @@ #include "ionblast.h" #include "ipxmgr.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "laser.h" #include "light.h" #include "lightcon.h" diff --git a/code/ion.cpp b/code/ion.cpp index 43e50167..c4ce335a 100644 --- a/code/ion.cpp +++ b/code/ion.cpp @@ -30,7 +30,7 @@ #include "globals.h" #include "gscreen.h" #include "house.h" -#include "language\language.h" +#include "language/language.h" #include "laser.h" #include "lightcon.h" #include "mixfile.h" diff --git a/code/list.cpp b/code/list.cpp index bbe11fc0..0059e6d5 100644 --- a/code/list.cpp +++ b/code/list.cpp @@ -63,7 +63,7 @@ #include "dialog.h" #include "dsurface.h" #include "font.h" -#include "language\language.h" +#include "language/language.h" #include "scheme.h" #include "vector.h" #include "wwmouse.h" diff --git a/code/loaddlg.cpp b/code/loaddlg.cpp index a3306cc3..be585310 100644 --- a/code/loaddlg.cpp +++ b/code/loaddlg.cpp @@ -48,7 +48,7 @@ #include "globals.h" #include "houstype.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "msgbox.h" #include "ownrdraw.h" #include "saveload.h" diff --git a/code/mainloop.cpp b/code/mainloop.cpp index 8a2ed93e..d4d0276e 100644 --- a/code/mainloop.cpp +++ b/code/mainloop.cpp @@ -38,7 +38,7 @@ #include "globals.h" #include "goptions.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "logic.h" #include "misc.h" #include "mpscore.h" diff --git a/code/mainopt.cpp b/code/mainopt.cpp index 891cdcd9..2f078ab6 100644 --- a/code/mainopt.cpp +++ b/code/mainopt.cpp @@ -23,7 +23,7 @@ #include "gamedlg.h" #include "globals.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "misc.h" #include "video.h" #include "mixfile.h" diff --git a/code/mapgen.cpp b/code/mapgen.cpp index d5ed5610..97849258 100644 --- a/code/mapgen.cpp +++ b/code/mapgen.cpp @@ -38,7 +38,7 @@ #include "init.h" #include "inline.h" #include "isotype.h" -#include "language\language.h" +#include "language/language.h" #include "netshare.h" #include "nodes.h" #include "overtype.h" diff --git a/code/mpscore.cpp b/code/mpscore.cpp index bf2561ba..ca2e03c7 100644 --- a/code/mpscore.cpp +++ b/code/mpscore.cpp @@ -27,7 +27,7 @@ #include "houstype.h" #include "incdec.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "msanim.h" #include "msengine.h" #include "msfont.h" diff --git a/code/msgbox.h b/code/msgbox.h index 95933cb2..77532ad8 100644 --- a/code/msgbox.h +++ b/code/msgbox.h @@ -32,7 +32,7 @@ #pragma once -#include "language\language.h" +#include "language/language.h" #include "win.h" class WWMessageBox diff --git a/code/netdlg.cpp b/code/netdlg.cpp index 8997e390..1262564e 100644 --- a/code/netdlg.cpp +++ b/code/netdlg.cpp @@ -112,7 +112,7 @@ #include "globals.h" #include "houstype.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "list.h" #include "queue.h" #include "rules.h" diff --git a/code/netdlg2.cpp b/code/netdlg2.cpp index 7e679fcb..d21717b1 100644 --- a/code/netdlg2.cpp +++ b/code/netdlg2.cpp @@ -28,7 +28,7 @@ #include "houstype.h" #include "init.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "mapgen.h" #include "mplayer.h" #include "msgbox.h" diff --git a/code/netshare.cpp b/code/netshare.cpp index 1bee7959..46f4c278 100644 --- a/code/netshare.cpp +++ b/code/netshare.cpp @@ -18,7 +18,7 @@ #include "globals.h" #include "goptions.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "lzopipe.h" #include "lzostraw.h" #include "mapgen.h" diff --git a/code/options.cpp b/code/options.cpp index d5cbb84f..ca757610 100644 --- a/code/options.cpp +++ b/code/options.cpp @@ -72,7 +72,7 @@ #include "init.h" #include "ipxmgr.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "mouse.h" #include "msgbox.h" #include "ownrdraw.h" diff --git a/code/ownrdraw.cpp b/code/ownrdraw.cpp index 148f1ef8..4ae0a92b 100644 --- a/code/ownrdraw.cpp +++ b/code/ownrdraw.cpp @@ -28,7 +28,7 @@ #include "goptions.h" #include "hsv.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "mainloop.h" #include "misc.h" #include "msgroute.h" diff --git a/code/power.cpp b/code/power.cpp index 4dd473ff..8bb08a1a 100644 --- a/code/power.cpp +++ b/code/power.cpp @@ -56,7 +56,7 @@ #include "draw.h" #include "globals.h" #include "house.h" -#include "language\language.h" +#include "language/language.h" #include "mixfile.h" #include "savestream.h" #include "surface.h" diff --git a/code/preview.cpp b/code/preview.cpp index 3635d609..a7ba4010 100644 --- a/code/preview.cpp +++ b/code/preview.cpp @@ -19,7 +19,7 @@ #include "cell.h" #include "dbgprint.h" #include "dsurface.h" -#include "language\language.h" +#include "language/language.h" #include "lzopipe.h" #include "lzostraw.h" #include "overtype.h" diff --git a/code/progress.cpp b/code/progress.cpp index 552fc04e..68fd2e9e 100644 --- a/code/progress.cpp +++ b/code/progress.cpp @@ -20,7 +20,7 @@ #include "draw.h" #include "gscreen.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "lightcon.h" #include "mixfile.h" #include "ownrdraw.h" diff --git a/code/queue.cpp b/code/queue.cpp index 831e1140..66258239 100644 --- a/code/queue.cpp +++ b/code/queue.cpp @@ -118,7 +118,7 @@ #include "infatype.h" #include "ipxmgr.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "light.h" #include "mainloop.h" #include "mono.h" diff --git a/code/radar.cpp b/code/radar.cpp index 388f938b..5b8e89da 100644 --- a/code/radar.cpp +++ b/code/radar.cpp @@ -92,7 +92,7 @@ #include "infantry.h" #include "infatype.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "lightcon.h" #include "mixfile.h" #include "movies.h" diff --git a/code/restate.cpp b/code/restate.cpp index 0da391d8..673fe4e6 100644 --- a/code/restate.cpp +++ b/code/restate.cpp @@ -24,7 +24,7 @@ #include "dbgprint.h" #include "globals.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "movie.h" #include "msanim.h" #include "msengine.h" diff --git a/code/saveload.cpp b/code/saveload.cpp index bcaa5dcc..90bd891b 100644 --- a/code/saveload.cpp +++ b/code/saveload.cpp @@ -82,7 +82,7 @@ #include "infatype.h" #include "init.h" #include "ion.h" -#include "language\language.h" +#include "language/language.h" #include "loaddlg.h" #include "light.h" #include "logic.h" diff --git a/code/scenario.cpp b/code/scenario.cpp index e19fd7e0..4b893dd0 100644 --- a/code/scenario.cpp +++ b/code/scenario.cpp @@ -107,7 +107,7 @@ #include "ion.h" #include "ipxmgr.h" #include "isotype.h" -#include "language\language.h" +#include "language/language.h" #include "light.h" #include "logic.h" #include "mainopt.h" diff --git a/code/score.cpp b/code/score.cpp index 701bb4ef..7fd1885b 100644 --- a/code/score.cpp +++ b/code/score.cpp @@ -61,7 +61,7 @@ #include "goptions.h" #include "houstype.h" #include "keyboard.h" -#include "language\language.h" +#include "language/language.h" #include "misc.h" #include "mixfile.h" #include "movie.h" diff --git a/code/session.cpp b/code/session.cpp index 4782befb..20d67b4f 100644 --- a/code/session.cpp +++ b/code/session.cpp @@ -59,7 +59,7 @@ #include "gamedirs.h" // for Search_Files. #include "globals.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "msgloop.h" #include "progress.h" #include "queue.h" diff --git a/code/sidebar.cpp b/code/sidebar.cpp index 4ca14117..4caf915b 100644 --- a/code/sidebar.cpp +++ b/code/sidebar.cpp @@ -99,7 +99,7 @@ #include "goptions.h" #include "house.h" #include "incdec.h" -#include "language\language.h" +#include "language/language.h" #include "map.h" #include "mixfile.h" #include "movie.h" diff --git a/code/skirmish.cpp b/code/skirmish.cpp index 83073897..81e48432 100644 --- a/code/skirmish.cpp +++ b/code/skirmish.cpp @@ -17,7 +17,7 @@ #include "goptions.h" #include "houstype.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "mapgen.h" #include "mplayer.h" #include "msgbox.h" diff --git a/code/sounddlg.cpp b/code/sounddlg.cpp index 3fa7c19b..1f6af60c 100644 --- a/code/sounddlg.cpp +++ b/code/sounddlg.cpp @@ -42,7 +42,7 @@ #include "goptions.h" #include "incdec.h" #include "init.h" -#include "language\language.h" +#include "language/language.h" #include "ownrdraw.h" #include "theme.h" #include "winfix.h" diff --git a/code/spawner.cpp b/code/spawner.cpp index 5cf1cb24..6d29d356 100644 --- a/code/spawner.cpp +++ b/code/spawner.cpp @@ -25,7 +25,7 @@ #include "houstype.h" #include "init.h" #include "ipxmgr.h" -#include "language\language.h" +#include "language/language.h" #include "loaddlg.h" #include "mplayer.h" #include "netshare.h" diff --git a/code/startup.cpp b/code/startup.cpp index 22199f90..3dffa629 100644 --- a/code/startup.cpp +++ b/code/startup.cpp @@ -90,7 +90,7 @@ #include "ipxmgr.h" #include "isotype.h" #include "jumpjet.h" -#include "language\language.h" +#include "language/language.h" #include "levitate.h" #include "light.h" #include "lightcon.h" diff --git a/code/super.cpp b/code/super.cpp index 2c204708..bdf38014 100644 --- a/code/super.cpp +++ b/code/super.cpp @@ -62,7 +62,7 @@ #include "infatype.h" #include "inline.h" #include "ionblast.h" -#include "language\language.h" +#include "language/language.h" #include "mouse.h" #include "rules.h" #include "savestream.h" diff --git a/code/tab.cpp b/code/tab.cpp index c6dac143..3312c961 100644 --- a/code/tab.cpp +++ b/code/tab.cpp @@ -47,7 +47,7 @@ #include "dialog.h" #include "draw.h" #include "goptions.h" -#include "language\language.h" +#include "language/language.h" #include "mixfile.h" #include "queue.h" #include "rules.h" diff --git a/code/techno.cpp b/code/techno.cpp index 2cfded41..3531ed06 100644 --- a/code/techno.cpp +++ b/code/techno.cpp @@ -169,7 +169,7 @@ #include "ion.h" #include "isotile.h" #include "isotype.h" -#include "language\language.h" +#include "language/language.h" #include "laser.h" #include "lightcon.h" #include "mono.h" diff --git a/code/textbtn.cpp b/code/textbtn.cpp index 747d30a8..7fd74379 100644 --- a/code/textbtn.cpp +++ b/code/textbtn.cpp @@ -45,7 +45,7 @@ #include "data.h" #include "dialog.h" #include "font.h" -#include "language\language.h" +#include "language/language.h" #include "lightcon.h" #include "scheme.h" #include "surface.h" diff --git a/code/wdtconflict.cpp b/code/wdtconflict.cpp index 322e5a0e..9ff4cc88 100644 --- a/code/wdtconflict.cpp +++ b/code/wdtconflict.cpp @@ -10,7 +10,7 @@ #include "always.h" #include "data.h" -#include "language\language.h" +#include "language/language.h" #include "wdtnet.h" using namespace WorldDominationTour; diff --git a/code/wdtgameoptions.cpp b/code/wdtgameoptions.cpp index b88b256a..51a3bfc0 100644 --- a/code/wdtgameoptions.cpp +++ b/code/wdtgameoptions.cpp @@ -10,7 +10,7 @@ #include "always.h" #include "data.h" -#include "language\language.h" +#include "language/language.h" #include "wdtnet.h" using namespace WorldDominationTour; diff --git a/code/wdtprops.cpp b/code/wdtprops.cpp index f5bb1d19..d4d5c0c9 100644 --- a/code/wdtprops.cpp +++ b/code/wdtprops.cpp @@ -10,7 +10,7 @@ #include "always.h" #include "data.h" -#include "language\language.h" +#include "language/language.h" #include "ownrdraw.h" #include "wdtnet.h" diff --git a/code/wdtsel.cpp b/code/wdtsel.cpp index 82c78a6a..b6f362ea 100644 --- a/code/wdtsel.cpp +++ b/code/wdtsel.cpp @@ -8,7 +8,7 @@ ******************************************************************************/ #include "always.h" -#include "language\language.h" +#include "language/language.h" #include "_keyboar.h" #include "_surface.h" diff --git a/code/worlddom.cpp b/code/worlddom.cpp index 6bdbe41f..a6d97274 100644 --- a/code/worlddom.cpp +++ b/code/worlddom.cpp @@ -15,7 +15,7 @@ #include "_pk.h" #include "addon.h" #include "grphmenu.h" -#include "language\language.h" +#include "language/language.h" #include "mapgen.h" #include "mixfile.h" #include "ownrdraw.h" diff --git a/docs/BUILDING.md b/docs/BUILDING.md index 01980ddc..0e0116ff 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -93,6 +93,19 @@ The toolchain requires `clang-cl`, `lld-link`, `llvm-lib`, `llvm-mt`, `llvm-rc`, and `uasm` on `PATH`. It exports `compile_commands.json`; one configuration in `.vscode/c_cpp_properties.clang.example.json` reads that file for IntelliSense. +## Experimental native build + +An unsupported native build for the host platform is available for portability +work. It does not expand the supported build matrix or establish runtime +behavior. + +```bash +cmake -S . -B build/native -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DOPENTS_EXPERIMENTAL_NATIVE=ON +cmake --build build/native +``` + ## Build from Visual Studio Code With the recommended extensions installed, the repository provides: