From ce488e93dac30fcb7b615fdff7b2f90cbae1aefe Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Wed, 29 Apr 2020 04:16:42 +0300 Subject: [PATCH] Improve args --- platforms/app/main.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/platforms/app/main.c b/platforms/app/main.c index 15f0f30..3e8d2c9 100644 --- a/platforms/app/main.c +++ b/platforms/app/main.c @@ -18,10 +18,6 @@ #define FATAL(msg, ...) { printf("Error: [Fatal] " msg "\n", ##__VA_ARGS__); goto _onfatal; } -#ifndef M3_APP_MAX_STACK -#define M3_APP_MAX_STACK (64*1024) -#endif - M3Result repl_load (IM3Runtime runtime, const char* fn) { M3Result result = m3Err_none; @@ -155,10 +151,10 @@ void repl_free(IM3Runtime* runtime) } } -M3Result repl_init(IM3Environment env, IM3Runtime* runtime) +M3Result repl_init(IM3Environment env, IM3Runtime* runtime, unsigned stack) { repl_free(runtime); - *runtime = m3_NewRuntime (env, M3_APP_MAX_STACK, NULL); + *runtime = m3_NewRuntime (env, stack, NULL); if (*runtime == NULL) { return "m3_NewRuntime failed"; } @@ -221,14 +217,24 @@ int split_argv(char *str, char** argv) } void print_version() { - puts("Wasm3 v" M3_VERSION " (" __DATE__ " " __TIME__ ", " M3_COMPILER_VER ", " M3_ARCH ")"); + const char* wasm3_env = getenv("WASM3"); + const char* wasm3_arch = getenv("WASM3_ARCH"); + + printf("Wasm3 v" M3_VERSION "%s on %s\n", + (wasm3_arch || wasm3_env) ? " self-hosting" : "", + wasm3_arch ? wasm3_arch : M3_ARCH); + + printf("Build: " __DATE__ " " __TIME__ ", " M3_COMPILER_VER "\n"); } void print_usage() { puts("Usage:"); - puts(" wasm3 [args...]"); - puts(" wasm3 --func [args...]"); + puts(" wasm3 [options] [args...]"); puts(" wasm3 --repl [file]"); + puts("Options:"); + puts(" --func function to run default: _start)"); + puts(" --stack-size stack size in bytes default: 64KB)"); + puts(" --dump-on-trap dump wasm memory"); } #define ARGV_SHIFT() { i_argc--; i_argv++; } @@ -244,6 +250,7 @@ int main (int i_argc, const char* i_argv[]) bool argDumpOnTrap = false; const char* argFile = NULL; const char* argFunc = "_start"; + unsigned argStackSize = 64*1024; // m3_PrintM3Info (); @@ -265,6 +272,10 @@ int main (int i_argc, const char* i_argv[]) argRepl = true; } else if (!strcmp("--dump-on-trap", arg)) { argDumpOnTrap = true; + } else if (!strcmp("--stack-size", arg)) { + const char* tmp; + ARGV_SET(tmp); + argStackSize = atol(tmp); } else if (!strcmp("--dir", arg)) { const char* argDir; ARGV_SET(argDir); @@ -283,7 +294,7 @@ int main (int i_argc, const char* i_argv[]) ARGV_SET(argFile); - result = repl_init(env, &runtime); + result = repl_init(env, &runtime, argStackSize); if (result) FATAL("repl_init: %s", result); if (argFile) { @@ -337,7 +348,7 @@ int main (int i_argc, const char* i_argv[]) } result = m3Err_none; if (!strcmp(":init", argv[0])) { - result = repl_init(env, &runtime); + result = repl_init(env, &runtime, argStackSize); } else if (!strcmp(":version", argv[0])) { print_version(); } else if (!strcmp(":exit", argv[0])) {