@@ -74,8 +74,6 @@ let opt_with action x f =
74
74
| None -> f None
75
75
| Some x -> action x (fun y -> f (Some y))
76
76
77
- let output_gen output_file f = Filename. gen_file output_file f
78
-
79
77
let with_runtime_files ~runtime_wasm_files f =
80
78
let inputs =
81
79
List. map
@@ -163,8 +161,12 @@ let link_and_optimize
163
161
@@ fun runtime_inputs ->
164
162
Binaryen. link
165
163
~inputs:
166
- (({ Binaryen. module_name = " env" ; file = runtime_file } :: runtime_inputs)
167
- @ List. map ~f: (fun file -> { Binaryen. module_name = " OCaml" ; file }) wat_files)
164
+ ({ Binaryen. module_name = " env" ; file = runtime_file; source_map_file = None }
165
+ :: runtime_inputs
166
+ @ List. map
167
+ ~f: (fun (file , source_map_file ) ->
168
+ { Binaryen. module_name = " OCaml" ; file; source_map_file })
169
+ wat_files)
168
170
~opt_output_sourcemap: opt_temp_sourcemap
169
171
~output_file: temp_file
170
172
() );
@@ -223,7 +225,7 @@ let link_runtime ~profile runtime_wasm_files output_file =
223
225
~opt_output_sourcemap: None
224
226
~inputs:
225
227
(List. map
226
- ~f: (fun file -> { Binaryen. module_name = " env" ; file })
228
+ ~f: (fun file -> { Binaryen. module_name = " env" ; file; source_map_file = None })
227
229
[ runtime_file; extra_runtime ])
228
230
~output_file
229
231
()
@@ -381,7 +383,7 @@ let run
381
383
| Some p -> p
382
384
| None -> Profile. O1
383
385
in
384
- let output (one : Parse_bytecode.one ) ~unit_name ch =
386
+ let output (one : Parse_bytecode.one ) ~unit_name ~ wat_file ~ file ~ opt_source_map_file =
385
387
check_debug one;
386
388
let code = one.code in
387
389
let standalone = Option. is_none unit_name in
@@ -399,7 +401,14 @@ let run
399
401
program
400
402
in
401
403
if standalone then Generate. add_start_function ~context toplevel_name;
402
- Generate. output ch ~enable_source_maps ~context ;
404
+ let ch = open_out_bin file in
405
+ Generate. wasm_output ch ~opt_source_map_file ~context ;
406
+ close_out ch;
407
+ if debug_wat ()
408
+ then (
409
+ let ch = open_out_bin wat_file in
410
+ Generate. output ch ~context ;
411
+ close_out ch);
403
412
if times () then Format. eprintf " compilation: %a@." Timer. print t;
404
413
generated_js
405
414
in
@@ -458,20 +467,28 @@ let run
458
467
else None )
459
468
@@ fun opt_tmp_map_file ->
460
469
let unit_data =
461
- (if debug_wat ()
462
- then
463
- fun f ->
464
- f (Filename. concat (Filename. dirname output_file) (unit_name ^ " .wat" ))
465
- else Fs. with_intermediate_file (Filename. temp_file unit_name " .wat" ))
466
- @@ fun wat_file ->
470
+ Fs. with_intermediate_file (Filename. temp_file unit_name " .wasm" )
471
+ @@ fun input_file ->
472
+ opt_with
473
+ Fs. with_intermediate_file
474
+ (if enable_source_maps
475
+ then Some (Filename. temp_file unit_name " .wasm.map" )
476
+ else None )
477
+ @@ fun opt_input_sourcemap ->
467
478
let strings, fragments =
468
- output_gen wat_file (output code ~unit_name: (Some unit_name))
479
+ output
480
+ code
481
+ ~wat_file:
482
+ (Filename. concat (Filename. dirname output_file) (unit_name ^ " .wat" ))
483
+ ~unit_name: (Some unit_name)
484
+ ~file: input_file
485
+ ~opt_source_map_file: opt_input_sourcemap
469
486
in
470
487
Binaryen. optimize
471
488
~profile
472
- ~opt_input_sourcemap: None
489
+ ~opt_input_sourcemap
473
490
~opt_output_sourcemap: opt_tmp_map_file
474
- ~input_file: wat_file
491
+ ~input_file
475
492
~output_file: tmp_wasm_file
476
493
() ;
477
494
{ Link. unit_name; unit_info; strings; fragments }
@@ -491,10 +508,8 @@ let run
491
508
ic
492
509
in
493
510
if times () then Format. eprintf " parsing: %a@." Timer. print t1;
494
- (if debug_wat ()
495
- then fun f -> f (Filename. chop_extension output_file ^ " .wat" )
496
- else Fs. with_intermediate_file (Filename. temp_file " code" " .wat" ))
497
- @@ fun wat_file ->
511
+ Fs. with_intermediate_file (Filename. temp_file " code" " .wasm" )
512
+ @@ fun input_wasm_file ->
498
513
let dir = Filename. chop_extension output_file ^ " .assets" in
499
514
Link. gen_dir dir
500
515
@@ fun tmp_dir ->
@@ -504,7 +519,19 @@ let run
504
519
then Some (Filename. concat tmp_dir " code.wasm.map" )
505
520
else None
506
521
in
507
- let generated_js = output_gen wat_file (output code ~unit_name: None ) in
522
+ let opt_source_map_file =
523
+ if enable_source_maps
524
+ then Some (Filename. temp_file " code" " .wasm.map" )
525
+ else None
526
+ in
527
+ let generated_js =
528
+ output
529
+ code
530
+ ~unit_name: None
531
+ ~wat_file: (Filename. chop_extension output_file ^ " .wat" )
532
+ ~file: input_wasm_file
533
+ ~opt_source_map_file
534
+ in
508
535
let tmp_wasm_file = Filename. concat tmp_dir " code.wasm" in
509
536
let primitives =
510
537
link_and_optimize
@@ -513,7 +540,7 @@ let run
513
540
~sourcemap_don't_inline_content
514
541
~opt_sourcemap
515
542
runtime_wasm_files
516
- [ wat_file ]
543
+ [ input_wasm_file, opt_source_map_file ]
517
544
tmp_wasm_file
518
545
in
519
546
let wasm_name =
0 commit comments