Skip to content

Commit 3248ff1

Browse files
committed
move llvm parsing to parse_inner
1 parent 89219ff commit 3248ff1

File tree

2 files changed

+123
-127
lines changed

2 files changed

+123
-127
lines changed

src/bootstrap/src/core/config/config.rs

Lines changed: 121 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use crate::core::config::toml::build::{Build, Tool};
3939
use crate::core::config::toml::change_id::ChangeId;
4040
use crate::core::config::toml::dist::Dist;
4141
use crate::core::config::toml::install::Install;
42+
use crate::core::config::toml::llvm::Llvm;
4243
use crate::core::config::toml::rust::{
4344
LldMode, RustOptimize, check_incompatible_options_for_ci_rustc, validate_codegen_backends,
4445
};
@@ -1049,7 +1050,126 @@ impl Config {
10491050
config.channel = channel;
10501051
}
10511052

1052-
config.apply_llvm_config(toml.llvm);
1053+
let mut llvm_tests = None;
1054+
let mut llvm_enzyme = None;
1055+
let mut llvm_offload = None;
1056+
let mut llvm_plugins = None;
1057+
1058+
if let Some(llvm) = toml.llvm {
1059+
let Llvm {
1060+
optimize: optimize_toml,
1061+
thin_lto,
1062+
release_debuginfo,
1063+
assertions: _,
1064+
tests,
1065+
enzyme,
1066+
plugins,
1067+
static_libstdcpp,
1068+
libzstd,
1069+
ninja,
1070+
targets,
1071+
experimental_targets,
1072+
link_jobs,
1073+
link_shared,
1074+
version_suffix,
1075+
clang_cl,
1076+
cflags,
1077+
cxxflags,
1078+
ldflags,
1079+
use_libcxx,
1080+
use_linker,
1081+
allow_old_toolchain,
1082+
offload,
1083+
polly,
1084+
clang,
1085+
enable_warnings,
1086+
download_ci_llvm,
1087+
build_config,
1088+
} = llvm;
1089+
1090+
set(&mut config.ninja_in_file, ninja);
1091+
llvm_tests = tests;
1092+
llvm_enzyme = enzyme;
1093+
llvm_offload = offload;
1094+
llvm_plugins = plugins;
1095+
set(&mut config.llvm_optimize, optimize_toml);
1096+
set(&mut config.llvm_thin_lto, thin_lto);
1097+
set(&mut config.llvm_release_debuginfo, release_debuginfo);
1098+
set(&mut config.llvm_static_stdcpp, static_libstdcpp);
1099+
set(&mut config.llvm_libzstd, libzstd);
1100+
if let Some(v) = link_shared {
1101+
config.llvm_link_shared.set(Some(v));
1102+
}
1103+
config.llvm_targets.clone_from(&targets);
1104+
config.llvm_experimental_targets.clone_from(&experimental_targets);
1105+
config.llvm_link_jobs = link_jobs;
1106+
config.llvm_version_suffix.clone_from(&version_suffix);
1107+
config.llvm_clang_cl.clone_from(&clang_cl);
1108+
1109+
config.llvm_cflags.clone_from(&cflags);
1110+
config.llvm_cxxflags.clone_from(&cxxflags);
1111+
config.llvm_ldflags.clone_from(&ldflags);
1112+
set(&mut config.llvm_use_libcxx, use_libcxx);
1113+
config.llvm_use_linker.clone_from(&use_linker);
1114+
config.llvm_allow_old_toolchain = allow_old_toolchain.unwrap_or(false);
1115+
config.llvm_offload = offload.unwrap_or(false);
1116+
config.llvm_polly = polly.unwrap_or(false);
1117+
config.llvm_clang = clang.unwrap_or(false);
1118+
config.llvm_enable_warnings = enable_warnings.unwrap_or(false);
1119+
config.llvm_build_config = build_config.clone().unwrap_or(Default::default());
1120+
1121+
config.llvm_from_ci =
1122+
config.parse_download_ci_llvm(download_ci_llvm, config.llvm_assertions);
1123+
1124+
if config.llvm_from_ci {
1125+
let warn = |option: &str| {
1126+
println!(
1127+
"WARNING: `{option}` will only be used on `compiler/rustc_llvm` build, not for the LLVM build."
1128+
);
1129+
println!(
1130+
"HELP: To use `{option}` for LLVM builds, set `download-ci-llvm` option to false."
1131+
);
1132+
};
1133+
1134+
if static_libstdcpp.is_some() {
1135+
warn("static-libstdcpp");
1136+
}
1137+
1138+
if link_shared.is_some() {
1139+
warn("link-shared");
1140+
}
1141+
1142+
// FIXME(#129153): instead of all the ad-hoc `download-ci-llvm` checks that follow,
1143+
// use the `builder-config` present in tarballs since #128822 to compare the local
1144+
// config to the ones used to build the LLVM artifacts on CI, and only notify users
1145+
// if they've chosen a different value.
1146+
1147+
if libzstd.is_some() {
1148+
println!(
1149+
"WARNING: when using `download-ci-llvm`, the local `llvm.libzstd` option, \
1150+
like almost all `llvm.*` options, will be ignored and set by the LLVM CI \
1151+
artifacts builder config."
1152+
);
1153+
println!(
1154+
"HELP: To use `llvm.libzstd` for LLVM/LLD builds, set `download-ci-llvm` option to false."
1155+
);
1156+
}
1157+
}
1158+
1159+
if !config.llvm_from_ci && config.llvm_thin_lto && link_shared.is_none() {
1160+
// If we're building with ThinLTO on, by default we want to link
1161+
// to LLVM shared, to avoid re-doing ThinLTO (which happens in
1162+
// the link step) with each stage.
1163+
config.llvm_link_shared.set(Some(true));
1164+
}
1165+
} else {
1166+
config.llvm_from_ci = config.parse_download_ci_llvm(None, false);
1167+
}
1168+
1169+
config.llvm_tests = llvm_tests.unwrap_or(false);
1170+
config.llvm_enzyme = llvm_enzyme.unwrap_or(false);
1171+
config.llvm_offload = llvm_offload.unwrap_or(false);
1172+
config.llvm_plugins = llvm_plugins.unwrap_or(false);
10531173

10541174
if let Some(gcc) = toml.gcc {
10551175
config.gcc_ci_mode = match gcc.download_ci_gcc {

src/bootstrap/src/core/config/toml/llvm.rs

Lines changed: 2 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
44
use serde::{Deserialize, Deserializer};
55

6+
use crate::core::config::StringOrBool;
67
use crate::core::config::toml::{Merge, ReplaceOpt, TomlConfig};
7-
use crate::core::config::{StringOrBool, set};
8-
use crate::{Config, HashMap, HashSet, PathBuf, define_config, exit};
8+
use crate::{HashMap, HashSet, PathBuf, define_config, exit};
99

1010
define_config! {
1111
/// TOML representation of how the LLVM build is configured.
@@ -144,127 +144,3 @@ pub fn check_incompatible_options_for_ci_llvm(
144144

145145
Ok(())
146146
}
147-
148-
impl Config {
149-
pub fn apply_llvm_config(&mut self, toml_llvm: Option<Llvm>) {
150-
let mut llvm_tests = None;
151-
let mut llvm_enzyme = None;
152-
let mut llvm_offload = None;
153-
let mut llvm_plugins = None;
154-
155-
if let Some(llvm) = toml_llvm {
156-
let Llvm {
157-
optimize: optimize_toml,
158-
thin_lto,
159-
release_debuginfo,
160-
assertions: _,
161-
tests,
162-
enzyme,
163-
plugins,
164-
static_libstdcpp,
165-
libzstd,
166-
ninja,
167-
targets,
168-
experimental_targets,
169-
link_jobs,
170-
link_shared,
171-
version_suffix,
172-
clang_cl,
173-
cflags,
174-
cxxflags,
175-
ldflags,
176-
use_libcxx,
177-
use_linker,
178-
allow_old_toolchain,
179-
offload,
180-
polly,
181-
clang,
182-
enable_warnings,
183-
download_ci_llvm,
184-
build_config,
185-
} = llvm;
186-
187-
set(&mut self.ninja_in_file, ninja);
188-
llvm_tests = tests;
189-
llvm_enzyme = enzyme;
190-
llvm_offload = offload;
191-
llvm_plugins = plugins;
192-
set(&mut self.llvm_optimize, optimize_toml);
193-
set(&mut self.llvm_thin_lto, thin_lto);
194-
set(&mut self.llvm_release_debuginfo, release_debuginfo);
195-
set(&mut self.llvm_static_stdcpp, static_libstdcpp);
196-
set(&mut self.llvm_libzstd, libzstd);
197-
if let Some(v) = link_shared {
198-
self.llvm_link_shared.set(Some(v));
199-
}
200-
self.llvm_targets.clone_from(&targets);
201-
self.llvm_experimental_targets.clone_from(&experimental_targets);
202-
self.llvm_link_jobs = link_jobs;
203-
self.llvm_version_suffix.clone_from(&version_suffix);
204-
self.llvm_clang_cl.clone_from(&clang_cl);
205-
206-
self.llvm_cflags.clone_from(&cflags);
207-
self.llvm_cxxflags.clone_from(&cxxflags);
208-
self.llvm_ldflags.clone_from(&ldflags);
209-
set(&mut self.llvm_use_libcxx, use_libcxx);
210-
self.llvm_use_linker.clone_from(&use_linker);
211-
self.llvm_allow_old_toolchain = allow_old_toolchain.unwrap_or(false);
212-
self.llvm_offload = offload.unwrap_or(false);
213-
self.llvm_polly = polly.unwrap_or(false);
214-
self.llvm_clang = clang.unwrap_or(false);
215-
self.llvm_enable_warnings = enable_warnings.unwrap_or(false);
216-
self.llvm_build_config = build_config.clone().unwrap_or(Default::default());
217-
218-
self.llvm_from_ci = self.parse_download_ci_llvm(download_ci_llvm, self.llvm_assertions);
219-
220-
if self.llvm_from_ci {
221-
let warn = |option: &str| {
222-
println!(
223-
"WARNING: `{option}` will only be used on `compiler/rustc_llvm` build, not for the LLVM build."
224-
);
225-
println!(
226-
"HELP: To use `{option}` for LLVM builds, set `download-ci-llvm` option to false."
227-
);
228-
};
229-
230-
if static_libstdcpp.is_some() {
231-
warn("static-libstdcpp");
232-
}
233-
234-
if link_shared.is_some() {
235-
warn("link-shared");
236-
}
237-
238-
// FIXME(#129153): instead of all the ad-hoc `download-ci-llvm` checks that follow,
239-
// use the `builder-config` present in tarballs since #128822 to compare the local
240-
// config to the ones used to build the LLVM artifacts on CI, and only notify users
241-
// if they've chosen a different value.
242-
243-
if libzstd.is_some() {
244-
println!(
245-
"WARNING: when using `download-ci-llvm`, the local `llvm.libzstd` option, \
246-
like almost all `llvm.*` options, will be ignored and set by the LLVM CI \
247-
artifacts builder config."
248-
);
249-
println!(
250-
"HELP: To use `llvm.libzstd` for LLVM/LLD builds, set `download-ci-llvm` option to false."
251-
);
252-
}
253-
}
254-
255-
if !self.llvm_from_ci && self.llvm_thin_lto && link_shared.is_none() {
256-
// If we're building with ThinLTO on, by default we want to link
257-
// to LLVM shared, to avoid re-doing ThinLTO (which happens in
258-
// the link step) with each stage.
259-
self.llvm_link_shared.set(Some(true));
260-
}
261-
} else {
262-
self.llvm_from_ci = self.parse_download_ci_llvm(None, false);
263-
}
264-
265-
self.llvm_tests = llvm_tests.unwrap_or(false);
266-
self.llvm_enzyme = llvm_enzyme.unwrap_or(false);
267-
self.llvm_offload = llvm_offload.unwrap_or(false);
268-
self.llvm_plugins = llvm_plugins.unwrap_or(false);
269-
}
270-
}

0 commit comments

Comments
 (0)