Skip to content

Commit e8cf087

Browse files
committed
Implement supported-crate-types print request
As an unstable print request.
1 parent 83d3197 commit e8cf087

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

compiler/rustc_driver_impl/src/lib.rs

+12-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
// tidy-alphabetical-end
2121

2222
use std::cmp::max;
23-
use std::collections::BTreeMap;
23+
use std::collections::{BTreeMap, BTreeSet};
2424
use std::ffi::OsString;
2525
use std::fmt::Write as _;
2626
use std::fs::{self, File};
@@ -61,7 +61,7 @@ use rustc_session::config::{
6161
};
6262
use rustc_session::getopts::{self, Matches};
6363
use rustc_session::lint::{Lint, LintId};
64-
use rustc_session::output::collect_crate_types;
64+
use rustc_session::output::{CRATE_TYPES, collect_crate_types, invalid_output_for_target};
6565
use rustc_session::{EarlyDiagCtxt, Session, config, filesearch};
6666
use rustc_span::FileName;
6767
use rustc_target::json::ToJson;
@@ -789,6 +789,16 @@ fn print_crate_info(
789789
sess.dcx().fatal("only Apple targets currently support deployment version info")
790790
}
791791
}
792+
SupportedCrateTypes => {
793+
let supported_crate_types = CRATE_TYPES
794+
.iter()
795+
.filter(|(_, crate_type)| !invalid_output_for_target(&sess, *crate_type))
796+
.map(|(crate_type_sym, _)| *crate_type_sym)
797+
.collect::<BTreeSet<_>>();
798+
for supported_crate_type in supported_crate_types {
799+
println_info!("{}", supported_crate_type.as_str());
800+
}
801+
}
792802
}
793803

794804
req.out.overwrite(&crate_info, sess);

compiler/rustc_session/src/config.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ pub const PRINT_KINDS: &[(&str, PrintKind)] = &[
5858
("relocation-models", PrintKind::RelocationModels),
5959
("split-debuginfo", PrintKind::SplitDebuginfo),
6060
("stack-protector-strategies", PrintKind::StackProtectorStrategies),
61+
("supported-crate-types", PrintKind::SupportedCrateTypes),
6162
("sysroot", PrintKind::Sysroot),
6263
("target-cpus", PrintKind::TargetCPUs),
6364
("target-features", PrintKind::TargetFeatures),
@@ -888,6 +889,7 @@ pub enum PrintKind {
888889
RelocationModels,
889890
SplitDebuginfo,
890891
StackProtectorStrategies,
892+
SupportedCrateTypes,
891893
Sysroot,
892894
TargetCPUs,
893895
TargetFeatures,
@@ -2063,7 +2065,10 @@ fn check_print_request_stability(
20632065
(print_name, print_kind): (&str, PrintKind),
20642066
) {
20652067
match print_kind {
2066-
PrintKind::AllTargetSpecsJson | PrintKind::CheckCfg | PrintKind::TargetSpecJson
2068+
PrintKind::AllTargetSpecsJson
2069+
| PrintKind::CheckCfg
2070+
| PrintKind::SupportedCrateTypes
2071+
| PrintKind::TargetSpecJson
20672072
if !unstable_opts.unstable_options =>
20682073
{
20692074
early_dcx.early_fatal(format!(

0 commit comments

Comments
 (0)