Skip to content

Re-organize build-dir by package + hash, rather than artifact type #15010

Open
@epage

Description

@epage

note: I specify build-dir to clarify which half of #14125 I'm referring to. The files and layout of build-dir does not have compatibility guarantees (source).

Currently, build-dir is laid out like

  • target/
    • <target-platform>/?
      • <profile>/
        • incremental/
        • build/
          • <package>-<hash>/
            • build*script-*
        • deps/
          • <package>-<hash>*

Currently,

  • cargo clean -p <package> will operate on everything for <package>

In the future, we could have

These could be aided by re-arranging the build-dir to be organized around <package>-<hash>, like

  • target/
    • <target-platform>/?
      • <profile>/
        • incremental/
        • build/
          • <package>-<hash>/
            • build*script-*
            • *.d

Side effects

  • We'll have to change how we invoke rustc which will increase the length of the command-line
    • Currently, we blindly point rustc at deps/ and rustc finds the files it needs. We'll instead need to point to each individual artifact rustc may need.

Open questions

  • Transition plan: while build-dir isn't stable, enough tools rely on the layout that we'd want to setup a transition plan so they can have time to test against the new layout and work to support both
  • What do we call the directory? I said build/ as its all encompassing
  • Can the old build/ and deps/ content live in the same place?
  • How should we handle incremental/?
  • Can we share across <profile> at least?
    • <hash> is the -C extra-filename hash and doesn't encompass all of fingerprinting, so we'd need to audit if there are cases that don't change the hash that we'd stil need per-profile
    • Changing of local source is one example, so at least local packages still need to be scoped by profile

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-layoutArea: target output directory layout, naming, and organizationC-cleanupCategory: cleanup within the codebaseS-needs-designStatus: Needs someone to work further on the design for the feature or fix. NOT YET accepted.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions