Skip to content

Commit c53917a

Browse files
committed
use RustcTargetDataBuilder
1 parent 2273009 commit c53917a

File tree

8 files changed

+62
-36
lines changed

8 files changed

+62
-36
lines changed

benches/benchsuite/benches/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use benchsuite::fixtures;
2-
use cargo::core::compiler::{CompileKind, RustcTargetData};
2+
use cargo::core::compiler::{CompileKind, RustcTargetData, RustcTargetDataBuilder};
33
use cargo::core::resolver::features::{FeatureOpts, FeatureResolver};
44
use cargo::core::resolver::{CliFeatures, ForceAllTargets, HasDevUnits, ResolveBehavior};
55
use cargo::core::{PackageIdSpec, Workspace};
@@ -11,7 +11,7 @@ use std::path::Path;
1111
struct ResolveInfo<'cfg> {
1212
ws: Workspace<'cfg>,
1313
requested_kinds: [CompileKind; 1],
14-
target_data: RustcTargetData<'cfg>,
14+
target_data: RustcTargetDataBuilder<'cfg>,
1515
cli_features: CliFeatures,
1616
specs: Vec<PackageIdSpec>,
1717
has_dev_units: HasDevUnits,

src/cargo/core/compiler/build_context/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::path::PathBuf;
1414

1515
mod target_info;
1616
pub use self::target_info::{
17-
FileFlavor, FileType, RustDocFingerprint, RustcTargetData, TargetInfo,
17+
FileFlavor, FileType, RustDocFingerprint, RustcTargetData, RustcTargetDataBuilder, TargetInfo,
1818
};
1919

2020
/// The build context, containing complete information needed for a build task

src/cargo/core/compiler/build_context/target_info.rs

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use cargo_util::{paths, ProcessBuilder};
2121
use serde::{Deserialize, Serialize};
2222
use std::cell::RefCell;
2323
use std::collections::hash_map::{Entry, HashMap};
24+
use std::ops::Deref;
2425
use std::path::{Path, PathBuf};
2526
use std::str::{self, FromStr};
2627

@@ -850,6 +851,40 @@ fn rustflags_from_build(config: &Config, flag: Flags) -> CargoResult<Option<Vec<
850851
Ok(list.as_ref().map(|l| l.as_slice().to_vec()))
851852
}
852853

854+
pub struct RustcTargetDataBuilder<'cfg> {
855+
data: RustcTargetData<'cfg>,
856+
}
857+
858+
impl<'cfg> RustcTargetDataBuilder<'cfg> {
859+
/// Insert `kind` into our `target_info` and `target_config` members if it isn't present yet.
860+
pub fn merge_compile_kind(&mut self, kind: CompileKind) -> CargoResult<()> {
861+
if let CompileKind::Target(target) = kind {
862+
if !self.data.target_config.contains_key(&target) {
863+
self.data.target_config
864+
.insert(target, self.data.config.target_cfg_triple(target.short_name())?);
865+
}
866+
if !self.data.target_info.contains_key(&target) {
867+
self.data.target_info.insert(
868+
target,
869+
TargetInfo::new(self.data.config, &self.data.requested_kinds, &self.data.rustc, kind)?,
870+
);
871+
}
872+
}
873+
Ok(())
874+
}
875+
876+
pub fn build(self) -> RustcTargetData<'cfg> {
877+
self.data
878+
}
879+
}
880+
881+
impl<'cfg> Deref for RustcTargetDataBuilder<'cfg> {
882+
type Target = RustcTargetData<'cfg>;
883+
fn deref(&self) -> &Self::Target {
884+
&self.data
885+
}
886+
}
887+
853888
/// Collection of information about `rustc` and the host and target.
854889
pub struct RustcTargetData<'cfg> {
855890
/// Information about `rustc` itself.
@@ -876,7 +911,7 @@ impl<'cfg> RustcTargetData<'cfg> {
876911
pub fn new(
877912
ws: &Workspace<'cfg>,
878913
requested_kinds: &[CompileKind],
879-
) -> CargoResult<RustcTargetData<'cfg>> {
914+
) -> CargoResult<RustcTargetDataBuilder<'cfg>> {
880915
let config = ws.config();
881916
let rustc = config.load_global_rustc(Some(ws))?;
882917
let mut target_config = HashMap::new();
@@ -900,7 +935,7 @@ impl<'cfg> RustcTargetData<'cfg> {
900935
target_config.insert(ct, config.target_cfg_triple(&rustc.host)?);
901936
};
902937

903-
let mut res = RustcTargetData {
938+
let data = RustcTargetData {
904939
rustc,
905940
config,
906941
requested_kinds: requested_kinds.into(),
@@ -910,30 +945,17 @@ impl<'cfg> RustcTargetData<'cfg> {
910945
target_info,
911946
};
912947

948+
let mut res = RustcTargetDataBuilder {
949+
data
950+
};
951+
913952
for &kind in requested_kinds {
914953
res.merge_compile_kind(kind)?;
915954
}
916955

917956
Ok(res)
918957
}
919958

920-
/// Insert `kind` into our `target_info` and `target_config` members if it isn't present yet.
921-
pub(crate) fn merge_compile_kind(&mut self, kind: CompileKind) -> CargoResult<()> {
922-
if let CompileKind::Target(target) = kind {
923-
if !self.target_config.contains_key(&target) {
924-
self.target_config
925-
.insert(target, self.config.target_cfg_triple(target.short_name())?);
926-
}
927-
if !self.target_info.contains_key(&target) {
928-
self.target_info.insert(
929-
target,
930-
TargetInfo::new(self.config, &self.requested_kinds, &self.rustc, kind)?,
931-
);
932-
}
933-
}
934-
Ok(())
935-
}
936-
937959
/// Returns a "short" name for the given kind, suitable for keying off
938960
/// configuration in Cargo or presenting to users.
939961
pub fn short_name<'a>(&'a self, kind: &'a CompileKind) -> &'a str {

src/cargo/core/compiler/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ use log::{debug, trace};
6969

7070
pub use self::build_config::{BuildConfig, CompileMode, MessageFormat, TimingOutput};
7171
pub use self::build_context::{
72-
BuildContext, FileFlavor, FileType, RustDocFingerprint, RustcTargetData, TargetInfo,
72+
BuildContext, FileFlavor, FileType, RustDocFingerprint, RustcTargetData, RustcTargetDataBuilder, TargetInfo,
7373
};
7474
use self::build_plan::BuildPlan;
7575
pub use self::compilation::{Compilation, Doctest, UnitOutput};

src/cargo/core/compiler/standard_lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use crate::core::compiler::unit_dependencies::IsArtifact;
44
use crate::core::compiler::UnitInterner;
5-
use crate::core::compiler::{CompileKind, CompileMode, RustcTargetData, Unit};
5+
use crate::core::compiler::{CompileKind, CompileMode, Unit};
66
use crate::core::profiles::{Profiles, UnitFor};
77
use crate::core::resolver::features::{CliFeatures, FeaturesFor, ResolvedFeatures};
88
use crate::core::resolver::HasDevUnits;
@@ -14,6 +14,7 @@ use std::collections::{HashMap, HashSet};
1414
use std::path::PathBuf;
1515

1616
use super::BuildConfig;
17+
use super::build_context::RustcTargetDataBuilder;
1718

1819
/// Parse the `-Zbuild-std` flag.
1920
pub fn parse_unstable_flag(value: Option<&str>) -> Vec<String> {
@@ -62,7 +63,7 @@ pub(crate) fn std_crates(config: &Config, units: Option<&[Unit]>) -> Option<Vec<
6263
/// Resolve the standard library dependencies.
6364
pub fn resolve_std<'cfg>(
6465
ws: &Workspace<'cfg>,
65-
target_data: &mut RustcTargetData<'cfg>,
66+
target_data: &mut RustcTargetDataBuilder<'cfg>,
6667
build_config: &BuildConfig,
6768
crates: &[String],
6869
) -> CargoResult<(PackageSet<'cfg>, Resolve, ResolvedFeatures)> {
@@ -220,7 +221,7 @@ pub fn generate_std_roots(
220221
Ok(ret)
221222
}
222223

223-
fn detect_sysroot_src_path(target_data: &RustcTargetData<'_>) -> CargoResult<PathBuf> {
224+
fn detect_sysroot_src_path(target_data: &RustcTargetDataBuilder<'_>) -> CargoResult<PathBuf> {
224225
if let Some(s) = target_data.config.get_env_os("__CARGO_TESTS_ONLY_SRC_ROOT") {
225226
return Ok(s.into());
226227
}

src/cargo/core/package.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use log::{debug, warn};
1717
use semver::Version;
1818
use serde::Serialize;
1919

20-
use crate::core::compiler::{CompileKind, RustcTargetData};
20+
use crate::core::compiler::CompileKind;
2121
use crate::core::dependency::DepKind;
2222
use crate::core::resolver::features::ForceAllTargets;
2323
use crate::core::resolver::{HasDevUnits, Resolve};
@@ -32,6 +32,8 @@ use crate::util::network::retry::{Retry, RetryResult};
3232
use crate::util::network::sleep::SleepTracker;
3333
use crate::util::{self, internal, Config, Progress, ProgressStyle};
3434

35+
use super::compiler::build_context::RustcTargetDataBuilder;
36+
3537
pub const MANIFEST_PREAMBLE: &str = "\
3638
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
3739
#
@@ -494,7 +496,7 @@ impl<'cfg> PackageSet<'cfg> {
494496
root_ids: &[PackageId],
495497
has_dev_units: HasDevUnits,
496498
requested_kinds: &[CompileKind],
497-
target_data: &mut RustcTargetData<'cfg>,
499+
target_data: &mut RustcTargetDataBuilder<'cfg>,
498500
force_all_targets: ForceAllTargets,
499501
) -> CargoResult<()> {
500502
fn collect_used_deps(
@@ -503,7 +505,7 @@ impl<'cfg> PackageSet<'cfg> {
503505
pkg_id: PackageId,
504506
has_dev_units: HasDevUnits,
505507
requested_kinds: &[CompileKind],
506-
target_data: &mut RustcTargetData<'_>,
508+
target_data: &mut RustcTargetDataBuilder<'_>,
507509
force_all_targets: ForceAllTargets,
508510
additional_kinds: Vec<CompileKind>,
509511
) -> CargoResult<()> {
@@ -515,7 +517,7 @@ impl<'cfg> PackageSet<'cfg> {
515517
resolve,
516518
has_dev_units,
517519
requested_kinds,
518-
&*target_data,
520+
target_data,
519521
force_all_targets,
520522
&additional_kinds,
521523
);
@@ -576,7 +578,7 @@ impl<'cfg> PackageSet<'cfg> {
576578
root_ids: &[PackageId],
577579
has_dev_units: HasDevUnits,
578580
requested_kinds: &[CompileKind],
579-
target_data: &RustcTargetData<'_>,
581+
target_data: &RustcTargetDataBuilder<'_>,
580582
force_all_targets: ForceAllTargets,
581583
) -> CargoResult<()> {
582584
let no_lib_pkgs: BTreeMap<PackageId, Vec<(&Package, &HashSet<Dependency>)>> = root_ids
@@ -632,7 +634,7 @@ impl<'cfg> PackageSet<'cfg> {
632634
resolve: &'a Resolve,
633635
has_dev_units: HasDevUnits,
634636
requested_kinds: &'a [CompileKind],
635-
target_data: &'a RustcTargetData<'_>,
637+
target_data: &'a RustcTargetDataBuilder<'_>,
636638
force_all_targets: ForceAllTargets,
637639
additional_kinds: &'a [CompileKind],
638640
) -> impl Iterator<Item = (PackageId, &'a HashSet<Dependency>, Vec<CompileKind>)> + 'a {

src/cargo/ops/cargo_compile/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ pub fn create_bcx<'a, 'cfg>(
535535
build_config,
536536
profiles,
537537
extra_compiler_args,
538-
target_data,
538+
target_data.build(),
539539
units,
540540
unit_graph,
541541
scrape_units,

src/cargo/ops/resolve.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@
5555
//! [source implementations]: crate::sources
5656
//! [`Downloads`]: crate::core::package::Downloads
5757
58-
use crate::core::compiler::{CompileKind, RustcTargetData};
58+
use crate::core::compiler::build_context::RustcTargetDataBuilder;
59+
use crate::core::compiler::CompileKind;
5960
use crate::core::registry::{LockedPatchDependency, PackageRegistry};
6061
use crate::core::resolver::features::{
6162
CliFeatures, FeatureOpts, FeatureResolver, ForceAllTargets, RequestedFeatures, ResolvedFeatures,
@@ -124,7 +125,7 @@ pub fn resolve_ws<'a>(ws: &Workspace<'a>) -> CargoResult<(PackageSet<'a>, Resolv
124125
/// members. In this case, `opts.all_features` must be `true`.
125126
pub fn resolve_ws_with_opts<'cfg>(
126127
ws: &Workspace<'cfg>,
127-
target_data: &mut RustcTargetData<'cfg>,
128+
target_data: &mut RustcTargetDataBuilder<'cfg>,
128129
requested_targets: &[CompileKind],
129130
cli_features: &CliFeatures,
130131
specs: &[PackageIdSpec],
@@ -198,7 +199,7 @@ pub fn resolve_ws_with_opts<'cfg>(
198199
&member_ids,
199200
has_dev_units,
200201
requested_targets,
201-
&mut *target_data,
202+
target_data,
202203
force_all_targets,
203204
)?;
204205

0 commit comments

Comments
 (0)