summaryrefslogtreecommitdiff
path: root/mesonbuild/backend
diff options
context:
space:
mode:
authorKatalin Rebhan <me@dblsaiko.net>2025-02-25 21:26:32 +0100
committerJussi Pakkanen <jussi.pakkanen@mailbox.org>2025-08-02 21:45:01 +0300
commiteefad4a723ce63a0ac02edec7c41d69fa10b14bb (patch)
tree8662fbd313bbdb7d71823b6c6c803bbdd3a03e08 /mesonbuild/backend
parent6473a727a6907185871758bb554c0850bd00cf6b (diff)
downloadmeson-eefad4a723ce63a0ac02edec7c41d69fa10b14bb.tar.gz
Add swift_interoperability_mode kwarg
Diffstat (limited to 'mesonbuild/backend')
-rw-r--r--mesonbuild/backend/ninjabackend.py17
-rw-r--r--mesonbuild/backend/xcodebackend.py2
2 files changed, 16 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index b2fb60580..595a27a05 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2266,6 +2266,20 @@ class NinjaBackend(backends.Backend):
relsrc = []
abs_headers = []
header_imports = []
+
+ if not target.uses_swift_cpp_interop():
+ cpp_targets = [t for t in target.link_targets if t.uses_swift_cpp_interop()]
+ if cpp_targets != []:
+ target_word = 'targets' if len(cpp_targets) > 1 else 'target'
+ first = ', '.join(repr(t.name) for t in cpp_targets[:-1])
+ and_word = ' and ' if len(cpp_targets) > 1 else ''
+ last = repr(cpp_targets[-1].name)
+ enable_word = 'enable' if len(cpp_targets) > 1 else 'enables'
+ raise MesonException('Swift target {0} links against {1} {2}{3}{4} which {5} C++ interoperability. '
+ 'This requires {0} to also have it enabled. '
+ 'Add "swift_interoperability_mode: \'cpp\'" to the definition of {0}.'
+ .format(repr(target.name), target_word, first, and_word, last, enable_word))
+
for i in target.get_sources():
if swiftc.can_compile(i):
rels = i.rel_to_builddir(self.build_to_src)
@@ -2282,8 +2296,7 @@ class NinjaBackend(backends.Backend):
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
compile_args = self.generate_basic_compiler_args(target, swiftc)
compile_args += swiftc.get_module_args(module_name)
- if mesonlib.version_compare(swiftc.version, '>=5.9'):
- compile_args += swiftc.get_cxx_interoperability_args(target.compilers)
+ compile_args += swiftc.get_cxx_interoperability_args(target)
compile_args += self.build.get_project_args(swiftc, target.subproject, target.for_machine)
compile_args += self.build.get_global_args(swiftc, target.for_machine)
if isinstance(target, (build.StaticLibrary, build.SharedLibrary)):
diff --git a/mesonbuild/backend/xcodebackend.py b/mesonbuild/backend/xcodebackend.py
index c0522e3c7..e7bd48700 100644
--- a/mesonbuild/backend/xcodebackend.py
+++ b/mesonbuild/backend/xcodebackend.py
@@ -1831,7 +1831,7 @@ class XCodeBackend(backends.Backend):
settings_dict.add_item('SECTORDER_FLAGS', '')
if is_swift and bridging_header:
settings_dict.add_item('SWIFT_OBJC_BRIDGING_HEADER', bridging_header)
- if self.objversion >= 60 and 'cpp' in langs:
+ if self.objversion >= 60 and target.uses_swift_cpp_interop():
settings_dict.add_item('SWIFT_OBJC_INTEROP_MODE', 'objcxx')
settings_dict.add_item('BUILD_DIR', symroot)
settings_dict.add_item('OBJROOT', f'{symroot}/build')