aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/cmake
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2021-05-30 16:33:09 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-05-30 16:33:09 +0200
commit9b5463681e8f5df8dbe628be0a95982584b2343b (patch)
treeba0bfce27a7355a7f1674d2e4e86a8328d206669 /mesonbuild/cmake
parentf0812baf8d1c746a4b5b7d8661a4e3d13af577b7 (diff)
downloadmeson-9b5463681e8f5df8dbe628be0a95982584b2343b.zip
meson-9b5463681e8f5df8dbe628be0a95982584b2343b.tar.gz
meson-9b5463681e8f5df8dbe628be0a95982584b2343b.tar.bz2
cmake: select correct generator in toolchain.py
Diffstat (limited to 'mesonbuild/cmake')
-rw-r--r--mesonbuild/cmake/__init__.py4
-rw-r--r--mesonbuild/cmake/common.py20
-rw-r--r--mesonbuild/cmake/interpreter.py14
-rw-r--r--mesonbuild/cmake/toolchain.py7
4 files changed, 29 insertions, 16 deletions
diff --git a/mesonbuild/cmake/__init__.py b/mesonbuild/cmake/__init__.py
index b13b5a8..d39bf24 100644
--- a/mesonbuild/cmake/__init__.py
+++ b/mesonbuild/cmake/__init__.py
@@ -30,11 +30,13 @@ __all__ = [
'TargetOptions',
'parse_generator_expressions',
'language_map',
+ 'backend_generator_map',
+ 'cmake_get_generator_args',
'cmake_defines_to_args',
'check_cmake_args',
]
-from .common import CMakeException, SingleTargetOptions, TargetOptions, cmake_defines_to_args, language_map, check_cmake_args
+from .common import CMakeException, SingleTargetOptions, TargetOptions, cmake_defines_to_args, language_map, backend_generator_map, cmake_get_generator_args, check_cmake_args
from .client import CMakeClient
from .executor import CMakeExecutor
from .fileapi import CMakeFileAPI
diff --git a/mesonbuild/cmake/common.py b/mesonbuild/cmake/common.py
index f0a54b5..d1f86f0 100644
--- a/mesonbuild/cmake/common.py
+++ b/mesonbuild/cmake/common.py
@@ -15,11 +15,14 @@
# This class contains the basic functionality needed to run any interpreter
# or an interpreter-based tool.
-from ..mesonlib import MesonException
+from ..mesonlib import MesonException, OptionKey
from .. import mlog
from pathlib import Path
import typing as T
+if T.TYPE_CHECKING:
+ from ..environment import Environment
+
language_map = {
'c': 'C',
'cpp': 'CXX',
@@ -32,6 +35,15 @@ language_map = {
'swift': 'Swift',
}
+backend_generator_map = {
+ 'ninja': 'Ninja',
+ 'xcode': 'Xcode',
+ 'vs2010': 'Visual Studio 10 2010',
+ 'vs2015': 'Visual Studio 15 2017',
+ 'vs2017': 'Visual Studio 15 2017',
+ 'vs2019': 'Visual Studio 16 2019',
+}
+
blacklist_cmake_defs = [
'CMAKE_TOOLCHAIN_FILE',
'CMAKE_PROJECT_INCLUDE',
@@ -87,6 +99,12 @@ def _flags_to_list(raw: str) -> T.List[str]:
res = list(filter(lambda x: len(x) > 0, res))
return res
+def cmake_get_generator_args(env: 'Environment') -> T.List[str]:
+ backend_name = env.coredata.get_option(OptionKey('backend'))
+ assert isinstance(backend_name, str)
+ assert backend_name in backend_generator_map
+ return ['-G', backend_generator_map[backend_name]]
+
def cmake_defines_to_args(raw: T.Any, permissive: bool = False) -> T.List[str]:
res = [] # type: T.List[str]
if not isinstance(raw, list):
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py
index 26fc635..cc6adf1 100644
--- a/mesonbuild/cmake/interpreter.py
+++ b/mesonbuild/cmake/interpreter.py
@@ -15,7 +15,7 @@
# This class contains the basic functionality needed to run any interpreter
# or an interpreter-based tool.
-from .common import CMakeException, CMakeTarget, TargetOptions, CMakeConfiguration, language_map, check_cmake_args
+from .common import CMakeException, CMakeTarget, TargetOptions, CMakeConfiguration, language_map, backend_generator_map, cmake_get_generator_args, check_cmake_args
from .client import CMakeClient, RequestCMakeInputs, RequestConfigure, RequestCompute, RequestCodeModel, ReplyCMakeInputs, ReplyCodeModel
from .fileapi import CMakeFileAPI
from .executor import CMakeExecutor
@@ -74,15 +74,6 @@ disable_policy_warnings = [
'CMP0102',
]
-backend_generator_map = {
- 'ninja': 'Ninja',
- 'xcode': 'Xcode',
- 'vs2010': 'Visual Studio 10 2010',
- 'vs2015': 'Visual Studio 15 2017',
- 'vs2017': 'Visual Studio 15 2017',
- 'vs2019': 'Visual Studio 16 2019',
-}
-
target_type_map = {
'STATIC_LIBRARY': 'static_library',
'MODULE_LIBRARY': 'shared_module',
@@ -898,9 +889,8 @@ class CMakeInterpreter:
# TODO: drop this check once the deprecated `cmake_args` kwarg is removed
extra_cmake_options = check_cmake_args(extra_cmake_options)
- generator = backend_generator_map[self.backend_name]
cmake_args = []
- cmake_args += ['-G', generator]
+ cmake_args += cmake_get_generator_args(self.env)
cmake_args += [f'-DCMAKE_INSTALL_PREFIX={self.install_prefix}']
cmake_args += extra_cmake_options
trace_args = self.trace.trace_args()
diff --git a/mesonbuild/cmake/toolchain.py b/mesonbuild/cmake/toolchain.py
index c5056d7..f3e487d 100644
--- a/mesonbuild/cmake/toolchain.py
+++ b/mesonbuild/cmake/toolchain.py
@@ -16,7 +16,7 @@ from pathlib import Path
from .traceparser import CMakeTraceParser
from ..envconfig import CMakeSkipCompilerTest
from ..mesonlib import MachineChoice
-from .common import language_map
+from .common import language_map, cmake_get_generator_args
from .. import mlog
import shutil
@@ -224,7 +224,10 @@ class CMakeToolchain:
# Configure
trace = CMakeTraceParser(self.cmakebin.version(), build_dir)
self.cmakebin.set_exec_mode(print_cmout=False, always_capture_stderr=trace.requires_stderr())
- cmake_args = [*trace.trace_args(), '-DCMAKE_TOOLCHAIN_FILE=' + temp_toolchain_file.as_posix(), '.']
+ cmake_args = []
+ cmake_args += trace.trace_args()
+ cmake_args += cmake_get_generator_args(self.env)
+ cmake_args += [f'-DCMAKE_TOOLCHAIN_FILE={temp_toolchain_file.as_posix()}', '.']
rc, _, raw_trace = self.cmakebin.call(cmake_args, build_dir=build_dir, disable_cache=True)
if rc != 0: