aboutsummaryrefslogtreecommitdiffstats
path: root/driver/Driver.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2016-06-24 13:57:27 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2016-06-24 13:57:27 +0200
commit410a5db3d48e84f2157c2c4f4bc29056c0e174b9 (patch)
tree800974ebbe73921f27c0c563e56eb0c899efd7f5 /driver/Driver.ml
parent01354123b9df5d3cbb9d43298eea94ddda30acdf (diff)
downloadcompcert-410a5db3d48e84f2157c2c4f4bc29056c0e174b9.tar.gz
compcert-410a5db3d48e84f2157c2c4f4bc29056c0e174b9.zip
Moved assembler and linker into own files.
The function to call the assembler and the linker are now in own files like the preprocessor. Bug 19197
Diffstat (limited to 'driver/Driver.ml')
-rw-r--r--driver/Driver.ml119
1 files changed, 9 insertions, 110 deletions
diff --git a/driver/Driver.ml b/driver/Driver.ml
index 5a7bd929..3e327437 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -16,6 +16,8 @@ open Clflags
open Timing
open Driveraux
open Frontend
+open Assembler
+open Linker
let dump_options = ref false
@@ -108,40 +110,6 @@ let compile_cminor_file ifile ofile =
ifile msg;
exit 2
-(* From asm to object file *)
-
-let assemble ifile ofile =
- let cmd = List.concat [
- Configuration.asm;
- ["-o"; ofile];
- List.rev !assembler_options;
- [ifile]
- ] in
- let exc = command cmd in
- if exc <> 0 then begin
- safe_remove ofile;
- command_error "assembler" exc;
- exit 2
- end
-
-(* Linking *)
-
-let linker exe_name files =
- let cmd = List.concat [
- Configuration.linker;
- ["-o"; exe_name];
- files;
- (if Configuration.has_runtime_lib
- then ["-L" ^ !stdlib_path; "-lcompcert"]
- else [])
- ] in
- let exc = command cmd in
- if exc <> 0 then begin
- command_error "linker" exc;
- exit 2
- end
-
-
(* Processing of a .c file *)
let process_c_file sourcename =
@@ -271,22 +239,6 @@ let process_h_file sourcename =
exit 2
end
-(* Record actions to be performed after parsing the command line *)
-
-let actions : ((string -> string) * string) list ref = ref []
-
-let push_action fn arg =
- actions := (fn, arg) :: !actions
-
-let push_linker_arg arg =
- push_action (fun s -> s) arg
-
-let perform_actions () =
- let rec perform = function
- | [] -> []
- | (fn, arg) :: rem -> let res = fn arg in res :: perform rem
- in perform (List.rev !actions)
-
let version_string =
if Version.buildnr <> "" && Version.tag <> "" then
sprintf "The CompCert C verified compiler, %s, Build: %s, Tag: %s\n" Version.version Version.buildnr Version.tag
@@ -314,30 +266,6 @@ let target_help = if Configuration.arch = "arm" then
else
""
-let gnu_linker_help =
-" -nostartfiles Do not use the standard system startup files when\n\
-\ linking\n\
-\ -nodefaultlibs Do not use the standard system libraries when\n\
-\ linking\n\
-\ -nostdlib Do not use the standard system startup files or\n\
-\ libraries when linking\n"
-
-let linker_help =
-"Linking options:\n\
-\ -l<lib> Link library <lib>\n\
-\ -L<dir> Add <dir> to search path for libraries\n" ^
- (if gnu_system then gnu_linker_help else "") ^
-" -s Remove all symbol table and relocation information from the\n\
-\ executable\n\
-\ -static Prevent linking with the shared libraries\n\
-\ -T <file> Use <file> as linker command file\n\
-\ -Wl,<opt> Pass option <opt> to the linker\n\
-\ -WUl,<opt> Pass option <opt> to the gcc or dcc used for linking\n\
-\ -Xlinker <opt> Pass <opt> as an option to the linker\n\
-\ -u <symb> Pretend the symbol <symb> is undefined to force linking of\n\
-\ library modules to define it.\n"
-
-
let usage_string =
version_string ^
"Usage: ccomp [options] <source files>\n\
@@ -387,9 +315,7 @@ Code generation options: (use -fno-<opt> to turn off -f<opt>)\n\
\ -falign-branch-targets <n> Set alignment (in bytes) of branch targets\n\
\ -falign-cond-branches <n> Set alignment (in bytes) of conditional branches\n" ^
target_help ^
-"Assembling options:\n\
-\ -Wa,<opt> Pass option <opt> to the assembler\n\
-\ -Xassembler <opt> Pass <opt> as an option to the assembler\n" ^
+ assembler_help ^
linker_help ^
"Tracing options:\n\
\ -dprepro Save C file after preprocessing in <file>.i\n\
@@ -463,11 +389,11 @@ let cmdline_actions =
(* Debugging options *)
Exact "-g", Self (fun s -> option_g := true;
option_gdwarf := 3);] @
- if gnu_system then
+ (if gnu_system then
[ Exact "-gdwarf-2", Self (fun s -> option_g:=true;
option_gdwarf := 2);
Exact "-gdwarf-3", Self (fun s -> option_g := true;
- option_gdwarf := 3);] else [] @
+ option_gdwarf := 3);] else []) @
[ Exact "-frename-static", Self (fun s -> option_rename_static:= true);
Exact "-gdepth", Integer (fun n -> if n = 0 || n <0 then begin
option_g := false
@@ -494,38 +420,11 @@ let cmdline_actions =
Exact "-marm", Unset option_mthumb; ]
else [] @
(* Assembling options *)
- [ Prefix "-Wa,", Self (fun s -> if gnu_system then
- assembler_options := s :: !assembler_options
- else
- assembler_options := List.rev_append (explode_comma_option s) !assembler_options);
- Exact "-Xassembler", String (fun s -> if gnu_system then
- assembler_options := s::"-Xassembler":: !assembler_options
- else
- assembler_options := s::!assembler_options );
+ assembler_actions @
(* Linking options *)
- Prefix "-l", Self push_linker_arg;
- Prefix "-L", Self push_linker_arg; ] @
- if gnu_system then
- [ Exact "-nostartfiles", Self push_linker_arg;
- Exact "-nodefaultlibs", Self push_linker_arg;
- Exact "-nostdlib", Self push_linker_arg;]
- else [] @
- [ Exact "-s", Self push_linker_arg;
- Exact "-static", Self push_linker_arg;
- Exact "-T", String (fun s -> if gnu_system then begin
- push_linker_arg ("-T");
- push_linker_arg(s)
- end else
- push_linker_arg ("-Wm"^s));
- Exact "-Xlinker", String (fun s -> if Configuration.system = "diab" then
- push_linker_arg ("-Wl,"^s)
- else
- push_linker_arg s);
- Prefix "-Wl,", Self push_linker_arg;
- Prefix "-WUl,", Self (fun s -> List.iter push_linker_arg (explode_comma_option s));
- Exact "-u", Self push_linker_arg;
+ linker_actions @
(* Tracing options *)
- Exact "-dprepro", Set option_dprepro;
+ [ Exact "-dprepro", Set option_dprepro;
Exact "-dparse", Set option_dparse;
Exact "-dc", Set option_dcmedium;
Exact "-dclight", Set option_dclight;
@@ -549,7 +448,7 @@ let cmdline_actions =
Exact "-trace", Self (fun _ -> Interp.trace := 2);
Exact "-random", Self (fun _ -> Interp.mode := Interp.Random);
Exact "-all", Self (fun _ -> Interp.mode := Interp.All)
- ]
+ ]
(* -f options: come in -f and -fno- variants *)
(* Language support options *)
@ f_opt "longdouble" option_flongdouble