Skip to content

Update openmp/offload to new LLVM-22 build setup#152011

Open
ZuseZ4 wants to merge 2 commits intorust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 2 commits intorust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4
Copy link
Member

@ZuseZ4 ZuseZ4 commented Feb 2, 2026

I'm just testing the libc-gpu build as well, will push an update later.

cc @jhuber6 Does that look like what you have in mind? I'm running all 3 reusing the same output directory (out_dir). I know I shouldn't do that for higher level differences like llvm vs omp/offload builds, but when just having different targets it seems to work fine (?)

cc @Sa4dUs can you test this please for nvidia?

blocked-on LLVM rc3 in #152428, which should include: llvm/llvm-project#179375

blocked on LLVM RC-final, which should include llvm/llvm-project#181048

@ZuseZ4 ZuseZ4 added T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) F-gpu_offload `#![feature(gpu_offload)]` labels Feb 2, 2026
@rustbot rustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Feb 2, 2026
.profile(profile)
.env("LLVM_CONFIG_REAL", &host_llvm_config)
.define("LLVM_ENABLE_ASSERTIONS", "ON")
.define("LLVM_ENABLE_RUNTIMES", "openmp;offload")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

offload won't work targeting a GPU. I made a change to silently accept this upstream but I don't think you're on that.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried it, but I don't think it's worth backporting. Fwiw this config works locally without your LLVM PR.

@jieyouxu jieyouxu self-assigned this Feb 3, 2026
@rustbot rustbot added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label Feb 3, 2026
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4 ZuseZ4 force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aa Compare February 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4 ZuseZ4 force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2 Compare February 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4
Copy link
Member Author

ZuseZ4 commented Feb 12, 2026

So, with the vendored llvm patch (it's backport will be in the next Release candidate in 2 weeks) I can now locally build libc-for-gpu, which is the last piece that I had to postpone so far. Now it finishes the llvm and ompoffload/libc build steps.

@rust-bors

This comment has been minimized.

@ZuseZ4 ZuseZ4 force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9 Compare February 27, 2026 20:35
@ZuseZ4
Copy link
Member Author

ZuseZ4 commented Feb 27, 2026

@jieyouxu I rebased one the latest llvm, which had another backport for us.
I got it to work in one config, but the main setup for local builds now still fails. That is, if someone sets clang = true and offload = true.

The problem is simply, that we want to compile libc-for-gpu with a nvptx/amdgcn as targets.
We don't want a full cross-compilation of rustc, so we have x86 as target.
That works for all other omp/offload libraries, but libc-for-gpu breaks if we try to compile it for x86, which is fair.
I tried to remove the line where we set the target in configure_cmake (cfg.target(&target.triple).host(&builder.config.host_target.triple);), so libc-for-gpu could guess its GPU target, and rust bootstrap on the other hand isn't "surprised" by a different target.

This runs into the following assertion:

Building OpenMP/Offload for x86_64-unknown-linux-gnu

thread 'main' (868937) panicked at /g/g90/drehwald1/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cmake-0.1.54/src/lib.rs:1119:5:

environment variable `TARGET` not defined

build script failed, must exit now

I also tried to hardcode it as amdgcn-amd-amdhsa. This resulted in

Building OpenMP/Offload for x86_64-unknown-linux-gnu
CMAKE_TOOLCHAIN_FILE_x86_64-unknown-linux-gnu = None
CMAKE_TOOLCHAIN_FILE_x86_64_unknown_linux_gnu = None
TARGET_CMAKE_TOOLCHAIN_FILE = None
CMAKE_TOOLCHAIN_FILE = None

thread 'main' (831028) panicked at /g/g90/drehwald1/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cmake-0.1.54/src/lib.rs:1119:5:

environment variable `CARGO_CFG_TARGET_OS` not defined

build script failed, must exit now

I experimented a bit with setting CARGO_CFG_TARGET_{OS|ARCH}, but that just lead to more bugs.
Do you know a somewhat clean solution to this?

@ZuseZ4 ZuseZ4 marked this pull request as ready for review February 27, 2026 22:42
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Feb 27, 2026
@jieyouxu
Copy link
Member

(I'll try to take a look this weekend)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. F-gpu_offload `#![feature(gpu_offload)]` S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants