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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

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

Open
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap
Open

Update openmp/offload to new LLVM-22 build setup#152011
ZuseZ4 wants to merge 1 commit into
rust-lang:mainfrom
ZuseZ4:update-offload-bootstrap

Conversation

@ZuseZ4

@ZuseZ4ZuseZ4 commented Feb 2, 2026

Copy link
Copy Markdown
Member

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

@ZuseZ4ZuseZ4 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
@rustbotrustbot 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
Copy Markdown

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
Copy Markdown
MemberAuthor

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.

Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
Comment threadsrc/bootstrap/src/core/build_steps/llvm.rs Outdated
@jieyouxujieyouxu self-assigned this Feb 3, 2026
@rustbotrustbot 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
ZuseZ4force-pushed the update-offload-bootstrap branch from 1a6f0e4 to a85f0aaCompareFebruary 6, 2026 00:49
@rust-bors

This comment has been minimized.

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from a85f0aa to 3becbd2CompareFebruary 12, 2026 18:05
@rust-log-analyzer

This comment has been minimized.

@ZuseZ4

ZuseZ4 commented Feb 12, 2026

Copy link
Copy Markdown
MemberAuthor

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
ZuseZ4force-pushed the update-offload-bootstrap branch from 3becbd2 to 4e818c9CompareFebruary 27, 2026 20:35
@ZuseZ4

ZuseZ4 commented Feb 27, 2026

Copy link
Copy Markdown
MemberAuthor

@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
@rustbotrustbot 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
Copy Markdown
Member

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

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Discussion: unfortunately I'm not sure.

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.

I wonder if you are running into something like #138784 or rust-lang/cmake-rs#242 where cmake-rs isn't really equipped to handle cross-compilation outside of build.rs (i.e. used as a runtime library)?

@ZuseZ4ZuseZ4Mar 14, 2026

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I like that we're both here being unsure about a cmake change, while you link an issue about two other rustc devs being unsure about a cmake change. I see a common pattern here :D

@madsmtm it looks like you've been involved in some related issues. I have a single cmake invocation (out of 3 or 4) during bootstrap where I want the cpu target to either not be printed, or replace it once with a gpu target. Is there a way to achieve that?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That makes 4 in total 😆

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

I also rebased and re-tested it in both combinations (enabling the clang project which is the normal local workflow, and with an external clang/llvm which is our CI workflow).

libc still uses the compiler name as a C++ namespace, which breaks since rust uses a . in our compiler name (1.96). I undefine and redefine it which breaks if you ctrl-C during the build and re-start (since it doesn't re-undefine the old name), but there should be a tracked variable for it.

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@ZuseZ4
ZuseZ4force-pushed the update-offload-bootstrap branch from 4e818c9 to c462c5bCompareMarch 18, 2026 19:43
@rustbot

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@jieyouxujieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes seem okay, one FIXME request. You can r=me after.

View changes since this review

Comment on lines +1091 to +1094
cfg.define("LIBC_INCLUDE_BENCHMARKS", "OFF");
cfg.define("LIBC_TARGET_TRIPLE", omp_target);
cfg.define("LLVM_LIBC_FULL_BUILD", "ON");
cfg.define("LLVM_ENABLE_RUNTIMES", "openmp;libc");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok. Since we already know that we don't understand it, I did the only reasonable thing: I didn't change anything and recompiled. It now works.

Image

To be clear, our current behaviour of setting the target to the host cpu when we compile libc (or some of the other gpu projects here) for a gpu is wrong, but we don't seem to know how to resolve that properly and it works for now, so I'll take that.

Can you leave that as an FIXME in the code / tracked as an issue somewhere?

@jieyouxujieyouxu added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 19, 2026
@rust-bors

rust-borsBot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

☔ The latest upstream changes (presumably #160645) made this pull request unmergeable. Please resolve the merge conflicts by rebasing.

@ZuseZ4ZuseZ4 mentioned this pull request Aug 22, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.F-gpu_offload`#![feature(gpu_offload)]`S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author.T-bootstrapRelevant 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

@ZuseZ4@rust-log-analyzer@jieyouxu@rustbot@jhuber6