Commit c2e6be97ff

Alex Rønne Petersen <alex@alexrp.com>
2024-10-15 22:52:46
wasm2c: Add an optional endianness command line argument.
If not given, endianness is inferred from the target that wasm2c is built for.
1 parent 5cb45b6
Changed files (1)
stage1
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 <in.wasm.zst> <out.c> [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]);