diff --git a/integrations/rust-project/src/buck.rs b/integrations/rust-project/src/buck.rs index 3f905e1cb1a08..5f110d3dde769 100644 --- a/integrations/rust-project/src/buck.rs +++ b/integrations/rust-project/src/buck.rs @@ -57,6 +57,7 @@ pub(crate) fn to_project_json( include_all_buildfiles: bool, extra_cfgs: &[String], buck: &Buck, + rustc_target: Option<&String>, ) -> Result { let project_root = buck.resolve_project_root()?; @@ -220,7 +221,7 @@ pub(crate) fn to_project_json( build, is_proc_macro: info.proc_macro.unwrap_or(false), proc_macro_dylib_path, - target: None, + target: rustc_target.cloned(), }; crates.push(crate_info); } diff --git a/integrations/rust-project/src/cli/develop.rs b/integrations/rust-project/src/cli/develop.rs index 7e9bcdb8b6d44..b7884450a17a3 100644 --- a/integrations/rust-project/src/cli/develop.rs +++ b/integrations/rust-project/src/cli/develop.rs @@ -39,6 +39,7 @@ pub(crate) struct Develop { pub(crate) check_cycles: bool, pub(crate) invoked_by_ra: bool, pub(crate) include_all_buildfiles: bool, + pub(crate) rustc_target: Option, } pub(crate) struct OutputCfg { @@ -71,6 +72,7 @@ impl Develop { buck2_command, include_all_buildfiles, max_extra_targets, + rustc_target, .. } = command { @@ -97,6 +99,7 @@ impl Develop { check_cycles, invoked_by_ra: false, include_all_buildfiles, + rustc_target, }; let max_extra_targets = max_extra_targets.unwrap_or(DEFAULT_EXTRA_TARGETS); let out = OutputCfg { @@ -121,6 +124,7 @@ impl Develop { buck2_command, max_extra_targets, mode, + rustc_target, .. } = command { @@ -148,6 +152,7 @@ impl Develop { check_cycles: false, invoked_by_ra: true, include_all_buildfiles: false, + rustc_target, }; let max_extra_targets = max_extra_targets.unwrap_or(DEFAULT_EXTRA_TARGETS); let out = OutputCfg { @@ -280,6 +285,7 @@ impl Develop { buck, check_cycles, include_all_buildfiles, + rustc_target, .. } = self; @@ -314,6 +320,7 @@ impl Develop { *check_cycles, *include_all_buildfiles, extra_cfgs, + rustc_target.as_ref(), ) } @@ -351,6 +358,7 @@ pub(crate) fn develop_with_sysroot( check_cycles: bool, include_all_buildfiles: bool, extra_cfgs: &[String], + rustc_target: Option<&String>, ) -> Result { info!(kind = "progress", "building generated code"); let expanded_and_resolved = buck.expand_and_resolve(&targets, exclude_workspaces)?; @@ -368,6 +376,7 @@ pub(crate) fn develop_with_sysroot( include_all_buildfiles, extra_cfgs, buck, + rustc_target, )?; Ok(rust_project) diff --git a/integrations/rust-project/src/main.rs b/integrations/rust-project/src/main.rs index 4c2c550c95799..3fe875a43b0f5 100644 --- a/integrations/rust-project/src/main.rs +++ b/integrations/rust-project/src/main.rs @@ -121,6 +121,9 @@ enum Command { /// Include a `build` section for every crate, including dependencies. Otherwise, `build` is only included for crates in the workspace. #[clap(long)] include_all_buildfiles: bool, + + #[clap(long)] + rustc_target: Option, }, /// `DevelopJson` is a more limited, stripped down [`Command::Develop`]. /// @@ -151,6 +154,9 @@ enum Command { #[clap(long, default_value = "50", env = "RUST_PROJECT_EXTRA_TARGETS")] max_extra_targets: Option, + #[clap(long)] + rustc_target: Option, + args: JsonArguments, }, /// Build the saved file's owning target. This is meant to be used by IDEs to provide diagnostics on save. diff --git a/integrations/rust-project/src/sysroot.rs b/integrations/rust-project/src/sysroot.rs index e9f4b244dbaa5..46b189320930b 100644 --- a/integrations/rust-project/src/sysroot.rs +++ b/integrations/rust-project/src/sysroot.rs @@ -91,7 +91,8 @@ pub(crate) fn resolve_buckconfig_sysroot( true, false, false, - &[], // sysroot doesn't get any extra cfgs + &[], // sysroot doesn't get any extra cfgs + None, // sysroot doesn't get any extra cfgs )?; for krate in &mut sysroot_project.crates { if let Some(display_name) = &mut krate.display_name {