diff --git a/lib/sasacore/simuState.ml b/lib/sasacore/simuState.ml
index eaa883944e44cbea2eb18e02f014ca2fcfdb9076..aaa67170187608ada1ecc68016de826c44b34767 100644
--- a/lib/sasacore/simuState.ml
+++ b/lib/sasacore/simuState.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 19/01/2023 (at 11:08) by Erwan Jahier> *)
+(* Time-stamp: <modified the 25/01/2023 (at 10:47) by Erwan Jahier> *)
 
 open Register
 open Topology
@@ -179,7 +179,7 @@ let (env_rif_decl: SasArg.t -> 'v Process.t list -> string) =
       (List.map (fun (base, tstr) -> Printf.sprintf "\"%s\":%s" base tstr) ssl)
 
 
-let (make : bool -> string array -> 'v t) =
+let rec (make : bool -> string array -> 'v t) =
   fun dynlink argv ->
   let args =
     try SasArg.parse argv;
@@ -335,10 +335,14 @@ let (make : bool -> string array -> 'v t) =
     }
   with
   | Dynlink.Error e ->
-    Printf.eprintf " [sasa] Error when dynlinking (Sasacore.make): %s\n%!"
-      (Dynlink.error_message e);
-    flush_all();
-    exit 2
+    let res = Sys.command (Printf.sprintf "make %s.cmxs"(Filename.remove_extension args.topo)) in
+    if res = 0 then make dynlink argv else (
+      Printf.eprintf " [sasa] %s\n%!"
+        (Dynlink.error_message e);
+      Printf.eprintf " [sasa] It looks like you didn't compile your Ocaml algorithm.\n%!";
+      flush_all();
+      exit res
+    )
   | e ->
     Printf.eprintf " [sasa] Error (Sasacore.make): %s\n%!" (Printexc.to_string e);
     flush_all();