Skip to content

Commit 5572f2d

Browse files
committed
Rollup merge of rust-lang#55264 - michaelwoerister:single-cgu-std, r=simulacrum
Compile the libstd we distribute with -Ccodegen-unit=1 This PR - adds the `single-codegen-unit-std` option to `config.toml` which allows for setting the CGU count for `libstd` and `libtest` independently of the one for the rest of the compiler, and - sets the new option to `true` for all dist jobs in CI. Fixes rust-lang#54872.
2 parents 3faffa2 + 5dedf0c commit 5572f2d

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

config.toml.example

+4
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,10 @@
277277
# compiler.
278278
#codegen-units = 1
279279

280+
# Sets the number of codegen units to build the standard library with,
281+
# regardless of what the codegen-unit setting for the rest of the compiler is.
282+
#codegen-units-std = 1
283+
280284
# Whether or not debug assertions are enabled for the compiler and standard
281285
# library. Also enables compilation of debug! and trace! logging macros.
282286
#debug-assertions = false

src/bootstrap/builder.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -1119,10 +1119,15 @@ impl<'a> Builder<'a> {
11191119
cargo.arg("-v");
11201120
}
11211121

1122-
// This must be kept before the thinlto check, as we set codegen units
1123-
// to 1 forcibly there.
1124-
if let Some(n) = self.config.rust_codegen_units {
1125-
cargo.env("RUSTC_CODEGEN_UNITS", n.to_string());
1122+
match (mode, self.config.rust_codegen_units_std, self.config.rust_codegen_units) {
1123+
(Mode::Std, Some(n), _) |
1124+
(Mode::Test, Some(n), _) |
1125+
(_, _, Some(n)) => {
1126+
cargo.env("RUSTC_CODEGEN_UNITS", n.to_string());
1127+
}
1128+
_ => {
1129+
// Don't set anything
1130+
}
11261131
}
11271132

11281133
if self.config.rust_optimize {

src/bootstrap/config.rs

+4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ pub struct Config {
9595
// rust codegen options
9696
pub rust_optimize: bool,
9797
pub rust_codegen_units: Option<u32>,
98+
pub rust_codegen_units_std: Option<u32>,
9899
pub rust_debug_assertions: bool,
99100
pub rust_debuginfo: bool,
100101
pub rust_debuginfo_lines: bool,
@@ -294,6 +295,7 @@ impl Default for StringOrBool {
294295
struct Rust {
295296
optimize: Option<bool>,
296297
codegen_units: Option<u32>,
298+
codegen_units_std: Option<u32>,
297299
debug_assertions: Option<bool>,
298300
debuginfo: Option<bool>,
299301
debuginfo_lines: Option<bool>,
@@ -580,6 +582,8 @@ impl Config {
580582
Some(n) => config.rust_codegen_units = Some(n),
581583
None => {}
582584
}
585+
586+
config.rust_codegen_units_std = rust.codegen_units_std;
583587
}
584588

585589
if let Some(ref t) = toml.target {

src/bootstrap/configure.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,13 @@ def set(key, value):
393393
targets[target][0] = targets[target][0].replace("x86_64-unknown-linux-gnu", target)
394394

395395

396+
def is_number(value):
397+
try:
398+
float(value)
399+
return True
400+
except:
401+
return False
402+
396403
# Here we walk through the constructed configuration we have from the parsed
397404
# command line arguments. We then apply each piece of configuration by
398405
# basically just doing a `sed` to change the various configuration line to what
@@ -406,7 +413,11 @@ def to_toml(value):
406413
elif isinstance(value, list):
407414
return '[' + ', '.join(map(to_toml, value)) + ']'
408415
elif isinstance(value, str):
409-
return "'" + value + "'"
416+
# Don't put quotes around numeric values
417+
if is_number(value):
418+
return value
419+
else:
420+
return "'" + value + "'"
410421
else:
411422
raise RuntimeError('no toml')
412423

src/ci/run.sh

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-sccache"
4040
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-manage-submodules"
4141
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-locked-deps"
4242
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-cargo-native-static"
43+
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.codegen-units-std=1"
4344

4445
if [ "$DIST_SRC" = "" ]; then
4546
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --disable-dist-src"

0 commit comments

Comments
 (0)