From c2e6be97ffc23f2fa6c28175766b8bb565e9c970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 15 Oct 2024 22:52:46 +0200 Subject: [PATCH] wasm2c: Add an optional endianness command line argument. If not given, endianness is inferred from the target that wasm2c is built for. --- stage1/wasm2c.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/stage1/wasm2c.c b/stage1/wasm2c.c index 84c8adb351..48484f5712 100644 --- a/stage1/wasm2c.c +++ b/stage1/wasm2c.c @@ -76,13 +76,27 @@ static void renderExpr(FILE *out, struct InputStream *in) { static const uint32_t big_endian = 0xff000000; int main(int argc, char **argv) { - if (argc != 3) { - fprintf(stderr, "usage: %s in.wasm.zst out.c\n", argv[0]); + if (argc != 3 && argc != 4) { + fprintf(stderr, "usage: %s [endian]\n", argv[0]); return 1; } + bool is_big_endian; + + if (argc >= 4) { + if (!strcmp(argv[3], "big")) { + is_big_endian = true; + } else if (!strcmp(argv[3], "little")) { + is_big_endian = false; + } else { + fprintf(stderr, "endianness must be 'big' or 'little'\n"); + return 1; + } + } else { + is_big_endian = *(uint8_t *)&big_endian; // Infer from host endianness. + } + const char *mod = "wasm"; - bool is_big_endian = *(uint8_t *)&big_endian; struct InputStream in; InputStream_open(&in, argv[1]);