diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2019-08-23 16:32:56 -0700 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2019-08-24 02:32:56 +0300 |
commit | 110b56293059999231d5b32cbf552c7845375cb0 (patch) | |
tree | 79888f75fdca96ff2f66ffa13cbc230bba25a74e /mesonbuild | |
parent | e085aa089f50a2429ce90a6d24e23bc86faeeeec (diff) | |
download | meson-110b56293059999231d5b32cbf552c7845375cb0.zip meson-110b56293059999231d5b32cbf552c7845375cb0.tar.gz meson-110b56293059999231d5b32cbf552c7845375cb0.tar.bz2 |
Vs backend compiler selection (#5448)
* backends/vs: Only set platform_toolset if it isn't already set
* interpreter: set backend up after the compiler
Otherwise we won't be able to check which VS toolchain to use.
* docs/using-visual-studio: wrap lines
* docs: recommend the py launcher instead of python3 for windows
* set backend.environment when building a dummy version
* backends/vs: Add support for clang-cl with vs2017 and vs2019 backends
* backends/vs: Add support for ICL (19.x) with vs2015 and vs2017 backends
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/backend/backends.py | 1 | ||||
-rw-r--r-- | mesonbuild/backend/vs2015backend.py | 14 | ||||
-rw-r--r-- | mesonbuild/backend/vs2017backend.py | 17 | ||||
-rw-r--r-- | mesonbuild/backend/vs2019backend.py | 14 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 2 |
5 files changed, 43 insertions, 5 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index 40f9411..512eeed 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -157,6 +157,7 @@ class Backend: # Make it possible to construct a dummy backend # This is used for introspection without a build directory if build is None: + self.environment = None return self.build = build self.environment = build.environment diff --git a/mesonbuild/backend/vs2015backend.py b/mesonbuild/backend/vs2015backend.py index 29b33fb..1e5e171 100644 --- a/mesonbuild/backend/vs2015backend.py +++ b/mesonbuild/backend/vs2015backend.py @@ -13,11 +13,23 @@ # limitations under the License. from .vs2010backend import Vs2010Backend +from ..mesonlib import MesonException class Vs2015Backend(Vs2010Backend): def __init__(self, build): super().__init__(build) self.name = 'vs2015' - self.platform_toolset = 'v140' self.vs_version = '2015' + if self.environment is not None: + # TODO: we assume host == build + comps = self.environment.coredata.compilers.host + if 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' + else: + # We don't have support for versions older than 2019 right now. + raise MesonException('There is currently no support for ICL before 19, patches welcome.') + if self.platform_toolset is None: + self.platform_toolset = 'v140' diff --git a/mesonbuild/backend/vs2017backend.py b/mesonbuild/backend/vs2017backend.py index 9098226..9308233 100644 --- a/mesonbuild/backend/vs2017backend.py +++ b/mesonbuild/backend/vs2017backend.py @@ -16,14 +16,29 @@ import os import xml.etree.ElementTree as ET from .vs2010backend import Vs2010Backend +from ..mesonlib import MesonException class Vs2017Backend(Vs2010Backend): def __init__(self, build): super().__init__(build) self.name = 'vs2017' - self.platform_toolset = 'v141' self.vs_version = '2017' + # We assume that host == build + if self.environment is not None: + comps = self.environment.coredata.compilers.host + if comps: + if comps and all(c.id == 'clang-cl' for c in comps.values()): + self.platform_toolset = 'llvm' + 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' + else: + # We don't have support for versions older than 2019 right now. + raise MesonException('There is currently no support for ICL before 19, patches welcome.') + if self.platform_toolset is None: + self.platform_toolset = 'v141' # WindowsSDKVersion should be set by command prompt. sdk_version = os.environ.get('WindowsSDKVersion', None) if sdk_version: diff --git a/mesonbuild/backend/vs2019backend.py b/mesonbuild/backend/vs2019backend.py index c6e78cb..c0ff5c3 100644 --- a/mesonbuild/backend/vs2019backend.py +++ b/mesonbuild/backend/vs2019backend.py @@ -22,8 +22,18 @@ class Vs2019Backend(Vs2010Backend): def __init__(self, build): super().__init__(build) self.name = 'vs2019' - self.platform_toolset = 'v142' - self.vs_version = '2019' + 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 = 'llvm' + 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 2019 right now. + if not self.platform_toolset: + self.platform_toolset = 'v142' + self.vs_version = '2019' # WindowsSDKVersion should be set by command prompt. sdk_version = os.environ.get('WindowsSDKVersion', None) if sdk_version: diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index cc0dae0..5f69e22 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2710,7 +2710,6 @@ external dependencies (including libraries) must go to "dependencies".''') else: default_options = {} self.coredata.set_default_options(default_options, self.subproject, self.environment) - self.set_backend() if not self.is_subproject(): self.build.project_name = proj_name @@ -2745,6 +2744,7 @@ external dependencies (including libraries) must go to "dependencies".''') mlog.log('Project name:', mlog.bold(proj_name)) mlog.log('Project version:', mlog.bold(self.project_version)) self.add_languages(proj_langs, True) + self.set_backend() if not self.is_subproject(): self.check_stdlibs() |