aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
Diffstat (limited to 'driver')
-rw-r--r--driver/Configuration.ml21
-rw-r--r--driver/Driver.ml35
2 files changed, 33 insertions, 23 deletions
diff --git a/driver/Configuration.ml b/driver/Configuration.ml
index 64f24820..41325368 100644
--- a/driver/Configuration.ml
+++ b/driver/Configuration.ml
@@ -20,17 +20,20 @@ let ini_file_name =
Sys.getenv "COMPCERT_CONFIG"
with Not_found ->
let exe_dir = Filename.dirname Sys.executable_name in
- let exe_ini = Filename.concat exe_dir "compcert.ini" in
let share_dir =
Filename.concat (Filename.concat exe_dir Filename.parent_dir_name)
- "share" in
- let share_ini = Filename.concat share_dir "compcert.ini" in
- if Sys.file_exists exe_ini then exe_ini
- else if Sys.file_exists share_ini then share_ini
- else begin
- eprintf "Cannot find compcert.ini configuration file.\n";
- exit 2
- end
+ "share" in
+ let share_compcert_dir =
+ Filename.concat share_dir "compcert" in
+ let search_path = [exe_dir;share_dir;share_compcert_dir] in
+ let files = List.map (fun s -> Filename.concat s "compcert.ini") search_path in
+ try
+ List.find Sys.file_exists files
+ with Not_found ->
+ begin
+ eprintf "Cannot find compcert.ini configuration file.\n";
+ exit 2
+ end
(* Read in the .ini file *)
diff --git a/driver/Driver.ml b/driver/Driver.ml
index b19ba5cc..f53de821 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -185,7 +185,7 @@ let compile_c_ast sourcename csyntax ofile debug =
| Errors.OK asm ->
asm
| Errors.Error msg ->
- print_error stderr msg;
+ eprintf "%s: %a" sourcename print_error msg;
exit 2 in
(* Dump Asm in binary and JSON format *)
if !option_sdump then
@@ -223,7 +223,7 @@ let compile_cminor_file ifile ofile =
(CMtypecheck.type_program
(CMparser.prog CMlexer.token lb)) with
| Errors.Error msg ->
- print_error stderr msg;
+ eprintf "%s: %a" ifile print_error msg;
exit 2
| Errors.OK p ->
let oc = open_out ofile in
@@ -516,6 +516,8 @@ let unset_all opts = List.iter (fun r -> r := false) opts
let num_source_files = ref 0
+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
@@ -568,7 +570,7 @@ let cmdline_actions =
Prefix "-l", Self push_linker_arg;
Prefix "-L", Self push_linker_arg;
Exact "-T", String (fun s -> if Configuration.system = "diab" then
- push_linker_arg ("-Wm "^s)
+ push_linker_arg ("-Wm"^s)
else
push_linker_arg ("-T "^s));
Prefix "-Wl,", Self push_linker_arg;
@@ -638,25 +640,25 @@ let cmdline_actions =
eprintf "Unknown option `%s'\n" s; exit 2);
(* File arguments *)
Suffix ".c", Self (fun s ->
- push_action process_c_file s; incr num_source_files);
+ push_action process_c_file s; incr num_source_files; incr num_input_files);
Suffix ".i", Self (fun s ->
- push_action process_i_file s; incr num_source_files);
+ push_action process_i_file s; incr num_source_files; incr num_input_files);
Suffix ".p", Self (fun s ->
- push_action process_i_file s; incr num_source_files);
+ push_action process_i_file s; incr num_source_files; incr num_input_files);
Suffix ".cm", Self (fun s ->
- push_action process_cminor_file s; incr num_source_files);
+ push_action process_cminor_file s; incr num_source_files; incr num_input_files);
Suffix ".s", Self (fun s ->
- push_action process_s_file s; incr num_source_files);
+ push_action process_s_file s; incr num_source_files; incr num_input_files);
Suffix ".S", Self (fun s ->
- push_action process_S_file s; incr num_source_files);
- Suffix ".o", Self push_linker_arg;
- Suffix ".a", Self push_linker_arg;
+ push_action process_S_file s; incr num_source_files; incr num_input_files);
+ Suffix ".o", Self (fun s -> push_linker_arg s; incr num_input_files);
+ Suffix ".a", Self (fun s -> push_linker_arg s; incr num_input_files);
(* GCC compatibility: .o.ext files and .so files are also object files *)
- _Regexp ".*\\.o\\.", Self push_linker_arg;
- Suffix ".so", Self push_linker_arg;
+ _Regexp ".*\\.o\\.", Self (fun s -> push_linker_arg s; incr num_input_files);
+ Suffix ".so", Self (fun s -> push_linker_arg s; incr num_input_files);
(* GCC compatibility: .h files can be preprocessed with -E *)
Suffix ".h", Self (fun s ->
- push_action process_h_file s; incr num_source_files);
+ push_action process_h_file s; incr num_source_files; incr num_input_files);
]
let _ =
@@ -685,6 +687,11 @@ let _ =
eprintf "Ambiguous '-o' option (multiple source files)\n";
exit 2
end;
+ if !num_input_files = 0 then
+ begin
+ eprintf "ccomp: error: no input file\n";
+ exit 2
+ end;
let linker_args = time "Total compilation time" perform_actions () in
if (not nolink) && linker_args <> [] then begin
linker (output_filename_default "a.out") linker_args