From 5920d4c569337b0eb09132f6160d11b9c0c73888 Mon Sep 17 00:00:00 2001 From: Bernhard Schommer Date: Mon, 29 Jan 2018 12:05:37 +0100 Subject: Share code for common options. In order to avoid more divergence between the command line options of clightgen and ccomp the code for the common options, the language support options, the version string and the general options. --- exportclight/Clightgen.ml | 85 +++++++++-------------------------------------- 1 file changed, 15 insertions(+), 70 deletions(-) (limited to 'exportclight') diff --git a/exportclight/Clightgen.ml b/exportclight/Clightgen.ml index f927e5ab..2878cb17 100644 --- a/exportclight/Clightgen.ml +++ b/exportclight/Clightgen.ml @@ -16,12 +16,11 @@ open Printf open Commandline open Clflags +open CommonOptions open Driveraux open Frontend -(* Location of the compatibility library *) - -let stdlib_path = ref Configuration.stdlib_path +let tool_name = "Clight generator" (* clightgen-specific options *) @@ -86,14 +85,8 @@ let process_i_file sourcename = let ofile = output_filename sourcename ".i" in compile_c_file sourcename sourcename ofile -let version_string = - if Version.buildnr <> "" && Version.tag <> "" then - sprintf "The CompCert Clight generator, %s, Build: %s, Tag: %s\n" Version.version Version.buildnr Version.tag - else - "The CompCert Clight generator, version "^ Version.version ^ "\n" - let usage_string = - version_string ^ + version_string tool_name^ {|Usage: clightgen [options] Recognized source files: .c C source file @@ -104,44 +97,18 @@ Processing options: -o Generate output in |} ^ prepro_help ^ -{|Language support options (use -fno- to turn off -f) : - -fbitfields Emulate bit fields in structs [off] - -flongdouble Treat 'long double' as 'double' [off] - -fstruct-passing Support passing structs and unions by value as function - results or function arguments [off] - -fstruct-return Like -fstruct-passing (deprecated) - -fvararg-calls Emulate calls to variable-argument functions [on] - -funprototyped Support calls to old-style functions without prototypes [on] - -fpacked-structs Emulate packed structs [off] - -finline-asm Support inline 'asm' statements [off] - -fall Activate all language support options above - -fnone Turn off all language support options above -Tracing options: +language_support_help ^ +{|Tracing options: -dparse Save C file after parsing and elaboration in .parsed.c -dc Save generated Compcert C in .compcert.c -dclight Save generated Clight in .light.c -General options: - -stdlib Set the path of the Compcert run-time library - -v Print external commands before invoking them - -version Print the version string and exit - -target Generate code for the given target - -conf Read configuration from file - @ Read command line options from |} ^ + general_help ^ Cerrors.warning_help let print_usage_and_exit () = printf "%s" usage_string; exit 0 -let print_version_and_exit () = - printf "%s" version_string; exit 0 - -let language_support_options = [ - option_fbitfields; option_flongdouble; - option_fstruct_passing; option_fvararg_calls; option_funprototyped; - option_fpacked_structs; option_finline_asm -] - let set_all opts () = List.iter (fun r -> r := true) opts let unset_all opts () = List.iter (fun r -> r := false) opts @@ -158,52 +125,30 @@ let perform_actions () = let num_input_files = ref 0 let cmdline_actions = - let f_opt name ref = - [Exact("-f" ^ name), Set ref; Exact("-fno-" ^ name), Unset ref] in [ (* Getting help *) Exact "-help", Unit print_usage_and_exit; - Exact "--help", Unit print_usage_and_exit; -(* Getting version info *) - Exact "-version", Unit print_version_and_exit; - Exact "--version", Unit print_version_and_exit; + Exact "--help", Unit print_usage_and_exit;] + (* Getting version info *) + @ version_options tool_name @ (* Processing options *) - Exact "-E", Set option_E; + [ Exact "-E", Set option_E; Exact "-normalize", Set option_normalize; Exact "-o", String(fun s -> option_o := Some s); Prefix "-o", Self (fun s -> let s = String.sub s 2 ((String.length s) - 2) in option_o := Some s);] (* Preprocessing options *) @ prepro_actions @ -(* Language support options -- more below *) - [Exact "-fall", Unit (set_all language_support_options); - Exact "-fnone", Unit (unset_all language_support_options); (* Tracing options *) - Exact "-dparse", Set option_dparse; + [ Exact "-dparse", Set option_dparse; Exact "-dc", Set option_dcmedium; - Exact "-dclight", Set option_dclight; -(* General options *) - Exact "-v", Set option_v; - Exact "-stdlib", String(fun s -> stdlib_path := s); - Exact "-stdlib", String(fun s -> stdlib_path := s); - Exact "-conf", Ignore; (* Ignore option since it is already handled *) - Exact "-target", Ignore; (* Ignore option since it is already handled *) - ] + Exact "-dclight", Set option_dclight;] + @ general_options (* Diagnostic options *) @ Cerrors.warning_options -(* -f options: come in -f and -fno- variants *) -(* Language support options *) - @ f_opt "longdouble" option_flongdouble - @ f_opt "struct-return" option_fstruct_passing - @ f_opt "struct-passing" option_fstruct_passing - @ f_opt "bitfields" option_fbitfields - @ f_opt "vararg-calls" option_fvararg_calls - @ f_opt "unprototyped" option_funprototyped - @ f_opt "packed-structs" option_fpacked_structs - @ f_opt "inline-asm" option_finline_asm - @ [ + @ language_support_options @ (* Catch options that are not handled *) - Prefix "-", Self (fun s -> + [Prefix "-", Self (fun s -> eprintf "Unknown option `%s'\n" s; exit 2); (* File arguments *) Suffix ".c", Self (fun s -> -- cgit