|
3 | 3 | This is a very high-level overview of the Cargo codebase.
|
4 | 4 |
|
5 | 5 | * [`src/bin/cargo`](https://github.com/rust-lang/cargo/tree/master/src/bin/cargo)
|
6 |
| - — Cargo is split in a library and a binary. This is the binary side that |
| 6 | + --- Cargo is split in a library and a binary. This is the binary side that |
7 | 7 | handles argument parsing, and then calls into the library to perform the
|
8 | 8 | appropriate subcommand. Each Cargo subcommand is a separate module here. See
|
9 | 9 | [SubCommands](subcommands.md).
|
10 | 10 |
|
11 | 11 | * [`src/cargo/ops`](https://github.com/rust-lang/cargo/tree/master/src/cargo/ops)
|
12 |
| - — Every major operation is implemented here. This is where the binary CLI |
| 12 | + --- Every major operation is implemented here. This is where the binary CLI |
13 | 13 | usually calls into to perform the appropriate action.
|
14 | 14 |
|
15 | 15 | * [`src/cargo/ops/cargo_compile/mod.rs`](https://github.com/rust-lang/cargo/blob/master/src/cargo/ops/cargo_compile/mod.rs)
|
16 |
| - — This is the entry point for all the compilation commands. This is a |
| 16 | + --- This is the entry point for all the compilation commands. This is a |
17 | 17 | good place to start if you want to follow how compilation starts and
|
18 | 18 | flows to completion.
|
19 | 19 |
|
20 | 20 | * [`src/cargo/core/resolver`](https://github.com/rust-lang/cargo/tree/master/src/cargo/core/resolver)
|
21 |
| - — This is the dependency and feature resolvers. |
| 21 | + --- This is the dependency and feature resolvers. |
22 | 22 |
|
23 | 23 | * [`src/cargo/core/compiler`](https://github.com/rust-lang/cargo/tree/master/src/cargo/core/compiler)
|
24 |
| - — This is the code responsible for running `rustc` and `rustdoc`. |
| 24 | + --- This is the code responsible for running `rustc` and `rustdoc`. |
25 | 25 |
|
26 | 26 | * [`src/cargo/core/compiler/build_context/mod.rs`](https://github.com/rust-lang/cargo/blob/master/src/cargo/core/compiler/build_context/mod.rs)
|
27 |
| - — The `BuildContext` is the result of the "front end" of the build |
| 27 | + --- The `BuildContext` is the result of the "front end" of the build |
28 | 28 | process. This contains the graph of work to perform and any settings
|
29 | 29 | necessary for `rustc`. After this is built, the next stage of building
|
30 | 30 | is handled in `Context`.
|
31 | 31 |
|
32 | 32 | * [`src/cargo/core/compiler/context`](https://github.com/rust-lang/cargo/blob/master/src/cargo/core/compiler/context/mod.rs)
|
33 |
| - — The `Context` is the mutable state used during the build process. This |
| 33 | + --- The `Context` is the mutable state used during the build process. This |
34 | 34 | is the core of the build process, and everything is coordinated through
|
35 | 35 | this.
|
36 | 36 |
|
37 | 37 | * [`src/cargo/core/compiler/fingerprint.rs`](https://github.com/rust-lang/cargo/blob/master/src/cargo/core/compiler/fingerprint.rs)
|
38 |
| - — The `fingerprint` module contains all the code that handles detecting |
| 38 | + --- The `fingerprint` module contains all the code that handles detecting |
39 | 39 | if a crate needs to be recompiled.
|
40 | 40 |
|
41 | 41 | * [`src/cargo/core/source`](https://github.com/rust-lang/cargo/tree/master/src/cargo/core/source)
|
42 |
| - — The `Source` trait is an abstraction over different sources of packages. |
| 42 | + --- The `Source` trait is an abstraction over different sources of packages. |
43 | 43 | Sources are uniquely identified by a `SourceId`. Sources are implemented in
|
44 | 44 | the
|
45 | 45 | [`src/cargo/sources`](https://github.com/rust-lang/cargo/tree/master/src/cargo/sources)
|
46 | 46 | directory.
|
47 | 47 |
|
48 | 48 | * [`src/cargo/util`](https://github.com/rust-lang/cargo/tree/master/src/cargo/util)
|
49 |
| - — This directory contains generally-useful utility modules. |
| 49 | + --- This directory contains generally-useful utility modules. |
50 | 50 |
|
51 | 51 | * [`src/cargo/util/config`](https://github.com/rust-lang/cargo/tree/master/src/cargo/util/config)
|
52 |
| - — This directory contains the config parser. It makes heavy use of |
| 52 | + --- This directory contains the config parser. It makes heavy use of |
53 | 53 | [serde](https://serde.rs/) to merge and translate config values. The
|
54 | 54 | `Config` is usually accessed from the
|
55 | 55 | [`Workspace`](https://github.com/rust-lang/cargo/blob/master/src/cargo/core/workspace.rs),
|
56 | 56 | though references to it are scattered around for more convenient access.
|
57 | 57 |
|
58 | 58 | * [`src/cargo/util/toml`](https://github.com/rust-lang/cargo/tree/master/src/cargo/util/toml)
|
59 |
| - — This directory contains the code for parsing `Cargo.toml` files. |
| 59 | + --- This directory contains the code for parsing `Cargo.toml` files. |
60 | 60 |
|
61 | 61 | * [`src/cargo/ops/lockfile.rs`](https://github.com/rust-lang/cargo/blob/master/src/cargo/ops/lockfile.rs)
|
62 |
| - — This is where `Cargo.lock` files are loaded and saved. |
| 62 | + --- This is where `Cargo.lock` files are loaded and saved. |
63 | 63 |
|
64 | 64 | * [`src/doc`](https://github.com/rust-lang/cargo/tree/master/src/doc)
|
65 |
| - — This directory contains Cargo's documentation and man pages. |
| 65 | + --- This directory contains Cargo's documentation and man pages. |
66 | 66 |
|
67 | 67 | * [`src/etc`](https://github.com/rust-lang/cargo/tree/master/src/etc)
|
68 |
| - — These are files that get distributed in the `etc` directory in the Rust release. |
| 68 | + --- These are files that get distributed in the `etc` directory in the Rust release. |
69 | 69 | The man pages are auto-generated by a script in the `src/doc` directory.
|
70 | 70 |
|
71 | 71 | * [`crates`](https://github.com/rust-lang/cargo/tree/master/crates)
|
72 |
| - — A collection of independent crates used by Cargo. |
| 72 | + --- A collection of independent crates used by Cargo. |
73 | 73 |
|
74 | 74 | ## Extra crates
|
75 | 75 |
|
76 | 76 | Some functionality is split off into separate crates, usually in the
|
77 | 77 | [`crates`](https://github.com/rust-lang/cargo/tree/master/crates) directory.
|
78 | 78 |
|
79 | 79 | * [`cargo-platform`](https://github.com/rust-lang/cargo/tree/master/crates/cargo-platform)
|
80 |
| - — This library handles parsing `cfg` expressions. |
| 80 | + --- This library handles parsing `cfg` expressions. |
81 | 81 | * [`cargo-test-macro`](https://github.com/rust-lang/cargo/tree/master/crates/cargo-test-macro)
|
82 |
| - — This is a proc-macro used by the test suite to define tests. More |
| 82 | + --- This is a proc-macro used by the test suite to define tests. More |
83 | 83 | information can be found at [`cargo_test`
|
84 | 84 | attribute](../tests/writing.md#cargo_test-attribute).
|
85 | 85 | * [`cargo-test-support`](https://github.com/rust-lang/cargo/tree/master/crates/cargo-test-support)
|
86 |
| - — This contains a variety of code to support [writing |
| 86 | + --- This contains a variety of code to support [writing |
87 | 87 | tests](../tests/writing.md).
|
88 | 88 | * [`cargo-util`](https://github.com/rust-lang/cargo/tree/master/crates/cargo-util)
|
89 |
| - — This contains general utility code that is shared between cargo and the |
| 89 | + --- This contains general utility code that is shared between cargo and the |
90 | 90 | testsuite.
|
91 | 91 | * [`crates-io`](https://github.com/rust-lang/cargo/tree/master/crates/crates-io)
|
92 |
| - — This contains code for accessing the crates.io API. |
| 92 | + --- This contains code for accessing the crates.io API. |
93 | 93 | * [`credential`](https://github.com/rust-lang/cargo/tree/master/crates/credential)
|
94 |
| - — This subdirectory contains several packages for implementing the |
| 94 | + --- This subdirectory contains several packages for implementing the |
95 | 95 | experimental
|
96 | 96 | [credential-process](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#credential-process)
|
97 | 97 | feature.
|
98 |
| -* [`home`](https://github.com/rust-lang/cargo/tree/master/crates/home) — This library is shared between cargo and rustup and is used for finding their home directories. |
| 98 | +* [`home`](https://github.com/rust-lang/cargo/tree/master/crates/home) --- This library is shared between cargo and rustup and is used for finding their home directories. |
99 | 99 | This is not directly depended upon with a `path` dependency; cargo uses the version from crates.io.
|
100 | 100 | It is intended to be versioned and published independently of Rust's release system.
|
101 | 101 | Whenever a change needs to be made, bump the version in Cargo.toml and `cargo publish` it manually, and then update cargo's `Cargo.toml` to depend on the new version.
|
102 |
| -* [`mdman`](https://github.com/rust-lang/cargo/tree/master/crates/mdman) — |
103 |
| - This is a utility for generating cargo's man pages. See [Building the man |
| 102 | +* [`mdman`](https://github.com/rust-lang/cargo/tree/master/crates/mdman) |
| 103 | + --- This is a utility for generating cargo's man pages. See [Building the man |
104 | 104 | pages](https://github.com/rust-lang/cargo/tree/master/src/doc#building-the-man-pages)
|
105 | 105 | for more information.
|
106 | 106 | * [`resolver-tests`](https://github.com/rust-lang/cargo/tree/master/crates/resolver-tests)
|
107 |
| - — This is a dedicated package that defines tests for the [dependency |
| 107 | + --- This is a dedicated package that defines tests for the [dependency |
108 | 108 | resolver](../architecture/packages.md#resolver).
|
0 commit comments