diff --git a/docs/markdown/Builtin-options.md b/docs/markdown/Builtin-options.md index aa2ed7018..613b8b89b 100644 --- a/docs/markdown/Builtin-options.md +++ b/docs/markdown/Builtin-options.md @@ -70,7 +70,7 @@ machine](#specifying-options-per-machine) section for details. | Option | Default value | Description | Is per machine | Is per subproject | | ------ | ------------- | ----------- | -------------- | ----------------- | | auto_features {enabled, disabled, auto} | auto | Override value of all 'auto' features | no | no | -| backend {ninja, vs,
vs2010, vs2012, vs2013, vs2015, vs2017, vs2019, xcode} | ninja | Backend to use | no | no | +| backend {ninja, vs,
vs2010, vs2012, vs2013, vs2015, vs2017, vs2019, vs2022, xcode} | ninja | Backend to use | no | no | | buildtype {plain, debug,
debugoptimized, release, minsize, custom} | debug | Build type to use | no | no | | debug | true | Debug | no | no | | default_library {shared, static, both} | shared | Default library type | no | yes | diff --git a/docs/markdown/Configuring-a-build-directory.md b/docs/markdown/Configuring-a-build-directory.md index c55267656..1eb8478b7 100644 --- a/docs/markdown/Configuring-a-build-directory.md +++ b/docs/markdown/Configuring-a-build-directory.md @@ -21,20 +21,20 @@ a sample output for a simple project. Build dir /home/jpakkane/clangdemo/2_address/buildmeson Core options: - Option Current Value Possible Values Description - ------ ------------- --------------- ----------- - auto_features auto [enabled, disabled, auto] Override value of all 'auto' features - backend ninja [ninja, vs, vs2010, vs2015, vs2017, vs2019, xcode] Backend to use - buildtype release [plain, debug, debugoptimized, release, minsize, custom] Build type to use - debug false [true, false] Debug - default_library shared [shared, static, both] Default library type - install_umask 0022 [preserve, 0000-0777] Default umask to apply on permissions of installed files - layout mirror [mirror, flat] Build directory layout - optimization 3 [0, g, 1, 2, 3, s] Optimization level - strip false [true, false] Strip targets on install - unity off [on, off, subprojects] Unity build - warning_level 1 [0, 1, 2, 3] Compiler warning level to use - werror false [true, false] Treat warnings as errors + Option Current Value Possible Values Description + ------ ------------- --------------- ----------- + auto_features auto [enabled, disabled, auto] Override value of all 'auto' features + backend ninja [ninja, vs, vs2010, vs2015, vs2017, vs2019, vs2022, xcode] Backend to use + buildtype release [plain, debug, debugoptimized, release, minsize, custom] Build type to use + debug false [true, false] Debug + default_library shared [shared, static, both] Default library type + install_umask 0022 [preserve, 0000-0777] Default umask to apply on permissions of installed files + layout mirror [mirror, flat] Build directory layout + optimization 3 [0, g, 1, 2, 3, s] Optimization level + strip false [true, false] Strip targets on install + unity off [on, off, subprojects] Unity build + warning_level 1 [0, 1, 2, 3] Compiler warning level to use + werror false [true, false] Treat warnings as errors Backend options: Option Current Value Possible Values Description diff --git a/docs/markdown/snippets/vs_2022.md b/docs/markdown/snippets/vs_2022.md new file mode 100644 index 000000000..0c3ff026f --- /dev/null +++ b/docs/markdown/snippets/vs_2022.md @@ -0,0 +1,10 @@ +## Visual Studio 2022 backend + +As Visual Studio 2022 is released recently, it's time to support the +new version in Meson. This mainly includes the new "v143" platform tools. + +The usage is similar to other backends. For example +```meson +meson setup builddir --backend=vs2022 +``` +will configure "builddir" for projects compatible with Visual Studio 2022. diff --git a/docs/yaml/builtins/meson.yaml b/docs/yaml/builtins/meson.yaml index f8c4e7817..4f2d24dc2 100644 --- a/docs/yaml/builtins/meson.yaml +++ b/docs/yaml/builtins/meson.yaml @@ -134,6 +134,7 @@ methods: - `vs2015` - `vs2017` - `vs2019` + - `vs2022` - `xcode` - name: build_root diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index 1d04c91e5..6c156786e 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -259,6 +259,9 @@ def get_backend_from_name(backend: str, build: T.Optional[build.Build] = None, i elif backend == 'vs2019': from . import vs2019backend return vs2019backend.Vs2019Backend(build, interpreter) + elif backend == 'vs2022': + from . import vs2022backend + return vs2022backend.Vs2022Backend(build, interpreter) elif backend == 'xcode': from . import xcodebackend return xcodebackend.XCodeBackend(build, interpreter) diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 8ed2428ae..4597a5a98 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -57,6 +57,10 @@ def autodetect_vs_version(build: T.Optional[build.Build], interpreter: T.Optiona 'Visual Studio\\2019' in vs_install_dir: from mesonbuild.backend.vs2019backend import Vs2019Backend return Vs2019Backend(build, interpreter) + if vs_version == '17.0' or 'Visual Studio 22' in vs_install_dir or \ + 'Visual Studio\\2022' in vs_install_dir: + from mesonbuild.backend.vs2022backend import Vs2022Backend + return Vs2022Backend(build, interpreter) if 'Visual Studio 10.0' in vs_install_dir: return Vs2010Backend(build, interpreter) raise MesonException('Could not detect Visual Studio using VisualStudioVersion: {!r} or VSINSTALLDIR: {!r}!\n' diff --git a/mesonbuild/backend/vs2022backend.py b/mesonbuild/backend/vs2022backend.py new file mode 100644 index 000000000..19ad090e5 --- /dev/null +++ b/mesonbuild/backend/vs2022backend.py @@ -0,0 +1,57 @@ +# Copyright 2014-2021 The Meson development team + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import typing as T +import xml.etree.ElementTree as ET + +from .vs2010backend import Vs2010Backend +from ..interpreter import Interpreter +from ..build import Build + + +class Vs2022Backend(Vs2010Backend): + def __init__(self, build: T.Optional[Build], interpreter: T.Optional[Interpreter]): + super().__init__(build, interpreter) + self.name = 'vs2022' + if self.environment is not None: + comps = self.environment.coredata.compilers.host + if comps and all(c.id == 'clang-cl' for c in comps.values()): + self.platform_toolset = 'ClangCL' + elif comps and all(c.id == 'intel-cl' for c in comps.values()): + c = list(comps.values())[0] + if c.version.startswith('19'): + self.platform_toolset = 'Intel C++ Compiler 19.0' + # We don't have support for versions older than 2022 right now. + if not self.platform_toolset: + self.platform_toolset = 'v143' + self.vs_version = '2022' + # WindowsSDKVersion should be set by command prompt. + sdk_version = os.environ.get('WindowsSDKVersion', None) + if sdk_version: + self.windows_target_platform_version = sdk_version.rstrip('\\') + + def generate_debug_information(self, link): + # valid values for vs2022 is 'false', 'true', 'DebugFastLink', 'DebugFull' + ET.SubElement(link, 'GenerateDebugInformation').text = 'DebugFull' + + def generate_lang_standard_info(self, file_args, clconf): + if 'cpp' in file_args: + optargs = [x for x in file_args['cpp'] if x.startswith('/std:c++')] + if optargs: + ET.SubElement(clconf, 'LanguageStandard').text = optargs[0].replace("/std:c++", "stdcpp") + if 'c' in file_args: + optargs = [x for x in file_args['c'] if x.startswith('/std:c')] + if optargs: + ET.SubElement(clconf, 'LanguageStandard_C').text = optargs[0].replace("/std:c", "stdc") diff --git a/mesonbuild/cmake/common.py b/mesonbuild/cmake/common.py index 5cc154cb8..f6ba5ece6 100644 --- a/mesonbuild/cmake/common.py +++ b/mesonbuild/cmake/common.py @@ -44,6 +44,7 @@ backend_generator_map = { 'vs2015': 'Visual Studio 14 2015', 'vs2017': 'Visual Studio 15 2017', 'vs2019': 'Visual Studio 16 2019', + 'vs2022': 'Visual Studio 17 2022', } blacklist_cmake_defs = [ diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 175b833c9..f444cf197 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -46,7 +46,7 @@ if T.TYPE_CHECKING: # Check major_versions_differ() if changing versioning scheme. version = '0.60.99' -backendlist = ['ninja', 'vs', 'vs2010', 'vs2012', 'vs2013', 'vs2015', 'vs2017', 'vs2019', 'xcode'] +backendlist = ['ninja', 'vs', 'vs2010', 'vs2012', 'vs2013', 'vs2015', 'vs2017', 'vs2019', 'vs2022', 'xcode'] default_yielding = False