@@ -73,6 +73,32 @@ let output_gen output_file f =
7373 Code.Var. set_stable (Config.Flag. stable_var () );
7474 Filename. gen_file output_file f
7575
76+ let build_runtime ~runtime_file =
77+ let variables = [ " use-js-string" , Config.Flag. use_js_string () ] in
78+ List. fold_left
79+ ~f: (fun cont (name , contents ) ->
80+ fun inputs ->
81+ Fs. with_intermediate_file (Filename. temp_file name " .wat" )
82+ @@ fun filename ->
83+ Fs. write_file
84+ ~name: filename
85+ ~contents: (Wat_preprocess. f ~variables ~filename ~contents );
86+ cont ((filename, name) :: inputs))
87+ ~init: (fun inputs ->
88+ Fs. with_intermediate_file (Filename. temp_file " runtime-merged" " .wasm" )
89+ @@ fun merge_file ->
90+ Binaryen. link ~opt_output_sourcemap: None ~inputs ~output_file: merge_file;
91+ Binaryen. optimize
92+ ~profile: None
93+ ~options: [ " -O2" ]
94+ ~opt_input_sourcemap: None
95+ ~input_file: merge_file
96+ ~opt_output_sourcemap: None
97+ ~output_file: runtime_file
98+ () )
99+ Runtime_files. wat_files
100+ []
101+
76102let link_and_optimize
77103 ~profile
78104 ~sourcemap_root
@@ -91,7 +117,7 @@ let link_and_optimize
91117 let enable_source_maps = Option. is_some opt_sourcemap_file in
92118 Fs. with_intermediate_file (Filename. temp_file " runtime" " .wasm" )
93119 @@ fun runtime_file ->
94- Fs. write_file ~name: runtime_file ~contents: Runtime_files. wasm_runtime ;
120+ build_runtime ~ runtime_file ;
95121 Fs. with_intermediate_file (Filename. temp_file " wasm-merged" " .wasm" )
96122 @@ fun temp_file ->
97123 opt_with
@@ -101,8 +127,9 @@ let link_and_optimize
101127 else None )
102128 @@ fun opt_temp_sourcemap ->
103129 Binaryen. link
104- ~runtime_files: (runtime_file :: runtime_wasm_files)
105- ~input_files: wat_files
130+ ~inputs:
131+ (List. map ~f: (fun f -> f, " env" ) (runtime_file :: runtime_wasm_files)
132+ @ List. map ~f: (fun f -> f, " OCaml" ) wat_files)
106133 ~opt_output_sourcemap: opt_temp_sourcemap
107134 ~output_file: temp_file;
108135 Fs. with_intermediate_file (Filename. temp_file " wasm-dce" " .wasm" )
@@ -124,7 +151,8 @@ let link_and_optimize
124151 ~opt_input_sourcemap: opt_temp_sourcemap'
125152 ~opt_output_sourcemap: opt_sourcemap
126153 ~input_file: temp_file'
127- ~output_file ;
154+ ~output_file
155+ () ;
128156 Option. iter
129157 ~f: (update_sourcemap ~sourcemap_root ~sourcemap_don't_inline_content )
130158 opt_sourcemap_file;
@@ -133,20 +161,20 @@ let link_and_optimize
133161let link_runtime ~profile runtime_wasm_files output_file =
134162 Fs. with_intermediate_file (Filename. temp_file " runtime" " .wasm" )
135163 @@ fun runtime_file ->
136- Fs. write_file ~name: runtime_file ~contents: Runtime_files. wasm_runtime ;
164+ build_runtime ~ runtime_file ;
137165 Fs. with_intermediate_file (Filename. temp_file " wasm-merged" " .wasm" )
138166 @@ fun temp_file ->
139167 Binaryen. link
168+ ~inputs: (List. map ~f: (fun f -> f, " env" ) (runtime_file :: runtime_wasm_files))
140169 ~opt_output_sourcemap: None
141- ~runtime_files: (runtime_file :: runtime_wasm_files)
142- ~input_files: []
143170 ~output_file: temp_file;
144171 Binaryen. optimize
145172 ~profile
146173 ~opt_input_sourcemap: None
147174 ~opt_output_sourcemap: None
148175 ~input_file: temp_file
149176 ~output_file
177+ ()
150178
151179let generate_prelude ~out_file =
152180 Filename. gen_file out_file
@@ -186,7 +214,8 @@ let build_prelude z =
186214 ~input_file: prelude_file
187215 ~output_file: tmp_prelude_file
188216 ~opt_input_sourcemap: None
189- ~opt_output_sourcemap: None ;
217+ ~opt_output_sourcemap: None
218+ () ;
190219 Zip. add_file z ~name: " prelude.wasm" ~file: tmp_prelude_file;
191220 info
192221
@@ -419,7 +448,8 @@ let run
419448 ~opt_input_sourcemap: None
420449 ~opt_output_sourcemap: opt_tmp_map_file
421450 ~input_file: wat_file
422- ~output_file: tmp_wasm_file;
451+ ~output_file: tmp_wasm_file
452+ () ;
423453 { Link. unit_name; unit_info; strings; fragments }
424454 in
425455 cont unit_data unit_name tmp_wasm_file opt_tmp_map_file
0 commit comments