Implement printing to file in llvm_util
This commit is contained in:
parent
c80cbe4bae
commit
6e734fce63
@ -320,7 +320,7 @@ fn print(&self, req: &PrintRequest, out: &mut dyn PrintBackendInfo, sess: &Sessi
|
|||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
_other => llvm_util::print(req, sess),
|
_other => llvm_util::print(req, out, sess),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
use rustc_codegen_ssa::target_features::{
|
use rustc_codegen_ssa::target_features::{
|
||||||
supported_target_features, tied_target_features, RUSTC_SPECIFIC_FEATURES,
|
supported_target_features, tied_target_features, RUSTC_SPECIFIC_FEATURES,
|
||||||
};
|
};
|
||||||
|
use rustc_codegen_ssa::traits::PrintBackendInfo;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_data_structures::small_c_str::SmallCStr;
|
use rustc_data_structures::small_c_str::SmallCStr;
|
||||||
use rustc_fs_util::path_to_c_string;
|
use rustc_fs_util::path_to_c_string;
|
||||||
@ -350,7 +351,7 @@ fn llvm_target_features(tm: &llvm::TargetMachine) -> Vec<(&str, &str)> {
|
|||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_target_features(sess: &Session, tm: &llvm::TargetMachine) {
|
fn print_target_features(out: &mut dyn PrintBackendInfo, sess: &Session, tm: &llvm::TargetMachine) {
|
||||||
let mut llvm_target_features = llvm_target_features(tm);
|
let mut llvm_target_features = llvm_target_features(tm);
|
||||||
let mut known_llvm_target_features = FxHashSet::<&'static str>::default();
|
let mut known_llvm_target_features = FxHashSet::<&'static str>::default();
|
||||||
let mut rustc_target_features = supported_target_features(sess)
|
let mut rustc_target_features = supported_target_features(sess)
|
||||||
@ -383,24 +384,24 @@ fn print_target_features(sess: &Session, tm: &llvm::TargetMachine) {
|
|||||||
.max()
|
.max()
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
|
|
||||||
println!("Features supported by rustc for this target:");
|
writeln!(out, "Features supported by rustc for this target:");
|
||||||
for (feature, desc) in &rustc_target_features {
|
for (feature, desc) in &rustc_target_features {
|
||||||
println!(" {1:0$} - {2}.", max_feature_len, feature, desc);
|
writeln!(out, " {1:0$} - {2}.", max_feature_len, feature, desc);
|
||||||
}
|
}
|
||||||
println!("\nCode-generation features supported by LLVM for this target:");
|
writeln!(out, "\nCode-generation features supported by LLVM for this target:");
|
||||||
for (feature, desc) in &llvm_target_features {
|
for (feature, desc) in &llvm_target_features {
|
||||||
println!(" {1:0$} - {2}.", max_feature_len, feature, desc);
|
writeln!(out, " {1:0$} - {2}.", max_feature_len, feature, desc);
|
||||||
}
|
}
|
||||||
if llvm_target_features.is_empty() {
|
if llvm_target_features.is_empty() {
|
||||||
println!(" Target features listing is not supported by this LLVM version.");
|
writeln!(out, " Target features listing is not supported by this LLVM version.");
|
||||||
}
|
}
|
||||||
println!("\nUse +feature to enable a feature, or -feature to disable it.");
|
writeln!(out, "\nUse +feature to enable a feature, or -feature to disable it.");
|
||||||
println!("For example, rustc -C target-cpu=mycpu -C target-feature=+feature1,-feature2\n");
|
writeln!(out, "For example, rustc -C target-cpu=mycpu -C target-feature=+feature1,-feature2\n");
|
||||||
println!("Code-generation features cannot be used in cfg or #[target_feature],");
|
writeln!(out, "Code-generation features cannot be used in cfg or #[target_feature],");
|
||||||
println!("and may be renamed or removed in a future version of LLVM or rustc.\n");
|
writeln!(out, "and may be renamed or removed in a future version of LLVM or rustc.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn print(req: &PrintRequest, sess: &Session) {
|
pub(crate) fn print(req: &PrintRequest, out: &mut dyn PrintBackendInfo, sess: &Session) {
|
||||||
require_inited();
|
require_inited();
|
||||||
let tm = create_informational_target_machine(sess);
|
let tm = create_informational_target_machine(sess);
|
||||||
match req.kind {
|
match req.kind {
|
||||||
@ -412,7 +413,7 @@ pub(crate) fn print(req: &PrintRequest, sess: &Session) {
|
|||||||
.unwrap_or_else(|e| bug!("failed to convert to cstring: {}", e));
|
.unwrap_or_else(|e| bug!("failed to convert to cstring: {}", e));
|
||||||
unsafe { llvm::LLVMRustPrintTargetCPUs(tm, cpu_cstring.as_ptr()) };
|
unsafe { llvm::LLVMRustPrintTargetCPUs(tm, cpu_cstring.as_ptr()) };
|
||||||
}
|
}
|
||||||
PrintKind::TargetFeatures => print_target_features(sess, tm),
|
PrintKind::TargetFeatures => print_target_features(out, sess, tm),
|
||||||
_ => bug!("rustc_codegen_llvm can't handle print request: {:?}", req),
|
_ => bug!("rustc_codegen_llvm can't handle print request: {:?}", req),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,9 @@
|
|||||||
|
|
||||||
pub use self::abi::AbiBuilderMethods;
|
pub use self::abi::AbiBuilderMethods;
|
||||||
pub use self::asm::{AsmBuilderMethods, AsmMethods, GlobalAsmOperandRef, InlineAsmOperandRef};
|
pub use self::asm::{AsmBuilderMethods, AsmMethods, GlobalAsmOperandRef, InlineAsmOperandRef};
|
||||||
pub use self::backend::{Backend, BackendTypes, CodegenBackend, ExtraBackendMethods, PrintBackendInfo};
|
pub use self::backend::{
|
||||||
|
Backend, BackendTypes, CodegenBackend, ExtraBackendMethods, PrintBackendInfo,
|
||||||
|
};
|
||||||
pub use self::builder::{BuilderMethods, OverflowOp};
|
pub use self::builder::{BuilderMethods, OverflowOp};
|
||||||
pub use self::consts::ConstMethods;
|
pub use self::consts::ConstMethods;
|
||||||
pub use self::coverageinfo::CoverageInfoBuilderMethods;
|
pub use self::coverageinfo::CoverageInfoBuilderMethods;
|
||||||
|
Loading…
Reference in New Issue
Block a user