Explorar o código

Show wasm proposals status during compilation and execution (#3989)

- add default build configuration options and enhance message output for WAMR features
- Add Wasm proposal status printing functionality
liang.he hai 11 meses
pai
achega
41b2c6d0d5

+ 106 - 47
build-scripts/config_common.cmake

@@ -167,16 +167,61 @@ if (NOT DEFINED WAMR_BUILD_SHRUNK_MEMORY)
   set (WAMR_BUILD_SHRUNK_MEMORY 1)
 endif ()
 
+########################################
+# Default values
+########################################
+if (NOT DEFINED WAMR_BUILD_BULK_MEMORY)
+  set (WAMR_BUILD_BULK_MEMORY 1)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_EXCE_HANDLING)
+  set (WAMR_BUILD_EXCE_HANDLING 0)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_GC)
+  set (WAMR_BUILD_GC 0)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_MEMORY64)
+  set (WAMR_BUILD_MEMORY64 0)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_MULTI_MEMORY)
+  set (WAMR_BUILD_MULTI_MEMORY 0)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_SHARED_MEMORY)
+  set(WAMR_BUILD_SHARED_MEMORY 0)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_STRINGREF)
+  set(WAMR_BUILD_STRINGREF 0)
+endif ()
+
+if (NOT DEFINED WAMR_BUILD_TAIL_CALL)
+  set (WAMR_BUILD_TAIL_CALL 0)
+endif ()
+
+########################################
+# Compilation options to marco
 ########################################
 
 message ("-- Build Configurations:")
 message ("     Build as target ${WAMR_BUILD_TARGET}")
 message ("     CMAKE_BUILD_TYPE " ${CMAKE_BUILD_TYPE})
+################## running mode ##################
 if (WAMR_BUILD_INTERP EQUAL 1)
   message ("     WAMR Interpreter enabled")
 else ()
   message ("     WAMR Interpreter disabled")
 endif ()
+if ((WAMR_BUILD_FAST_INTERP EQUAL 1) AND (WAMR_BUILD_INTERP EQUAL 1))
+  add_definitions (-DWASM_ENABLE_FAST_INTERP=1)
+  message ("     Fast interpreter enabled")
+else ()
+  add_definitions (-DWASM_ENABLE_FAST_INTERP=0)
+  message ("     Fast interpreter disabled")
+endif ()
 if (WAMR_BUILD_AOT EQUAL 1)
   message ("     WAMR AOT enabled")
 else ()
@@ -207,6 +252,16 @@ if (WAMR_BUILD_FAST_JIT EQUAL 1 AND WAMR_BUILD_JIT EQUAL 1
     AND WAMR_BUILD_LAZY_JIT EQUAL 1)
   message ("     Multi-tier JIT enabled")
 endif ()
+################## test modes ##################
+if (WAMR_BUILD_SPEC_TEST EQUAL 1)
+  add_definitions (-DWASM_ENABLE_SPEC_TEST=1)
+  message ("     spec test compatible mode is on")
+endif ()
+if (WAMR_BUILD_WASI_TEST EQUAL 1)
+  add_definitions (-DWASM_ENABLE_WASI_TEST=1)
+  message ("     wasi test compatible mode is on")
+endif ()
+################## native ##################
 if (WAMR_BUILD_LIBC_BUILTIN EQUAL 1)
   message ("     Libc builtin enabled")
 else ()
@@ -219,13 +274,25 @@ elseif (WAMR_BUILD_LIBC_WASI EQUAL 1)
 else ()
   message ("     Libc WASI disabled")
 endif ()
-if ((WAMR_BUILD_FAST_INTERP EQUAL 1) AND (WAMR_BUILD_INTERP EQUAL 1))
-  add_definitions (-DWASM_ENABLE_FAST_INTERP=1)
-  message ("     Fast interpreter enabled")
-else ()
-  add_definitions (-DWASM_ENABLE_FAST_INTERP=0)
-  message ("     Fast interpreter disabled")
+if (WAMR_BUILD_THREAD_MGR EQUAL 1)
+  message ("     Thread manager enabled")
+endif ()
+if (WAMR_BUILD_LIB_PTHREAD EQUAL 1)
+  message ("     Lib pthread enabled")
 endif ()
+if (WAMR_BUILD_LIB_PTHREAD_SEMAPHORE EQUAL 1)
+  message ("     Lib pthread semaphore enabled")
+endif ()
+if (WAMR_BUILD_LIB_WASI_THREADS EQUAL 1)
+  message ("     Lib wasi-threads enabled")
+endif ()
+if (WAMR_BUILD_LIBC_EMCC EQUAL 1)
+  message ("     Libc emcc enabled")
+endif ()
+if (WAMR_BUILD_LIB_RATS EQUAL 1)
+  message ("     Lib rats enabled")
+endif()
+################## WAMR features ##################
 if (WAMR_BUILD_MULTI_MODULE EQUAL 1)
   add_definitions (-DWASM_ENABLE_MULTI_MODULE=1)
   message ("     Multiple modules enabled")
@@ -233,24 +300,10 @@ else ()
   add_definitions (-DWASM_ENABLE_MULTI_MODULE=0)
   message ("     Multiple modules disabled")
 endif ()
-if (WAMR_BUILD_SPEC_TEST EQUAL 1)
-  add_definitions (-DWASM_ENABLE_SPEC_TEST=1)
-  message ("     spec test compatible mode is on")
-endif ()
-if (WAMR_BUILD_WASI_TEST EQUAL 1)
-  add_definitions (-DWASM_ENABLE_WASI_TEST=1)
-  message ("     wasi test compatible mode is on")
-endif ()
-if (NOT DEFINED WAMR_BUILD_BULK_MEMORY)
-  # Enable bulk memory by default
-  set (WAMR_BUILD_BULK_MEMORY 1)
-endif ()
 if (WAMR_BUILD_BULK_MEMORY EQUAL 1)
   add_definitions (-DWASM_ENABLE_BULK_MEMORY=1)
-  message ("     Bulk memory feature enabled")
 else ()
   add_definitions (-DWASM_ENABLE_BULK_MEMORY=0)
-  message ("     Bulk memory feature disabled")
 endif ()
 if (WAMR_BUILD_SHARED_MEMORY EQUAL 1)
   add_definitions (-DWASM_ENABLE_SHARED_MEMORY=1)
@@ -270,31 +323,11 @@ if (WAMR_BUILD_MEMORY64 EQUAL 1)
   endif()
   add_definitions (-DWASM_ENABLE_MEMORY64=1)
   set (WAMR_DISABLE_HW_BOUND_CHECK 1)
-  message ("     Memory64 memory enabled")
 endif ()
 if (WAMR_BUILD_MULTI_MEMORY EQUAL 1)
   add_definitions (-DWASM_ENABLE_MULTI_MEMORY=1)
-  message ("     Multi memory enabled")
   set (WAMR_BUILD_DEBUG_INTERP 0)
 endif ()
-if (WAMR_BUILD_THREAD_MGR EQUAL 1)
-  message ("     Thread manager enabled")
-endif ()
-if (WAMR_BUILD_LIB_PTHREAD EQUAL 1)
-  message ("     Lib pthread enabled")
-endif ()
-if (WAMR_BUILD_LIB_PTHREAD_SEMAPHORE EQUAL 1)
-  message ("     Lib pthread semaphore enabled")
-endif ()
-if (WAMR_BUILD_LIB_WASI_THREADS EQUAL 1)
-  message ("     Lib wasi-threads enabled")
-endif ()
-if (WAMR_BUILD_LIBC_EMCC EQUAL 1)
-  message ("     Libc emcc enabled")
-endif ()
-if (WAMR_BUILD_LIB_RATS EQUAL 1)
-  message ("     Lib rats enabled")
-endif()
 if (WAMR_BUILD_MINI_LOADER EQUAL 1)
   add_definitions (-DWASM_ENABLE_MINI_LOADER=1)
   message ("     WASM mini loader enabled")
@@ -324,7 +357,6 @@ endif ()
 if (WAMR_BUILD_SIMD EQUAL 1)
   if (NOT WAMR_BUILD_TARGET MATCHES "RISCV64.*")
     add_definitions (-DWASM_ENABLE_SIMD=1)
-    message ("     SIMD enabled")
   else ()
     message ("     SIMD disabled due to not supported on target RISCV64")
   endif ()
@@ -354,16 +386,11 @@ if (WAMR_BUILD_DUMP_CALL_STACK EQUAL 1)
 endif ()
 if (WAMR_BUILD_TAIL_CALL EQUAL 1)
   add_definitions (-DWASM_ENABLE_TAIL_CALL=1)
-  message ("     Tail call enabled")
 endif ()
 if (WAMR_BUILD_REF_TYPES EQUAL 1)
   add_definitions (-DWASM_ENABLE_REF_TYPES=1)
-  message ("     Reference types enabled")
-else ()
-  message ("     Reference types disabled")
 endif ()
 if (WAMR_BUILD_GC EQUAL 1)
-  message ("     GC enabled")
   if (WAMR_TEST_GC EQUAL 1)
     message("      GC testing enabled")
   endif()
@@ -375,7 +402,6 @@ else ()
   message ("     GC performance profiling disabled")
 endif ()
 if (WAMR_BUILD_STRINGREF EQUAL 1)
-  message ("     Stringref enabled")
   if (NOT DEFINED WAMR_STRINGREF_IMPL_SOURCE)
     message ("       Using WAMR builtin implementation for stringref")
   else ()
@@ -615,3 +641,36 @@ if (WAMR_BUILD_AOT_VALIDATOR EQUAL 1)
   message ("     AOT validator enabled")
   add_definitions (-DWASM_ENABLE_AOT_VALIDATOR=1)
 endif ()
+
+########################################
+# Show Phase4 Wasm proposals status.
+########################################
+
+message (
+"-- About Wasm Proposals:\n"
+"     Always-on:\n"
+"       \"Extended Constant Expressions\"\n"
+"       \"Multi-value\"\n"
+"       \"Non-trapping float-to-int conversions\"\n"
+"       \"Sign-extension operators\"\n"
+"       \"WebAssembly C and C++ API\"\n"
+"     Configurable. 0 is OFF. 1 is ON:\n"
+"       \"Bulk Memory Operation\" via WAMR_BUILD_BULK_MEMORY: ${WAMR_BUILD_BULK_MEMORY}\n"
+"       \"Fixed-width SIMD\" via WAMR_BUILD_SIMD: ${WAMR_BUILD_SIMD}\n"
+"       \"Garbage collection\" via WAMR_BUILD_GC: ${WAMR_BUILD_GC}\n"
+"       \"Legacy Exception handling\" via WAMR_BUILD_EXCE_HANDLING: ${WAMR_BUILD_EXCE_HANDLING}\n"
+"       \"Memory64\" via WAMR_BUILD_MEMORY64: ${WAMR_BUILD_MEMORY64}\n"
+"       \"Multiple memories\" via WAMR_BUILD_MULTI_MEMORY: ${WAMR_BUILD_MULTI_MEMORY}\n"
+"       \"Reference Types\" via WAMR_BUILD_REF_TYPES: ${WAMR_BUILD_REF_TYPES}\n"
+"       \"Reference-Typed Strings\" via WAMR_BUILD_STRINGREF: ${WAMR_BUILD_STRINGREF}\n"
+"       \"Tail call\" via WAMR_BUILD_TAIL_CALL: ${WAMR_BUILD_TAIL_CALL}\n"
+"       \"Threads\" via WAMR_BUILD_SHARED_MEMORY: ${WAMR_BUILD_SHARED_MEMORY}\n"
+"       \"Typed Function References\" via WAMR_BUILD_GC: ${WAMR_BUILD_GC}\n"
+"     Unsupported (>= Phase4):\n"
+"       \"Branch Hinting\"\n"
+"       \"Custom Annotation Syntax in the Text Format\"\n"
+"       \"Exception handling\"\n"
+"       \"Import/Export of Mutable Globals\"\n"
+"       \"JS String Builtins\"\n"
+"       \"Relaxed SIMD\"\n"
+)

+ 1 - 1
doc/stability_wasm_proposals.md

@@ -35,7 +35,7 @@ Users can turn those features on or off by using compilation options. If a relev
 | Multiple memories[^3]         | Yes        | `WAMR_BUILD_MULTI_MEMORY`  |
 | Reference-Typed Strings       | No         | `WAMR_BUILD_STRINGREF`     |
 | Tail call                     | Yes        | `WAMR_BUILD_TAIL_CALL`     |
-| Thread[^4]                    | Yes        | `WAMR_BUILD_SHARED_MEMORY` |
+| Threads[^4]                   | Yes        | `WAMR_BUILD_SHARED_MEMORY` |
 | Typed Function References     | Yes        | `WAMR_BUILD_GC`            |
 
 [^2]:

+ 48 - 0
product-mini/platforms/common/wasm_proposal.c

@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2023 Amazon.com Inc. or its affiliates. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+#include <stdio.h>
+
+void
+wasm_proposal_print_status(void)
+{
+    printf("About Wasm Proposals:\n");
+    printf("  Always-on:\n");
+    printf("    - Extended Constant Expressions\n");
+    printf("    - Multi-value\n");
+    printf("    - Non-trapping float-to-int conversions\n");
+    printf("    - Sign-extension operators\n");
+    printf("    - WebAssembly C and C++ API\n");
+    printf("  Compilation Configurable. 0 is OFF. 1 is ON:\n");
+    printf("    - Bulk Memory Operation via WASM_ENABLE_BULK_MEMORY: %u\n",
+           WASM_ENABLE_BULK_MEMORY);
+    printf("    - Fixed-Width SIMD via WASM_ENABLE_SIMD: %u\n",
+           WASM_ENABLE_SIMD);
+    printf("    - Garbage Collection via WASM_ENABLE_GC: %u\n", WASM_ENABLE_GC);
+    printf(
+        "    - Legacy Exception Handling via WASM_ENABLE_EXCE_HANDLING: %u\n",
+        WASM_ENABLE_EXCE_HANDLING);
+    printf("    - Memory64 via WASM_ENABLE_MEMORY64: %u\n",
+           WASM_ENABLE_MEMORY64);
+    printf("    - Multiple Memory via WASM_ENABLE_MULTI_MEMORY: %u\n",
+           WASM_ENABLE_MULTI_MEMORY);
+    printf("    - Reference Types via WASM_ENABLE_REF_TYPES: %u\n",
+           WASM_ENABLE_REF_TYPES);
+    printf("    - Reference-Typed Strings via WASM_ENABLE_REF_TYPES: %u\n",
+           WASM_ENABLE_REF_TYPES);
+    printf("    - Tail Call via WASM_ENABLE_TAIL_CALL: %u\n",
+           WASM_ENABLE_TAIL_CALL);
+    printf("    - Threads via WASM_ENABLE_SHARED_MEMORY: %u\n",
+           WASM_ENABLE_SHARED_MEMORY);
+    printf("    - Typed Function References via WASM_ENABLE_GC: %u\n",
+           WASM_ENABLE_GC);
+    printf("  Unsupported (>= Phase4):\n");
+    printf("    - Branch Hinting\n");
+    printf("    - Custom Annotation Syntax in the Text Format\n");
+    printf("    - Exception handling\n");
+    printf("    - Import/Export of Mutable Globals\n");
+    printf("    - JS String Builtins\n");
+    printf("    - Relaxed SIMD\n");
+}

+ 4 - 0
product-mini/platforms/posix/main.c

@@ -18,6 +18,8 @@
 #include "../common/libc_wasi.c"
 #endif
 
+#include "../common/wasm_proposal.c"
+
 #if BH_HAS_DLFCN
 #include <dlfcn.h>
 #endif
@@ -798,6 +800,8 @@ main(int argc, char *argv[])
             wasm_runtime_get_version(&major, &minor, &patch);
             printf("iwasm %" PRIu32 ".%" PRIu32 ".%" PRIu32 "\n", major, minor,
                    patch);
+            printf("\n");
+            wasm_proposal_print_status();
             return 0;
         }
         else {