mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 05:11:16 +00:00
6a7cccb953
Differential Revision: https://phabricator.services.mozilla.com/D135219
39 lines
1.5 KiB
Bash
Executable File
39 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# If you want to use a custom linker with Cargo, Cargo requires that you
|
|
# specify it in Cargo.toml or via the matching environment variable.
|
|
# Passing extra options to the linker is possible with Cargo via
|
|
# RUSTFLAGS='-C link-args', but testing showed that doing this reliably
|
|
# was difficult.
|
|
#
|
|
# Our solution to these problems is to use this wrapper script. We pass
|
|
# in the LD and the LDFLAGS to use via environment variables. Note that
|
|
# we do *not* quote either MOZ_CARGO_WRAP variable:
|
|
#
|
|
# * MOZ_CARGO_WRAP_LD is equivalent to CC on Unix-y platforms, and CC
|
|
# frequently has additional arguments in addition to the compiler
|
|
# itself.
|
|
# * MOZ_CARGO_WRAP_LDFLAGS contains space-separated arguments to pass,
|
|
# and not quoting it ensures that each of those arguments is passed
|
|
# as a separate argument to the actual LD.
|
|
#
|
|
# * In rare cases, we also need MOZ_CARGO_WRAP_LD_CXX, which is the
|
|
# equivalent of CXX, when linking C++ code. Usually, this should
|
|
# simply work by the use of CC and -lstdc++ (added by cc-rs).
|
|
# However, in the case of sanitizer runtimes, there is a separate
|
|
# runtime for C and C++ and linking C++ code with the C runtime can
|
|
# fail if the requested feature is in the C++ runtime only (bug 1747298).
|
|
#
|
|
# $@ is doubly quoted for the eval. See bug 1418598.
|
|
|
|
WRAP_LD=${MOZ_CARGO_WRAP_LD}
|
|
for opt; do
|
|
case "$opt" in
|
|
-lc++|-lstdc++)
|
|
WRAP_LD=${MOZ_CARGO_WRAP_LD_CXX};
|
|
break;
|
|
;;
|
|
esac
|
|
done
|
|
eval ${WRAP_LD} ${MOZ_CARGO_WRAP_LDFLAGS} '"$@"'
|