# 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.
java.lang.NullPointerException # Our solution to these problems is to use this wrapper script. We pass # in the LD and the LDFLAGS to use via environment variables.
java.lang.NullPointerException # * MOZ_CARGO_WRAP_LD is equivalent to CC on Unix-y platforms, and CC # frequently has additional arguments in addition to the compiler # itself.
java.lang.NullPointerException # * MOZ_CARGO_WRAP_LDFLAGS contains space-separated arguments to pass, # andnot quoting it ensures that each of those arguments is passed # as a separate argument to the actual LD.
java.lang.NullPointerException # * 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).
import os
import sys
# This is not necessarily run with a virtualenv python, so add # the necessary directory for the shellutil module.
base_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
sys.path.insert(0, os.path.join(base_dir, "python", "mozbuild"))
from mozbuild.shellutil import split
use_clang_sanitizer = os.environ.get("MOZ_CLANG_NEWER_THAN_RUSTC_LLVM")
wrap_ld = os.environ["MOZ_CARGO_WRAP_LD"]
args = [] for arg in sys.argv[1:]: if arg in ["-lc++", "-lstdc++"]:
wrap_ld = os.environ["MOZ_CARGO_WRAP_LD_CXX"]
elif use_clang_sanitizer and arg.endswith("san.a"): # When clang is newer than rustc's LLVM, we replace rust's sanitizer # runtimes with clang's.
filename = os.path.basename(arg)
prefix, dot, suffix = filename[:-2].rpartition(".") if (
prefix.startswith("librustc-") and prefix.endswith("_rt") and dot == "."
):
args.append(f"-fsanitize={SANITIZERS[suffix]}") continue
args.append(arg)
args.extend(split(os.environ["MOZ_CARGO_WRAP_LDFLAGS"]))
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.