From 912aeaeb478b85876a0d5ff7399d05ca10987128 Mon Sep 17 00:00:00 2001 From: Nicholaus Clark Date: Tue, 29 Aug 2023 20:54:10 -0400 Subject: [PATCH] Implemented VS API for toggling of C++20 modules and STL module build --- modules/vstudio/_preload.lua | 20 ++++++++++++++ .../tests/vc2019/test_compile_settings.lua | 26 +++++++++++++++++++ .../tests/vc2022/test_compile_settings.lua | 26 +++++++++++++++++++ modules/vstudio/vs2010_vcxproj.lua | 20 ++++++++++++++ website/docs/buildstlmodules.md | 24 +++++++++++++++++ website/docs/enablemodules.md | 20 ++++++++++++++ website/sidebars.js | 2 ++ 7 files changed, 138 insertions(+) create mode 100644 website/docs/buildstlmodules.md create mode 100644 website/docs/enablemodules.md diff --git a/modules/vstudio/_preload.lua b/modules/vstudio/_preload.lua index eae6fae82b..0d3f35e723 100644 --- a/modules/vstudio/_preload.lua +++ b/modules/vstudio/_preload.lua @@ -195,6 +195,26 @@ } } + p.api.register { + name = "enablemodules", + scope = { "config" }, + kind = "string", + allowed = { + "On", + "Off" + } + } + + p.api.register { + name = "buildstlmodules", + scope = { "config" }, + kind = "string", + allowed = { + "On", + "Off" + } + } + -- -- Decide when the full module should be loaded. -- diff --git a/modules/vstudio/tests/vc2019/test_compile_settings.lua b/modules/vstudio/tests/vc2019/test_compile_settings.lua index 39b7f610d2..8d1aabaf87 100644 --- a/modules/vstudio/tests/vc2019/test_compile_settings.lua +++ b/modules/vstudio/tests/vc2019/test_compile_settings.lua @@ -148,3 +148,29 @@ false ]] end + + function suite.enableModulesOff() + enablemodules 'Off' + prepare() + test.capture [[ + + NotUsing + Level3 + Disabled + Level3 + false + ]] + end + + function suite.enableModulesOn() + enablemodules 'On' + prepare() + test.capture [[ + + NotUsing + Level3 + Disabled + Level3 + true + ]] + end diff --git a/modules/vstudio/tests/vc2022/test_compile_settings.lua b/modules/vstudio/tests/vc2022/test_compile_settings.lua index d692091615..0f1d8e72bb 100644 --- a/modules/vstudio/tests/vc2022/test_compile_settings.lua +++ b/modules/vstudio/tests/vc2022/test_compile_settings.lua @@ -160,3 +160,29 @@ function suite.TreatAngleIncludeAsExternalOffFile() false ]] end + +function suite.BuildStlModulesOff() + buildstlmodules 'Off' + prepare() + test.capture [[ + + NotUsing + Level3 + Disabled + Level3 + false + ]] +end + +function suite.BuildStlModulesOn() + buildstlmodules 'On' + prepare() + test.capture [[ + + NotUsing + Level3 + Disabled + Level3 + true + ]] +end \ No newline at end of file diff --git a/modules/vstudio/vs2010_vcxproj.lua b/modules/vstudio/vs2010_vcxproj.lua index 9eec95a402..09d5af86eb 100644 --- a/modules/vstudio/vs2010_vcxproj.lua +++ b/modules/vstudio/vs2010_vcxproj.lua @@ -403,6 +403,8 @@ m.externalAngleBrackets, m.scanSourceForModuleDependencies, m.useStandardPreprocessor, + m.enableModules, + m.buildStlModules, } if cfg.kind == p.STATICLIB then @@ -3024,6 +3026,24 @@ end + function m.enableModules(cfg) + if _ACTION >= "vs2019" then + if cfg.enablemodules then + m.element("EnableModules", nil, iif(cfg.enablemodules == "On", "true", "false")) + end + end + end + + + function m.buildStlModules(cfg) + if _ACTION >= "vs2022" then + if cfg.buildstlmodules then + m.element("BuildStlModules", nil, iif(cfg.buildstlmodules == "On", "true", "false")) + end + end + end + + function m.externalAngleBrackets(cfg, condition) if _ACTION >= "vs2019" then if cfg.externalanglebrackets == p.OFF then diff --git a/website/docs/buildstlmodules.md b/website/docs/buildstlmodules.md new file mode 100644 index 0000000000..1836a8c237 --- /dev/null +++ b/website/docs/buildstlmodules.md @@ -0,0 +1,24 @@ +Sets whether or not the compiler should build STL modules. + +```lua +buildstlmodules("value") +``` + +### Parameters ### + +`value` is one of: + +- `On` +- `Off` + +### Applies To ### + +The `config` scope. + +### Availability ### + +Premake 5.0.0 beta 3 or later for Visual Studio 2022 and later. + +### See Also ### + +* [enablemodules](enablemodules.md) \ No newline at end of file diff --git a/website/docs/enablemodules.md b/website/docs/enablemodules.md new file mode 100644 index 0000000000..c7d46206fc --- /dev/null +++ b/website/docs/enablemodules.md @@ -0,0 +1,20 @@ +Sets whether or not the compiler should enable C++20 modules. + +```lua +enablemodules("value") +``` + +### Parameters ### + +`value` is one of: + +- `On` +- `Off` + +### Applies To ### + +The `config` scope. + +### Availability ### + +Premake 5.0.0 beta 3 or later for Visual Studio 2019 and later. \ No newline at end of file diff --git a/website/sidebars.js b/website/sidebars.js index ecf0edba68..17d7ce74d8 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -80,6 +80,7 @@ module.exports = { 'buildoptions', 'buildoutputs', 'buildrule', + 'buildstlmodules', 'callingconvention', 'cdialect', 'characterset', @@ -139,6 +140,7 @@ module.exports = { 'embed', 'embedandsign', 'enabledefaultcompileitems', + 'enablemodules', 'enableunitybuild', 'enablewarnings', 'endian',