Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
8 changes: 8 additions & 0 deletions bootstrap.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,14 @@
# "miri", "cargo-miri" # for dev/nightly channels
#]

# Specify build configuration specific for some tool, such as enabled features.
#
# For example, to build Miri with tracing support, use `tool-config.miri.features = ["tracing"]`
#
# The default value for the `features` array is `[]`. However, please note that other flags in
# `bootstrap.toml` might influence the features enabled for some tools.
#tool-config.TOOL_NAME.features = [FEATURE1, FEATURE2]

# Verbosity level: 0 == not verbose, 1 == verbose, 2 == very verbose, 3 == print environment variables on each rustc invocation
#verbose = 0

Expand Down
16 changes: 15 additions & 1 deletion src/bootstrap/src/core/build_steps/tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,20 @@ impl Step for ToolBuild {
_ => panic!("unexpected Mode for tool build"),
}

// build.tool-config.TOOL_NAME.features in bootstrap.toml allows specifying which features
// to enable for a specific tool. `extra_features` instead is not controlled by the toml
// instead provides features that are always enabled for a specific tool (e.g.
// "in-rust-tree" for rust-analyzer). Finally, `prepare_tool_cargo` might add more features
// to adapt the build to the chosen flags (e.g. "all-static" for cargo if
// `cargo_native_static` is true).
let mut features = builder
.config
.tool_config
.get(self.tool)
.and_then(|tool_config| tool_config.features.clone())
.unwrap_or_default();
features.extend(self.extra_features.clone());

let mut cargo = prepare_tool_cargo(
builder,
self.compiler,
Expand All @@ -144,7 +158,7 @@ impl Step for ToolBuild {
Kind::Build,
path,
self.source_type,
&self.extra_features,
&features,
);

// The stage0 compiler changes infrequently and does not directly depend on code
Expand Down
5 changes: 4 additions & 1 deletion src/bootstrap/src/core/config/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pub use crate::core::config::flags::Subcommand;
use crate::core::config::flags::{Color, Flags};
use crate::core::config::target_selection::TargetSelectionList;
use crate::core::config::toml::TomlConfig;
use crate::core::config::toml::build::Build;
use crate::core::config::toml::build::{Build, ToolConfig};
use crate::core::config::toml::change_id::ChangeId;
use crate::core::config::toml::rust::{
LldMode, RustOptimize, check_incompatible_options_for_ci_rustc,
Expand Down Expand Up @@ -114,6 +114,7 @@ pub struct Config {
pub bootstrap_cache_path: Option<PathBuf>,
pub extended: bool,
pub tools: Option<HashSet<String>>,
pub tool_config: HashMap<String, ToolConfig>,
Comment thread
Kobzol marked this conversation as resolved.
Outdated
pub sanitizers: bool,
pub profiler: bool,
pub omit_git_hash: bool,
Expand Down Expand Up @@ -689,6 +690,7 @@ impl Config {
bootstrap_cache_path,
extended,
tools,
tool_config,
verbose,
sanitizers,
profiler,
Expand Down Expand Up @@ -835,6 +837,7 @@ impl Config {
set(&mut config.full_bootstrap, full_bootstrap);
set(&mut config.extended, extended);
config.tools = tools;
set(&mut config.tool_config, tool_config);
set(&mut config.verbose, verbose);
set(&mut config.sanitizers, sanitizers);
set(&mut config.profiler, profiler);
Expand Down
10 changes: 10 additions & 0 deletions src/bootstrap/src/core/config/toml/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//! various feature flags. These options apply across different stages and components
//! unless specifically overridden by other configuration sections or command-line flags.

use std::collections::HashMap;

use serde::{Deserialize, Deserializer};

use crate::core::config::toml::ReplaceOpt;
Expand Down Expand Up @@ -42,6 +44,7 @@ define_config! {
bootstrap_cache_path: Option<PathBuf> = "bootstrap-cache-path",
extended: Option<bool> = "extended",
tools: Option<HashSet<String>> = "tools",
tool_config: Option<HashMap<String, ToolConfig>> = "tool-config",
verbose: Option<usize> = "verbose",
sanitizers: Option<bool> = "sanitizers",
profiler: Option<bool> = "profiler",
Expand Down Expand Up @@ -70,3 +73,10 @@ define_config! {
exclude: Option<Vec<PathBuf>> = "exclude",
}
}

define_config! {
#[derive(Default, Clone)]
struct ToolConfig {
features: Option<Vec<String>> = "features",
}
}
5 changes: 5 additions & 0 deletions src/bootstrap/src/utils/change_tracker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -421,4 +421,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
severity: ChangeSeverity::Info,
summary: "Added new bootstrap flag `--skip-std-check-if-no-download-rustc` that skips std checks when download-rustc is unavailable. Mainly intended for developers to reduce RA overhead.",
},
ChangeInfo {
change_id: 142379,
severity: ChangeSeverity::Info,
summary: "Added new option `tool-config.TOOL_NAME.features` to specify the features to compile a tool with",
},
];
Loading