You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.9 KiB
163 lines
5.9 KiB
From 65458aed68fe6786068bab00e5a46d7ecdd2a072 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=E8=AE=B8=E6=9D=B0=E5=8F=8B=20Jieyou=20Xu=20=28Joe=29?=
|
|
<39484203+jieyouxu@users.noreply.github.com>
|
|
Date: Thu, 17 Oct 2024 22:58:45 +0800
|
|
Subject: [PATCH] bootstrap: allow setting `--jobs` in config.toml
|
|
|
|
---
|
|
config.example.toml | 5 ++
|
|
src/bootstrap/src/core/config/config.rs | 5 +-
|
|
src/bootstrap/src/core/config/flags.rs | 3 +-
|
|
src/bootstrap/src/core/config/tests.rs | 58 +++++++++++++++++++++++
|
|
src/bootstrap/src/utils/change_tracker.rs | 5 ++
|
|
5 files changed, 73 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/config.example.toml b/config.example.toml
|
|
index 4b591b949b36..168ac353cff7 100644
|
|
--- a/config.example.toml
|
|
+++ b/config.example.toml
|
|
@@ -414,6 +414,11 @@
|
|
# Specify the location of the Android NDK. Used when targeting Android.
|
|
#android-ndk = "/path/to/android-ndk-r26d"
|
|
|
|
+# Number of parallel jobs to be used for building and testing. If set to `0` or
|
|
+# omitted, it will be automatically determined. This is the `-j`/`--jobs` flag
|
|
+# passed to cargo invocations.
|
|
+#jobs = 0
|
|
+
|
|
# =============================================================================
|
|
# General install configuration options
|
|
# =============================================================================
|
|
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
|
|
index c2ab439891ea..aeb81b146382 100644
|
|
--- a/src/bootstrap/src/core/config/config.rs
|
|
+++ b/src/bootstrap/src/core/config/config.rs
|
|
@@ -891,6 +891,7 @@ struct Build {
|
|
metrics: Option<bool> = "metrics",
|
|
android_ndk: Option<PathBuf> = "android-ndk",
|
|
optimized_compiler_builtins: Option<bool> = "optimized-compiler-builtins",
|
|
+ jobs: Option<u32> = "jobs",
|
|
}
|
|
}
|
|
|
|
@@ -1289,7 +1290,6 @@ pub(crate) fn parse_inner(
|
|
config.rustc_error_format = flags.rustc_error_format;
|
|
config.json_output = flags.json_output;
|
|
config.on_fail = flags.on_fail;
|
|
- config.jobs = Some(threads_from_config(flags.jobs as u32));
|
|
config.cmd = flags.cmd;
|
|
config.incremental = flags.incremental;
|
|
config.dry_run = if flags.dry_run { DryRun::UserSelected } else { DryRun::Disabled };
|
|
@@ -1511,8 +1511,11 @@ fn get_table(option: &str) -> Result<TomlConfig, toml::de::Error> {
|
|
metrics: _,
|
|
android_ndk,
|
|
optimized_compiler_builtins,
|
|
+ jobs,
|
|
} = toml.build.unwrap_or_default();
|
|
|
|
+ config.jobs = Some(threads_from_config(flags.jobs.unwrap_or(jobs.unwrap_or(0))));
|
|
+
|
|
if let Some(file_build) = build {
|
|
config.build = TargetSelection::from_user(&file_build);
|
|
};
|
|
diff --git a/src/bootstrap/src/core/config/flags.rs b/src/bootstrap/src/core/config/flags.rs
|
|
index 3aefe517a5be..bfeb811508c0 100644
|
|
--- a/src/bootstrap/src/core/config/flags.rs
|
|
+++ b/src/bootstrap/src/core/config/flags.rs
|
|
@@ -110,11 +110,10 @@ pub struct Flags {
|
|
short,
|
|
long,
|
|
value_hint = clap::ValueHint::Other,
|
|
- default_value_t = std::thread::available_parallelism().map_or(1, std::num::NonZeroUsize::get),
|
|
value_name = "JOBS"
|
|
)]
|
|
/// number of jobs to run in parallel
|
|
- pub jobs: usize,
|
|
+ pub jobs: Option<u32>,
|
|
// This overrides the deny-warnings configuration option,
|
|
// which passes -Dwarnings to the compiler invocations.
|
|
#[arg(global = true, long)]
|
|
diff --git a/src/bootstrap/src/core/config/tests.rs b/src/bootstrap/src/core/config/tests.rs
|
|
index 2611b6cf51bb..1f02757682c2 100644
|
|
--- a/src/bootstrap/src/core/config/tests.rs
|
|
+++ b/src/bootstrap/src/core/config/tests.rs
|
|
@@ -352,3 +352,61 @@ fn parse_rust_std_features_empty() {
|
|
fn parse_rust_std_features_invalid() {
|
|
parse("rust.std-features = \"backtrace\"");
|
|
}
|
|
+
|
|
+#[test]
|
|
+fn parse_jobs() {
|
|
+ assert_eq!(parse("build.jobs = 1").jobs, Some(1));
|
|
+}
|
|
+
|
|
+#[test]
|
|
+fn jobs_precedence() {
|
|
+ // `--jobs` should take precedence over using `--set build.jobs`.
|
|
+
|
|
+ let config = Config::parse_inner(
|
|
+ Flags::parse(&[
|
|
+ "check".to_owned(),
|
|
+ "--config=/does/not/exist".to_owned(),
|
|
+ "--jobs=67890".to_owned(),
|
|
+ "--set=build.jobs=12345".to_owned(),
|
|
+ ]),
|
|
+ |&_| toml::from_str(""),
|
|
+ );
|
|
+ assert_eq!(config.jobs, Some(67890));
|
|
+
|
|
+ // `--set build.jobs` should take precedence over `config.toml`.
|
|
+ let config = Config::parse_inner(
|
|
+ Flags::parse(&[
|
|
+ "check".to_owned(),
|
|
+ "--config=/does/not/exist".to_owned(),
|
|
+ "--set=build.jobs=12345".to_owned(),
|
|
+ ]),
|
|
+ |&_| {
|
|
+ toml::from_str(
|
|
+ r#"
|
|
+ [build]
|
|
+ jobs = 67890
|
|
+ "#,
|
|
+ )
|
|
+ },
|
|
+ );
|
|
+ assert_eq!(config.jobs, Some(12345));
|
|
+
|
|
+ // `--jobs` > `--set build.jobs` > `config.toml`
|
|
+ let config = Config::parse_inner(
|
|
+ Flags::parse(&[
|
|
+ "check".to_owned(),
|
|
+ "--jobs=123".to_owned(),
|
|
+ "--config=/does/not/exist".to_owned(),
|
|
+ "--set=build.jobs=456".to_owned(),
|
|
+ ]),
|
|
+ |&_| {
|
|
+ toml::from_str(
|
|
+ r#"
|
|
+ [build]
|
|
+ jobs = 789
|
|
+ "#,
|
|
+ )
|
|
+ },
|
|
+ );
|
|
+ assert_eq!(config.jobs, Some(123));
|
|
+}
|
|
diff --git a/src/bootstrap/src/utils/change_tracker.rs b/src/bootstrap/src/utils/change_tracker.rs
|
|
index b37786496cb5..9169bc90a45d 100644
|
|
--- a/src/bootstrap/src/utils/change_tracker.rs
|
|
+++ b/src/bootstrap/src/utils/change_tracker.rs
|
|
@@ -275,4 +275,9 @@ pub fn human_readable_changes(changes: &[ChangeInfo]) -> String {
|
|
severity: ChangeSeverity::Info,
|
|
summary: "New option `./x setup editor` added, replacing `./x setup vscode` and adding support for vim, emacs and helix.",
|
|
},
|
|
+ ChangeInfo {
|
|
+ change_id: 131838,
|
|
+ severity: ChangeSeverity::Info,
|
|
+ summary: "Allow setting `--jobs` in config.toml with `build.jobs`.",
|
|
+ },
|
|
];
|
|
--
|
|
2.47.0
|
|
|