aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2019-08-23 16:32:56 -0700
committerJussi Pakkanen <jpakkane@gmail.com>2019-08-24 02:32:56 +0300
commit110b56293059999231d5b32cbf552c7845375cb0 (patch)
tree79888f75fdca96ff2f66ffa13cbc230bba25a74e /mesonbuild
parente085aa089f50a2429ce90a6d24e23bc86faeeeec (diff)
downloadmeson-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.py1
-rw-r--r--mesonbuild/backend/vs2015backend.py14
-rw-r--r--mesonbuild/backend/vs2017backend.py17
-rw-r--r--mesonbuild/backend/vs2019backend.py14
-rw-r--r--mesonbuild/interpreter.py2
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()