From b1b49a237b24d3fd772853c7db85035d28bc32ef Mon Sep 17 00:00:00 2001 From: Marco Rebhan Date: Tue, 25 Feb 2025 21:26:32 +0100 Subject: swift: Add swift_std compiler option --- mesonbuild/compilers/swift.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/mesonbuild/compilers/swift.py b/mesonbuild/compilers/swift.py index 91c17f0ba..b04ccbd0e 100644 --- a/mesonbuild/compilers/swift.py +++ b/mesonbuild/compilers/swift.py @@ -7,12 +7,14 @@ import re import subprocess, os.path import typing as T -from .. import mlog +from .. import mlog, options from ..mesonlib import EnvironmentException, MesonException, version_compare from .compilers import Compiler, clike_debug_args if T.TYPE_CHECKING: + from .. import build + from ..coredata import MutableKeyedOptionDictType from ..dependencies import Dependency from ..envconfig import MachineInfo from ..environment import Environment @@ -115,6 +117,31 @@ class SwiftCompiler(Compiler): def get_compile_only_args(self) -> T.List[str]: return ['-c'] + def get_options(self) -> MutableKeyedOptionDictType: + opts = super().get_options() + + key = self.form_compileropt_key('std') + opts[key] = options.UserComboOption( + self.make_option_name(key), + 'Swift language version.', + 'none', + # List them with swiftc -frontend -swift-version '' + choices=['none', '4', '4.2', '5', '6']) + + return opts + + def get_option_compile_args(self, target: build.BuildTarget, env: Environment, subproject: T.Optional[str] = None + ) -> T.List[str]: + args: T.List[str] = [] + + std = self.get_compileropt_value('std', env, target, subproject) + assert isinstance(std, str) + + if std != 'none': + args += ['-swift-version', std] + + return args + def get_working_directory_args(self, path: str) -> T.Optional[T.List[str]]: if version_compare(self.version, '<4.2'): return None -- cgit v1.2.3