limit lld
flavors to the llvm backend
This commit is contained in:
parent
fe7a843278
commit
b816207e05
1 changed files with 21 additions and 2 deletions
|
@ -2999,8 +2999,27 @@ fn add_lld_args(cmd: &mut dyn Linker, sess: &Session, flavor: LinkerFlavor) {
|
||||||
// the CLI, and what the target spec enables (as it can't disable components):
|
// the CLI, and what the target spec enables (as it can't disable components):
|
||||||
// - if the self-contained linker is enabled on the CLI or by the target spec,
|
// - if the self-contained linker is enabled on the CLI or by the target spec,
|
||||||
// - and if the self-contained linker is not disabled on the CLI.
|
// - and if the self-contained linker is not disabled on the CLI.
|
||||||
let self_contained_linker = sess.opts.cg.link_self_contained.is_linker_enabled()
|
let self_contained_cli = sess.opts.cg.link_self_contained.is_linker_enabled();
|
||||||
|| sess.target.options.link_self_contained.is_linker_enabled();
|
let self_contained_target = sess.target.options.link_self_contained.is_linker_enabled();
|
||||||
|
|
||||||
|
// FIXME: in the future, codegen backends may need to have more control over this process: they
|
||||||
|
// don't always support all the features the linker expects here, and vice versa. For example,
|
||||||
|
// at the time of writing this, lld expects a newer style of aarch64 TLS relocations that
|
||||||
|
// cranelift doesn't implement yet. That in turn can impact whether linking would succeed on
|
||||||
|
// such a target when using the `cg_clif` backend and lld.
|
||||||
|
//
|
||||||
|
// Until interactions between backends and linker features are expressible, we limit target
|
||||||
|
// specs to opt-in to lld only when we're on the llvm backend, where it's expected to work and
|
||||||
|
// tested on CI. As usual, the CLI still has precedence over this, so that users and developers
|
||||||
|
// can still override this default when needed (e.g. for tests).
|
||||||
|
let uses_llvm_backend =
|
||||||
|
matches!(sess.opts.unstable_opts.codegen_backend.as_deref(), None | Some("llvm"));
|
||||||
|
if !uses_llvm_backend && !self_contained_cli && sess.opts.cg.linker_flavor.is_none() {
|
||||||
|
// We bail if we're not using llvm and lld was not explicitly requested on the CLI.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let self_contained_linker = self_contained_cli || self_contained_target;
|
||||||
if self_contained_linker && !sess.opts.cg.link_self_contained.is_linker_disabled() {
|
if self_contained_linker && !sess.opts.cg.link_self_contained.is_linker_disabled() {
|
||||||
for path in sess.get_tools_search_paths(false) {
|
for path in sess.get_tools_search_paths(false) {
|
||||||
cmd.arg({
|
cmd.arg({
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue