aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2021-01-06 12:28:18 -0800
committerDylan Baker <dylan@pnwbakers.com>2021-02-06 10:27:04 -0800
commit4082a3db454469bbc9dbef85cd31d1133ff24065 (patch)
tree6cb1ff326eef3bd7f2b2bb96f7036e638a324878 /mesonbuild
parent8e73e5fe1c4fcd5a875cb4777c7938f9069e0102 (diff)
downloadmeson-4082a3db454469bbc9dbef85cd31d1133ff24065.zip
meson-4082a3db454469bbc9dbef85cd31d1133ff24065.tar.gz
meson-4082a3db454469bbc9dbef85cd31d1133ff24065.tar.bz2
backends/ninja: Implement linking a C ABI target into a rust target
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/ninjabackend.py19
1 files changed, 12 insertions, 7 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index ca17f19..8b4ba7f 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1636,14 +1636,19 @@ int dummy;
args += target.get_extra_args('rust')
args += rustc.get_output_args(os.path.join(target.subdir, target.get_filename()))
args += self.environment.coredata.get_external_args(target.for_machine, rustc.language)
- linkdirs = OrderedDict()
+ linkdirs = mesonlib.OrderedSet()
for d in target.link_targets:
- linkdirs[d.subdir] = True
- # specify `extern CRATE_NAME=OUTPUT_FILE` for each Rust
- # dependency, so that collisions with libraries in rustc's
- # sysroot don't cause ambiguity
- args += ['--extern', '{}={}'.format(d.name, os.path.join(d.subdir, d.filename))]
- for d in linkdirs.keys():
+ linkdirs.add(d.subdir)
+ if d.uses_rust():
+ # specify `extern CRATE_NAME=OUTPUT_FILE` for each Rust
+ # dependency, so that collisions with libraries in rustc's
+ # sysroot don't cause ambiguity
+ args += ['--extern', '{}={}'.format(d.name, os.path.join(d.subdir, d.filename))]
+ else:
+ # Rust uses -l for non rust dependencies, but we still need to add (shared|static)=foo
+ _type = 'static' if d.typename == 'static library' else 'shared'
+ args += ['-l', f'{_type}={d.name}']
+ for d in linkdirs:
if d == '':
d = '.'
args += ['-L', d]