summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sh4
-rw-r--r--src/binaryen-shell.cpp (renamed from src/wasm-shell.cpp)37
2 files changed, 35 insertions, 6 deletions
diff --git a/build.sh b/build.sh
index 3bfbc0c1a..9794de42f 100755
--- a/build.sh
+++ b/build.sh
@@ -1,8 +1,8 @@
+echo "building binaryen shell"
+g++ -O2 -std=c++11 src/binaryen-shell.cpp -g -o bin/binaryen-shell -Isrc/emscripten-optimizer
echo "building asm2wasm"
g++ -O2 -std=c++11 src/asm2wasm-main.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp -g -o bin/asm2wasm -Isrc/emscripten-optimizer
echo "building interpreter/js"
em++ -std=c++11 src/wasm-js.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -s DEMANGLE_SUPPORT=1 -O3 -profiling -s TOTAL_MEMORY=67108864 -s SAFE_HEAP=1 -s ASSERTIONS=1 -Isrc/emscripten-optimizer #-DWASM_JS_DEBUG #-DWASM_INTERPRETER_DEBUG
cat src/js/post.js >> bin/wasm.js
-echo "building wasm shell"
-g++ -O2 -std=c++11 src/wasm-shell.cpp -g -o bin/wasm-shell -Isrc/emscripten-optimizer
diff --git a/src/wasm-shell.cpp b/src/binaryen-shell.cpp
index 701b6b6c2..775252485 100644
--- a/src/wasm-shell.cpp
+++ b/src/binaryen-shell.cpp
@@ -146,12 +146,41 @@ struct Invocation {
int main(int argc, char **argv) {
debug = getenv("WASM_SHELL_DEBUG") ? getenv("WASM_SHELL_DEBUG")[0] - '0' : 0;
- char *infile = argv[1];
- bool print_wasm = argc >= 3; // second arg means print it out
+ char *infile = nullptr;
+ bool print_before = false;
+
+ for (size_t i = 1; i < argc; i++) {
+ char* curr = argv[i];
+ if (curr[0] == '-') {
+ std::string arg = curr;
+ if (arg == "--print-before") {
+ print_before = true;
+ } else {
+ if (infile) {
+ printf("error: unrecognized argument: %s\n", curr);
+ exit(1);
+ }
+ }
+ } else {
+ if (infile) {
+ printf("error: too many input files provided.\n");
+ exit(1);
+ }
+ infile = curr;
+ }
+ }
+
+ if (!infile) {
+ printf("error: no input file provided.\n");
+ exit(1);
+ }
if (debug) std::cerr << "loading '" << infile << "'...\n";
FILE *f = fopen(argv[1], "r");
- assert(f);
+ if (!f) {
+ printf("error: could not open input file: %s\n", infile);
+ exit(1);
+ }
fseek(f, 0, SEEK_END);
int size = ftell(f);
char *input = new char[size+1];
@@ -180,7 +209,7 @@ int main(int argc, char **argv) {
auto interface = new ShellExternalInterface();
auto instance = new ModuleInstance(wasm, interface);
- if (print_wasm) {
+ if (print_before) {
if (debug) std::cerr << "printing...\n";
std::cout << wasm;
}