Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
215d8ed
combine rust files into one compilation
folkertdev Jul 11, 2025
426091a
update `Cargo.lock`
folkertdev Jul 19, 2025
83804bf
split rust code into crates
folkertdev Jul 11, 2025
3051039
generate arrays of type-erased function pointers
folkertdev Jul 11, 2025
b658b3d
work around not being able to project out of SIMD values any more
folkertdev Jul 22, 2025
4b95bb7
Merge pull request #1881 from folkertdev/s390x-project-simd
sayantn Jul 22, 2025
aaa5d91
remove `lazy_static` dependency from `intrinsic-test`
folkertdev Jul 22, 2025
4bf2151
Merge pull request #1880 from folkertdev/remove-lazy-static-dep
folkertdev Jul 22, 2025
cb27ff0
remove unused deps
klensy Jul 23, 2025
d8bf6c4
bump serde_with. Weird that it works without std feature, but
klensy Jul 23, 2025
75fc5ce
Merge pull request #1882 from klensy/deps
folkertdev Jul 23, 2025
a343926
Prepare for merging from rust-lang/rust
Kobzol Jul 23, 2025
67f73c7
Merge ref '5a30e4307f05' from rust-lang/rust
Kobzol Jul 23, 2025
8f0ffa8
Reformat code
Kobzol Jul 23, 2025
0231fa9
Merge pull request #1883 from Kobzol/pull
folkertdev Jul 23, 2025
be947d4
Add non-temporal note for maskmoveu_si128
197g Jul 24, 2025
14febfa
Merge pull request #1885 from 197g/maskmove-is-non-temporal
sayantn Jul 24, 2025
49ea48d
loongarch: Use unified data types for SIMD intrinsics
heiher Jul 19, 2025
cc15f02
Merge pull request #1879 from heiher/loong-simd-unified-types
folkertdev Jul 25, 2025
f998575
Merge pull request #1863 from folkertdev/combine-rust-files
sayantn Jul 25, 2025
90d97f6
feat: updated Argument<T> type for functional compatibility with other
madhav-madhusoodanan Jul 27, 2025
213fd4e
Merge pull request #1887 from madhav-madhusoodanan/intrinsic-test-arg…
folkertdev Jul 27, 2025
c07f8bb
chore: handling the case where --generate-only flag is passed
madhav-madhusoodanan Jul 27, 2025
15373cc
Merge pull request #1888 from madhav-madhusoodanan/intrinsic-test-gen…
folkertdev Jul 27, 2025
e6c0136
Use GitHub app for authenticating sync workflows
Kobzol Jul 29, 2025
d6c33bf
Merge pull request #1891 from Kobzol/ci-gh-app
tgross35 Jul 29, 2025
8926d9c
Prepare for merging from rust-lang/rust
invalid-email-address Jul 31, 2025
49aa0ec
Merge ref '32e7a4b92b10' from rust-lang/rust
invalid-email-address Jul 31, 2025
f95edbe
move gcc config parsing to parse_inner
Shourya742 Jul 30, 2025
3f9bf57
move dist to parse_inner
Shourya742 Jul 30, 2025
924912c
move target parsing to parse_inner
Shourya742 Jul 30, 2025
89219ff
move install to parse_inner
Shourya742 Jul 30, 2025
3248ff1
move llvm parsing to parse_inner
Shourya742 Jul 30, 2025
ddd2a54
move rust config to parse_inner
Shourya742 Jul 30, 2025
ae05591
Force initializing ExecutionContext with verbosity and fail_fast mode
Shourya742 Jul 30, 2025
82756fd
Extract TOML config loading and src directory computation into separa…
Shourya742 Jul 30, 2025
f89ea08
Split TOML postprocessing into a separate function
Shourya742 Jul 30, 2025
cfc40de
Override some build TOML values by flags
Shourya742 Jul 30, 2025
8652d96
Fix logging of config skip values
Shourya742 Jul 30, 2025
58a38cd
Fix verbosity setting
Shourya742 Jul 30, 2025
222dfcc
add install default implementation
Shourya742 Aug 1, 2025
bbe7c08
add gcc and dist default implementation
Shourya742 Aug 1, 2025
38ddefa
add llvm default implementation
Shourya742 Aug 1, 2025
8b80cb0
add rust default implementation
Shourya742 Aug 1, 2025
d3d3b10
make llvm toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
c008a4b
make gcc toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
4d2a2c2
make dist toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
ad98550
make install toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
2c96132
make build toml fields follow a specific naming convention
Shourya742 Aug 1, 2025
a75326b
move build config to the top of parse method
Shourya742 Aug 1, 2025
39d9cf7
move install config to the top of parse method
Shourya742 Aug 1, 2025
120d93e
move rust config to the top of parse method
Shourya742 Aug 1, 2025
f74f1a0
move llvm config to the top of parse method
Shourya742 Aug 1, 2025
7f20ad8
move dist and gcc config to the top of parse method
Shourya742 Aug 1, 2025
c861fbd
use gcc 15 as the linker on loongarch
folkertdev Aug 2, 2025
56ba98c
Merge pull request #1893 from folkertdev/loongarch-gcc
sayantn Aug 3, 2025
3b216c3
feat: Added another variant of the Constraint enum
madhav-madhusoodanan Aug 2, 2025
daa742a
Merge pull request #1892 from madhav-madhusoodanan/intrinsic-test-con…
folkertdev Aug 3, 2025
c691374
Merge pull request #1889 from rust-lang/rustc-pull
folkertdev Aug 3, 2025
d857d54
Print CGU reuse statistics when `-Zprint-mono-items` is enabled
Kobzol Aug 4, 2025
75e20af
Add new `test::print_merged_doctests_times` used by rustdoc to displa…
GuillaumeGomez Aug 4, 2025
36383dd
[win][arm64ec] Fix msvc-wholearchive for Arm64EC
dpaoliello Aug 5, 2025
76dce27
feat: cleaned the IntrinsicType struct and associated functions.
madhav-madhusoodanan Aug 5, 2025
e84116d
chore: moved chunk_info to `common` and code cleanup
madhav-madhusoodanan Aug 5, 2025
841c8e4
Merge pull request #1895 from madhav-madhusoodanan/intrinsic-test-int…
folkertdev Aug 5, 2025
de01bd3
use `IntoIterator` for the `add_flags` methods
folkertdev Aug 5, 2025
92f195c
Merge pull request #1896 from folkertdev/add-flags-into-iter
sayantn Aug 5, 2025
62c92f3
moved 35 tests to organized locations
Kivooeo Jul 24, 2025
b6e13e3
comments
Kivooeo Jul 24, 2025
962836d
remove redundant _toml suffix and other misc changes
Shourya742 Aug 4, 2025
81ed042
coverage: Remove all unstable support for MC/DC instrumentation
Zalathar Aug 6, 2025
c396521
[codegen] assume the tag, not the relative discriminant
scottmcm Aug 1, 2025
4ff22dd
Move some TypeVisitable/TypeFoldable impls to rustc_type_ir
flodiebold Nov 10, 2024
025fbe8
Add support for shortening `Instance` and use it
estebank Jul 29, 2025
1c428ec
move `type_check` out of `compute_regions`
lcnr Aug 7, 2025
d6dc363
add multiple known-bugs for NLL problem case 3
lqd Aug 7, 2025
e3aae61
add filtering lending iterator known-bug
lqd Aug 7, 2025
202963f
add multiple known-bugs for the linked-list cursor-like pattern of 46…
lqd Aug 7, 2025
6c02653
Prevent name collisions with internal implementation details
bjorn3 Aug 7, 2025
487e5ce
Introduce, implement and use CmResolver.
LorrensP-2158466 Aug 4, 2025
186cef0
Move metadata symbol export from exported_non_generic_symbols to expo…
bjorn3 Aug 7, 2025
29799c2
Add a missing UpcastFrom impl in rustc_type_ir
flodiebold Nov 10, 2024
34e5820
Clean up some resolved test regressions of const trait removals in std
ShoyuVanilla Aug 7, 2025
7ea5e79
Readd myself to review queue
jackh726 Aug 7, 2025
1c41c3d
Add minimal `armv7a-vex-v5` support
lewisfm Aug 7, 2025
8a87857
Add test.
cjgillot Aug 7, 2025
ebd60b9
Do not flatten derefs with ProjectionElem::Index.
cjgillot Aug 7, 2025
cb271d0
Rollup merge of #144400 - Kivooeo:issue3, r=jieyouxu
Zalathar Aug 8, 2025
44ffe10
Rollup merge of #144764 - scottmcm:tweak-impossible-discriminant-assu…
Zalathar Aug 8, 2025
af33da3
Rollup merge of #144807 - Shourya742:2025-07-30-streamline-config, r=…
Zalathar Aug 8, 2025
2b7659c
Rollup merge of #144899 - Kobzol:cgu-reuse, r=saethlin
Zalathar Aug 8, 2025
3f94101
Rollup merge of #144909 - GuillaumeGomez:extend-libtest-for-merged-do…
Zalathar Aug 8, 2025
ecce94c
Rollup merge of #144912 - LorrensP-2158466:smart-resolver, r=petroche…
Zalathar Aug 8, 2025
bdb082b
Rollup merge of #144914 - estebank:short-paths-2, r=fee1-dead
Zalathar Aug 8, 2025
2edfd36
Rollup merge of #144931 - dpaoliello:msvc-wholearchive, r=jieyouxu
Zalathar Aug 8, 2025
562222b
Rollup merge of #144999 - Zalathar:remove-mcdc, r=oli-obk
Zalathar Aug 8, 2025
0d22b2e
Rollup merge of #145009 - jackh726:ra-next-solver-changes, r=compiler…
Zalathar Aug 8, 2025
162e2e4
Rollup merge of #145030 - cjgillot:gvn-no-flatten-index, r=saethlin
Zalathar Aug 8, 2025
6f2d55b
Rollup merge of #145042 - heiher:stdarch-push, r=folkertdev
Zalathar Aug 8, 2025
e4b2fad
Rollup merge of #145047 - lcnr:yeet-mir-typeck, r=lqd
Zalathar Aug 8, 2025
432a4f2
Rollup merge of #145051 - bjorn3:prevent_linkage_symbol_name_collisio…
Zalathar Aug 8, 2025
ab0b90f
Rollup merge of #145053 - lqd:known-bugs, r=jackh726
Zalathar Aug 8, 2025
18f5e9b
Rollup merge of #145055 - bjorn3:move_metadata_symbol_export, r=saethlin
Zalathar Aug 8, 2025
bd7af8a
Rollup merge of #145057 - ShoyuVanilla:const-trait-tests-cleanup, r=p…
Zalathar Aug 8, 2025
9f0a7fe
Rollup merge of #145068 - jackh726:add-review, r=jackh726
Zalathar Aug 8, 2025
f6283ae
Rollup merge of #145070 - vexide:minimal-armv7a-vex-v5, r=wesleywiser
Zalathar Aug 8, 2025
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
Prev Previous commit
Next Next commit
Extract TOML config loading and src directory computation into separa…
…te functions
  • Loading branch information
Shourya742 committed Aug 1, 2025
commit 82756fd5f3b8abfef1838aac86f97ba96ca9612f
206 changes: 117 additions & 89 deletions src/bootstrap/src/core/config/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,11 +453,21 @@ impl Config {
skip_std_check_if_no_download_rustc: flags_skip_std_check_if_no_download_rustc,
} = flags;

// First initialize the bare minimum that we need for further operation - source directory
// and execution context.
let mut config = Config::default_opts();
let exec_ctx = ExecutionContext::new(flags_verbose, flags_cmd.fail_fast());

config.exec_ctx = exec_ctx;

if let Some(src) = compute_src_directory(flags_src, &config.exec_ctx) {
config.src = src;
}

// Now load the TOML config, as soon as possible
let (mut toml, toml_path) = load_toml_config(&config.src, flags_config, &get_toml);
config.config = toml_path.clone();

// Set flags.
config.paths = std::mem::take(&mut flags_paths);

Expand Down Expand Up @@ -501,53 +511,6 @@ impl Config {

// Infer the rest of the configuration.

if let Some(src) = flags_src {
config.src = src
} else {
// Infer the source directory. This is non-trivial because we want to support a downloaded bootstrap binary,
// running on a completely different machine from where it was compiled.
let mut cmd = helpers::git(None);
// NOTE: we cannot support running from outside the repository because the only other path we have available
// is set at compile time, which can be wrong if bootstrap was downloaded rather than compiled locally.
// We still support running outside the repository if we find we aren't in a git directory.

// NOTE: We get a relative path from git to work around an issue on MSYS/mingw. If we used an absolute path,
// and end up using MSYS's git rather than git-for-windows, we would get a unix-y MSYS path. But as bootstrap
// has already been (kinda-cross-)compiled to Windows land, we require a normal Windows path.
cmd.arg("rev-parse").arg("--show-cdup");
// Discard stderr because we expect this to fail when building from a tarball.
let output = cmd.allow_failure().run_capture_stdout(&config);
if output.is_success() {
let git_root_relative = output.stdout();
// We need to canonicalize this path to make sure it uses backslashes instead of forward slashes,
// and to resolve any relative components.
let git_root = env::current_dir()
.unwrap()
.join(PathBuf::from(git_root_relative.trim()))
.canonicalize()
.unwrap();
let s = git_root.to_str().unwrap();

// Bootstrap is quite bad at handling /? in front of paths
let git_root = match s.strip_prefix("\\\\?\\") {
Some(p) => PathBuf::from(p),
None => git_root,
};
// If this doesn't have at least `stage0`, we guessed wrong. This can happen when,
// for example, the build directory is inside of another unrelated git directory.
// In that case keep the original `CARGO_MANIFEST_DIR` handling.
//
// NOTE: this implies that downloadable bootstrap isn't supported when the build directory is outside
// the source directory. We could fix that by setting a variable from all three of python, ./x, and x.ps1.
if git_root.join("src").join("stage0").exists() {
config.src = git_root;
}
} else {
// We're building from a tarball, not git sources.
// We don't support pre-downloaded bootstrap in this case.
}
}

if cfg!(test) {
// Use the build directory of the original x.py invocation, so that we can set `initial_rustc` properly.
config.out = Path::new(
Expand All @@ -560,47 +523,6 @@ impl Config {

config.stage0_metadata = build_helper::stage0_parser::parse_stage0_file();

// Locate the configuration file using the following priority (first match wins):
// 1. `--config <path>` (explicit flag)
// 2. `RUST_BOOTSTRAP_CONFIG` environment variable
// 3. `./bootstrap.toml` (local file)
// 4. `<root>/bootstrap.toml`
// 5. `./config.toml` (fallback for backward compatibility)
// 6. `<root>/config.toml`
let toml_path = flags_config
.clone()
.or_else(|| env::var_os("RUST_BOOTSTRAP_CONFIG").map(PathBuf::from));
let using_default_path = toml_path.is_none();
let mut toml_path = toml_path.unwrap_or_else(|| PathBuf::from("bootstrap.toml"));

if using_default_path && !toml_path.exists() {
toml_path = config.src.join(PathBuf::from("bootstrap.toml"));
if !toml_path.exists() {
toml_path = PathBuf::from("config.toml");
if !toml_path.exists() {
toml_path = config.src.join(PathBuf::from("config.toml"));
}
}
}

// Give a hard error if `--config` or `RUST_BOOTSTRAP_CONFIG` are set to a missing path,
// but not if `bootstrap.toml` hasn't been created.
let mut toml = if !using_default_path || toml_path.exists() {
config.config = Some(if cfg!(not(test)) {
toml_path = toml_path.canonicalize().unwrap();
toml_path.clone()
} else {
toml_path.clone()
});
get_toml(&toml_path).unwrap_or_else(|e| {
eprintln!("ERROR: Failed to parse '{}': {e}", toml_path.display());
exit!(2);
})
} else {
config.config = None;
TomlConfig::default()
};

if cfg!(test) {
// When configuring bootstrap for tests, make sure to set the rustc and Cargo to the
// same ones used to call the tests (if custom ones are not defined in the toml). If we
Expand All @@ -622,7 +544,12 @@ impl Config {
// This must be handled before applying the `profile` since `include`s should always take
// precedence over `profile`s.
for include_path in toml.include.clone().unwrap_or_default().iter().rev() {
let include_path = toml_path.parent().unwrap().join(include_path);
let include_path = toml_path
.as_ref()
.expect("include found in default TOML config")
.parent()
.unwrap()
.join(include_path);

let included_toml = get_toml(&include_path).unwrap_or_else(|e| {
eprintln!("ERROR: Failed to parse '{}': {e}", include_path.display());
Expand Down Expand Up @@ -2309,3 +2236,104 @@ impl AsRef<ExecutionContext> for Config {
&self.exec_ctx
}
}

fn compute_src_directory(src_dir: Option<PathBuf>, exec_ctx: &ExecutionContext) -> Option<PathBuf> {
if let Some(src) = src_dir {
return Some(src);
} else {
// Infer the source directory. This is non-trivial because we want to support a downloaded bootstrap binary,
// running on a completely different machine from where it was compiled.
let mut cmd = helpers::git(None);
// NOTE: we cannot support running from outside the repository because the only other path we have available
// is set at compile time, which can be wrong if bootstrap was downloaded rather than compiled locally.
// We still support running outside the repository if we find we aren't in a git directory.

// NOTE: We get a relative path from git to work around an issue on MSYS/mingw. If we used an absolute path,
// and end up using MSYS's git rather than git-for-windows, we would get a unix-y MSYS path. But as bootstrap
// has already been (kinda-cross-)compiled to Windows land, we require a normal Windows path.
cmd.arg("rev-parse").arg("--show-cdup");
// Discard stderr because we expect this to fail when building from a tarball.
let output = cmd.allow_failure().run_capture_stdout(exec_ctx);
if output.is_success() {
let git_root_relative = output.stdout();
// We need to canonicalize this path to make sure it uses backslashes instead of forward slashes,
// and to resolve any relative components.
let git_root = env::current_dir()
.unwrap()
.join(PathBuf::from(git_root_relative.trim()))
.canonicalize()
.unwrap();
let s = git_root.to_str().unwrap();

// Bootstrap is quite bad at handling /? in front of paths
let git_root = match s.strip_prefix("\\\\?\\") {
Some(p) => PathBuf::from(p),
None => git_root,
};
// If this doesn't have at least `stage0`, we guessed wrong. This can happen when,
// for example, the build directory is inside of another unrelated git directory.
// In that case keep the original `CARGO_MANIFEST_DIR` handling.
//
// NOTE: this implies that downloadable bootstrap isn't supported when the build directory is outside
// the source directory. We could fix that by setting a variable from all three of python, ./x, and x.ps1.
if git_root.join("src").join("stage0").exists() {
return Some(git_root);
}
} else {
// We're building from a tarball, not git sources.
// We don't support pre-downloaded bootstrap in this case.
}
};
None
}

/// Loads bootstrap TOML config and returns the config together with a path from where
/// it was loaded.
/// `src` is the source root directory, and `config_path` is an optionally provided path to the
/// config.
fn load_toml_config(
src: &Path,
config_path: Option<PathBuf>,
get_toml: &impl Fn(&Path) -> Result<TomlConfig, toml::de::Error>,
) -> (TomlConfig, Option<PathBuf>) {
// Locate the configuration file using the following priority (first match wins):
// 1. `--config <path>` (explicit flag)
// 2. `RUST_BOOTSTRAP_CONFIG` environment variable
// 3. `./bootstrap.toml` (local file)
// 4. `<root>/bootstrap.toml`
// 5. `./config.toml` (fallback for backward compatibility)
// 6. `<root>/config.toml`
let toml_path = config_path.or_else(|| env::var_os("RUST_BOOTSTRAP_CONFIG").map(PathBuf::from));
let using_default_path = toml_path.is_none();
let mut toml_path = toml_path.unwrap_or_else(|| PathBuf::from("bootstrap.toml"));

if using_default_path && !toml_path.exists() {
toml_path = src.join(PathBuf::from("bootstrap.toml"));
if !toml_path.exists() {
toml_path = PathBuf::from("config.toml");
if !toml_path.exists() {
toml_path = src.join(PathBuf::from("config.toml"));
}
}
}

// Give a hard error if `--config` or `RUST_BOOTSTRAP_CONFIG` are set to a missing path,
// but not if `bootstrap.toml` hasn't been created.
if !using_default_path || toml_path.exists() {
let path = Some(if cfg!(not(test)) {
toml_path = toml_path.canonicalize().unwrap();
toml_path.clone()
} else {
toml_path.clone()
});
(
get_toml(&toml_path).unwrap_or_else(|e| {
eprintln!("ERROR: Failed to parse '{}': {e}", toml_path.display());
exit!(2);
}),
path,
)
} else {
(TomlConfig::default(), None)
}
}