aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r--mesonbuild/compilers/compilers.py7
-rw-r--r--mesonbuild/compilers/mixins/gnu.py14
-rw-r--r--mesonbuild/compilers/mixins/visualstudio.py3
3 files changed, 24 insertions, 0 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 4b48e31..fa1046a 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -878,6 +878,13 @@ class Compiler(metaclass=abc.ABCMeta):
def get_gui_app_args(self, value: bool) -> T.List[str]:
return []
+ def get_win_subsystem_args(self, value: str) -> T.List[str]:
+ # This returns an empty array rather than throws to simplify the code.
+ # Otherwise we would have to check whenever calling this function whether
+ # the target is for Windows. There are also many cases where this is
+ # a meaningless choice, such as with Jave or C#.
+ return []
+
def has_func_attribute(self, name: str, env: 'Environment') -> T.Tuple[bool, bool]:
raise EnvironmentException(
'Language {} does not support function attributes.'.format(self.get_display_language()))
diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py
index 41afadd..bb1fc66 100644
--- a/mesonbuild/compilers/mixins/gnu.py
+++ b/mesonbuild/compilers/mixins/gnu.py
@@ -219,6 +219,20 @@ class GnuLikeCompiler(Compiler, metaclass=abc.ABCMeta):
return ['-mwindows' if value else '-mconsole']
return []
+ def get_win_subsystem_args(self, value: str) -> T.List[str]:
+ args = []
+ if self.info.is_windows() or self.info.is_cygwin():
+ if 'windows' in value:
+ args = ['-Wl,--subsystem,windows']
+ elif 'console' in value:
+ args = ['-Wl,--subsystem,console']
+ else:
+ raise mesonlib.MesonException('Only "windows" and "console" are supported for win_subsystem with MinGW, not "{}".'.format(value))
+ if ',' in value:
+ args[-1] = args[-1] + ':' + value.split(',')[1]
+ return args
+
+
def compute_parameters_with_absolute_paths(self, parameter_list: T.List[str], build_dir: str) -> T.List[str]:
for idx, i in enumerate(parameter_list):
if i[:2] == '-I' or i[:2] == '-L':
diff --git a/mesonbuild/compilers/mixins/visualstudio.py b/mesonbuild/compilers/mixins/visualstudio.py
index 3494bee..75ab635 100644
--- a/mesonbuild/compilers/mixins/visualstudio.py
+++ b/mesonbuild/compilers/mixins/visualstudio.py
@@ -205,6 +205,9 @@ class VisualStudioLikeCompiler(Compiler, metaclass=abc.ABCMeta):
else:
return ['/SUBSYSTEM:CONSOLE']
+ def get_win_subsystem_args(self, value: str) -> T.List[str]:
+ return ['/SUBSYSTEM:' + value.upper()]
+
def get_pic_args(self) -> T.List[str]:
return [] # PIC is handled by the loader on Windows