Skip to content

Commit 7c76a3d

Browse files
authored
Unrolled build for #151568
Rollup merge of #151568 - androm3da:bcain/hexagon_linker_cfg, r=Noratrieb Update hexagon target linker configurations * hexagon-unknown-qurt: Use hexagon-clang from Hexagon SDK instead of rust-lld * hexagon-unknown-linux-musl: Use hexagon-unknown-linux-musl-clang from the open source toolchain instead of rust-lld. * hexagon-unknown-none-elf: Keep rust-lld but fix the linker flavor. rust-lld is appropriate for a baremetal target but for traditional programs that depend on libc, using clang's driver makes the most sense.
2 parents 92ea9b2 + f5cdd5d commit 7c76a3d

File tree

5 files changed

+32
-19
lines changed

5 files changed

+32
-19
lines changed

compiler/rustc_target/src/spec/targets/hexagon_unknown_linux_musl.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{Arch, Cc, LinkerFlavor, Target, TargetMetadata, base};
1+
use crate::spec::{Arch, Cc, LinkerFlavor, Lld, Target, TargetMetadata, base};
22

33
pub(crate) fn target() -> Target {
44
let mut base = base::linux_musl::opts();
@@ -8,8 +8,8 @@ pub(crate) fn target() -> Target {
88
base.features = "-small-data,+hvx-length128b".into();
99

1010
base.has_rpath = true;
11-
base.linker = Some("rust-lld".into());
12-
base.linker_flavor = LinkerFlavor::Unix(Cc::Yes);
11+
base.linker = Some("hexagon-unknown-linux-musl-clang".into());
12+
base.linker_flavor = LinkerFlavor::Gnu(Cc::Yes, Lld::No);
1313

1414
base.c_enum_min_bits = Some(8);
1515

compiler/rustc_target/src/spec/targets/hexagon_unknown_none_elf.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use crate::spec::{Arch, PanicStrategy, Target, TargetMetadata, TargetOptions};
1+
use crate::spec::{
2+
Arch, Cc, LinkerFlavor, Lld, PanicStrategy, Target, TargetMetadata, TargetOptions,
3+
};
24

35
pub(crate) fn target() -> Target {
46
Target {
@@ -28,6 +30,7 @@ pub(crate) fn target() -> Target {
2830
emit_debug_gdb_scripts: false,
2931
c_enum_min_bits: Some(8),
3032
linker: Some("rust-lld".into()),
33+
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
3134
..Default::default()
3235
},
3336
}

compiler/rustc_target/src/spec/targets/hexagon_unknown_qurt.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ pub(crate) fn target() -> Target {
2424
os: Os::Qurt,
2525
vendor: "unknown".into(),
2626
cpu: "hexagonv69".into(),
27-
linker: Some("rust-lld".into()),
28-
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
27+
linker: Some("hexagon-clang".into()),
28+
linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
2929
exe_suffix: ".elf".into(),
3030
dynamic_linking: true,
3131
executables: true,

src/doc/rustc/src/platform-support/hexagon-unknown-linux-musl.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,19 @@ Also included in that toolchain is the C library that can be used when creating
3636
dynamically linked executables.
3737

3838
```text
39-
# /opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/qemu-hexagon -L /opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr/ ./hello
39+
# /opt/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/qemu-hexagon -L /opt/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr/ ./hello
4040
```
4141

4242
## Linking
4343

44-
This target selects `rust-lld` by default. Another option to use is
45-
[eld](https://github.com/qualcomm/eld), which is also provided with
46-
the opensource hexagon toolchain and the Hexagon SDK.
44+
This target uses `hexagon-unknown-linux-musl-clang` as the default linker.
45+
The linker is available from [the opensource hexagon toolchain](https://github.com/quic/toolchain_for_hexagon/releases)
46+
at paths like `/opt/clang+llvm-21.1.8-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/hexagon-unknown-linux-musl-clang`.
47+
48+
Alternative linkers include:
49+
- [eld](https://github.com/qualcomm/eld), which is provided with
50+
the opensource hexagon toolchain and the Hexagon SDK
51+
- `rust-lld` can be used by specifying `-C linker=rust-lld`
4752

4853
## Building the target
4954
Because it is Tier 3, rust does not yet ship pre-compiled artifacts for this
@@ -63,9 +68,9 @@ cxx = "hexagon-unknown-linux-musl-clang++"
6368
linker = "hexagon-unknown-linux-musl-clang"
6469
ar = "hexagon-unknown-linux-musl-ar"
6570
ranlib = "hexagon-unknown-linux-musl-ranlib"
66-
musl-root = "/opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
71+
musl-root = "/opt/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
6772
llvm-libunwind = 'in-tree'
68-
qemu-rootfs = "/opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
73+
qemu-rootfs = "/opt/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
6974
```
7075

7176

@@ -88,21 +93,21 @@ target = "hexagon-unknown-linux-musl"
8893
[target.hexagon-unknown-linux-musl]
8994
linker = "hexagon-unknown-linux-musl-clang"
9095
ar = "hexagon-unknown-linux-musl-ar"
91-
runner = "qemu-hexagon -L /opt/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
96+
runner = "qemu-hexagon -L /opt/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
9297
```
9398

9499
Edit the "runner" in `.cargo/config` to point to the path to your toolchain's
95100
C library.
96101

97102
```text
98103
...
99-
runner = "qemu-hexagon -L /path/to/my/inst/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
104+
runner = "qemu-hexagon -L /path/to/my/inst/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/target/hexagon-unknown-linux-musl/usr"
100105
...
101106
```
102107

103108
Build/run your rust program with `qemu-hexagon` in your `PATH`:
104109

105110
```text
106-
export PATH=/path/to/my/inst/clang+llvm-18.1.0-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/:$PATH
111+
export PATH=/path/to/my/inst/clang+llvm-VERSION-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/:$PATH
107112
cargo run -Zbuild-std -Zbuild-std-features=llvm-libunwind
108113
```

src/doc/rustc/src/platform-support/hexagon-unknown-qurt.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ required for building programs for this target.
3333

3434
## Linking
3535

36-
This target selects `rust-lld` by default. Another option to use is
37-
[eld](https://github.com/qualcomm/eld), which is also provided with
38-
[the opensource hexagon toolchain](https://github.com/quic/toolchain_for_hexagon)
39-
and the Hexagon SDK.
36+
This target uses `hexagon-clang` from the Hexagon SDK as the default linker.
37+
The linker is available at paths like
38+
`/opt/Hexagon_SDK/6.4.0.2/tools/HEXAGON_Tools/19.0.04/Tools/bin/hexagon-clang`.
39+
40+
Alternative linkers include:
41+
- [eld](https://github.com/qualcomm/eld), which is provided with both
42+
[the opensource hexagon toolchain](https://github.com/quic/toolchain_for_hexagon)
43+
and the Hexagon SDK
44+
- `rust-lld` can be used by specifying `-C linker=rust-lld`
4045

4146
## Building the target
4247

0 commit comments

Comments
 (0)