forked from M-Labs/nac3
standalone: Add command line flags for target properties
For testing codegen for different platforms on the host system.
This commit is contained in:
parent
048fcb0a69
commit
f59d45805f
@ -49,6 +49,18 @@ struct CommandLineArgs {
|
|||||||
/// Whether to emit LLVM IR at the end of every module.
|
/// Whether to emit LLVM IR at the end of every module.
|
||||||
#[arg(long, default_value_t = false)]
|
#[arg(long, default_value_t = false)]
|
||||||
emit_llvm: bool,
|
emit_llvm: bool,
|
||||||
|
|
||||||
|
/// The target triple to compile for.
|
||||||
|
#[arg(long)]
|
||||||
|
triple: Option<String>,
|
||||||
|
|
||||||
|
/// The target CPU to compile for.
|
||||||
|
#[arg(long)]
|
||||||
|
mcpu: Option<String>,
|
||||||
|
|
||||||
|
/// Additional target features to enable/disable, specified using the `+`/`-` prefixes.
|
||||||
|
#[arg(long)]
|
||||||
|
target_features: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_typevar_definition(
|
fn handle_typevar_definition(
|
||||||
@ -177,7 +189,24 @@ fn handle_assignment_pattern(
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let cli = CommandLineArgs::parse();
|
let cli = CommandLineArgs::parse();
|
||||||
let CommandLineArgs { file_name, threads, opt_level, emit_llvm } = cli;
|
let CommandLineArgs {
|
||||||
|
file_name,
|
||||||
|
threads,
|
||||||
|
opt_level,
|
||||||
|
emit_llvm,
|
||||||
|
triple,
|
||||||
|
mcpu,
|
||||||
|
target_features,
|
||||||
|
} = cli;
|
||||||
|
|
||||||
|
Target::initialize_all(&InitializationConfig::default());
|
||||||
|
|
||||||
|
let host_target_machine = CodeGenTargetMachineOptions::from_host();
|
||||||
|
let triple = triple.unwrap_or(host_target_machine.triple.clone());
|
||||||
|
let mcpu = mcpu
|
||||||
|
.map(|arg| if arg == "native" { host_target_machine.cpu.clone() } else { arg })
|
||||||
|
.unwrap_or_default();
|
||||||
|
let target_features = target_features.unwrap_or_default();
|
||||||
let opt_level = match opt_level {
|
let opt_level = match opt_level {
|
||||||
0 => OptimizationLevel::None,
|
0 => OptimizationLevel::None,
|
||||||
1 => OptimizationLevel::Less,
|
1 => OptimizationLevel::Less,
|
||||||
@ -186,8 +215,6 @@ fn main() {
|
|||||||
_ => OptimizationLevel::Aggressive,
|
_ => OptimizationLevel::Aggressive,
|
||||||
};
|
};
|
||||||
|
|
||||||
Target::initialize_all(&InitializationConfig::default());
|
|
||||||
|
|
||||||
let program = match fs::read_to_string(file_name.clone()) {
|
let program = match fs::read_to_string(file_name.clone()) {
|
||||||
Ok(program) => program,
|
Ok(program) => program,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
@ -272,7 +299,12 @@ fn main() {
|
|||||||
|
|
||||||
let llvm_options = CodeGenLLVMOptions {
|
let llvm_options = CodeGenLLVMOptions {
|
||||||
opt_level,
|
opt_level,
|
||||||
target: CodeGenTargetMachineOptions::from_host_triple(),
|
target: CodeGenTargetMachineOptions {
|
||||||
|
triple,
|
||||||
|
cpu: mcpu,
|
||||||
|
features: target_features,
|
||||||
|
..host_target_machine
|
||||||
|
},
|
||||||
emit_llvm,
|
emit_llvm,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user