diff options
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() |