1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(* SPDX-License-Identifier: AGPL-3.0-or-later *)
(* Copyright © 2021-2024 OCamlPro *)
(* Written by the Owi programmers *)

open Syntax

let cmd ~unsafe ~coverage_criteria ~source_file =
  let _dir, filename = Fpath.split_base source_file in
  let filename, ext = Fpath.split_ext filename in

  let* m =
    Compile.File.until_binary ~unsafe ~rac:false ~srac:false source_file
  in

  let m = Label.annotate coverage_criteria m in

  (* TODO: this should not be required in the binary case but for some reason Binary_encoder.convert expect a text module... *)
  let m = Binary_to_text.modul m in

  let filename = Fpath.add_ext ".instrumented" filename in

  match ext with
  | ".wat" ->
    let filename = Fpath.add_ext ".wat" filename in
    Bos.OS.File.writef filename "%a" Text.pp_modul m
  | ".wasm" ->
    let filename = Fpath.add_ext ".wasm" filename in
    let* () = Binary_encoder.convert None filename ~unsafe m in
    Ok ()
  | ext -> Error (`Unsupported_file_extension ext)