Skip to content

Commit 367ebfb

Browse files
stepanchegfacebook-github-bot
authored andcommitted
Remove dependency on buck2_configured from buck2_bxl
Summary: `buck2_bxl` crate is heavy, and having fewer dependencies speeds up incremental compilation. If this [RFC in Rust](rust-lang/rfcs#3635) will ever be implemented, we will reduce the amount of complexity in code like this. Initially I wanted to do it to push attribute configuration to downstream crates from `buck2_node` for D63918028, but then decided not to do it for a while. So this diff is not required for D63918028. Reviewed By: JakobDegen Differential Revision: D63929039 fbshipit-source-id: 5360c5bb774a4d79471e6dad0ce2c1ba54a6b57b
1 parent f1be6a6 commit 367ebfb

File tree

7 files changed

+78
-9
lines changed

7 files changed

+78
-9
lines changed

app/buck2_bxl/BUCK

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ rust_library(
3333
"//buck2/app/buck2_build_api:buck2_build_api",
3434
"//buck2/app/buck2_cli_proto:buck2_cli_proto",
3535
"//buck2/app/buck2_common:buck2_common",
36-
"//buck2/app/buck2_configured:buck2_configured",
3736
"//buck2/app/buck2_core:buck2_core",
3837
"//buck2/app/buck2_data:buck2_data",
3938
"//buck2/app/buck2_error:buck2_error",

app/buck2_bxl/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ buck2_artifact = { workspace = true }
3838
buck2_build_api = { workspace = true }
3939
buck2_cli_proto = { workspace = true }
4040
buck2_common = { workspace = true }
41-
buck2_configured = { workspace = true }
4241
buck2_core = { workspace = true }
4342
buck2_data = { workspace = true }
4443
buck2_error = { workspace = true }

app/buck2_bxl/src/bxl/starlark_defs/context/actions.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use buck2_build_api::analysis::calculation::RuleAnalysisCalculation;
1515
use buck2_build_api::analysis::registry::AnalysisRegistry;
1616
use buck2_build_api::interpreter::rule_defs::context::AnalysisActions;
1717
use buck2_build_api::interpreter::rule_defs::provider::dependency::Dependency;
18-
use buck2_configured::configuration::calculation::ConfigurationCalculation;
1918
use buck2_core::cells::name::CellName;
2019
use buck2_core::configuration::data::ConfigurationData;
2120
use buck2_core::configuration::pair::ConfigurationNoExec;
@@ -27,6 +26,7 @@ use buck2_core::target::target_configured_target_label::TargetConfiguredTargetLa
2726
use buck2_interpreter::types::configured_providers_label::StarlarkProvidersLabel;
2827
use buck2_node::attrs::configuration_context::AttrConfigurationContext;
2928
use buck2_node::attrs::configuration_context::AttrConfigurationContextImpl;
29+
use buck2_node::configuration::calculation::CONFIGURATION_CALCULATION;
3030
use buck2_node::configuration::resolved::ConfigurationSettingKey;
3131
use buck2_node::execution::GET_EXECUTION_PLATFORMS;
3232
use derivative::Derivative;
@@ -78,15 +78,17 @@ pub(crate) async fn resolve_bxl_execution_platform(
7878

7979
let platform_configuration = match target_platform.as_ref() {
8080
Some(global_target_platform) => {
81-
ctx.get_platform_configuration(global_target_platform)
81+
CONFIGURATION_CALCULATION
82+
.get()?
83+
.get_platform_configuration(ctx, global_target_platform)
8284
.await?
8385
}
8486
None => ConfigurationData::unspecified(),
8587
};
86-
let resolved_configuration = {
87-
ctx.get_resolved_configuration(&platform_configuration, cell, &*exec_compatible_with)
88-
.await?
89-
};
88+
let resolved_configuration = CONFIGURATION_CALCULATION
89+
.get()?
90+
.get_resolved_configuration(ctx, &platform_configuration, cell, &exec_compatible_with)
91+
.await?;
9092

9193
// there is not explicit configured deps, so platforms is empty
9294
let platform_cfgs = OrderedMap::new();

app/buck2_configured/src/configuration/calculation.rs

+30-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ use buck2_build_api::interpreter::rule_defs::provider::builtin::configuration_in
5050
use buck2_build_api::interpreter::rule_defs::provider::builtin::execution_platform_registration_info::FrozenExecutionPlatformRegistrationInfo;
5151
use buck2_common::legacy_configs::key::BuckconfigKeyRef;
5252
use buck2_core::target::target_configured_target_label::TargetConfiguredTargetLabel;
53+
use buck2_node::configuration::calculation::{ConfigurationCalculationDyn, CONFIGURATION_CALCULATION};
5354
use buck2_node::execution::{GetExecutionPlatformsImpl, GET_EXECUTION_PLATFORMS, GetExecutionPlatforms, EXECUTION_PLATFORMS_BUCKCONFIG};
5455
use crate::nodes::calculation::ExecutionPlatformConstraints;
5556

@@ -363,7 +364,7 @@ struct ResolvedConfigurationKey {
363364
}
364365

365366
#[async_trait]
366-
pub trait ConfigurationCalculation {
367+
pub(crate) trait ConfigurationCalculation {
367368
async fn get_default_platform(
368369
&mut self,
369370
target: &TargetLabel,
@@ -408,6 +409,34 @@ pub trait ConfigurationCalculation {
408409
) -> buck2_error::Result<ExecutionPlatformResolution>;
409410
}
410411

412+
struct ConfigurationCalculationDynImpl;
413+
414+
#[async_trait]
415+
impl ConfigurationCalculationDyn for ConfigurationCalculationDynImpl {
416+
async fn get_platform_configuration(
417+
&self,
418+
ctx: &mut DiceComputations<'_>,
419+
target: &TargetLabel,
420+
) -> anyhow::Result<ConfigurationData> {
421+
ctx.get_platform_configuration(target).await
422+
}
423+
424+
async fn get_resolved_configuration(
425+
&self,
426+
ctx: &mut DiceComputations<'_>,
427+
target_cfg: &ConfigurationData,
428+
target_node_cell: CellName,
429+
configuration_deps: &[ConfigurationSettingKey],
430+
) -> buck2_error::Result<ResolvedConfiguration> {
431+
ctx.get_resolved_configuration(target_cfg, target_node_cell, configuration_deps)
432+
.await
433+
}
434+
}
435+
436+
pub(crate) fn init_configuration_calculation() {
437+
CONFIGURATION_CALCULATION.init(&ConfigurationCalculationDynImpl);
438+
}
439+
411440
async fn compute_platform_configuration_no_label_check(
412441
ctx: &mut DiceComputations<'_>,
413442
target: &TargetLabel,

app/buck2_configured/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ pub mod nodes;
1717
pub fn init_late_bindings() {
1818
calculation::init_configured_target_calculation();
1919
configuration::calculation::init_get_execution_platforms();
20+
configuration::calculation::init_configuration_calculation();
2021
nodes::calculation::init_configured_target_node_calculation();
2122
}

app/buck2_node/src/configuration.rs

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* of this source tree.
88
*/
99

10+
pub mod calculation;
1011
pub mod resolved;
1112
pub mod target_platform_detector;
1213
pub mod toolchain_constraints;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under both the MIT license found in the
5+
* LICENSE-MIT file in the root directory of this source tree and the Apache
6+
* License, Version 2.0 found in the LICENSE-APACHE file in the root directory
7+
* of this source tree.
8+
*/
9+
10+
use async_trait::async_trait;
11+
use buck2_core::cells::name::CellName;
12+
use buck2_core::configuration::data::ConfigurationData;
13+
use buck2_core::target::label::label::TargetLabel;
14+
use buck2_util::late_binding::LateBinding;
15+
use dice::DiceComputations;
16+
17+
use crate::configuration::resolved::ConfigurationSettingKey;
18+
use crate::configuration::resolved::ResolvedConfiguration;
19+
20+
#[async_trait]
21+
pub trait ConfigurationCalculationDyn: Send + Sync + 'static {
22+
async fn get_platform_configuration(
23+
&self,
24+
dice: &mut DiceComputations<'_>,
25+
target: &TargetLabel,
26+
) -> anyhow::Result<ConfigurationData>;
27+
28+
async fn get_resolved_configuration(
29+
&self,
30+
dice: &mut DiceComputations<'_>,
31+
target_cfg: &ConfigurationData,
32+
target_node_cell: CellName,
33+
configuration_deps: &[ConfigurationSettingKey],
34+
) -> buck2_error::Result<ResolvedConfiguration>;
35+
}
36+
37+
pub static CONFIGURATION_CALCULATION: LateBinding<&'static dyn ConfigurationCalculationDyn> =
38+
LateBinding::new("CONFIGURATION_CALCULATION");

0 commit comments

Comments
 (0)