From 0b09a792d62fc7539ba1c36fad90532790318756 Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Wed, 27 Jan 2021 12:45:10 +0200 Subject: [PATCH] =?UTF-8?q?Initial=20Cosmopolitan/Actually=20Portable=20Ex?= =?UTF-8?q?ecutable=20support=20=CE=B1c=CF=84=C2=B5=CE=B1lly=20p=CE=B4r?= =?UTF-8?q?=CF=84=CE=B1bl=CE=B5=20=CE=B5x=CE=B5c=C2=B5=CF=84=CE=B1bl=CE=B5?= =?UTF-8?q?=20;)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platforms/app/main.c | 14 +++-- platforms/cosmopolitan/.gitignore | 1 + platforms/cosmopolitan/build.sh | 33 ++++++++++++ platforms/cosmopolitan/wasm3.com | Bin 0 -> 151552 bytes source/m3_api_wasi.c | 87 +++++++++++++++++------------- source/m3_env.h | 2 - 6 files changed, 95 insertions(+), 42 deletions(-) create mode 100644 platforms/cosmopolitan/.gitignore create mode 100755 platforms/cosmopolitan/build.sh create mode 100755 platforms/cosmopolitan/wasm3.com diff --git a/platforms/app/main.c b/platforms/app/main.c index aed94ba..8aec75a 100644 --- a/platforms/app/main.c +++ b/platforms/app/main.c @@ -18,6 +18,10 @@ #define FATAL(msg, ...) { printf("Error: [Fatal] " msg "\n", ##__VA_ARGS__); goto _onfatal; } +#if defined(d_m3HasWASI) || defined(d_m3HasMetaWASI) || defined(d_m3HasUVWASI) +#define LINK_WASI +#endif + M3Result repl_load (IM3Runtime runtime, const char* fn) { M3Result result = m3Err_none; @@ -273,7 +277,7 @@ int main (int i_argc, const char* i_argv[]) } else if (!strcmp("--dump-on-trap", arg)) { argDumpOnTrap = true; } else if (!strcmp("--stack-size", arg)) { - const char* tmp; + const char* tmp = "65536"; ARGV_SET(tmp); argStackSize = atol(tmp); } else if (!strcmp("--dir", arg)) { @@ -301,7 +305,7 @@ int main (int i_argc, const char* i_argv[]) result = repl_load(runtime, argFile); if (result) FATAL("repl_load: %s", result); -#if defined(d_m3HasWASI) || defined(d_m3HasMetaWASI) || defined(d_m3HasUVWASI) +#if defined(LINK_WASI) result = m3_LinkWASI (runtime->modules); if (result) FATAL("m3_LinkWASI: %s", result); #endif @@ -315,6 +319,7 @@ int main (int i_argc, const char* i_argv[]) if (result) FATAL("m3_LinkLibC: %s", result); if (argFunc and not argRepl) { +#if defined(LINK_WASI) if (!strcmp(argFunc, "_start")) { m3_wasi_context_t* wasi_ctx = m3_GetWasiContext(); // When passing args to WASI, include wasm filename as argv[0] @@ -324,7 +329,10 @@ int main (int i_argc, const char* i_argv[]) if (result == m3Err_trapExit) { return wasi_ctx->exit_code; } - } else { + } + else +#endif + { result = repl_call(runtime, argFunc, i_argc, i_argv); } diff --git a/platforms/cosmopolitan/.gitignore b/platforms/cosmopolitan/.gitignore new file mode 100644 index 0000000..f920527 --- /dev/null +++ b/platforms/cosmopolitan/.gitignore @@ -0,0 +1 @@ +cosmopolitan/ diff --git a/platforms/cosmopolitan/build.sh b/platforms/cosmopolitan/build.sh new file mode 100755 index 0000000..5933d0c --- /dev/null +++ b/platforms/cosmopolitan/build.sh @@ -0,0 +1,33 @@ + +COSMOPOLITAN_URL=https://justine.lol/cosmopolitan/cosmopolitan.zip + +SOURCE_DIR=../../source + +EXTRA_FLAGS= #-Dd_m3HasWASI + +STD=./cosmopolitan/std + +if [ ! -d "./cosmopolitan" ]; then + echo "Downloading Cosmopolitan..." + curl -o cosmopolitan.zip $COSMOPOLITAN_URL + unzip cosmopolitan.zip -d cosmopolitan + rm cosmopolitan.zip +fi + +if [ ! -d "$STD/sys" ]; then + # Generate header stubs + mkdir -p $STD/sys + touch $STD/assert.h $STD/limits.h $STD/ctype.h $STD/time.h $STD/errno.h + touch $STD/inttypes.h $STD/fcntl.h $STD/math.h $STD/stdarg.h $STD/stdbool.h + touch $STD/stdint.h $STD/stdio.h $STD/stdlib.h $STD/string.h $STD/stddef.h + touch $STD/sys/types.h $STD/sys/stat.h $STD/unistd.h $STD/sys/uio.h $STD/sys/random.h +fi + +echo "Building Wasm3..." + +gcc -g -O -static -fno-pie -no-pie -mno-red-zone -nostdlib -nostdinc \ + -Wl,--oformat=binary -Wl,--gc-sections -Wl,-z,max-page-size=0x1000 -fuse-ld=bfd \ + -Wl,-T,cosmopolitan/ape.lds -include cosmopolitan/cosmopolitan.h \ + -Wno-format-security -Wfatal-errors $EXTRA_FLAGS \ + -o wasm3.com -DAPE -I$STD -I$SOURCE_DIR $SOURCE_DIR/*.c ../app/main.c \ + cosmopolitan/crt.o cosmopolitan/ape.o cosmopolitan/cosmopolitan.a diff --git a/platforms/cosmopolitan/wasm3.com b/platforms/cosmopolitan/wasm3.com new file mode 100755 index 0000000000000000000000000000000000000000..0a6f7587cd9b5f60d7a15ea7993469fa7c1f5990 GIT binary patch literal 151552 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 z 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 literal 0 HcmV?d00001 diff --git a/source/m3_api_wasi.c b/source/m3_api_wasi.c index bae646e..ea83d1a 100644 --- a/source/m3_api_wasi.c +++ b/source/m3_api_wasi.c @@ -31,7 +31,10 @@ #include #include -#if defined(__wasi__) || defined(__APPLE__) || defined(__ANDROID_API__) || defined(__OpenBSD__) || defined(__linux__) || defined(__EMSCRIPTEN__) +#if defined(APE) +// Actually Portable Executable +// All functions are already included in cosmopolitan.h +#elif defined(__wasi__) || defined(__APPLE__) || defined(__ANDROID_API__) || defined(__OpenBSD__) || defined(__linux__) || defined(__EMSCRIPTEN__) # include # include # if defined(__APPLE__) @@ -84,44 +87,54 @@ Preopen preopen[PREOPEN_CNT] = { { -1, "/" , "./" }, }; +#if defined(APE) +# define APE_SWITCH_BEG +# define APE_SWITCH_END {} +# define APE_CASE_RET(e1,e2) if (errnum == e1) return e2; else +#else +# define APE_SWITCH switch (errnum) { +# define APE_SWITCH_END } +# define APE_CASE_RET(e1,e2) case e1: return e2; break; +#endif + static __wasi_errno_t errno_to_wasi(int errnum) { - switch (errnum) { - case EPERM: return __WASI_ERRNO_PERM; break; - case ENOENT: return __WASI_ERRNO_NOENT; break; - case ESRCH: return __WASI_ERRNO_SRCH; break; - case EINTR: return __WASI_ERRNO_INTR; break; - case EIO: return __WASI_ERRNO_IO; break; - case ENXIO: return __WASI_ERRNO_NXIO; break; - case E2BIG: return __WASI_ERRNO_2BIG; break; - case ENOEXEC: return __WASI_ERRNO_NOEXEC; break; - case EBADF: return __WASI_ERRNO_BADF; break; - case ECHILD: return __WASI_ERRNO_CHILD; break; - case EAGAIN: return __WASI_ERRNO_AGAIN; break; - case ENOMEM: return __WASI_ERRNO_NOMEM; break; - case EACCES: return __WASI_ERRNO_ACCES; break; - case EFAULT: return __WASI_ERRNO_FAULT; break; - case EBUSY: return __WASI_ERRNO_BUSY; break; - case EEXIST: return __WASI_ERRNO_EXIST; break; - case EXDEV: return __WASI_ERRNO_XDEV; break; - case ENODEV: return __WASI_ERRNO_NODEV; break; - case ENOTDIR: return __WASI_ERRNO_NOTDIR; break; - case EISDIR: return __WASI_ERRNO_ISDIR; break; - case EINVAL: return __WASI_ERRNO_INVAL; break; - case ENFILE: return __WASI_ERRNO_NFILE; break; - case EMFILE: return __WASI_ERRNO_MFILE; break; - case ENOTTY: return __WASI_ERRNO_NOTTY; break; - case ETXTBSY: return __WASI_ERRNO_TXTBSY; break; - case EFBIG: return __WASI_ERRNO_FBIG; break; - case ENOSPC: return __WASI_ERRNO_NOSPC; break; - case ESPIPE: return __WASI_ERRNO_SPIPE; break; - case EROFS: return __WASI_ERRNO_ROFS; break; - case EMLINK: return __WASI_ERRNO_MLINK; break; - case EPIPE: return __WASI_ERRNO_PIPE; break; - case EDOM: return __WASI_ERRNO_DOM; break; - case ERANGE: return __WASI_ERRNO_RANGE; break; - default: return __WASI_ERRNO_INVAL; - } + APE_SWITCH_BEG + APE_CASE_RET( EPERM , __WASI_ERRNO_PERM ) + APE_CASE_RET( ENOENT , __WASI_ERRNO_NOENT ) + APE_CASE_RET( ESRCH , __WASI_ERRNO_SRCH ) + APE_CASE_RET( EINTR , __WASI_ERRNO_INTR ) + APE_CASE_RET( EIO , __WASI_ERRNO_IO ) + APE_CASE_RET( ENXIO , __WASI_ERRNO_NXIO ) + APE_CASE_RET( E2BIG , __WASI_ERRNO_2BIG ) + APE_CASE_RET( ENOEXEC , __WASI_ERRNO_NOEXEC ) + APE_CASE_RET( EBADF , __WASI_ERRNO_BADF ) + APE_CASE_RET( ECHILD , __WASI_ERRNO_CHILD ) + APE_CASE_RET( EAGAIN , __WASI_ERRNO_AGAIN ) + APE_CASE_RET( ENOMEM , __WASI_ERRNO_NOMEM ) + APE_CASE_RET( EACCES , __WASI_ERRNO_ACCES ) + APE_CASE_RET( EFAULT , __WASI_ERRNO_FAULT ) + APE_CASE_RET( EBUSY , __WASI_ERRNO_BUSY ) + APE_CASE_RET( EEXIST , __WASI_ERRNO_EXIST ) + APE_CASE_RET( EXDEV , __WASI_ERRNO_XDEV ) + APE_CASE_RET( ENODEV , __WASI_ERRNO_NODEV ) + APE_CASE_RET( ENOTDIR , __WASI_ERRNO_NOTDIR ) + APE_CASE_RET( EISDIR , __WASI_ERRNO_ISDIR ) + APE_CASE_RET( EINVAL , __WASI_ERRNO_INVAL ) + APE_CASE_RET( ENFILE , __WASI_ERRNO_NFILE ) + APE_CASE_RET( EMFILE , __WASI_ERRNO_MFILE ) + APE_CASE_RET( ENOTTY , __WASI_ERRNO_NOTTY ) + APE_CASE_RET( ETXTBSY , __WASI_ERRNO_TXTBSY ) + APE_CASE_RET( EFBIG , __WASI_ERRNO_FBIG ) + APE_CASE_RET( ENOSPC , __WASI_ERRNO_NOSPC ) + APE_CASE_RET( ESPIPE , __WASI_ERRNO_SPIPE ) + APE_CASE_RET( EROFS , __WASI_ERRNO_ROFS ) + APE_CASE_RET( EMLINK , __WASI_ERRNO_MLINK ) + APE_CASE_RET( EPIPE , __WASI_ERRNO_PIPE ) + APE_CASE_RET( EDOM , __WASI_ERRNO_DOM ) + APE_CASE_RET( ERANGE , __WASI_ERRNO_RANGE ) + APE_SWITCH_END + return __WASI_ERRNO_INVAL; } #if defined(_WIN32) diff --git a/source/m3_env.h b/source/m3_env.h index b21d3a2..fa58593 100644 --- a/source/m3_env.h +++ b/source/m3_env.h @@ -247,8 +247,6 @@ IM3CodePage AcquireCodePage (IM3Runtime io_runtime); IM3CodePage AcquireCodePageWithCapacity (IM3Runtime io_runtime, u32 i_lineCount); void ReleaseCodePage (IM3Runtime io_runtime, IM3CodePage i_codePage); -M3Result m3Error (M3Result i_result, IM3Runtime i_runtime, IM3Module i_module, IM3Function i_function, const char * const i_file, u32 i_lineNum, const char * const i_errorMessage, ...); - d_m3EndExternC #endif // m3_env_h