Nvptx: Use llbc as default linker

This commit is contained in:
Kjetil Kjeka 2025-11-04 18:22:56 +01:00
parent b889870082
commit 746acc47a1
9 changed files with 9 additions and 16 deletions

View file

@ -2956,11 +2956,6 @@ impl Target {
matches!(self.linker_flavor, LinkerFlavor::Bpf),
"`linker_flavor` must be `bpf` if and only if `arch` is `bpf`"
);
check_eq!(
self.arch == Arch::Nvptx64,
matches!(self.linker_flavor, LinkerFlavor::Ptx),
"`linker_flavor` must be `ptc` if and only if `arch` is `nvptx64`"
);
for args in [
&self.pre_link_args,

View file

@ -19,9 +19,7 @@ pub(crate) fn target() -> Target {
options: TargetOptions {
os: Os::Cuda,
vendor: "nvidia".into(),
linker_flavor: LinkerFlavor::Ptx,
// The linker can be installed from `crates.io`.
linker: Some("rust-ptx-linker".into()),
linker_flavor: LinkerFlavor::Llbc,
// With `ptx-linker` approach, it can be later overridden via link flags.
cpu: "sm_30".into(),

View file

@ -12,7 +12,7 @@ platform.
## Requirements
This target is `no_std` and will typically be built with crate-type `cdylib` and `-C linker-flavor=llbc`, which generates PTX.
This target is `no_std`, and uses the `llvm-bitcode-linker` by default. For PTX output, build with crate-type `cdylib`.
The necessary components for this workflow are:
- `rustup toolchain add nightly`
@ -38,7 +38,7 @@ While the compiler accepts `#[target_feature(enable = "ptx80", enable = "sm_89")
A `no_std` crate containing one or more functions with `extern "ptx-kernel"` can be compiled to PTX using a command like the following.
```console
$ RUSTFLAGS='-Ctarget-cpu=sm_89' cargo +nightly rustc --target=nvptx64-nvidia-cuda -Zbuild-std=core --crate-type=cdylib -- -Clinker-flavor=llbc -Zunstable-options
$ RUSTFLAGS='-Ctarget-cpu=sm_89' cargo +nightly rustc --target=nvptx64-nvidia-cuda -Zbuild-std=core --crate-type=cdylib
```
Intrinsics in `core::arch::nvptx` may use `#[cfg(target_feature = "...")]`, thus it's necessary to use `-Zbuild-std=core` with appropriate `RUSTFLAGS`. The following components are needed for this workflow:

View file

@ -1,5 +1,5 @@
//@ assembly-output: ptx-linker
//@ compile-flags: --crate-type cdylib -Z unstable-options -Clinker-flavor=llbc
//@ compile-flags: --crate-type cdylib
//@ only-nvptx64
#![no_std]

View file

@ -1,5 +1,5 @@
//@ assembly-output: ptx-linker
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_50 -Z unstable-options -Clinker-flavor=llbc
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_50
//@ only-nvptx64
#![no_std]

View file

@ -1,5 +1,5 @@
//@ assembly-output: ptx-linker
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_86 -Z unstable-options -Clinker-flavor=llbc
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_86
//@ only-nvptx64
// The PTX ABI stability is tied to major versions of the PTX ISA

View file

@ -1,5 +1,5 @@
//@ assembly-output: ptx-linker
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_86 -Z unstable-options -Clinker-flavor=llbc
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_86
//@ only-nvptx64
// The PTX ABI stability is tied to major versions of the PTX ISA

View file

@ -1,5 +1,5 @@
//@ assembly-output: ptx-linker
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_86 -Z unstable-options -Clinker-flavor=llbc
//@ compile-flags: --crate-type cdylib -C target-cpu=sm_86
//@ only-nvptx64
// The following ABI tests are made with nvcc 11.6 does.

View file

@ -1,5 +1,5 @@
//@ assembly-output: ptx-linker
//@ compile-flags: --crate-type cdylib -Z unstable-options -Clinker-flavor=llbc
//@ compile-flags: --crate-type cdylib
//@ only-nvptx64
//@ revisions: LLVM20 LLVM21
//@ [LLVM21] min-llvm-version: 21