diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2021-01-06 12:28:18 -0800 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2021-02-06 10:27:04 -0800 |
commit | 4082a3db454469bbc9dbef85cd31d1133ff24065 (patch) | |
tree | 6cb1ff326eef3bd7f2b2bb96f7036e638a324878 /mesonbuild | |
parent | 8e73e5fe1c4fcd5a875cb4777c7938f9069e0102 (diff) | |
download | meson-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.py | 19 |
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] |