From 71a57e8ea07b4ff85fee9ab4b009be398f842f81 Mon Sep 17 00:00:00 2001 From: zapashcanon Date: Thu, 20 Jan 2022 18:27:46 +0100 Subject: [PATCH] single dune file, proper opam support, switch parts of the Makefile to dune, update GitHub actions --- .github/workflows/main.yml | 4 +- interpreter/Makefile | 203 ++++++--------------------- interpreter/binary/dune | 4 - interpreter/dune | 47 +++++++ interpreter/dune-project | 23 +++ interpreter/exec/dune | 25 ---- interpreter/host/dune | 12 -- interpreter/jslib/dune | 4 + interpreter/{meta => }/jslib/wasm.ml | 1 + interpreter/main/dune | 9 +- interpreter/meta/findlib/META | 4 - interpreter/meta/jslib/bsconfig.json | 6 - interpreter/meta/jslib/build.sh | 97 ------------- interpreter/runtime/dune | 4 - interpreter/script/dune | 33 ----- interpreter/syntax/dune | 17 --- interpreter/tests/dune | 3 + interpreter/text/dune | 27 ---- interpreter/util/dune | 3 - interpreter/valid/dune | 4 - interpreter/wasm.opam | 30 ++++ interpreter/winmake.bat | 74 +--------- 22 files changed, 159 insertions(+), 475 deletions(-) delete mode 100644 interpreter/binary/dune create mode 100644 interpreter/dune delete mode 100644 interpreter/exec/dune delete mode 100644 interpreter/host/dune create mode 100644 interpreter/jslib/dune rename interpreter/{meta => }/jslib/wasm.ml (88%) delete mode 100644 interpreter/meta/findlib/META delete mode 100644 interpreter/meta/jslib/bsconfig.json delete mode 100755 interpreter/meta/jslib/build.sh delete mode 100644 interpreter/runtime/dune delete mode 100644 interpreter/script/dune delete mode 100644 interpreter/syntax/dune create mode 100644 interpreter/tests/dune delete mode 100644 interpreter/text/dune delete mode 100644 interpreter/util/dune delete mode 100644 interpreter/valid/dune create mode 100644 interpreter/wasm.opam diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a5527ca29..7971777b4b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: uses: ocaml/setup-ocaml@v2 with: ocaml-compiler: 4.12.x - - run: opam install --yes ocamlbuild.0.14.0 + - run: opam install --yes dune - run: cd interpreter && opam exec make all build-js-api-spec: @@ -51,7 +51,7 @@ jobs: submodules: "recursive" - run: pip install bikeshed && bikeshed update - run: pip install six - - run: sudo apt-get update -y && sudo apt-get install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended + - run: sudo apt update -y && sudo apt install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended - run: pip install sphinx==4.0.0 - run: cd document/core && make all - uses: actions/upload-artifact@v2 diff --git a/interpreter/Makefile b/interpreter/Makefile index 4ff333d177..8fd1e09884 100644 --- a/interpreter/Makefile +++ b/interpreter/Makefile @@ -2,197 +2,84 @@ # package manager to build. However, Opam package management is available # optionally through the check/install/uninstall targets. # -# The $(JSLIB) target requires node.js and BuckleScript. +# The wast.js target requires node.js and BuckleScript. # # See README.me for instructions. # Configuration -NAME = wasm -UNOPT = $(NAME).debug -OPT = $(NAME) -LIB = $(NAME) -ZIP = $(NAME).zip -JSLIB = wast.js -WINMAKE = winmake.bat - -DIRS = util syntax binary text valid runtime exec script host main tests -LIBS = bigarray -FLAGS = -lexflags -ml -cflags '-w +a-4-27-42-44-45 -warn-error +a-3' -OCBA = ocamlbuild $(FLAGS) $(DIRS:%=-I %) -OCB = $(OCBA) $(LIBS:%=-libs %) -JS = # set to JS shell command to run JS tests - +BUILDDIR = _build/default +UNOPT = $(BUILDDIR)/main/main.bc +OPT = $(BUILDDIR)/main/main.exe +JS = # set to JS shell command to run JS tests +TESTDIR = ../test/core +# Skip _output directory, since that's a tmp directory, and list all other wast files. +TESTFILES = $(shell cd $(TESTDIR); ls *.wast; ls [a-z]*/*.wast) # Main targets -.PHONY: default opt unopt libopt libunopt jslib all land zip smallint - -default: opt -debug: unopt -opt: $(OPT) -unopt: $(UNOPT) -libopt: _build/$(LIB).cmx _build/$(LIB).cmxa -libunopt: _build/$(LIB).cmo _build/$(LIB).cma -jslib: $(JSLIB) -all: unopt opt libunopt libopt test -land: $(WINMAKE) all -zip: $(ZIP) -smallint: smallint.native - - -# Building executable - -empty = -space = $(empty) $(empty) -comma = , - -.INTERMEDIATE: _tags -_tags: - echo >$@ "true: bin_annot" - echo >>$@ "true: debug" - echo >>$@ "<{$(subst $(space),$(comma),$(DIRS))}/*.cmx>: for-pack($(PACK))" - -$(UNOPT): main.byte - mv $< $@ - -$(OPT): main.native - mv $< $@ - -.PHONY: main.byte main.native -main.byte: _tags - $(OCB) -quiet $@ - -main.native: _tags - $(OCB) -quiet $@ - -.PHONY: smallint.byte smallint.native -smallint.byte: _tags - $(OCB) -quiet $@ -smallint.native: _tags - $(OCB) -quiet $@ - - -# Building library - -FILES = $(shell ls $(DIRS:%=%/*) | grep '[.]ml[^.]*$$') -PACK = $(shell echo `echo $(LIB) | sed 's/^\(.\).*$$/\\1/g' | tr [:lower:] [:upper:]``echo $(LIB) | sed 's/^.\(.*\)$$/\\1/g'`) +.PHONY: default jslib all land zip -.INTERMEDIATE: $(LIB).mlpack -$(LIB).mlpack: $(DIRS) - ls $(FILES) \ - | sed 's:\(.*/\)\{0,1\}\(.*\)\.[^\.]*:\2:' \ - | grep -v main \ - | sort | uniq \ - >$@ - -.INTERMEDIATE: $(LIB).mllib -$(LIB).mllib: - echo Wasm >$@ - -_build/$(LIB).cmo: $(FILES) $(LIB).mlpack _tags Makefile - $(OCB) -quiet $(LIB).cmo - -_build/$(LIB).cmx: $(FILES) $(LIB).mlpack _tags Makefile - $(OCB) -quiet $(LIB).cmx - -_build/$(LIB).cma: $(FILES) $(LIB).mllib _tags Makefile - $(OCBA) -quiet $(LIB).cma - -_build/$(LIB).cmxa: $(FILES) $(LIB).mllib _tags Makefile - $(OCBA) -quiet $(LIB).cmxa - - -# Building JavaScript library - -.PHONY: $(JSLIB) -$(JSLIB): $(UNOPT) - mkdir -p _build/jslib/src - cp meta/jslib/* _build/jslib - cp $(DIRS:%=_build/%/*.ml*) meta/jslib/*.ml _build/jslib/src - rm _build/jslib/src/*.ml[^i] - (cd _build/jslib; ./build.sh ../../$@) - - -# Building Windows build file - -$(WINMAKE): clean - echo rem Auto-generated from Makefile! >$@ - echo set NAME=$(NAME) >>$@ - echo if \'%1\' neq \'\' set NAME=%1 >>$@ - $(OCB) main.byte \ - | grep -v ocamldep \ - | grep -v mkdir \ - | sed s:`which ocaml`:ocaml:g \ - | sed s:main/main.d.byte:%NAME%.exe: \ - >>$@ +default: $(OPT) +debug: $(UNOPT) +jslib: $(BUILDDIR)/jslib/wasm.bc.js +all: $(UNOPT) $(OPT) test +land: all +zip: wasm.zip +$(BUILDDIR)/%: + dune build $* # Executing test suite -TESTDIR = ../test/core -# Skip _output directory, since that's a tmp directory, and list all other wast files. -TESTFILES = $(shell cd $(TESTDIR); ls *.wast; ls [a-z]*/*.wast) -TESTS = $(TESTFILES:%.wast=%) +.PHONY: test debugtest partest winmake.bat -.PHONY: test debugtest partest +winmake.bat: + dune clean + dune build main/main.bc + cat _build/log | grep -v "^#" | sed s:`which ocaml`:ocaml:g | sed s:_build/default:_build/:g -test: $(OPT) smallint - $(TESTDIR)/run.py --wasm `pwd`/$(OPT) $(if $(JS),--js '$(JS)',) - ./smallint.native -debugtest: $(UNOPT) smallint - $(TESTDIR)/run.py --wasm `pwd`/$(UNOPT) $(if $(JS),--js '$(JS)',) - ./smallint.native +test/%: $(OPT) + $(TESTDIR)/run.py --wasm `pwd`/$< $(if $(JS),--js '$(JS)',) $(TESTDIR)/$*.wast +debugtest/%: $(UNOPT) + $(TESTDIR)/run.py --wasm `pwd`/$< $(if $(JS),--js '$(JS)',) $(TESTDIR)/$*.wast -test/%: $(OPT) - $(TESTDIR)/run.py --wasm `pwd`/$(OPT) $(if $(JS),--js '$(JS)',) $(TESTDIR)/$*.wast -debugtest/%: $(UNOPT) - $(TESTDIR)/run.py --wasm `pwd`/$(UNOPT) $(if $(JS),--js '$(JS)',) $(TESTDIR)/$*.wast +test: $(OPT) smallinttest + $(TESTDIR)/run.py --wasm `pwd`/$< $(if $(JS),--js '$(JS)',) +debugtest: $(UNOPT) smallinttest + $(TESTDIR)/run.py --wasm `pwd`/$< $(if $(JS),--js '$(JS)',) -run/%: $(OPT) - ./$(OPT) $(TESTDIR)/$*.wast -debug/%: $(UNOPT) - ./$(UNOPT) $(TESTDIR)/$*.wast +run/%: + dune exec -- main/main.exe $(TESTDIR)/$*.wast +debug/%: + dune exec -- main/main.bc $(TESTDIR)/$*.wast -partest: $(TESTS:%=quiettest/%) +partest: $(TESTFILES:%.wast=quiettest/%) @echo All tests passed. -quiettest/%: $(OPT) +quiettest/%: $(OPT) @ ( \ - $(TESTDIR)/run.py 2>$(@F).out --wasm `pwd`/$(OPT) $(if $(JS),--js '$(JS)',) $(TESTDIR)/$*.wast && \ + $(TESTDIR)/run.py 2>$(@F).out --wasm `pwd`/$< $(if $(JS),--js '$(JS)',) $(TESTDIR)/$*.wast && \ rm $(@F).out \ ) || \ cat $(@F).out || rm $(@F).out || exit 1 -smallinttest: smallint - @./smallint.native +smallinttest: + dune runtest # Miscellaneous targets -.PHONY: clean - -$(ZIP): $(WINMAKE) - git archive --format=zip --prefix=$(NAME)/ -o $@ HEAD +wasm.zip: + git archive --format=zip --prefix=wasm/ -o $@ HEAD clean: - rm -rf _build/jslib $(LIB).mlpack _tags - $(OCB) -clean - + dune clean # Opam support -.PHONY: check install uninstall - -check: - # Check that we can find all relevant libraries - # when using ocamlfind - ocamlfind query $(LIBS) - -install: _build/$(LIB).cmx _build/$(LIB).cmo - ocamlfind install $(LIB) meta/findlib/META _build/$(LIB).o \ - $(wildcard _build/$(LIB).cm*) \ - $(wildcard $(DIRS:%=%/*.mli)) +install: + dune install uninstall: - ocamlfind remove $(LIB) + dune uninstall diff --git a/interpreter/binary/dune b/interpreter/binary/dune deleted file mode 100644 index 8bc8af8a12..0000000000 --- a/interpreter/binary/dune +++ /dev/null @@ -1,4 +0,0 @@ -(library - (name binary) - (wrapped false) - (libraries exec_basic exec_convert syntax syntax_types syntax_values util)) diff --git a/interpreter/dune b/interpreter/dune new file mode 100644 index 0000000000..1aa5b32634 --- /dev/null +++ b/interpreter/dune @@ -0,0 +1,47 @@ +(copy_files# + (files binary/*.ml*)) + +(copy_files# + (files exec/*.ml*)) + +(copy_files# + (files host/*.ml*)) + +(copy_files# + (files main/flags.ml)) + +(copy_files# + (files runtime/*.ml*)) + +(copy_files# + (files script/*.ml*)) + +(copy_files# + (files syntax/*.ml*)) + +(copy_files# + (files text/*.ml*)) + +(copy_files# + (files util/*.ml*)) + +(copy_files# + (files valid/*.ml*)) + +(library + (public_name wasm) + (wrapped false)) + +; we don't use the `ocamllex` stanza directly as there's no way to pass the `-ml` +; if we don't pass `-ml` we have a transition table overflow... + +(rule + (target lexer.ml) + (deps lexer.mll) + (action + (chdir + %{workspace_root} + (run %{bin:ocamllex} -q -ml -o %{target} %{deps})))) + +(ocamlyacc + (modules parser)) diff --git a/interpreter/dune-project b/interpreter/dune-project index c99595503a..a332d18032 100644 --- a/interpreter/dune-project +++ b/interpreter/dune-project @@ -1,3 +1,26 @@ (lang dune 2.8) (implicit_transitive_deps false) + +(name wasm) + +(license Apache-2.0) + +(authors "TODO") + +(maintainers "TODO") + +(source + (github WebAssembly/spec)) + +(generate_opam_files true) + +(package + (name wasm) + (synopsis "WebAssembly library") + (description "A library for writing/reading/running WebAssembly binaries.") + (tags + (wasm webassembly spec interpreter)) + (depends + (ocaml + (>= 4.05)))) diff --git a/interpreter/exec/dune b/interpreter/exec/dune deleted file mode 100644 index efde88ced0..0000000000 --- a/interpreter/exec/dune +++ /dev/null @@ -1,25 +0,0 @@ -(library - (name exec_basic) - (wrapped false) - (modules f32 f64 fxx i32 i64 ixx) - (libraries util)) - -(library - (name exec_convert) - (wrapped false) - (modules f32_convert f64_convert i8 i16 i32_convert i64_convert v128) - (libraries exec_basic syntax_types util)) - -(library - (name exec) - (wrapped false) - (modules eval eval_num eval_vec) - (libraries - binary - exec_basic - exec_convert - runtime - syntax - syntax_types - syntax_values - util)) diff --git a/interpreter/host/dune b/interpreter/host/dune deleted file mode 100644 index 8bada33e3c..0000000000 --- a/interpreter/host/dune +++ /dev/null @@ -1,12 +0,0 @@ -(library - (name host) - (wrapped false) - (libraries - binary - exec - exec_basic - exec_convert - runtime - syntax_types - syntax_values - util)) diff --git a/interpreter/jslib/dune b/interpreter/jslib/dune new file mode 100644 index 0000000000..b65e2516ba --- /dev/null +++ b/interpreter/jslib/dune @@ -0,0 +1,4 @@ +(executable + (name wasm) + (modes js) + (libraries wasm)) diff --git a/interpreter/meta/jslib/wasm.ml b/interpreter/jslib/wasm.ml similarity index 88% rename from interpreter/meta/jslib/wasm.ml rename to interpreter/jslib/wasm.ml index 915fdafb08..9a392b1157 100644 --- a/interpreter/meta/jslib/wasm.ml +++ b/interpreter/jslib/wasm.ml @@ -3,6 +3,7 @@ let encode s = match def.Source.it with | Script.Textual m -> Encode.encode m | Script.Encoded (_, bs) -> bs + | _ -> failwith "unimplemented" let decode s width = let m = Decode.decode "(decode)" s in diff --git a/interpreter/main/dune b/interpreter/main/dune index 3df607e9c8..ab34eeee1a 100644 --- a/interpreter/main/dune +++ b/interpreter/main/dune @@ -1,9 +1,6 @@ -(library - (name flags) - (wrapped false) - (modules flags)) - (executable + (public_name wasm) (name main) (modules main) - (libraries binary flags host script_run script syntax)) + (modes byte exe) + (libraries wasm)) diff --git a/interpreter/meta/findlib/META b/interpreter/meta/findlib/META deleted file mode 100644 index 2c1d96dd03..0000000000 --- a/interpreter/meta/findlib/META +++ /dev/null @@ -1,4 +0,0 @@ -description = "A library for writing/reading/running WebAssembly binaries" -requires = "bigarray,str" -archive(byte) = "wasm.cmo" -archive(native) = "wasm.cmx" diff --git a/interpreter/meta/jslib/bsconfig.json b/interpreter/meta/jslib/bsconfig.json deleted file mode 100644 index d313bf93d8..0000000000 --- a/interpreter/meta/jslib/bsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "wasm", - "sources": [ - {"dir": "src"}, - ] -} diff --git a/interpreter/meta/jslib/build.sh b/interpreter/meta/jslib/build.sh deleted file mode 100755 index 14471217b5..0000000000 --- a/interpreter/meta/jslib/build.sh +++ /dev/null @@ -1,97 +0,0 @@ -link () { -echo "// DO NOT EDIT. Generated from WebAssembly spec interpreter" -echo " -let WebAssemblyText = (function() { -  let _registry = {__proto__: null}; - function normalize(file) { - return file.split('/').reverse()[0].split('.')[0]; - } -  function require(file) { -    let name = normalize(file); - if (!(name in _registry)) { - throw new Error('missing module: ' + name) -    } else if (typeof _registry[name] === 'function') { -" -if (($LOG == 1)) -then - echo 1>&2 Logging on - echo " - console.log(name); -" -fi -echo " -      let f = _registry[name]; -      _registry[name] = function() { throw new Error('cyclic module: ' + name) }; -      _registry[name] = f(); -    } -    return _registry[name]; -  } -" - -for file in $* -do - echo 1>&2 Including $file - name=`basename $file | sed s/[.]js//g` - echo " - _registry['$name'] = function() { -    let exports = {}; -//////// start of $name.js ////////" - cat $file - echo "//////// end of $name.js //////// -    return exports; -  }; -" -done - -echo " - function binary(bytes) { - let buffer = new ArrayBuffer(bytes.length); - let view = new Uint8Array(buffer); - for (let i = 0; i < bytes.length; ++i) { - view[i] = bytes.charCodeAt(i); - } - return buffer; - } - function bytes(buffer) { - let string = ''; - let view = new Uint8Array(buffer); - for (let i = 0; i < view.length; ++i) { - string += String.fromCodePoint(view[i]); - } - return string; - } -  let Wasm = require('wasm'); - return { - encode(s) { return binary(Wasm.encode(s)) }, - decode(b, w = 80) { return Wasm.decode(bytes(b), w) } - }; -})(); - -" -} - -echo 1>&2 ==== Preparing ==== -npm link bs-platform - -echo 1>&2 ==== Compiling ==== -bsb || exit 1 - -echo 1>&2 ==== Linking full version ==== -LOG=1 -FILES='node_modules/bs-platform/lib/js/*.js lib/js/src/*.js' -link $FILES >temp.js || exit 1 - -echo 1>&2 ==== Running for dependencies ==== -node temp.js | tee temp.log || exit 1 - -echo 1>&2 ==== Linking stripped version ==== -used='' -for file in `ls $FILES` -do - if grep -q `basename $file | sed s/.js//g` temp.log - then - used="$used $file" - fi -done -LOG=0 -link $used >$1 || exit 1 diff --git a/interpreter/runtime/dune b/interpreter/runtime/dune deleted file mode 100644 index 0f34a50a42..0000000000 --- a/interpreter/runtime/dune +++ /dev/null @@ -1,4 +0,0 @@ -(library - (name runtime) - (wrapped false) - (libraries exec_basic exec_convert syntax_types syntax_values syntax util)) diff --git a/interpreter/script/dune b/interpreter/script/dune deleted file mode 100644 index b4ddd915be..0000000000 --- a/interpreter/script/dune +++ /dev/null @@ -1,33 +0,0 @@ -(library - (name script_run) - (wrapped false) - (modules js run) - (libraries - binary - exec_basic - exec_convert - exec - flags - runtime - script - syntax - syntax_types - syntax_values - text - valid - util)) - -(library - (name script) - (wrapped false) - (modules import script) - (libraries - binary - exec - exec_convert - flags - runtime - syntax_types - syntax_values - syntax - util)) diff --git a/interpreter/syntax/dune b/interpreter/syntax/dune deleted file mode 100644 index 15383ac087..0000000000 --- a/interpreter/syntax/dune +++ /dev/null @@ -1,17 +0,0 @@ -(library - (name syntax_types) - (wrapped false) - (modules types) - (libraries exec_basic util)) - -(library - (name syntax_values) - (wrapped false) - (modules values) - (libraries exec_basic exec_convert syntax_types util)) - -(library - (name syntax) - (wrapped false) - (modules ast free operators) - (libraries exec_basic exec_convert syntax_types syntax_values util)) diff --git a/interpreter/tests/dune b/interpreter/tests/dune new file mode 100644 index 0000000000..ec36eb2c41 --- /dev/null +++ b/interpreter/tests/dune @@ -0,0 +1,3 @@ +(test + (name smallint) + (libraries wasm)) diff --git a/interpreter/text/dune b/interpreter/text/dune deleted file mode 100644 index de1a2d36a3..0000000000 --- a/interpreter/text/dune +++ /dev/null @@ -1,27 +0,0 @@ -(library - (name text) - (wrapped false) - (libraries - binary - exec_basic - exec_convert - runtime - script - syntax - syntax_types - syntax_values - util)) - -; we don't use the `ocamllex` stanza directly as there's no way to pass the `-ml` -; if we don't pass `-ml` we have a transition table overflow... - -(rule - (target lexer.ml) - (deps lexer.mll) - (action - (chdir - %{workspace_root} - (run %{bin:ocamllex} -q -ml -o %{target} %{deps})))) - -(ocamlyacc - (modules parser)) diff --git a/interpreter/util/dune b/interpreter/util/dune deleted file mode 100644 index af2c372ab7..0000000000 --- a/interpreter/util/dune +++ /dev/null @@ -1,3 +0,0 @@ -(library - (name util) - (wrapped false)) diff --git a/interpreter/valid/dune b/interpreter/valid/dune deleted file mode 100644 index eb7eeadda0..0000000000 --- a/interpreter/valid/dune +++ /dev/null @@ -1,4 +0,0 @@ -(library - (name valid) - (wrapped false) - (libraries exec_basic exec_convert syntax_types syntax_values syntax util)) diff --git a/interpreter/wasm.opam b/interpreter/wasm.opam new file mode 100644 index 0000000000..e437638110 --- /dev/null +++ b/interpreter/wasm.opam @@ -0,0 +1,30 @@ +# This file is generated by dune, edit dune-project instead +opam-version: "2.0" +synopsis: "WebAssembly library" +description: "A library for writing/reading/running WebAssembly binaries." +maintainer: ["TODO"] +authors: ["TODO"] +license: "Apache-2.0" +tags: ["wasm" "webassembly" "spec" "interpreter"] +homepage: "https://github.com/WebAssembly/spec" +bug-reports: "https://github.com/WebAssembly/spec/issues" +depends: [ + "dune" {>= "2.8"} + "ocaml" {>= "4.05"} + "odoc" {with-doc} +] +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +] +dev-repo: "git+https://github.com/WebAssembly/spec.git" diff --git a/interpreter/winmake.bat b/interpreter/winmake.bat index 6ff7e8caae..6ac1bb7ed7 100644 --- a/interpreter/winmake.bat +++ b/interpreter/winmake.bat @@ -1,75 +1,3 @@ -rem Auto-generated from Makefile! set NAME=wasm if '%1' neq '' set NAME=%1 -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/numeric_error.cmo exec/numeric_error.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/int.cmo exec/int.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/lib.cmi util/lib.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/i32.cmo exec/i32.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/float.cmo exec/float.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I syntax -I main -I text -I binary -I exec -I script -I runtime -I util -I host -I valid -o syntax/types.cmo syntax/types.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/f32.cmo exec/f32.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/f64.cmo exec/f64.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/i64.cmo exec/i64.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I syntax -I main -I text -I binary -I exec -I script -I runtime -I util -I host -I valid -o syntax/values.cmo syntax/values.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/memory.cmi runtime/memory.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/source.cmi util/source.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I syntax -I main -I text -I binary -I exec -I script -I runtime -I util -I host -I valid -o syntax/ast.cmo syntax/ast.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/func.cmi runtime/func.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/global.cmi runtime/global.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/table.cmi runtime/table.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/instance.cmo runtime/instance.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/eval.cmi exec/eval.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I binary -I main -I syntax -I text -I exec -I script -I runtime -I util -I host -I valid -o binary/utf8.cmi binary/utf8.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I host -I main -I syntax -I text -I binary -I exec -I script -I runtime -I util -I valid -o host/env.cmo host/env.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I main -I syntax -I text -I binary -I exec -I script -I runtime -I util -I host -I valid -o main/flags.cmo main/flags.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/import.cmi script/import.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/run.cmi script/run.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I host -I main -I syntax -I text -I binary -I exec -I script -I runtime -I util -I valid -o host/spectest.cmo host/spectest.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I main -I syntax -I text -I binary -I exec -I script -I runtime -I util -I host -I valid -o main/main.cmo main/main.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/error.cmi util/error.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/script.cmo script/script.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I binary -I main -I syntax -I text -I exec -I script -I runtime -I util -I host -I valid -o binary/decode.cmi binary/decode.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I binary -I main -I syntax -I text -I exec -I script -I runtime -I util -I host -I valid -o binary/encode.cmi binary/encode.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/js.cmi script/js.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/parse.cmi text/parse.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/print.cmi text/print.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I valid -I main -I syntax -I text -I binary -I exec -I script -I runtime -I util -I host -o valid/valid.cmi valid/valid.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/import.cmo script/import.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/run.cmo script/run.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I binary -I main -I syntax -I text -I exec -I script -I runtime -I util -I host -I valid -o binary/utf8.cmo binary/utf8.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/eval_numeric.cmi exec/eval_numeric.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/i64_convert.cmi exec/i64_convert.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/eval.cmo exec/eval.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/func.cmo runtime/func.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/source.cmo util/source.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/f32_convert.cmi exec/f32_convert.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/f64_convert.cmi exec/f64_convert.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/i32_convert.cmi exec/i32_convert.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/error.cmo util/error.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/eval_numeric.cmo exec/eval_numeric.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/global.cmo runtime/global.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/i64_convert.cmo exec/i64_convert.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/lib.cmo util/lib.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/memory.cmo runtime/memory.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I runtime -I main -I syntax -I text -I binary -I exec -I script -I util -I host -I valid -o runtime/table.cmo runtime/table.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/f32_convert.cmo exec/f32_convert.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/f64_convert.cmo exec/f64_convert.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I exec -I main -I syntax -I text -I binary -I script -I runtime -I util -I host -I valid -o exec/i32_convert.cmo exec/i32_convert.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I syntax -I main -I text -I binary -I exec -I script -I runtime -I util -I host -I valid -o syntax/operators.cmo syntax/operators.ml -ocamlyacc text/parser.mly -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/parser.cmi text/parser.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/lexer.cmi text/lexer.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/sexpr.cmi util/sexpr.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/arrange.cmi text/arrange.mli -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I binary -I main -I syntax -I text -I exec -I script -I runtime -I util -I host -I valid -o binary/decode.cmo binary/decode.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I binary -I main -I syntax -I text -I exec -I script -I runtime -I util -I host -I valid -o binary/encode.cmo binary/encode.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I script -I main -I syntax -I text -I binary -I exec -I runtime -I util -I host -I valid -o script/js.cmo script/js.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/parse.cmo text/parse.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/print.cmo text/print.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I valid -I main -I syntax -I text -I binary -I exec -I script -I runtime -I util -I host -o valid/valid.cmo valid/valid.ml -ocamllex.opt -q text/lexer.mll -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/lexer.cmo text/lexer.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/parser.cmo text/parser.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I text -I main -I syntax -I binary -I exec -I script -I runtime -I util -I host -I valid -o text/arrange.cmo text/arrange.ml -ocamlc.opt -c -w +a-3-4-27-42-44-45 -warn-error +a -I util -I main -I syntax -I text -I binary -I exec -I script -I runtime -I host -I valid -o util/sexpr.cmo util/sexpr.ml -ocamlc.opt bigarray.cma -I util -I binary -I exec -I syntax -I runtime -I host -I main -I script -I text -I valid util/lib.cmo binary/utf8.cmo exec/float.cmo exec/f32.cmo exec/f64.cmo exec/numeric_error.cmo exec/int.cmo exec/i32.cmo exec/i64.cmo exec/i32_convert.cmo exec/f32_convert.cmo exec/i64_convert.cmo exec/f64_convert.cmo syntax/types.cmo syntax/values.cmo runtime/memory.cmo util/source.cmo syntax/ast.cmo exec/eval_numeric.cmo runtime/func.cmo runtime/global.cmo runtime/table.cmo runtime/instance.cmo util/error.cmo exec/eval.cmo host/env.cmo host/spectest.cmo main/flags.cmo script/import.cmo binary/encode.cmo syntax/operators.cmo binary/decode.cmo script/script.cmo text/parser.cmo text/lexer.cmo text/parse.cmo script/js.cmo util/sexpr.cmo text/arrange.cmo text/print.cmo valid/valid.cmo script/run.cmo main/main.cmo -o main/main.byte +dune build main/main.byte