Skip to content

feat(hints): support minimum optimization levels - #17368

Open
0xPoe wants to merge 3 commits into
rust-lang:masterfrom
0xPoe:hint-min-opt-level
Open

feat(hints): support minimum optimization levels#17368
0xPoe wants to merge 3 commits into
rust-lang:masterfrom
0xPoe:hint-min-opt-level

Conversation

@0xPoe

@0xPoe 0xPoe commented Aug 16, 2026

Copy link
Copy Markdown
Member

View all comments

What does this PR try to resolve?

ref #17334

This PR would allow Rust library to provide a simple hint about the minimum opt-level to build them with via the hint.min-opt-level setting in the manifest.

How to test and review this PR?

Check the unit tests and review it commit by commit.

r?@ghost

@0xPoe 0xPoe changed the title feat(hints): support minimum optimization levels WIP: feat(hints): support minimum optimization levels Aug 16, 2026
@0xPoe 0xPoe changed the title WIP: feat(hints): support minimum optimization levels WIP(Not Ready For Review): feat(hints): support minimum optimization levels Aug 16, 2026
@rustbot rustbot added A-build-execution Area: anything dealing with executing the compiler A-cargo-targets Area: selection and definition of targets (lib, bins, examples, tests, benches) A-documenting-cargo-itself Area: Cargo's documentation A-manifest Area: Cargo.toml issues A-profiles Area: profiles A-unstable Area: nightly unstable support labels Aug 18, 2026
@0xPoe
0xPoe force-pushed the hint-min-opt-level branch 7 times, most recently from b532a3f to 2b19c48 Compare August 21, 2026 07:18

@0xPoe 0xPoe left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

🔢 Self-check (PR reviewed by myself and ready for feedback)

  • Code compiles successfully

  • Unit tests added

  • No AI-generated elegant nonsense in PR.

  • Comments added where necessary

  • PR title and description updated

  • Documentation updated

  • PR size is reasonable

r?@joshtriplett

View changes since this review

Comment thread crates/cargo-util-schemas/Cargo.toml
Comment thread crates/cargo-util-schemas/manifest.schema.json
Comment thread src/workspace/profiles.rs
@0xPoe 0xPoe changed the title WIP(Not Ready For Review): feat(hints): support minimum optimization levels feat(hints): support minimum optimization levels Aug 21, 2026
@0xPoe
0xPoe marked this pull request as ready for review August 21, 2026 07:20
@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
via `profile`, which takes precedence, and which can only be specified in the
top-level crate being built.

## Package `min-opt-level` hint

@epage epage Aug 21, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can you have a subsection that is written as-if it was the end-user documentation?

View changes since the review

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Could you give an example of the kind of end-user documentation you expect? What should it include? I thought the current document already covered the basic usage and examples.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm not just looking for how well it is explain but find it helpful to literally have the docs that will go into any guide or reference section written out in the Unstable chapter with asides saying where they will go. I generally ask for this to be written in the RFC but seemed to have overlooked it in this case.

For example, will the docs live under https://doc.rust-lang.org/cargo/reference/manifest.html?highlight=hint#the-hints-section ? What will the heading be? How do we want to organize these?

Comment thread doc/book/src/reference/unstable.md
Comment thread src/compiler/mod.rs Outdated
Comment thread src/workspace/profiles.rs
Comment thread tests/testsuite/hints.rs
Comment thread tests/testsuite/hints.rs
Comment thread tests/testsuite/hints.rs
@rustbot

This comment has been minimized.

@0xPoe
0xPoe force-pushed the hint-min-opt-level branch 2 times, most recently from 14ab0ce to 415812c Compare August 26, 2026 07:53
@rustbot

This comment has been minimized.

@0xPoe
0xPoe force-pushed the hint-min-opt-level branch from 415812c to aaf6533 Compare August 26, 2026 07:56
@0xPoe
0xPoe marked this pull request as draft August 26, 2026 07:59
@rustbot rustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 26, 2026
@0xPoe 0xPoe added the S-waiting-on-author Status: The marked PR is awaiting some action (such as code changes) from the PR author. label Aug 26, 2026
@0xPoe
0xPoe force-pushed the hint-min-opt-level branch 3 times, most recently from 18f313e to ff1b273 Compare August 27, 2026 06:56
@0xPoe
0xPoe marked this pull request as ready for review August 27, 2026 07:09
@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 27, 2026
@0xPoe
0xPoe requested a review from epage August 27, 2026 07:29
@rustbot

This comment has been minimized.

0xPoe added 3 commits August 30, 2026 14:22
Record the current ignored-hint behavior across
the RFC precedence, scope, validation, and boundary cases.

Signed-off-by: 0xPoe <poe.liu@pm.me>
RFC 3924 lets a package request a numeric optimization floor without
overriding an application's profile choices. Apply the hint after
profile and built-in host defaults but before explicit package
and build overrides, while leaving the unordered size levels unchanged.

Signed-off-by: 0xPoe <poe.liu@pm.me>
Document the unstable gate, accepted range, profile precedence,
non-recursive
scope, and the narrow cases where packages should request optimization.
Include an explicit debugging override so top-level users retain
control.

Signed-off-by: 0xPoe <poe.liu@pm.me>
@0xPoe
0xPoe force-pushed the hint-min-opt-level branch from ff1b273 to b9ea4de Compare August 30, 2026 12:29
@rustbot

rustbot commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different master 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.

@rustbot

rustbot commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (possibly #17424) made this pull request unmergeable. Please resolve the merge conflicts.

Comment on lines +19 to +39
let warn = |message: &str| {
gctx.shell()
.warn(format!("{}@{}: {message}", pkg.name(), pkg.version()))
};
let min_opt_level = match parse_min_opt_level_hint(
pkg.hints().and_then(|hints| hints.min_opt_level.as_ref()),
) {
Ok(level) => level,
Err(MinOptLevelHintError::OutOfRange(level)) => {
warn(&format!(
"ignoring unsupported value ({level}) for 'hints.min-opt-level', which only supports integers from 0 to 3"
))?;
None
}
Err(MinOptLevelHintError::WrongType(value_type)) => {
warn(&format!(
"ignoring unsupported value type ({value_type}) for 'hints.min-opt-level', which expects an integer"
))?;
None
}
};

@epage epage Sep 2, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

If we're keeping these long term, let's render them "correctly" using annotate-snippets

View changes since the review

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

Labels

A-build-execution Area: anything dealing with executing the compiler A-cargo-targets Area: selection and definition of targets (lib, bins, examples, tests, benches) A-documenting-cargo-itself Area: Cargo's documentation A-manifest Area: Cargo.toml issues A-profiles Area: profiles A-unstable Area: nightly unstable support S-waiting-on-author Status: The marked PR is awaiting some action (such as code changes) from the PR author. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants