summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlasdair Armstrong2018-03-15 15:53:36 +0000
committerAlasdair Armstrong2018-03-15 16:02:43 +0000
commite3e597feb532c71e0db32eb9abbebb9f51314d6d (patch)
tree90a35080f43281477de67bb26e80768c5bf1de6c /src
parent860034499374a4791371c3a2176497f45b2621a0 (diff)
Sail now exits with code 1 when OCaml fails to compile generated code
Fixes #11
Diffstat (limited to 'src')
-rw-r--r--src/ocaml_backend.ml18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/ocaml_backend.ml b/src/ocaml_backend.ml
index c580b9fa..34039080 100644
--- a/src/ocaml_backend.ml
+++ b/src/ocaml_backend.ml
@@ -669,6 +669,19 @@ let ocaml_main spec sail_dir =
let ocaml_pp_defs f defs =
ToChannel.pretty 1. 80 f (ocaml_defs defs)
+let system_checked str =
+ match Unix.system str with
+ | Unix.WEXITED 0 -> ()
+ | Unix.WEXITED n ->
+ prerr_endline (str ^ " terminated with code " ^ string_of_int n);
+ exit 1
+ | Unix.WSIGNALED _ ->
+ prerr_endline (str ^ " was killed by a signal");
+ exit 1
+ | Unix.WSTOPPED _ ->
+ prerr_endline (str ^ " was stopped by a signal");
+ exit 1
+
let ocaml_compile spec defs =
let sail_dir =
try Sys.getenv "SAIL_DIR" with
@@ -690,11 +703,10 @@ let ocaml_compile spec defs =
let out_chan = open_out "main.ml" in
output_string out_chan (ocaml_main spec sail_dir);
close_out out_chan;
- let _ = Unix.system "ocamlbuild -use-ocamlfind main.native" in
+ system_checked "ocamlbuild -use-ocamlfind main.native";
let _ = Unix.system ("cp main.native " ^ cwd ^ "/" ^ spec) in
()
end
else
- let _ = Unix.system ("ocamlbuild -use-ocamlfind " ^ spec ^ ".cmo") in
- ();
+ system_checked ("ocamlbuild -use-ocamlfind " ^ spec ^ ".cmo");
Unix.chdir cwd