aboutsummaryrefslogtreecommitdiff
path: root/pretyping/nativenorm.ml
diff options
context:
space:
mode:
authorGuillaume Melquiond2021-02-12 16:56:55 +0100
committerGuillaume Melquiond2021-02-26 08:16:34 +0100
commit94319a520e7df0713942c2caada43214b49ed19b (patch)
treec3f613e85c065b1ecfe6a5a37b8640969bcdc9a2 /pretyping/nativenorm.ml
parent7b2cab92eb2d76f4768a2b0ff6d8ccf12102f101 (diff)
Delay the dynamic linking of native-code libraries until native_compute is called (fix #13849).
The libraries are eventually linked in native_norm and native_conv_gen, just before mk_norm_code and mk_conv_code are called. This commit also renames call_linker as execute_library to better reflect its role. It also makes link_library independent from it, since their error handling are completely opposite.
Diffstat (limited to 'pretyping/nativenorm.ml')
-rw-r--r--pretyping/nativenorm.ml17
1 files changed, 8 insertions, 9 deletions
diff --git a/pretyping/nativenorm.ml b/pretyping/nativenorm.ml
index 28621aa92e..2c107502f4 100644
--- a/pretyping/nativenorm.ml
+++ b/pretyping/nativenorm.ml
@@ -502,15 +502,9 @@ let stop_profiler m_pid =
| _ -> ()
let native_norm env sigma c ty =
+ Nativelib.link_libraries ();
let c = EConstr.Unsafe.to_constr c in
let ty = EConstr.Unsafe.to_constr ty in
- if not (Flags.get_native_compiler ()) then
- user_err Pp.(str "Native_compute reduction has been disabled.")
- else
- (*
- Format.eprintf "Numbers of free variables (named): %i\n" (List.length vl1);
- Format.eprintf "Numbers of free variables (rel): %i\n" (List.length vl2);
- *)
let profile = get_profiling_enabled () in
let print_timing = get_timing_enabled () in
let ml_filename, prefix = Nativelib.get_ml_filename () in
@@ -526,17 +520,22 @@ let native_norm env sigma c ty =
if print_timing then Feedback.msg_info (Pp.str time_info);
let profiler_pid = if profile then start_profiler () else None in
let t0 = Unix.gettimeofday () in
- Nativelib.call_linker ~fatal:true ~prefix fn (Some upd);
+ let (rt1, _) = Nativelib.execute_library ~prefix fn upd in
let t1 = Unix.gettimeofday () in
if profile then stop_profiler profiler_pid;
let time_info = Format.sprintf "native_compute: Evaluation done in %.5f" (t1 -. t0) in
if print_timing then Feedback.msg_info (Pp.str time_info);
- let res = nf_val env sigma !Nativelib.rt1 ty in
+ let res = nf_val env sigma rt1 ty in
let t2 = Unix.gettimeofday () in
let time_info = Format.sprintf "native_compute: Reification done in %.5f" (t2 -. t1) in
if print_timing then Feedback.msg_info (Pp.str time_info);
EConstr.of_constr res
+let native_norm env sigma c ty =
+ if not (Flags.get_native_compiler ()) then
+ user_err Pp.(str "Native_compute reduction has been disabled.");
+ native_norm env sigma c ty
+
let native_conv_generic pb sigma t =
Nativeconv.native_conv_gen pb (evars_of_evar_map sigma) t