This repository has been archived on 2024-01-18. You can view files and clone it, but cannot push or open issues or pull requests.
compilation/flap/src/commandLineOptions.ml
2023-10-04 15:40:22 +02:00

162 lines
4.1 KiB
OCaml

(** Command line arguments analysis. *)
let options_list =
ref []
let push local_options =
options_list := !options_list @ local_options
let options names kind doc =
let first_shot =
let state = ref true in
fun s ->
if !state then (state := false; s)
else
(List.hd (Str.(split (regexp " ") doc)))
in
List.map (fun n -> (n, kind, first_shot doc)) names
let optimizers_options () =
List.map (fun (module O : Optimizers.Optimizer) -> Arg.(
options
["--" ^ O.shortname]
(Set O.activated)
(Printf.sprintf " Activate optimization `%s'." O.longname)
)) !Optimizers.optimizers
let show_version_and_exits () =
Printf.printf "flap %s\n%!" Version.number;
exit 0
let generic_options () = Arg.(align (List.flatten [
options
["--version"; "-v"]
(Unit show_version_and_exits)
" Show the version number and exits.";
options
["--source"; "-s"]
(String Options.set_source_language)
(" Set the source programming language");
options
["--target"; "-t"]
(String Options.set_target_language)
(" Set the target programming language");
options
["--interactive"; "-i"]
(Bool Options.set_interactive_mode)
("(true|false) Set the compiler mode");
options
["--run"; "-r"]
(Bool Options.set_running_mode)
("(true|false) Ask the compiler to run the compiled code");
options
["--verbose"; "-V"]
(Bool Options.set_verbose_mode)
("(true|false) Ask the compiler to be verbose");
options
["--verbose-eval"; "-VV"]
(Bool Options.set_verbose_eval)
("(true|false) Ask the compiler to be show the result of evaluation");
options
["--dry"; "-d"]
(Bool Options.set_dry_mode)
("(true|false) Ask the compiler not to produce compiled file");
options
["--unsafe"; "-u"]
(Bool Options.set_unsafe)
("(true|false) Ask the compiler not to typecheck");
options
["--bench"; "-B"]
(Bool Options.set_benchmark)
("(true|false) Ask the compiler to show evaluation time.");
options
["--using"; "-!" ]
(String Options.insert_using)
(" Force the compilation to use this intermediate language");
options
["--types"; "-T"]
(Bool Options.set_show_types)
("(true|false) Ask the compiler to show types for toplevel values.");
options
["--infer"; "-I"]
(Bool Options.set_infer_types)
("(true|false) Ask the compiler to infer types for toplevel values.");
options
["--typechecking"; "-C"]
(Bool Options.set_check_types)
("(true|false) Ask the compiler to check types for toplevel values.");
options
["--sexp-in"]
(Bool Options.set_use_sexp_in)
("(true|false) Activate sexp parsing.");
options
["--sexp-out"]
(Bool Options.set_use_sexp_out)
("(true|false) Activate sexp printing.");
options
["--scripts-dir"; "-IS"]
(String Options.set_scripts_dir)
("[dirname] Set the directory where compiler scripts are located.");
options
["--include-dir"; "-II"]
(String Options.set_include_dir)
("[dirname] Set the directory where runtime.c is located.");
options
["--output-file"; "-o"]
(String Options.set_output_file)
"[filename] Set the output file.";
options
["--fast-pattern-matching"; "-fpm"]
(Bool Options.set_fast_match)
" Enable efficient pattern-matching compilation.";
options
["--backend"; "-b"]
(String Options.set_backend)
"[architecture] Set the architecture backend, default is x86-64.";
options
["--regalloc-strategy"; "-R"]
(String Options.set_regalloc)
"[strategy] Set the register allocation strategy, default is naive \
(alternatives: advanced).";
options
["--debug"; "-D"]
(Bool Options.set_debug_mode)
("(true|false) Ask the compiler to dump internal information");
options
["--loc"; "-l"]
(Bool Options.set_print_locs)
("(true|false) Ask the compiler to print locations in error messages");
] @ (List.flatten (optimizers_options ()))))
let usage_msg =
"flap [options] input_filename"
let parse () =
Arg.parse !options_list Options.set_input_filename usage_msg
let initialize () =
push (generic_options ())