[486] | 1 | open Misc.ArgExt |
---|
| 2 | |
---|
| 3 | let default_choice = "default" |
---|
| 4 | let option_settings_step = "during option settings" |
---|
| 5 | |
---|
| 6 | let language_from_string kind default s = |
---|
| 7 | try |
---|
| 8 | Languages.from_string s |
---|
| 9 | with Not_found -> |
---|
| 10 | if s = default_choice then |
---|
| 11 | default |
---|
| 12 | else |
---|
| 13 | Error.global_error option_settings_step |
---|
| 14 | (Printf.sprintf "`%s' is not a valid %s language." s kind) |
---|
| 15 | |
---|
| 16 | let source_language_of_string = language_from_string "source" Languages.Clight |
---|
| 17 | let source_language = ref (source_language_of_string default_choice) |
---|
| 18 | let set_source_language s = source_language := source_language_of_string s |
---|
| 19 | let get_source_language () = !source_language |
---|
| 20 | |
---|
| 21 | let target_language_of_string = language_from_string "target" Languages.ASM |
---|
| 22 | let target_language = ref (target_language_of_string default_choice) |
---|
| 23 | let set_target_language s = target_language := target_language_of_string s |
---|
| 24 | let get_target_language () = !target_language |
---|
| 25 | |
---|
| 26 | let input_files = ref [] |
---|
| 27 | let add_input_file f = input_files := f :: !input_files |
---|
| 28 | let input_files () = !input_files |
---|
| 29 | |
---|
[619] | 30 | let output_files = ref None |
---|
| 31 | let set_output_files s = output_files := Some s |
---|
| 32 | let get_output_files () = !output_files |
---|
| 33 | |
---|
[486] | 34 | let annotation_flag = ref false |
---|
| 35 | let request_annotation = (:=) annotation_flag |
---|
| 36 | let annotation_requested () = !annotation_flag |
---|
| 37 | |
---|
| 38 | let interpretation_flag = ref false |
---|
| 39 | let request_interpretation = (:=) interpretation_flag |
---|
| 40 | let interpretation_requested () = !interpretation_flag |
---|
| 41 | |
---|
| 42 | let debug_flag = ref false |
---|
| 43 | let set_debug = (:=) debug_flag |
---|
| 44 | let is_debug_enabled () = !debug_flag |
---|
| 45 | |
---|
[619] | 46 | let print_result_flag = ref false |
---|
| 47 | let set_print_result = (:=) print_result_flag |
---|
| 48 | let is_print_result_enabled () = !print_result_flag |
---|
| 49 | |
---|
[486] | 50 | let dev_test = ref false |
---|
| 51 | let set_dev_test = (:=) dev_test |
---|
| 52 | let is_dev_test_enabled () = !dev_test |
---|
| 53 | |
---|
| 54 | let options = OptionsParsing.register [ |
---|
| 55 | "-s", Arg.String set_source_language, |
---|
| 56 | " Choose the source language between:"; |
---|
| 57 | extra_doc " Clight, Cminor"; |
---|
| 58 | extra_doc " [default is C]"; |
---|
| 59 | |
---|
| 60 | "-l", Arg.String set_target_language, |
---|
| 61 | " Choose the target language between:"; |
---|
| 62 | extra_doc " Clight, Cminor, RTLabs, RTL, ERTL, LTL, LIN, ASM"; |
---|
| 63 | extra_doc " [default is ASM]"; |
---|
| 64 | |
---|
| 65 | "-a", Arg.Set annotation_flag, |
---|
| 66 | " Add cost annotations on the source code."; |
---|
| 67 | |
---|
| 68 | "-i", Arg.Set interpretation_flag, |
---|
| 69 | " Interpret the compiled code."; |
---|
| 70 | |
---|
| 71 | "-d", Arg.Set debug_flag, |
---|
| 72 | " Debugging mode."; |
---|
| 73 | |
---|
[619] | 74 | "-o", Arg.String set_output_files, |
---|
| 75 | " Prefix of the output files."; |
---|
| 76 | |
---|
| 77 | "-res", Arg.Set print_result_flag, |
---|
| 78 | " Print the result of interpretations."; |
---|
| 79 | |
---|
[486] | 80 | "-dev", Arg.Set dev_test, |
---|
| 81 | " Playground for developers."; |
---|
| 82 | ] |
---|