aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2021-05-18 23:29:34 +0300
committerGitHub <noreply@github.com>2021-05-18 23:29:34 +0300
commit2a0c2e51373e3e8aa1d4b7eb7f707f826f26f1ef (patch)
tree43a941be3555f9d563ab2bbc6328b240fb04db46 /mesonbuild
parentd7cb58e57dc3017f77f47a44efc17a4b2d28a49c (diff)
parente7e04c814ba8f513deb7b67d298277e083cd1514 (diff)
downloadmeson-2a0c2e51373e3e8aa1d4b7eb7f707f826f26f1ef.zip
meson-2a0c2e51373e3e8aa1d4b7eb7f707f826f26f1ef.tar.gz
meson-2a0c2e51373e3e8aa1d4b7eb7f707f826f26f1ef.tar.bz2
Merge pull request #8403 from dcbaker/submit/rust-fix-shared-internal-linking
Submit/rust fix shared internal linking
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/ninjabackend.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 05427d3..3749ff7 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1608,12 +1608,19 @@ int dummy;
# 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))]
+ elif d.typename == 'static library':
+ # Rustc doesn't follow Meson's convention that static libraries
+ # are called .a, and implementation libraries are .lib, so we
+ # have to manually handle that.
+ if rustc.linker.id == 'link':
+ args += ['-C', f'link-arg={self.get_target_filename_for_linking(d)}']
+ else:
+ args += ['-l', f'static={d.name}']
+ external_deps.extend(d.external_deps)
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}']
- if d.typename == 'static library':
- external_deps.extend(d.external_deps)
+ # Rust uses -l for non rust dependencies, but we still need to
+ # add dylib=foo
+ args += ['-l', f'dylib={d.name}']
for e in external_deps:
for a in e.get_link_args():
if a.endswith(('.dll', '.so', '.dylib')):