-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
No profiles generated #56
Comments
Hi, could you please share the reproducer program? Also, does it work when you don't use |
The reproducer is any program, as demonstrated by doing cargo init / cargo new and just building the default hello world program. I will try the flags after work tomorrow. |
I see. It works for me, so it might be some environment thing. Did any files appear in |
No files appeared in |
|
~/.cargo/config.toml: [build]
rustc-wrapper = "/usr/bin/sccache"
[target.x86_64-unknown-linux-gnu]
linker = "/usr/bin/clang"
# If I comment out the following line, cargo-pgo starts working (traces start showing up in target/pgo-profiles)
rustflags = ["-C", "link-arg=--ld-path=/usr/bin/mold"] Strangely if I follow the following manual steps from the page you linked: # STEP 0: Make sure there is no left-over profiling data from previous runs
rm -rf /tmp/pgo-data
# STEP 1: Build the instrumented binaries
RUSTFLAGS="-Cprofile-generate=/tmp/pgo-data" \
cargo build --release --target=x86_64-unknown-linux-gnu
# STEP 2: Run the instrumented binaries with some typical data
target/x86_64-unknown-linux-gnu/release/pgo-reproducer Then I do get profiles in |
Because maybe it is useful to debug this: ❯ mold --version
mold 2.31.0 (20fa8d56f5e0c47d1f4bbf7b829c12d3f43298e1; compatible with GNU ld)
❯ clang --version
clang version 17.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin |
Ah, this might be the weird interaction of trying to combine multiple sources of RUSTFLAGS (#49). I'll try to take a look later. |
Right, so the issue is that |
I seem to remember I did that to fix some issue involving cross compilation with cross-rs. Or maybe it was embedded cross compiling to ESP32 (I have done both). That said, I would expect such flags to be appending rather than over writing, that is a bit of a footgun. |
Yeah, that's sadly a cargo issue (rust-lang/cargo#5376). |
Having similar issue. [profile.release]
codegen-units = 1
lto = "fat"
panic = "abort"
strip = false
debug = 1 |
Do you perhaps have a |
Since Lines 157 to 167 in 4f69cbb
couldn't the PGO flags be passed as Since linker flags are target dependent, moving them to |
Ah, that's a good point! I thought that it would just override the target rustflags, but it actually appends to them, so that could work. I'll try to take a look at it once I have a bit of time. |
I'm not sure what's preferable, the specific target or the With the latter things work almost just as before, so this patch is enough: diff --git a/src/build.rs b/src/build.rs
index 7daf3016a06e..f8765eec2511 100644
--- a/src/build.rs
+++ b/src/build.rs
@@ -93,10 +93,11 @@ pub fn cargo_command_with_rustflags(
(true, _) => {
// If there's no RUSTFLAGS, and Cargo supports `--config`, use it.
// The user might have some flags in their config.toml file(s), and
- // `--config build.rustflags` will append to it instead of overwriting it.
+ // `--config target.*.rustflags` will append to it instead of overwriting it.
final_cargo_args.push("--config".to_string());
- let mut flags = String::from("build.rustflags=[");
+ // `cfg(all())` always matches the current target.
+ let mut flags = String::from("target.'cfg(all())'.rustflags=[");
for (index, flag) in rustflags.into_iter().enumerate() {
if index > 0 {
flags.push(','); But maybe specifying the target would be more understandable, given that's needed anyway when setting |
That's a cool trick, I didn't know about that. I think that |
Ok, it seems to work. But, of course, this only moves the issue to a different place. Because now if you have Either target flags override PGO, or PGO overrides build flags. But maybe target flags are used more commonly, so it makes sense? |
Seems to be about the same, although this doesn't check I guess it might make more sense for |
Can you try if this PR works for you? $ cargo install --git https://github.com/kobzol/cargo-pgo --branch use-target-rustflags |
Yeap : )
I would expect target rustflags to be more common, but some people may prefer build rustflags (even when target rustflags may otherwise be a better choice) because they are simpler to set up, especially without the Perhaps defaulting to target rustflags, with an option (command-line or environment) to switch build rustflags? I'll try the PR in a bit, thanks! |
This also happens on a much larger program, but I thought a small test case that didn't depend on running on either Arch Linux or Debian specifically would be useful.
The reason I'm trying to use nightly is that I want to use this together with
cargo-remark
, which complains if I don't use nightly. But it just doesn't seem to work. But the same seems to happen on stable 1.78.System info:
The text was updated successfully, but these errors were encountered: