Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 2 additions & 68 deletions src/cargo/core/features.rs
Original file line number Diff line number Diff line change
Expand Up @@ -814,7 +814,7 @@ macro_rules! unstable_cli_options {
/// Cargo, like `rustc`, accepts a suite of `-Z` flags which are intended for
/// gating unstable functionality to Cargo. These flags are only available on
/// the nightly channel of Cargo.
#[derive(Debug, Deserialize)]
#[derive(Default, Debug, Deserialize)]
#[serde(default, rename_all = "kebab-case")]
pub struct CliUnstable {
$(
Expand Down Expand Up @@ -852,70 +852,6 @@ macro_rules! unstable_cli_options {
}
}

// TODO: Move this back to derive(Default) once `build_dir_new_layout` is stabilized and the old
// layout has been removed.
impl Default for CliUnstable {
fn default() -> Self {
Self {
build_dir_new_layout: !is_new_build_dir_layout_opt_out(),

allow_features: Default::default(),
print_im_a_teapot: Default::default(),
advanced_env: Default::default(),
any_build_script_metadata: Default::default(),
asymmetric_token: Default::default(),
avoid_dev_deps: Default::default(),
binary_dep_depinfo: Default::default(),
bindeps: Default::default(),
build_analysis: Default::default(),
build_std: Default::default(),
build_std_features: Default::default(),
cargo_lints: Default::default(),
checksum_freshness: Default::default(),
codegen_backend: Default::default(),
direct_minimal_versions: Default::default(),
dual_proc_macros: Default::default(),
feature_unification: Default::default(),
features: Default::default(),
fine_grain_locking: Default::default(),
fix_edition: Default::default(),
gc: Default::default(),
git: Default::default(),
gitoxide: Default::default(),
hint_msrv: Default::default(),
host_config: Default::default(),
json_target_spec: Default::default(),
min_publish_age: Default::default(),
minimal_versions: Default::default(),
msrv_policy: Default::default(),
mtime_on_use: Default::default(),
next_lockfile_bump: Default::default(),
no_embed_metadata: Default::default(),
no_index_update: Default::default(),
panic_abort_tests: Default::default(),
panic_immediate_abort: Default::default(),
profile_hint_mostly_unused: Default::default(),
profile_rustflags: Default::default(),
public_dependency: Default::default(),
publish_timeout: Default::default(),
root_dir: Default::default(),
rustc_unicode: Default::default(),
rustdoc_depinfo: Default::default(),
rustdoc_map: Default::default(),
rustdoc_mergeable_info: Default::default(),
rustdoc_scrape_examples: Default::default(),
sbom: Default::default(),
script: Default::default(),
section_timings: Default::default(),
separate_nightlies: Default::default(),
skip_rustdoc_fingerprint: Default::default(),
target_applies_to_host: Default::default(),
trim_paths: Default::default(),
unstable_options: Default::default(),
}
}
}

unstable_cli_options!(
// Permanently unstable features:
allow_features: Option<AllowFeatures> = ("Allow *only* the listed unstable features"),
Expand Down Expand Up @@ -1069,8 +1005,6 @@ const STABILIZED_LOCKFILE_PATH: &str = "The `lockfile-path` config key is now al

const STABILIZED_WARNINGS: &str = "The `build.warnings` config key is now always available";

const STABILIZED_BUILD_DIR_NEW_LAYOUT: &str = "build.build-dir-new-layout is now always enabled.";

fn deserialize_comma_separated_list<'de, D>(
deserializer: D,
) -> Result<Option<Vec<String>>, D::Error>
Expand Down Expand Up @@ -1467,7 +1401,6 @@ impl CliUnstable {
"config-include" => stabilized_warn(k, "1.93", STABILIZED_CONFIG_INCLUDE),
"lockfile-path" => stabilized_warn(k, "1.97", STABILIZED_LOCKFILE_PATH),
"warnings" => stabilized_warn(k, "1.97", STABILIZED_WARNINGS),
"build-dir-new-layout" => stabilized_warn(k, "1.99", STABILIZED_BUILD_DIR_NEW_LAYOUT),

// Unstable features
// Sorted alphabetically:
Expand All @@ -1478,6 +1411,7 @@ impl CliUnstable {
"binary-dep-depinfo" => self.binary_dep_depinfo = parse_empty(k, v)?,
"bindeps" => self.bindeps = parse_empty(k, v)?,
"build-analysis" => self.build_analysis = parse_empty(k, v)?,
"build-dir-new-layout" => self.build_dir_new_layout = parse_empty(k, v)?,
"build-std" => self.build_std = Some(parse_list(v)),
"build-std-features" => self.build_std_features = Some(parse_list(v)),
"cargo-lints" => self.cargo_lints = parse_empty(k, v)?,
Expand Down
7 changes: 3 additions & 4 deletions src/doc/src/reference/build-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,9 @@ change. Some of these directories are:

Directory | Description
----------|------------
<code style="white-space: nowrap">\<build-dir>/debug/deps/</code> | Dependencies and other artifacts.
<code style="white-space: nowrap">\<build-dir>/debug/incremental/</code> | `rustc` [incremental output], a cache used to speed up subsequent builds.
<code style="white-space: nowrap">\<build-dir>/debug/build/</code> | Build step results including compilation artifacts and [build script] output.

> **Note**: The build-dir layout was changed in Cargo 1.99.0, thus prior versions use a different layout. (see [#15010](https://github.com/rust-lang/cargo/issues/15010))
<code style="white-space: nowrap">\<build-dir>/debug/build/</code> | Output from [build scripts].

## Dep-info files

Expand Down Expand Up @@ -108,7 +107,7 @@ configuration][config]. Refer to sccache documentation for more details.
[`cargo doc`]: ../commands/cargo-doc.md
[`cargo package`]: ../commands/cargo-package.md
[`cargo publish`]: ../commands/cargo-publish.md
[build script]: ../reference/build-scripts.md
[build scripts]: ../reference/build-scripts.md
[config]: ../reference/config.md
[def-workspace]: ../appendix/glossary.md#workspace '"workspace" (glossary entry)'
[target]: ../appendix/glossary.md#target '"target" (glossary entry)'
Expand Down
13 changes: 9 additions & 4 deletions src/doc/src/reference/unstable.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ Each new feature described below should explain how to use it.
* [min-publish-age](#min-publish-age) --- Filters out dependency versions published more recently than a configured minimum age.
* Output behavior
* [artifact-dir](#artifact-dir) --- Adds a directory where artifacts are copied to.
* [build-dir-new-layout](#build-dir-new-layout) --- Enables the new build-dir filesystem layout
* [Different binary name](#different-binary-name) --- Assign a name to the built binary that is separate from the crate name.
* [root-dir](#root-dir) --- Controls the root directory relative to which paths are printed
* Compile behavior
Expand Down Expand Up @@ -1963,6 +1964,14 @@ The following commands are available under `-Zbuild-analysis`:
- `cargo report rebuilds` --- Reports why crates were rebuilt,
helping diagnose unexpected recompilations.

## build-dir-new-layout

* Tracking Issue: [#15010](https://github.com/rust-lang/cargo/issues/15010)

Enables the new build-dir filesystem layout.
This layout change unblocks work towards caching and locking improvements.


## compile-time-deps

This permanently-unstable flag to only build proc-macros and build scripts (and their required dependencies),
Expand Down Expand Up @@ -2428,7 +2437,3 @@ Support for `resolver.lockfile-path` config field has been stabilized in Rust 1.
## warnings

The `build.warnings` config field has been stabilized in Rust 1.97.

## build-dir-new-layout

The new build-dir filesystem layout was stabilized in the 1.99.0 release.
14 changes: 7 additions & 7 deletions tests/build-std/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ fn basic() {
[COMPILING] [..]
...
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/lib.rs (target/[HOST_TARGET]/debug/build/foo/[HASH]/out/foo-[HASH])
[RUNNING] unittests src/main.rs (target/[HOST_TARGET]/debug/build/foo/[HASH]/out/foo-[HASH])
[RUNNING] tests/smoke.rs (target/[HOST_TARGET]/debug/build/foo/[HASH]/out/smoke-[HASH])
[RUNNING] unittests src/lib.rs (target/[HOST_TARGET]/debug/deps/foo-[HASH])
[RUNNING] unittests src/main.rs (target/[HOST_TARGET]/debug/deps/foo-[HASH])
[RUNNING] tests/smoke.rs (target/[HOST_TARGET]/debug/deps/smoke-[HASH])
[DOCTEST] foo

"#]])
Expand All @@ -180,9 +180,9 @@ fn basic() {
let deps_dir = Path::new("target")
.join(rustc_host())
.join("debug")
.join("build");
assert!(p.glob(deps_dir.join("**/*.rlib")).count() > 0);
assert_eq!(p.glob(deps_dir.join("**/*.dylib")).count(), 0);
.join("deps");
assert!(p.glob(deps_dir.join("*.rlib")).count() > 0);
assert_eq!(p.glob(deps_dir.join("*.dylib")).count(), 0);
}

#[cargo_test(build_std_real)]
Expand Down Expand Up @@ -432,7 +432,7 @@ fn test_proc_macro() {
...
[COMPILING] foo v0.0.0 ([ROOT]/foo)
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/lib.rs (target/debug/build/foo/[HASH]/out/foo-[HASH])
[RUNNING] unittests src/lib.rs (target/debug/deps/foo-[HASH])

"#]])
.run();
Expand Down
66 changes: 31 additions & 35 deletions tests/testsuite/artifact_dep.rs
Original file line number Diff line number Diff line change
Expand Up @@ -620,25 +620,25 @@ fn build_script_with_bin_artifacts() {
assert_e2e().eq(
&build_script_output,
str![[r#"
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin/baz[EXE]
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/staticlib/bar-[HASH].lib
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/cdylib/bar.dll
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin/bar[EXE]
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin/bar[EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin/baz[EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/staticlib/bar-[HASH].lib
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/cdylib/bar.dll
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin/bar[EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin/bar[EXE]

"#]],
);
} else {
assert_e2e().eq(
&build_script_output,
str![[r#"
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin/baz[EXE]
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/staticlib/libbar-[HASH].a
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/cdylib/[..]bar.[..]
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin/bar[EXE]
[ROOT]/foo/target/debug/build/bar/[HASH]/artifact/bin/bar[EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin/baz-[HASH][EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/staticlib/libbar-[HASH].a
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/cdylib/[..]bar.[..]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin/bar-[HASH][EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-[HASH]/bin/bar-[HASH][EXE]

"#]],
);
Expand Down Expand Up @@ -810,17 +810,17 @@ fn build_script_with_selected_dashed_bin_artifact_and_lib_true() {
assert_e2e().eq(
&build_script_output,
str![[r#"
[ROOT]/foo/target/debug/build/bar-baz/[HASH]/artifact/bin
[ROOT]/foo/target/debug/build/bar-baz/[HASH]/artifact/bin/baz_suffix[EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-baz-[HASH]/bin
[ROOT]/foo/target/debug/deps/artifact/bar-baz-[HASH]/bin/baz_suffix[EXE]

"#]],
);
} else {
assert_e2e().eq(
&build_script_output,
str![[r#"
[ROOT]/foo/target/debug/build/bar-baz/[HASH]/artifact/bin
[ROOT]/foo/target/debug/build/bar-baz/[HASH]/artifact/bin/baz_suffix[EXE]
[ROOT]/foo/target/debug/deps/artifact/bar-baz-[HASH]/bin
[ROOT]/foo/target/debug/deps/artifact/bar-baz-[HASH]/bin/baz_suffix-[HASH][EXE]

"#]],
);
Expand All @@ -830,7 +830,7 @@ fn build_script_with_selected_dashed_bin_artifact_and_lib_true() {
!p.bin("bar").is_file(),
"artifacts are located in their own directory, exclusively, and won't be lifted up"
);
assert_artifact_executable_output(&p, "debug", "bar-baz", "baz_suffix");
assert_artifact_executable_output(&p, "debug", "bar", "baz_suffix");
}

#[cargo_test]
Expand Down Expand Up @@ -900,7 +900,7 @@ fn lib_with_selected_dashed_bin_artifact_and_lib_true() {
!p.bin("bar").is_file(),
"artifacts are located in their own directory, exclusively, and won't be lifted up"
);
assert_artifact_executable_output(&p, "debug", "bar-baz", "baz_suffix");
assert_artifact_executable_output(&p, "debug", "bar", "baz_suffix");
}

#[cargo_test]
Expand Down Expand Up @@ -943,7 +943,7 @@ fn allow_artifact_and_no_artifact_dep_to_same_package_within_different_dep_categ
[COMPILING] bar v0.5.0 ([ROOT]/foo/bar)
[COMPILING] foo v0.0.0 ([ROOT]/foo)
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/lib.rs (target/debug/build/foo/[HASH]/out/foo-[HASH][EXE])
[RUNNING] unittests src/lib.rs (target/debug/deps/foo-[HASH][EXE])
[DOCTEST] foo

"#]])
Expand Down Expand Up @@ -1292,7 +1292,7 @@ fn cross_doctests_works_with_artifacts() {
[COMPILING] bar v0.5.0 ([ROOT]/foo/bar)
[COMPILING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/lib.rs (target/[HOST_TARGET]/debug/build/foo/[HASH]/out/foo-[HASH][EXE])
[RUNNING] unittests src/lib.rs (target/[HOST_TARGET]/debug/deps/foo-[HASH][EXE])
[DOCTEST] foo

"#]])
Expand All @@ -1316,7 +1316,7 @@ fn cross_doctests_works_with_artifacts() {
[RUNNING] `rustc --crate-name foo [..]
[RUNNING] `rustc --crate-name foo [..]
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] `[ROOT]/foo/target/[ALT_TARGET]/debug/build/foo/[HASH]/out/foo-[HASH][EXE]`
[RUNNING] `[ROOT]/foo/target/[ALT_TARGET]/debug/deps/foo-[HASH][EXE]`
[DOCTEST] foo
[RUNNING] `rustdoc [..]--test src/lib.rs --test-run-directory [ROOT]/foo --target [ALT_TARGET] [..]

Expand Down Expand Up @@ -1422,7 +1422,7 @@ fn profile_override_basic() {
[RUNNING] `rustc --crate-name bar --edition=2015 bar/src/lib.rs [..] -C opt-level=1 [..]`
[RUNNING] `rustc --crate-name bar --edition=2015 bar/src/lib.rs [..] -C opt-level=3 [..]`
[RUNNING] `rustc --crate-name foo [..] -C opt-level=3 [..]`
[RUNNING] `[ROOT]/foo/target/debug/build/foo/[HASH]/out/build_script_build`
[RUNNING] `[ROOT]/foo/target/debug/build/foo-[HASH]/build-script-build`
[FINISHED] `dev` profile [optimized + debuginfo] target(s) in [ELAPSED]s
[COMPILING] foo v0.0.1 ([ROOT]/foo)

Expand Down Expand Up @@ -2207,8 +2207,8 @@ fn env_vars_and_build_products_for_various_build_targets() {
[COMPILING] bar v0.5.0 ([ROOT]/foo/bar)
[COMPILING] foo v0.0.0 ([ROOT]/foo)
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/lib.rs (target/debug/build/foo/[HASH]/out/foo-[HASH][EXE])
[RUNNING] tests/main.rs (target/debug/build/foo/[HASH]/out/main-[HASH][EXE])
[RUNNING] unittests src/lib.rs (target/debug/deps/foo-[HASH][EXE])
[RUNNING] tests/main.rs (target/debug/deps/main-[HASH][EXE])
[DOCTEST] foo

"#]])
Expand Down Expand Up @@ -2416,11 +2416,7 @@ fn doc_lib_true() {

// Verify that it emits rmeta for the bin and lib dependency.
assert_eq!(p.glob("target/debug/artifact/*.rlib").count(), 0);
assert_eq!(
p.glob("target/debug/build/bar/*/out/libbar-*.rmeta")
.count(),
2
);
assert_eq!(p.glob("target/debug/deps/libbar-*.rmeta").count(), 2);

p.cargo("doc -Z bindeps")
.masquerade_as_nightly_cargo(&["bindeps"])
Expand Down Expand Up @@ -2512,7 +2508,7 @@ fn assert_artifact_executable_output(
if cfg!(target_env = "msvc") {
assert_eq!(
p.glob(format!(
"target/{}/build/{}/*/artifact/bin/{}{}",
"target/{}/deps/artifact/{}-*/bin/{}{}",
target_name,
dep_name,
bin_name,
Expand All @@ -2525,7 +2521,7 @@ fn assert_artifact_executable_output(
} else {
assert_eq!(
p.glob(format!(
"target/{}/build/{}/*/artifact/bin/{}{}",
"target/{}/deps/artifact/{}-*/bin/{}-*{}",
target_name,
dep_name,
bin_name,
Expand All @@ -2542,7 +2538,7 @@ fn assert_artifact_executable_output(

fn build_script_output_string(p: &Project, package_name: &str) -> String {
let paths = p
.glob(format!("target/debug/build/{}/*/run/stdout", package_name))
.glob(format!("target/debug/build/{}-*/output", package_name))
.collect::<Result<Vec<_>, _>>()
.unwrap();
assert_eq!(paths.len(), 1);
Expand Down Expand Up @@ -2826,7 +2822,7 @@ fn with_assumed_host_target_and_optional_build_dep() {
[COMPILING] d1 v0.0.1 ([ROOT]/foo/d1)
[RUNNING] `rustc --crate-name build_script_build --edition=2021 [..]--crate-type bin[..]
[RUNNING] `rustc --crate-name d1 --edition=2021 [..]--crate-type bin[..]
[RUNNING] `[ROOT]/foo/target/debug/build/foo/[HASH]/out/build_script_build`
[RUNNING] `[ROOT]/foo/target/debug/build/foo-[HASH]/build-script-build`
[RUNNING] `rustc --crate-name foo --edition=2021 [..]--cfg[..]d1[..]
[FINISHED] `dev` profile [..]
[COMPILING] foo v0.0.1 ([ROOT]/foo)
Expand Down Expand Up @@ -3642,7 +3638,7 @@ fn artifact_dep_target_does_not_propagate_to_deps_of_build_script() {
[COMPILING] artifact v0.0.1 ([ROOT]/foo/artifact)
[COMPILING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/main.rs (target/debug/build/foo/[HASH]/out/foo-[HASH][EXE])
[RUNNING] unittests src/main.rs (target/debug/deps/foo-[HASH][EXE])

"#]])
.masquerade_as_nightly_cargo(&["bindeps"])
Expand Down Expand Up @@ -3734,7 +3730,7 @@ fn artifact_dep_target_does_not_propagate_to_proc_macro() {
[COMPILING] artifact v0.0.1 ([ROOT]/foo/artifact)
[COMPILING] foo v0.0.1 ([ROOT]/foo)
[FINISHED] `test` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
[RUNNING] unittests src/main.rs (target/debug/build/foo/[HASH]/out/foo-[HASH][EXE])
[RUNNING] unittests src/main.rs (target/debug/deps/foo-[HASH][EXE])

"#]])
.masquerade_as_nightly_cargo(&["bindeps"])
Expand Down
Loading