standalone: Expose flags in command-line

This commit is contained in:
David Mak 2023-09-06 18:49:58 +08:00
parent 51486fc66a
commit 98736fe310
1 changed files with 14 additions and 4 deletions

View File

@ -7,6 +7,7 @@ use inkwell::{
}; };
use parking_lot::{Mutex, RwLock}; use parking_lot::{Mutex, RwLock};
use std::{borrow::Borrow, collections::HashMap, fs, path::Path, sync::Arc}; use std::{borrow::Borrow, collections::HashMap, fs, path::Path, sync::Arc};
use std::mem::transmute;
use nac3core::{ use nac3core::{
codegen::{ codegen::{
@ -41,6 +42,14 @@ struct CommandLineArgs {
/// The number of threads allocated to processing the source file. /// The number of threads allocated to processing the source file.
#[arg(default_value_t = 1)] #[arg(default_value_t = 1)]
threads: u32, threads: u32,
/// The level to optimize the LLVM IR.
#[arg(short = 'O', default_value_t = 2, value_parser = clap::value_parser!(u32).range(0..=3))]
opt_level: u32,
/// Whether to emit LLVM IR at the end of every module.
#[arg(long, default_value_t = false)]
emit_llvm: bool,
} }
fn handle_typevar_definition( fn handle_typevar_definition(
@ -169,7 +178,8 @@ fn handle_assignment_pattern(
fn main() { fn main() {
let cli = CommandLineArgs::parse(); let cli = CommandLineArgs::parse();
let CommandLineArgs { file_name, threads } = cli; let CommandLineArgs { file_name, threads, opt_level, emit_llvm } = cli;
let opt_level: OptimizationLevel = unsafe { transmute(opt_level) };
Target::initialize_all(&InitializationConfig::default()); Target::initialize_all(&InitializationConfig::default());
@ -266,8 +276,8 @@ fn main() {
calls: instance.calls, calls: instance.calls,
id: 0, id: 0,
llvm_options: CodeGenLLVMOptions { llvm_options: CodeGenLLVMOptions {
opt_level: OptimizationLevel::Default, opt_level,
emit_llvm: false, emit_llvm,
}, },
}; };
@ -322,7 +332,7 @@ fn main() {
&triple, &triple,
"", "",
"", "",
OptimizationLevel::Default, opt_level,
RelocMode::Default, RelocMode::Default,
CodeModel::Default, CodeModel::Default,
) )