From a75a5f0f41c003ee44860cc5254cb43b82272909 Mon Sep 17 00:00:00 2001 From: Wang Xin Date: Tue, 7 May 2019 10:18:18 +0800 Subject: [PATCH] WebAssembly Micro Runtime first version --- core/iwasm/app-samples/hello-world/build.sh | 17 + core/iwasm/app-samples/hello-world/main.c | 39 + core/iwasm/lib/app-libs/base/bh_platform.c | 112 + core/iwasm/lib/app-libs/base/bh_platform.h | 59 + core/iwasm/lib/app-libs/base/request.c | 357 ++ core/iwasm/lib/app-libs/base/request.h | 49 + core/iwasm/lib/app-libs/base/timer.c | 106 + core/iwasm/lib/app-libs/base/timer_wasm_app.h | 43 + core/iwasm/lib/app-libs/base/wasm_app.h | 92 + .../lib/app-libs/extension/sensor/sensor.c | 130 + .../lib/app-libs/extension/sensor/sensor.h | 45 + core/iwasm/lib/app-libs/libc/lib-base.h | 45 + .../lib/native-interface/attr-container.c | 841 +++++ .../lib/native-interface/attr-container.h | 436 +++ .../native-interface/native_interface.cmake | 23 + .../lib/native-interface/native_interface.h | 78 + core/iwasm/lib/native-interface/readme.txt | 12 + .../lib/native-interface/restful_utils.c | 424 +++ core/iwasm/lib/native-interface/sensor_api.h | 41 + .../iwasm/lib/native-interface/shared_utils.h | 97 + core/iwasm/lib/native/base/base-lib-export.c | 48 + core/iwasm/lib/native/base/base-lib-export.h | 24 + core/iwasm/lib/native/base/request_response.c | 111 + core/iwasm/lib/native/base/runtime_lib.h | 29 + core/iwasm/lib/native/base/timer_wrapper.c | 178 + .../iwasm/lib/native/base/wasm_lib_base.cmake | 23 + .../native/extension/sensor/runtime_sensor.c | 425 +++ .../native/extension/sensor/runtime_sensor.h | 75 + .../extension/sensor/runtime_sensor.inl | 20 + .../native/extension/sensor/sensor_mgr_ref.c | 145 + .../extension/sensor/wasm_lib_sensor.cmake | 23 + .../extension/template/lib-export-template.c | 28 + core/iwasm/lib/native/libc/libc_wrapper.c | 893 +++++ core/iwasm/lib/native/libc/wasm_libc.cmake | 23 + core/iwasm/products/linux/CMakeLists.txt | 92 + core/iwasm/products/linux/b/CMakeCache.txt | 341 ++ .../b/CMakeFiles/3.5.1/CMakeASMCompiler.cmake | 12 + .../b/CMakeFiles/3.5.1/CMakeCCompiler.cmake | 67 + .../b/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake | 68 + .../3.5.1/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 8640 bytes .../3.5.1/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 8656 bytes .../b/CMakeFiles/3.5.1/CMakeSystem.cmake | 15 + .../3.5.1/CompilerIdC/CMakeCCompilerId.c | 544 ++++ .../b/CMakeFiles/3.5.1/CompilerIdC/a.out | Bin 0 -> 8800 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 533 +++ .../b/CMakeFiles/3.5.1/CompilerIdCXX/a.out | Bin 0 -> 8808 bytes .../CMakeDirectoryInformation.cmake | 16 + .../linux/b/CMakeFiles/CMakeOutput.log | 554 ++++ .../linux/b/CMakeFiles/Makefile.cmake | 131 + .../products/linux/b/CMakeFiles/Makefile2 | 182 ++ .../linux/b/CMakeFiles/TargetDirectories.txt | 5 + .../linux/b/CMakeFiles/cmake.check_cache | 1 + .../linux/b/CMakeFiles/feature_tests.bin | Bin 0 -> 12696 bytes .../linux/b/CMakeFiles/feature_tests.c | 34 + .../linux/b/CMakeFiles/feature_tests.cxx | 405 +++ .../b/CMakeFiles/iwasm.dir/C.includecache | 172 + .../b/CMakeFiles/iwasm.dir/DependInfo.cmake | 44 + .../linux/b/CMakeFiles/iwasm.dir/build.make | 141 + .../b/CMakeFiles/iwasm.dir/cmake_clean.cmake | 11 + .../b/CMakeFiles/iwasm.dir/depend.internal | 25 + .../linux/b/CMakeFiles/iwasm.dir/depend.make | 25 + .../b/CMakeFiles/iwasm.dir/ext-lib-export.c.o | Bin 0 -> 1176 bytes .../linux/b/CMakeFiles/iwasm.dir/flags.make | 10 + .../linux/b/CMakeFiles/iwasm.dir/link.txt | 1 + .../linux/b/CMakeFiles/iwasm.dir/main.c.o | Bin 0 -> 6188 bytes .../b/CMakeFiles/iwasm.dir/progress.make | 4 + .../CMakeFiles/libiwasm.dir/ASM.includecache | 10 + .../b/CMakeFiles/libiwasm.dir/C.includecache | 512 +++ .../CMakeFiles/libiwasm.dir/DependInfo.cmake | 95 + .../b/CMakeFiles/libiwasm.dir/build.make | 726 +++++ .../CMakeFiles/libiwasm.dir/cmake_clean.cmake | 33 + .../b/CMakeFiles/libiwasm.dir/depend.internal | 293 ++ .../b/CMakeFiles/libiwasm.dir/depend.make | 293 ++ .../b/CMakeFiles/libiwasm.dir/flags.make | 17 + .../iwasm/lib/native/base/base-lib-export.c.o | Bin 0 -> 1468 bytes .../iwasm/lib/native/libc/libc_wrapper.c.o | Bin 0 -> 22660 bytes .../runtime/platform/linux/wasm-native.c.o | Bin 0 -> 11000 bytes .../runtime/platform/linux/wasm_platform.c.o | Bin 0 -> 3252 bytes .../core/iwasm/runtime/utils/wasm_dlfcn.c.o | Bin 0 -> 3232 bytes .../core/iwasm/runtime/utils/wasm_hashmap.c.o | Bin 0 -> 6136 bytes .../core/iwasm/runtime/utils/wasm_log.c.o | Bin 0 -> 4260 bytes .../core/iwasm/runtime/utils/wasm_vector.c.o | Bin 0 -> 6604 bytes .../runtime/vmcore_wasm/invokeNative_ia32.s.o | Bin 0 -> 536 bytes .../runtime/vmcore_wasm/wasm-application.c.o | Bin 0 -> 8896 bytes .../iwasm/runtime/vmcore_wasm/wasm-interp.c.o | Bin 0 -> 67116 bytes .../iwasm/runtime/vmcore_wasm/wasm-loader.c.o | Bin 0 -> 72964 bytes .../runtime/vmcore_wasm/wasm-runtime.c.o | Bin 0 -> 31444 bytes .../core/shared-lib/mem-alloc/bh_memory.c.o | Bin 0 -> 3936 bytes .../shared-lib/mem-alloc/ems/ems_alloc.c.o | Bin 0 -> 11464 bytes .../core/shared-lib/mem-alloc/ems/ems_hmu.c.o | Bin 0 -> 660 bytes .../core/shared-lib/mem-alloc/ems/ems_kfc.c.o | Bin 0 -> 4936 bytes .../core/shared-lib/mem-alloc/mem_alloc.c.o | Bin 0 -> 2296 bytes .../shared-lib/platform/linux/bh_assert.c.o | Bin 0 -> 2440 bytes .../platform/linux/bh_definition.c.o | Bin 0 -> 2948 bytes .../shared-lib/platform/linux/bh_platform.c.o | Bin 0 -> 1484 bytes .../platform/linux/bh_platform_log.c.o | Bin 0 -> 2324 bytes .../shared-lib/platform/linux/bh_thread.c.o | Bin 0 -> 17500 bytes .../shared-lib/platform/linux/bh_time.c.o | Bin 0 -> 3336 bytes .../linux/b/CMakeFiles/libiwasm.dir/link.txt | 1 + .../b/CMakeFiles/libiwasm.dir/progress.make | 26 + .../linux/b/CMakeFiles/progress.marks | 1 + .../b/CMakeFiles/vmlib.dir/ASM.includecache | 10 + .../b/CMakeFiles/vmlib.dir/C.includecache | 512 +++ .../b/CMakeFiles/vmlib.dir/DependInfo.cmake | 95 + .../linux/b/CMakeFiles/vmlib.dir/build.make | 727 +++++ .../b/CMakeFiles/vmlib.dir/cmake_clean.cmake | 33 + .../vmlib.dir/cmake_clean_target.cmake | 3 + .../b/CMakeFiles/vmlib.dir/depend.internal | 293 ++ .../linux/b/CMakeFiles/vmlib.dir/depend.make | 293 ++ .../linux/b/CMakeFiles/vmlib.dir/flags.make | 17 + .../iwasm/lib/native/base/base-lib-export.c.o | Bin 0 -> 1176 bytes .../iwasm/lib/native/libc/libc_wrapper.c.o | Bin 0 -> 19960 bytes .../runtime/platform/linux/wasm-native.c.o | Bin 0 -> 9752 bytes .../runtime/platform/linux/wasm_platform.c.o | Bin 0 -> 2608 bytes .../core/iwasm/runtime/utils/wasm_dlfcn.c.o | Bin 0 -> 2856 bytes .../core/iwasm/runtime/utils/wasm_hashmap.c.o | Bin 0 -> 5388 bytes .../core/iwasm/runtime/utils/wasm_log.c.o | Bin 0 -> 3492 bytes .../core/iwasm/runtime/utils/wasm_vector.c.o | Bin 0 -> 5484 bytes .../runtime/vmcore_wasm/invokeNative_ia32.s.o | Bin 0 -> 536 bytes .../runtime/vmcore_wasm/wasm-application.c.o | Bin 0 -> 7992 bytes .../iwasm/runtime/vmcore_wasm/wasm-interp.c.o | Bin 0 -> 61320 bytes .../iwasm/runtime/vmcore_wasm/wasm-loader.c.o | Bin 0 -> 67948 bytes .../runtime/vmcore_wasm/wasm-runtime.c.o | Bin 0 -> 28332 bytes .../core/shared-lib/mem-alloc/bh_memory.c.o | Bin 0 -> 3256 bytes .../shared-lib/mem-alloc/ems/ems_alloc.c.o | Bin 0 -> 10324 bytes .../core/shared-lib/mem-alloc/ems/ems_hmu.c.o | Bin 0 -> 660 bytes .../core/shared-lib/mem-alloc/ems/ems_kfc.c.o | Bin 0 -> 3872 bytes .../core/shared-lib/mem-alloc/mem_alloc.c.o | Bin 0 -> 1888 bytes .../shared-lib/platform/linux/bh_assert.c.o | Bin 0 -> 2088 bytes .../platform/linux/bh_definition.c.o | Bin 0 -> 2256 bytes .../shared-lib/platform/linux/bh_platform.c.o | Bin 0 -> 1184 bytes .../platform/linux/bh_platform_log.c.o | Bin 0 -> 1716 bytes .../shared-lib/platform/linux/bh_thread.c.o | Bin 0 -> 15768 bytes .../shared-lib/platform/linux/bh_time.c.o | Bin 0 -> 2684 bytes .../linux/b/CMakeFiles/vmlib.dir/link.txt | 2 + .../b/CMakeFiles/vmlib.dir/progress.make | 26 + core/iwasm/products/linux/b/Makefile | 1006 ++++++ .../products/linux/b/cmake_install.cmake | 44 + core/iwasm/products/linux/b/iwasm | Bin 0 -> 166492 bytes core/iwasm/products/linux/b/libiwasm.so | Bin 0 -> 202148 bytes core/iwasm/products/linux/ext-lib-export.c | 21 + core/iwasm/products/linux/main.c | 237 ++ .../products/zephyr/simple/CMakeLists.txt | 57 + core/iwasm/products/zephyr/simple/prj.conf | 0 .../zephyr/simple/src/ext-lib-export.c | 21 + core/iwasm/products/zephyr/simple/src/main.c | 128 + .../products/zephyr/simple/src/test_wasm.h | 65 + core/iwasm/runtime/include/ext-lib-export.h | 38 + core/iwasm/runtime/include/lib-export.h | 57 + core/iwasm/runtime/include/wasm-export.h | 421 +++ core/iwasm/runtime/include/wasm_hashmap.h | 144 + core/iwasm/runtime/include/wasm_log.h | 94 + core/iwasm/runtime/include/wasm_vector.h | 137 + .../runtime/platform/include/wasm_assert.h | 34 + .../runtime/platform/include/wasm_config.h | 23 + .../runtime/platform/include/wasm_memory.h | 34 + .../platform/include/wasm_platform_log.h | 24 + .../runtime/platform/include/wasm_thread.h | 63 + .../runtime/platform/include/wasm_types.h | 38 + .../runtime/platform/linux/platform.cmake | 25 + .../runtime/platform/linux/wasm-native.c | 333 ++ .../runtime/platform/linux/wasm_platform.c | 96 + .../runtime/platform/linux/wasm_platform.h | 104 + core/iwasm/runtime/platform/zephyr/COPYRIGHT | 126 + .../runtime/platform/zephyr/wasm-native.c | 26 + .../iwasm/runtime/platform/zephyr/wasm_math.c | 581 ++++ .../runtime/platform/zephyr/wasm_platform.c | 56 + .../runtime/platform/zephyr/wasm_platform.h | 105 + core/iwasm/runtime/utils/utils.cmake | 22 + core/iwasm/runtime/utils/wasm_dlfcn.c | 107 + core/iwasm/runtime/utils/wasm_hashmap.c | 301 ++ core/iwasm/runtime/utils/wasm_log.c | 102 + core/iwasm/runtime/utils/wasm_vector.c | 217 ++ .../vmcore_wasm/invokeNative_general.c | 92 + .../runtime/vmcore_wasm/invokeNative_ia32.s | 56 + core/iwasm/runtime/vmcore_wasm/vmcore.cmake | 28 + .../runtime/vmcore_wasm/wasm-application.c | 390 +++ core/iwasm/runtime/vmcore_wasm/wasm-interp.c | 2160 +++++++++++++ core/iwasm/runtime/vmcore_wasm/wasm-interp.h | 79 + core/iwasm/runtime/vmcore_wasm/wasm-loader.c | 2874 +++++++++++++++++ core/iwasm/runtime/vmcore_wasm/wasm-loader.h | 92 + core/iwasm/runtime/vmcore_wasm/wasm-native.h | 66 + core/iwasm/runtime/vmcore_wasm/wasm-opcode.h | 472 +++ core/iwasm/runtime/vmcore_wasm/wasm-runtime.c | 1220 +++++++ core/iwasm/runtime/vmcore_wasm/wasm-runtime.h | 328 ++ core/iwasm/runtime/vmcore_wasm/wasm-thread.h | 146 + core/iwasm/runtime/vmcore_wasm/wasm.h | 392 +++ core/shared-lib/include/bh_common.h | 44 + core/shared-lib/include/bh_list.h | 120 + core/shared-lib/include/bh_log.h | 155 + core/shared-lib/include/bh_memory.h | 76 + core/shared-lib/include/bh_queue.h | 99 + core/shared-lib/include/config.h | 90 + core/shared-lib/include/errcode.h | 89 + core/shared-lib/include/korp_types.h | 160 + core/shared-lib/include/mem_alloc.h | 45 + core/shared-lib/mem-alloc/bh_memory.c | 105 + core/shared-lib/mem-alloc/ems/ems_alloc.c | 590 ++++ core/shared-lib/mem-alloc/ems/ems_gc.h | 341 ++ .../mem-alloc/ems/ems_gc_internal.h | 282 ++ core/shared-lib/mem-alloc/ems/ems_hmu.c | 98 + core/shared-lib/mem-alloc/ems/ems_kfc.c | 196 ++ core/shared-lib/mem-alloc/mem_alloc.c | 136 + core/shared-lib/mem-alloc/mem_alloc.cmake | 27 + core/shared-lib/platform/CMakeLists.txt | 31 + core/shared-lib/platform/Makefile | 15 + core/shared-lib/platform/android/bh_assert.c | 69 + .../platform/android/bh_definition.c | 81 + .../shared-lib/platform/android/bh_platform.h | 117 + .../platform/android/bh_platform_log.c | 41 + core/shared-lib/platform/android/bh_thread.c | 150 + core/shared-lib/platform/android/bh_time.c | 71 + core/shared-lib/platform/include/bh_assert.h | 84 + core/shared-lib/platform/include/bh_config.h | 31 + .../platform/include/bh_definition.h | 41 + .../platform/include/bh_platform_log.h | 36 + core/shared-lib/platform/include/bh_thread.h | 409 +++ core/shared-lib/platform/include/bh_time.h | 98 + core/shared-lib/platform/include/bh_types.h | 51 + core/shared-lib/platform/linux/bh_assert.c | 69 + .../shared-lib/platform/linux/bh_definition.c | 81 + core/shared-lib/platform/linux/bh_platform.c | 27 + core/shared-lib/platform/linux/bh_platform.h | 129 + .../platform/linux/bh_platform_log.c | 41 + core/shared-lib/platform/linux/bh_thread.c | 404 +++ core/shared-lib/platform/linux/bh_time.c | 80 + .../platform/linux/shared_platform.cmake | 24 + core/shared-lib/platform/win32/bh_assert.c | 67 + .../shared-lib/platform/win32/bh_definition.c | 22 + core/shared-lib/platform/win32/bh_platform.h | 93 + .../platform/win32/bh_platform_log.c | 39 + core/shared-lib/platform/win32/bh_thread.c | 342 ++ core/shared-lib/platform/win32/bh_time.c | 101 + core/shared-lib/platform/zephyr/Makefile | 15 + core/shared-lib/platform/zephyr/bh_assert.c | 69 + .../platform/zephyr/bh_definition.c | 68 + core/shared-lib/platform/zephyr/bh_platform.c | 27 + core/shared-lib/platform/zephyr/bh_platform.h | 104 + .../platform/zephyr/bh_platform_log.c | 68 + core/shared-lib/platform/zephyr/bh_thread.c | 537 +++ core/shared-lib/platform/zephyr/bh_time.c | 57 + .../platform/zephyr/shared_platform.cmake | 24 + core/shared-lib/shared_lib.cmake | 17 + core/shared-lib/utils/CMakeLists.txt | 21 + core/shared-lib/utils/Makefile | 16 + core/shared-lib/utils/bh_list.c | 114 + core/shared-lib/utils/bh_log.c | 213 ++ core/shared-lib/utils/bh_queue.c | 258 ++ core/shared-lib/utils/runtime_timer.c | 478 +++ core/shared-lib/utils/runtime_timer.h | 55 + core/shared-lib/utils/shared_utils.cmake | 24 + projects/README.md | 1 + 252 files changed, 33487 insertions(+) create mode 100755 core/iwasm/app-samples/hello-world/build.sh create mode 100644 core/iwasm/app-samples/hello-world/main.c create mode 100644 core/iwasm/lib/app-libs/base/bh_platform.c create mode 100755 core/iwasm/lib/app-libs/base/bh_platform.h create mode 100644 core/iwasm/lib/app-libs/base/request.c create mode 100644 core/iwasm/lib/app-libs/base/request.h create mode 100644 core/iwasm/lib/app-libs/base/timer.c create mode 100644 core/iwasm/lib/app-libs/base/timer_wasm_app.h create mode 100644 core/iwasm/lib/app-libs/base/wasm_app.h create mode 100644 core/iwasm/lib/app-libs/extension/sensor/sensor.c create mode 100644 core/iwasm/lib/app-libs/extension/sensor/sensor.h create mode 100644 core/iwasm/lib/app-libs/libc/lib-base.h create mode 100644 core/iwasm/lib/native-interface/attr-container.c create mode 100644 core/iwasm/lib/native-interface/attr-container.h create mode 100644 core/iwasm/lib/native-interface/native_interface.cmake create mode 100644 core/iwasm/lib/native-interface/native_interface.h create mode 100644 core/iwasm/lib/native-interface/readme.txt create mode 100644 core/iwasm/lib/native-interface/restful_utils.c create mode 100644 core/iwasm/lib/native-interface/sensor_api.h create mode 100644 core/iwasm/lib/native-interface/shared_utils.h create mode 100644 core/iwasm/lib/native/base/base-lib-export.c create mode 100644 core/iwasm/lib/native/base/base-lib-export.h create mode 100644 core/iwasm/lib/native/base/request_response.c create mode 100644 core/iwasm/lib/native/base/runtime_lib.h create mode 100644 core/iwasm/lib/native/base/timer_wrapper.c create mode 100644 core/iwasm/lib/native/base/wasm_lib_base.cmake create mode 100644 core/iwasm/lib/native/extension/sensor/runtime_sensor.c create mode 100644 core/iwasm/lib/native/extension/sensor/runtime_sensor.h create mode 100644 core/iwasm/lib/native/extension/sensor/runtime_sensor.inl create mode 100644 core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c create mode 100644 core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake create mode 100644 core/iwasm/lib/native/extension/template/lib-export-template.c create mode 100644 core/iwasm/lib/native/libc/libc_wrapper.c create mode 100644 core/iwasm/lib/native/libc/wasm_libc.cmake create mode 100644 core/iwasm/products/linux/CMakeLists.txt create mode 100644 core/iwasm/products/linux/b/CMakeCache.txt create mode 100644 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeASMCompiler.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCCompiler.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake create mode 100755 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin create mode 100755 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin create mode 100644 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeSystem.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c create mode 100755 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/a.out create mode 100644 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/a.out create mode 100644 core/iwasm/products/linux/b/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/CMakeOutput.log create mode 100644 core/iwasm/products/linux/b/CMakeFiles/Makefile.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/Makefile2 create mode 100644 core/iwasm/products/linux/b/CMakeFiles/TargetDirectories.txt create mode 100644 core/iwasm/products/linux/b/CMakeFiles/cmake.check_cache create mode 100755 core/iwasm/products/linux/b/CMakeFiles/feature_tests.bin create mode 100644 core/iwasm/products/linux/b/CMakeFiles/feature_tests.c create mode 100644 core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/C.includecache create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/DependInfo.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/build.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/cmake_clean.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.internal create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/ext-lib-export.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/flags.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/link.txt create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/main.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/progress.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/ASM.includecache create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/C.includecache create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/DependInfo.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/build.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/cmake_clean.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.internal create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/flags.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/link.txt create mode 100644 core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/progress.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/progress.marks create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/ASM.includecache create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/C.includecache create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/DependInfo.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/build.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean_target.cmake create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.internal create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/flags.make create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/link.txt create mode 100644 core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/progress.make create mode 100644 core/iwasm/products/linux/b/Makefile create mode 100644 core/iwasm/products/linux/b/cmake_install.cmake create mode 100755 core/iwasm/products/linux/b/iwasm create mode 100755 core/iwasm/products/linux/b/libiwasm.so create mode 100644 core/iwasm/products/linux/ext-lib-export.c create mode 100644 core/iwasm/products/linux/main.c create mode 100644 core/iwasm/products/zephyr/simple/CMakeLists.txt create mode 100644 core/iwasm/products/zephyr/simple/prj.conf create mode 100644 core/iwasm/products/zephyr/simple/src/ext-lib-export.c create mode 100644 core/iwasm/products/zephyr/simple/src/main.c create mode 100644 core/iwasm/products/zephyr/simple/src/test_wasm.h create mode 100644 core/iwasm/runtime/include/ext-lib-export.h create mode 100644 core/iwasm/runtime/include/lib-export.h create mode 100644 core/iwasm/runtime/include/wasm-export.h create mode 100644 core/iwasm/runtime/include/wasm_hashmap.h create mode 100644 core/iwasm/runtime/include/wasm_log.h create mode 100644 core/iwasm/runtime/include/wasm_vector.h create mode 100644 core/iwasm/runtime/platform/include/wasm_assert.h create mode 100644 core/iwasm/runtime/platform/include/wasm_config.h create mode 100644 core/iwasm/runtime/platform/include/wasm_memory.h create mode 100644 core/iwasm/runtime/platform/include/wasm_platform_log.h create mode 100644 core/iwasm/runtime/platform/include/wasm_thread.h create mode 100644 core/iwasm/runtime/platform/include/wasm_types.h create mode 100644 core/iwasm/runtime/platform/linux/platform.cmake create mode 100644 core/iwasm/runtime/platform/linux/wasm-native.c create mode 100644 core/iwasm/runtime/platform/linux/wasm_platform.c create mode 100644 core/iwasm/runtime/platform/linux/wasm_platform.h create mode 100644 core/iwasm/runtime/platform/zephyr/COPYRIGHT create mode 100644 core/iwasm/runtime/platform/zephyr/wasm-native.c create mode 100644 core/iwasm/runtime/platform/zephyr/wasm_math.c create mode 100644 core/iwasm/runtime/platform/zephyr/wasm_platform.c create mode 100644 core/iwasm/runtime/platform/zephyr/wasm_platform.h create mode 100644 core/iwasm/runtime/utils/utils.cmake create mode 100644 core/iwasm/runtime/utils/wasm_dlfcn.c create mode 100644 core/iwasm/runtime/utils/wasm_hashmap.c create mode 100644 core/iwasm/runtime/utils/wasm_log.c create mode 100644 core/iwasm/runtime/utils/wasm_vector.c create mode 100644 core/iwasm/runtime/vmcore_wasm/invokeNative_general.c create mode 100644 core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s create mode 100644 core/iwasm/runtime/vmcore_wasm/vmcore.cmake create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-application.c create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-interp.c create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-interp.h create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-loader.c create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-loader.h create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-native.h create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-opcode.h create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-runtime.c create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-runtime.h create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm-thread.h create mode 100644 core/iwasm/runtime/vmcore_wasm/wasm.h create mode 100755 core/shared-lib/include/bh_common.h create mode 100644 core/shared-lib/include/bh_list.h create mode 100644 core/shared-lib/include/bh_log.h create mode 100644 core/shared-lib/include/bh_memory.h create mode 100644 core/shared-lib/include/bh_queue.h create mode 100644 core/shared-lib/include/config.h create mode 100755 core/shared-lib/include/errcode.h create mode 100755 core/shared-lib/include/korp_types.h create mode 100644 core/shared-lib/include/mem_alloc.h create mode 100644 core/shared-lib/mem-alloc/bh_memory.c create mode 100644 core/shared-lib/mem-alloc/ems/ems_alloc.c create mode 100644 core/shared-lib/mem-alloc/ems/ems_gc.h create mode 100644 core/shared-lib/mem-alloc/ems/ems_gc_internal.h create mode 100644 core/shared-lib/mem-alloc/ems/ems_hmu.c create mode 100644 core/shared-lib/mem-alloc/ems/ems_kfc.c create mode 100644 core/shared-lib/mem-alloc/mem_alloc.c create mode 100644 core/shared-lib/mem-alloc/mem_alloc.cmake create mode 100755 core/shared-lib/platform/CMakeLists.txt create mode 100644 core/shared-lib/platform/Makefile create mode 100755 core/shared-lib/platform/android/bh_assert.c create mode 100755 core/shared-lib/platform/android/bh_definition.c create mode 100755 core/shared-lib/platform/android/bh_platform.h create mode 100755 core/shared-lib/platform/android/bh_platform_log.c create mode 100755 core/shared-lib/platform/android/bh_thread.c create mode 100755 core/shared-lib/platform/android/bh_time.c create mode 100644 core/shared-lib/platform/include/bh_assert.h create mode 100644 core/shared-lib/platform/include/bh_config.h create mode 100755 core/shared-lib/platform/include/bh_definition.h create mode 100644 core/shared-lib/platform/include/bh_platform_log.h create mode 100644 core/shared-lib/platform/include/bh_thread.h create mode 100644 core/shared-lib/platform/include/bh_time.h create mode 100644 core/shared-lib/platform/include/bh_types.h create mode 100644 core/shared-lib/platform/linux/bh_assert.c create mode 100644 core/shared-lib/platform/linux/bh_definition.c create mode 100755 core/shared-lib/platform/linux/bh_platform.c create mode 100644 core/shared-lib/platform/linux/bh_platform.h create mode 100644 core/shared-lib/platform/linux/bh_platform_log.c create mode 100755 core/shared-lib/platform/linux/bh_thread.c create mode 100755 core/shared-lib/platform/linux/bh_time.c create mode 100644 core/shared-lib/platform/linux/shared_platform.cmake create mode 100644 core/shared-lib/platform/win32/bh_assert.c create mode 100644 core/shared-lib/platform/win32/bh_definition.c create mode 100755 core/shared-lib/platform/win32/bh_platform.h create mode 100755 core/shared-lib/platform/win32/bh_platform_log.c create mode 100755 core/shared-lib/platform/win32/bh_thread.c create mode 100755 core/shared-lib/platform/win32/bh_time.c create mode 100644 core/shared-lib/platform/zephyr/Makefile create mode 100644 core/shared-lib/platform/zephyr/bh_assert.c create mode 100644 core/shared-lib/platform/zephyr/bh_definition.c create mode 100755 core/shared-lib/platform/zephyr/bh_platform.c create mode 100644 core/shared-lib/platform/zephyr/bh_platform.h create mode 100644 core/shared-lib/platform/zephyr/bh_platform_log.c create mode 100755 core/shared-lib/platform/zephyr/bh_thread.c create mode 100755 core/shared-lib/platform/zephyr/bh_time.c create mode 100644 core/shared-lib/platform/zephyr/shared_platform.cmake create mode 100644 core/shared-lib/shared_lib.cmake create mode 100644 core/shared-lib/utils/CMakeLists.txt create mode 100644 core/shared-lib/utils/Makefile create mode 100644 core/shared-lib/utils/bh_list.c create mode 100644 core/shared-lib/utils/bh_log.c create mode 100644 core/shared-lib/utils/bh_queue.c create mode 100644 core/shared-lib/utils/runtime_timer.c create mode 100644 core/shared-lib/utils/runtime_timer.h create mode 100644 core/shared-lib/utils/shared_utils.cmake create mode 100644 projects/README.md diff --git a/core/iwasm/app-samples/hello-world/build.sh b/core/iwasm/app-samples/hello-world/build.sh new file mode 100755 index 000000000..c856b5d99 --- /dev/null +++ b/core/iwasm/app-samples/hello-world/build.sh @@ -0,0 +1,17 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +emcc -g -O3 *.c -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ + -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 -o test.wasm +#./jeffdump -o test_wasm.h -n wasm_test_file test.wasm diff --git a/core/iwasm/app-samples/hello-world/main.c b/core/iwasm/app-samples/hello-world/main.c new file mode 100644 index 000000000..0db9659b1 --- /dev/null +++ b/core/iwasm/app-samples/hello-world/main.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +int main(int argc, char **argv) +{ + char *buf; + + printf("Hello world!\n"); + + buf = malloc(1024); + if (!buf) { + printf("malloc buf failed\n"); + return -1; + } + + printf("buf ptr: %p\n", buf); + + sprintf(buf, "%s", "1234\n"); + printf("buf: %s", buf); + + free(buf); + return 0; +} diff --git a/core/iwasm/lib/app-libs/base/bh_platform.c b/core/iwasm/lib/app-libs/base/bh_platform.c new file mode 100644 index 000000000..0bddcd6ef --- /dev/null +++ b/core/iwasm/lib/app-libs/base/bh_platform.c @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include +#include +#include + +/* + * + * + */ + +static bool is_little_endian() +{ + long i = 0x01020304; + unsigned char* c = (unsigned char*) &i; + return (*c == 0x04) ? true : false; +} + +static void swap32(uint8* pData) +{ + uint8 value = *pData; + *pData = *(pData + 3); + *(pData + 3) = value; + + value = *(pData + 1); + *(pData + 1) = *(pData + 2); + *(pData + 2) = value; +} + +static void swap16(uint8* pData) +{ + uint8 value = *pData; + *(pData) = *(pData + 1); + *(pData + 1) = value; +} + +uint32 htonl(uint32 value) +{ + uint32 ret; + if (is_little_endian()) { + ret = value; + swap32((uint8*) &ret); + return ret; + } + + return value; +} + +uint32 ntohl(uint32 value) +{ + return htonl(value); +} + +uint16 htons(uint16 value) +{ + uint16 ret; + if (is_little_endian()) { + ret = value; + swap16(&ret); + return ret; + } + + return value; +} + +uint16 ntohs(uint16 value) +{ + return htons(value); +} + +char *wa_strdup(const char *s) +{ + char *s1 = NULL; + if (s && (s1 = wa_malloc(strlen(s) + 1))) + memcpy(s1, s, strlen(s) + 1); + return s1; +} + +#define RSIZE_MAX 0x7FFFFFFF +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n) +{ + char *dest = (char*) s1; + char *src = (char*) s2; + if (n == 0) { + return 0; + } + + if (s1 == NULL || s1max > RSIZE_MAX) { + return -1; + } + if (s2 == NULL || n > s1max) { + memset(dest, 0, s1max); + return -1; + } + memcpy(dest, src, n); + return 0; +} diff --git a/core/iwasm/lib/app-libs/base/bh_platform.h b/core/iwasm/lib/app-libs/base/bh_platform.h new file mode 100755 index 000000000..7d12983bb --- /dev/null +++ b/core/iwasm/lib/app-libs/base/bh_platform.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef DEPS_IWASM_APP_LIBS_BASE_BH_PLATFORM_H_ +#define DEPS_IWASM_APP_LIBS_BASE_BH_PLATFORM_H_ + +#include + +typedef unsigned char uint8; +typedef char int8; +typedef unsigned short uint16; +typedef short int16; +typedef unsigned int uint32; +typedef int int32; + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +#ifndef __cplusplus +#define true 1 +#define false 0 +#define inline __inline +#endif + +// all wasm-app<->native shared source files should use wa_malloc/wa_free. +// they will be mapped to different implementations in each side +#ifndef wa_malloc +#define wa_malloc malloc +#endif + +#ifndef wa_free +#define wa_free free +#endif + +char *wa_strdup(const char *s); + +uint32 htonl(uint32 value); +uint32 ntohl(uint32 value); +uint16 htons(uint16 value); +uint16 ntohs(uint16 value); + +int +b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n); + +#endif /* DEPS_IWASM_APP_LIBS_BASE_BH_PLATFORM_H_ */ diff --git a/core/iwasm/lib/app-libs/base/request.c b/core/iwasm/lib/app-libs/base/request.c new file mode 100644 index 000000000..a1611fbfd --- /dev/null +++ b/core/iwasm/lib/app-libs/base/request.c @@ -0,0 +1,357 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "attr-container.h" +#include "request.h" +#include "shared_utils.h" +#include "wasm_app.h" + +#define TRANSACTION_TIMEOUT_MS 5000 + +typedef enum { + Reg_Event, Reg_Request +} reg_type_t; + +typedef struct _res_register { + struct _res_register *next; + const char * url; + reg_type_t reg_type; + void (*request_handler)(request_t *); +} res_register_t; + +typedef struct transaction { + struct transaction *next; + int mid; + unsigned int time; /* start time */ + response_handler_f handler; + void *user_data; +} transaction_t; + +static res_register_t * g_resources = NULL; + +static transaction_t *g_transactions = NULL; + +static user_timer_t g_trans_timer = NULL; + +static transaction_t *transaction_find(int mid) +{ + transaction_t *t = g_transactions; + + while (t) { + if (t->mid == mid) + return t; + t = t->next; + } + + return NULL; +} + +/* + * new transaction is added to the tail of the list, so the list + * is sorted by expiry time naturally. + */ +static void transaction_add(transaction_t *trans) +{ + transaction_t *t; + + if (g_transactions == NULL) { + g_transactions = trans; + return; + } + + t = g_transactions; + while (t) { + if (t->next == NULL) { + t->next = trans; + return; + } + } +} + +static void transaction_remove(transaction_t *trans) +{ + transaction_t *prev = NULL, *current = g_transactions; + + while (current) { + if (current == trans) { + if (prev == NULL) { + g_transactions = current->next; + free(current); + return; + } + prev->next = current->next; + free(current); + return; + } + prev = current; + current = current->next; + } +} + +bool is_event_type(request_t * req) +{ + return req->action == COAP_EVENT; +} + +static bool register_url_handler(const char *url, + request_handler_f request_handler, reg_type_t reg_type) +{ + res_register_t * r = g_resources; + + while (r) { + if (reg_type == r->reg_type && strcmp(r->url, url) == 0) { + r->request_handler = request_handler; + return true; + } + r = r->next; + } + + r = (res_register_t *) malloc(sizeof(res_register_t)); + if (r == NULL) + return false; + + memset(r, 0, sizeof(*r)); + + r->url = strdup(url); + if (!r->url) { + free(r); + return false; + } + + r->request_handler = request_handler; + r->reg_type = reg_type; + r->next = g_resources; + g_resources = r; + + // tell app mgr to route this url to me + if (reg_type == Reg_Request) + wasm_register_resource(url); + else + wasm_sub_event(url); + + return true; +} + +bool api_register_resource_handler(const char *url, + request_handler_f request_handler) +{ + return register_url_handler(url, request_handler, Reg_Request); +} + +static void transaction_timeout_handler(user_timer_t timer) +{ + transaction_t *cur, *expired = NULL; + unsigned int elpased_ms, now = wasm_get_sys_tick_ms(); + + /* + * Since he transaction list is sorted by expiry time naturally, + * we can easily get all expired transactions. + * */ + cur = g_transactions; + while (cur) { + if (now < cur->time) + elpased_ms = now + (0xFFFFFFFF - cur->time) + 1; + else + elpased_ms = now - cur->time; + + if (elpased_ms >= TRANSACTION_TIMEOUT_MS) { + g_transactions = cur->next; + cur->next = expired; + expired = cur; + cur = g_transactions; + } else { + break; + } + } + + /* call each transaction's handler with response set to NULL */ + cur = expired; + while (cur) { + transaction_t *tmp = cur; + cur->handler(NULL, cur->user_data); + cur = cur->next; + free(tmp); + } + + /* + * If the transaction list is not empty, restart the timer according + * to the first transaction. Otherwise, stop the timer. + */ + if (g_transactions != NULL) { + unsigned int elpased_ms, ms_to_expiry, now = wasm_get_sys_tick_ms(); + if (now < g_transactions->time) { + elpased_ms = now + (0xFFFFFFFF - g_transactions->time) + 1; + } else { + elpased_ms = now - g_transactions->time; + } + ms_to_expiry = TRANSACTION_TIMEOUT_MS - elpased_ms; + api_timer_restart(g_trans_timer, ms_to_expiry); + } else { + api_timer_cancel(g_trans_timer); + g_trans_timer = NULL; + } +} + +void api_send_request(request_t * request, response_handler_f response_handler, + void * user_data) +{ + int size; + char *buffer; + transaction_t *trans; + + if ((trans = (transaction_t *) malloc(sizeof(transaction_t))) == NULL) { + printf( + "send request: allocate memory for request transaction failed!\n"); + return; + } + + memset(trans, 0, sizeof(transaction_t)); + trans->handler = response_handler; + trans->mid = request->mid; + trans->time = wasm_get_sys_tick_ms(); + trans->user_data = user_data; + + if ((buffer = pack_request(request, &size)) == NULL) { + printf("send request: pack request failed!\n"); + free(trans); + return; + } + + transaction_add(trans); + + /* if the trans is the 1st one, start the timer */ + if (trans == g_transactions) { + /* assert(g_trans_timer == NULL); */ + if (g_trans_timer == NULL) { + g_trans_timer = api_timer_create(TRANSACTION_TIMEOUT_MS, + false, + true, transaction_timeout_handler); + } + } + + wasm_post_request(buffer, size); + + free_req_resp_packet(buffer); +} + +/* + * + * APIs for the native layers to callback for request/response arrived to this app + * + */ + +void on_response(char * buffer, int size) +{ + response_t response[1]; + transaction_t *trans; + + if (NULL == unpack_response(buffer, size, response)) { + printf("unpack response failed\n"); + return; + } + + if ((trans = transaction_find(response->mid)) == NULL) { + printf("cannot find the transaction\n"); + return; + } + + /* + * When the 1st transaction get response: + * 1. If the 2nd trans exist, restart the timer according to its expiry time; + * 2. Otherwise, stop the timer since there is no more transactions; + */ + if (trans == g_transactions) { + if (trans->next != NULL) { + unsigned int elpased_ms, ms_to_expiry, now = wasm_get_sys_tick_ms(); + if (now < trans->next->time) { + elpased_ms = now + (0xFFFFFFFF - trans->next->time) + 1; + } else { + elpased_ms = now - trans->next->time; + } + ms_to_expiry = TRANSACTION_TIMEOUT_MS - elpased_ms; + api_timer_restart(g_trans_timer, ms_to_expiry); + } else { + api_timer_cancel(g_trans_timer); + g_trans_timer = NULL; + } + } + + trans->handler(response, trans->user_data); + transaction_remove(trans); +} + +void on_request(char *buffer, int size) +{ + request_t request[1]; + bool is_event; + res_register_t *r = g_resources; + + if (NULL == unpack_request(buffer, size, request)) { + printf("unpack request failed\n"); + return; + } + + is_event = is_event_type(request); + + while (r) { + if ((is_event && r->reg_type == Reg_Event) + || (!is_event && r->reg_type == Reg_Request)) { + if (check_url_start(request->url, strlen(request->url), r->url) + > 0) { + r->request_handler(request); + return; + } + } + + r = r->next; + } + + printf("on_request: exit. no service handler\n"); +} + +void api_response_send(response_t *response) +{ + int size; + char * buffer = pack_response(response, &size); + if (buffer == NULL) + return; + + wasm_response_send(buffer, size); + free_req_resp_packet(buffer); +} + +/// event api + +bool api_publish_event(const char *url, int fmt, void *payload, int payload_len) +{ + int size; + request_t request[1]; + init_request(request, url, COAP_EVENT, fmt, payload, payload_len); + char * buffer = pack_request(request, &size); + if (buffer == NULL) + return false; + wasm_post_request(buffer, size); + + free_req_resp_packet(buffer); + + return true; +} + +bool api_subscribe_event(const char * url, request_handler_f handler) +{ + return register_url_handler(url, handler, Reg_Event); +} + diff --git a/core/iwasm/lib/app-libs/base/request.h b/core/iwasm/lib/app-libs/base/request.h new file mode 100644 index 000000000..29bc8fd0f --- /dev/null +++ b/core/iwasm/lib/app-libs/base/request.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AEE_REQUEST_H_ +#define _AEE_REQUEST_H_ + +#include "native_interface.h" +#include "shared_utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + +bool is_event_type(request_t * req); + +typedef void (*request_handler_f)(request_t *); +typedef void (*response_handler_f)(response_t *, void *); + +// Request APIs +bool api_register_resource_handler(const char *url, request_handler_f); +void api_send_request(request_t * request, response_handler_f response_handler, + void * user_data); + +void api_response_send(response_t *response); + +// event API +bool api_publish_event(const char *url, int fmt, void *payload, + int payload_len); + +bool api_subscribe_event(const char * url, request_handler_f handler); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/iwasm/lib/app-libs/base/timer.c b/core/iwasm/lib/app-libs/base/timer.c new file mode 100644 index 000000000..a86ce39d8 --- /dev/null +++ b/core/iwasm/lib/app-libs/base/timer.c @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "timer_wasm_app.h" +#include "native_interface.h" + +#include +#include + +#if 1 +#include +#else +#define printf (...) +#endif + +struct user_timer { + struct user_timer * next; + int timer_id; + void (*user_timer_callback)(user_timer_t); +}; + +struct user_timer * g_timers = NULL; + +user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, + void (*on_timer_update)(user_timer_t)) +{ + + int timer_id = wasm_create_timer(interval, is_period, auto_start); + + //TODO + struct user_timer * timer = (struct user_timer *) malloc( + sizeof(struct user_timer)); + if (timer == NULL) { + // TODO: remove the timer_id + printf("### api_timer_create malloc faild!!! \n"); + return NULL; + } + + memset(timer, 0, sizeof(*timer)); + timer->timer_id = timer_id; + timer->user_timer_callback = on_timer_update; + + if (g_timers == NULL) + g_timers = timer; + else { + timer->next = g_timers; + g_timers = timer; + } + + return timer; +} + +void api_timer_cancel(user_timer_t timer) +{ + user_timer_t t = g_timers, prev = NULL; + + wasm_timer_cancel(timer->timer_id); + + while (t) { + if (t == timer) { + if (prev == NULL) { + g_timers = t->next; + free(t); + } else { + prev->next = t->next; + free(t); + } + return; + } else { + prev = t; + t = t->next; + } + } +} + +void api_timer_restart(user_timer_t timer, int interval) +{ + wasm_timer_restart(timer->timer_id, interval); +} + +void on_timer_callback(int timer_id) +{ + struct user_timer * t = g_timers; + + while (t) { + if (t->timer_id == timer_id) { + t->user_timer_callback(t); + break; + } + t = t->next; + } +} + diff --git a/core/iwasm/lib/app-libs/base/timer_wasm_app.h b/core/iwasm/lib/app-libs/base/timer_wasm_app.h new file mode 100644 index 000000000..ad8326647 --- /dev/null +++ b/core/iwasm/lib/app-libs/base/timer_wasm_app.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AEE_TIMER_H_ +#define _AEE_TIMER_H_ + +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//TODO: +#define bh_queue_t void + +/* board producer define user_timer */ +struct user_timer; +typedef struct user_timer * user_timer_t; + +// Timer APIs +user_timer_t api_timer_create(int interval, bool is_period, bool auto_start, + void (*on_user_timer_update)(user_timer_t)); +void api_timer_cancel(user_timer_t timer); +void api_timer_restart(user_timer_t timer, int interval); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/iwasm/lib/app-libs/base/wasm_app.h b/core/iwasm/lib/app-libs/base/wasm_app.h new file mode 100644 index 000000000..5fa9276cb --- /dev/null +++ b/core/iwasm/lib/app-libs/base/wasm_app.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2013, Institute for Pervasive Computing, ETH Zurich + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +#ifndef _LIB_AEE_H_ +#define _LIB_AEE_H_ + +#include "native_interface.h" +#include "shared_utils.h" +#include "attr-container.h" +#include "request.h" +#include "sensor.h" +#include "timer_wasm_app.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CoAP request method codes */ +typedef enum { + COAP_GET = 1, COAP_POST, COAP_PUT, COAP_DELETE, COAP_EVENT = (COAP_DELETE + + 2) +} coap_method_t; + +/* CoAP response codes */ +typedef enum { + NO_ERROR = 0, + + CREATED_2_01 = 65, /* CREATED */ + DELETED_2_02 = 66, /* DELETED */ + VALID_2_03 = 67, /* NOT_MODIFIED */ + CHANGED_2_04 = 68, /* CHANGED */ + CONTENT_2_05 = 69, /* OK */ + CONTINUE_2_31 = 95, /* CONTINUE */ + + BAD_REQUEST_4_00 = 128, /* BAD_REQUEST */ + UNAUTHORIZED_4_01 = 129, /* UNAUTHORIZED */ + BAD_OPTION_4_02 = 130, /* BAD_OPTION */ + FORBIDDEN_4_03 = 131, /* FORBIDDEN */ + NOT_FOUND_4_04 = 132, /* NOT_FOUND */ + METHOD_NOT_ALLOWED_4_05 = 133, /* METHOD_NOT_ALLOWED */ + NOT_ACCEPTABLE_4_06 = 134, /* NOT_ACCEPTABLE */ + PRECONDITION_FAILED_4_12 = 140, /* BAD_REQUEST */ + REQUEST_ENTITY_TOO_LARGE_4_13 = 141, /* REQUEST_ENTITY_TOO_LARGE */ + UNSUPPORTED_MEDIA_TYPE_4_15 = 143, /* UNSUPPORTED_MEDIA_TYPE */ + + INTERNAL_SERVER_ERROR_5_00 = 160, /* INTERNAL_SERVER_ERROR */ + NOT_IMPLEMENTED_5_01 = 161, /* NOT_IMPLEMENTED */ + BAD_GATEWAY_5_02 = 162, /* BAD_GATEWAY */ + SERVICE_UNAVAILABLE_5_03 = 163, /* SERVICE_UNAVAILABLE */ + GATEWAY_TIMEOUT_5_04 = 164, /* GATEWAY_TIMEOUT */ + PROXYING_NOT_SUPPORTED_5_05 = 165, /* PROXYING_NOT_SUPPORTED */ + + /* Erbium errors */ + MEMORY_ALLOCATION_ERROR = 192, PACKET_SERIALIZATION_ERROR, + + /* Erbium hooks */ + MANUAL_RESPONSE, PING_RESPONSE +} coap_status_t; + +#ifdef __cplusplus +} +#endif + +#endif /* end of _LIB_AEE_H_ */ diff --git a/core/iwasm/lib/app-libs/extension/sensor/sensor.c b/core/iwasm/lib/app-libs/extension/sensor/sensor.c new file mode 100644 index 000000000..fc05ae664 --- /dev/null +++ b/core/iwasm/lib/app-libs/extension/sensor/sensor.c @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "sensor.h" +#include "native_interface.h" + +typedef struct _sensor { + struct _sensor * next; + char *name; + uint32 handle; + void (*sensor_callback)(sensor_t, attr_container_t *, void *); + void *user_data; +} sensor; + +static sensor_t g_sensors = NULL; + +sensor_t sensor_open(const char* name, int index, + void (*sensor_event_handler)(sensor_t, attr_container_t *, void *), + void *user_data) +{ + uint32 id = wasm_sensor_open(name, index); + if (id == -1) + return NULL; + + //create local node for holding the user callback + sensor_t sensor = (sensor_t) malloc(sizeof(struct _sensor)); + if (sensor == NULL) + return NULL; + + memset(sensor, 0, sizeof(struct _sensor)); + sensor->handle = id; + sensor->name = strdup(name); + sensor->user_data = user_data; + sensor->sensor_callback = sensor_event_handler; + + if (!sensor->name) { + free(sensor); + return NULL; + } + + if (g_sensors == NULL) { + g_sensors = sensor; + } else { + sensor->next = g_sensors; + g_sensors = sensor; + } + + return sensor; +} + +bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg) +{ + char * buffer; + int len; + + bool ret = wasm_sensor_config_with_attr_container(sensor->handle, buffer, + len); + return ret; +} + +bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay) +{ + bool ret = wasm_sensor_config(sensor->handle, interval, bit_cfg, delay); + return ret; +} + +bool sensor_close(sensor_t sensor) +{ + + wasm_sensor_close(sensor->handle); + + // remove local node + sensor_t s = g_sensors; + sensor_t prev = NULL; + while (s) { + if (s == sensor) { + if (prev == NULL) { + g_sensors = s->next; + } else { + prev->next = s->next; + } + free(s->name); + free(s); + return true; + } else { + prev = s; + s = s->next; + } + } + + return false; +} + +/* + * + * API for native layer to callback for sensor events + * + */ + +void on_sensor_event(uint32 sensor_id, char * buffer, int len) +{ + attr_container_t * sensor_data = (attr_container_t *) buffer; + + // ??? use buffer or the attributs struct? + + // lookup the sensor and call the handlers + sensor_t s = g_sensors; + sensor_t prev = NULL; + while (s) { + if (s->handle == sensor_id) { + s->sensor_callback(s, sensor_data, s->user_data); + break; + } + + s = s->next; + } +} diff --git a/core/iwasm/lib/app-libs/extension/sensor/sensor.h b/core/iwasm/lib/app-libs/extension/sensor/sensor.h new file mode 100644 index 000000000..a9295d5f9 --- /dev/null +++ b/core/iwasm/lib/app-libs/extension/sensor/sensor.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _AEE_SENSOR_H_ +#define _AEE_SENSOR_H_ + +#include "attr-container.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//TODO: +#define bh_queue_t void + +/* board producer define sensor */ +struct _sensor; +typedef struct _sensor *sensor_t; + +// Sensor APIs +sensor_t sensor_open(const char* name, int index, + void (*on_sensor_event)(sensor_t, attr_container_t *, void *), + void *user_data); +bool sensor_config(sensor_t sensor, int interval, int bit_cfg, int delay); +bool sensor_config_with_attr_container(sensor_t sensor, attr_container_t *cfg); +bool sensor_close(sensor_t sensor); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/iwasm/lib/app-libs/libc/lib-base.h b/core/iwasm/lib/app-libs/libc/lib-base.h new file mode 100644 index 000000000..35e4a83d2 --- /dev/null +++ b/core/iwasm/lib/app-libs/libc/lib-base.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LIB_BASE_H_ +#define _LIB_BASE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +void *malloc(size_t size); +void *calloc(size_t n, size_t size); +void free(void *ptr); +int memcmp(const void *s1, const void *s2, size_t n); +void *memcpy(void *dest, const void *src, size_t n); +void *memmove(void *dest, const void *src, size_t n); +void *memset(void *s, int c, size_t n); +int putchar(int c); +int snprintf(char *str, size_t size, const char *format, ...); +int sprintf(char *str, const char *format, ...); +char *strchr(const char *s, int c); +int strcmp(const char *s1, const char *s2); +char *strcpy(char *dest, const char *src); +size_t strlen(const char *s); +int strncmp(const char * str1, const char * str2, size_t n); +char *strncpy(char *dest, const char *src, unsigned long n); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/iwasm/lib/native-interface/attr-container.c b/core/iwasm/lib/native-interface/attr-container.c new file mode 100644 index 000000000..ed49ceea5 --- /dev/null +++ b/core/iwasm/lib/native-interface/attr-container.c @@ -0,0 +1,841 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "attr-container.h" + +typedef union jvalue { + bool z; + int8_t b; + uint16_t c; + int16_t s; + int32_t i; + int64_t j; + float f; + double d; +} jvalue; + +#define bh_memcpy_s(dest, dlen, src, slen) do { \ + int _ret = slen == 0 ? 0 : b_memcpy_s (dest, dlen, src, slen); \ + (void)_ret; \ + } while (0) + +static inline int16_t get_int16(const char *buf) +{ + int16_t ret; + bh_memcpy_s(&ret, sizeof(int16_t), buf, sizeof(int16_t)); + return ret; +} + +static inline uint16_t get_uint16(const char *buf) +{ + return get_int16(buf); +} + +static inline int32_t get_int32(const char *buf) +{ + int32_t ret; + bh_memcpy_s(&ret, sizeof(int32_t), buf, sizeof(int32_t)); + return ret; +} + +static inline uint32_t get_uint32(const char *buf) +{ + return get_int32(buf); +} + +static inline int64_t get_int64(const char *buf) +{ + int64_t ret; + bh_memcpy_s(&ret, sizeof(int64_t), buf, sizeof(int64_t)); + return ret; +} + +static inline uint64_t get_uint64(const char *buf) +{ + return get_int64(buf); +} + +static inline void set_int16(char *buf, int16_t v) +{ + bh_memcpy_s(buf, sizeof(int16_t), &v, sizeof(int16_t)); +} + +static inline void set_uint16(char *buf, uint16_t v) +{ + bh_memcpy_s(buf, sizeof(uint16_t), &v, sizeof(uint16_t)); +} + +static inline void set_int32(char *buf, int32_t v) +{ + bh_memcpy_s(buf, sizeof(int32_t), &v, sizeof(int32_t)); +} + +static inline void set_uint32(char *buf, uint32_t v) +{ + bh_memcpy_s(buf, sizeof(uint32_t), &v, sizeof(uint32_t)); +} + +static inline void set_int64(char *buf, int64_t v) +{ + bh_memcpy_s(buf, sizeof(int64_t), &v, sizeof(int64_t)); +} + +static inline void set_uint64(char *buf, uint64_t v) +{ + bh_memcpy_s(buf, sizeof(uint64_t), &v, sizeof(uint64_t)); +} + +char* +attr_container_get_attr_begin(const attr_container_t *attr_cont, + uint32_t *p_total_length, uint16_t *p_attr_num) +{ + char *p = (char*) attr_cont->buf; + uint16_t str_len, attr_num; + uint32_t total_length; + + /* skip total length */ + total_length = get_uint32(p); + p += sizeof(uint32_t); + if (!total_length) + return NULL; + + /* tag length */ + str_len = get_uint16(p); + p += sizeof(uint16_t); + if (!str_len) + return NULL; + + /* tag content */ + p += str_len; + if (p - attr_cont->buf >= total_length) + return NULL; + + /* attribute num */ + attr_num = get_uint16(p); + p += sizeof(uint16_t); + if (p - attr_cont->buf >= total_length) + return NULL; + + if (p_total_length) + *p_total_length = total_length; + + if (p_attr_num) + *p_attr_num = attr_num; + + /* first attribute */ + return p; +} + +static char* +attr_container_get_attr_next(const char *curr_attr) +{ + char *p = (char*) curr_attr; + uint8_t type; + + /* key length and key */ + p += sizeof(uint16_t) + get_uint16(p); + type = *p++; + + /* Short type to Boolean type */ + if (type >= ATTR_TYPE_SHORT && type <= ATTR_TYPE_BOOLEAN) { + p += 1 << (type & 3); + return p; + } + /* String type */ + else if (type == ATTR_TYPE_STRING) { + p += sizeof(uint16_t) + get_uint16(p); + return p; + } + /* ByteArray type */ + else if (type == ATTR_TYPE_BYTEARRAY) { + p += sizeof(uint32_t) + get_uint32(p); + return p; + } + + return NULL; +} + +static const char* +attr_container_find_attr(const attr_container_t *attr_cont, const char *key) +{ + uint32_t total_length; + uint16_t str_len, attr_num, i; + const char *p = attr_cont->buf; + + if (!key) + return NULL; + + if (!(p = attr_container_get_attr_begin(attr_cont, &total_length, &attr_num))) + return NULL; + + for (i = 0; i < attr_num; i++) { + /* key length */ + if (!(str_len = get_uint16(p))) + return NULL; + + if (str_len == strlen(key) + 1 + && memcmp(p + sizeof(uint16_t), key, str_len) == 0) { + if (p + sizeof(uint16_t) + str_len - attr_cont->buf >= total_length) + return NULL; + return p; + } + + if (!(p = attr_container_get_attr_next(p))) + return NULL; + } + + return NULL; +} + +char* +attr_container_get_attr_end(const attr_container_t *attr_cont) +{ + uint32_t total_length; + uint16_t attr_num, i; + char *p; + + if (!(p = attr_container_get_attr_begin(attr_cont, &total_length, &attr_num))) + return NULL; + + for (i = 0; i < attr_num; i++) + if (!(p = attr_container_get_attr_next(p))) + return NULL; + + return p; +} + +static char* +attr_container_get_msg_end(attr_container_t *attr_cont) +{ + char *p = attr_cont->buf; + return p + get_uint32(p); +} + +uint16_t attr_container_get_attr_num(const attr_container_t *attr_cont) +{ + uint16_t str_len; + /* skip total length */ + const char *p = attr_cont->buf + sizeof(uint32_t); + + str_len = get_uint16(p); + /* skip tag length and tag */ + p += sizeof(uint16_t) + str_len; + + /* attribute num */ + return get_uint16(p); +} + +static void attr_container_inc_attr_num(attr_container_t *attr_cont) +{ + uint16_t str_len, attr_num; + /* skip total length */ + char *p = attr_cont->buf + sizeof(uint32_t); + + str_len = get_uint16(p); + /* skip tag length and tag */ + p += sizeof(uint16_t) + str_len; + + /* attribute num */ + attr_num = get_uint16(p) + 1; + set_uint16(p, attr_num); +} + +attr_container_t * +attr_container_create(const char *tag) +{ + attr_container_t *attr_cont; + int length, tag_length; + char *p; + + tag_length = tag ? strlen(tag) + 1 : 1; + length = offsetof(attr_container_t, buf) + + /* total length + tag length + tag + reserved 100 bytes */ + sizeof(uint32_t) + sizeof(uint16_t) + tag_length + 100; + + if (!(attr_cont = attr_container_malloc(length))) { + attr_container_printf( + "Create attr_container failed: allocate memory failed.\r\n"); + return NULL; + } + + memset(attr_cont, 0, length); + p = attr_cont->buf; + + /* total length */ + set_uint32(p, length - offsetof(attr_container_t, buf)); + p += 4; + + /* tag length, tag */ + set_uint16(p, tag_length); + p += 2; + if (tag) + bh_memcpy_s(p, tag_length, tag, tag_length); + + return attr_cont; +} + +void attr_container_destroy(const attr_container_t *attr_cont) +{ + if (attr_cont) + attr_container_free((char*) attr_cont); +} + +static bool check_set_attr(attr_container_t **p_attr_cont, const char *key) +{ + uint32_t flags; + + if (!p_attr_cont || !*p_attr_cont || !key || strlen(key) == 0) { + attr_container_printf( + "Set attribute failed: invalid input arguments.\r\n"); + return false; + } + + flags = get_uint32((char*) *p_attr_cont); + if (flags & ATTR_CONT_READONLY_SHIFT) { + attr_container_printf( + "Set attribute failed: attribute container is readonly.\r\n"); + return false; + } + + return true; +} + +bool attr_container_set_attr(attr_container_t **p_attr_cont, const char *key, + int type, const void *value, int value_length) +{ + attr_container_t *attr_cont, *attr_cont1; + uint16_t str_len; + uint32_t total_length, attr_len; + char *p, *p1, *attr_end, *msg_end, *attr_buf; + + if (!check_set_attr(p_attr_cont, key)) { + return false; + } + + attr_cont = *p_attr_cont; + p = attr_cont->buf; + total_length = get_uint32(p); + + if (!(attr_end = attr_container_get_attr_end(attr_cont))) { + attr_container_printf("Set attr failed: get attr end failed.\r\n"); + return false; + } + + msg_end = attr_container_get_msg_end(attr_cont); + + /* key len + key + '\0' + type */ + attr_len = sizeof(uint16_t) + strlen(key) + 1 + 1; + if (type >= ATTR_TYPE_SHORT && type <= ATTR_TYPE_BOOLEAN) + attr_len += 1 << (type & 3); + else if (type == ATTR_TYPE_STRING) + attr_len += sizeof(uint16_t) + value_length; + else if (type == ATTR_TYPE_BYTEARRAY) + attr_len += sizeof(uint32_t) + value_length; + + if (!(p = attr_buf = attr_container_malloc(attr_len))) { + attr_container_printf("Set attr failed: allocate memory failed.\r\n"); + return false; + } + + /* Set the attr buf */ + str_len = strlen(key) + 1; + set_uint16(p, str_len); + p += sizeof(uint16_t); + bh_memcpy_s(p, str_len, key, str_len); + p += str_len; + + *p++ = type; + if (type >= ATTR_TYPE_SHORT && type <= ATTR_TYPE_BOOLEAN) + bh_memcpy_s(p, 1 << (type & 3), value, 1 << (type & 3)); + else if (type == ATTR_TYPE_STRING) { + set_uint16(p, value_length); + p += sizeof(uint16_t); + bh_memcpy_s(p, value_length, value, value_length); + } else if (type == ATTR_TYPE_BYTEARRAY) { + set_uint32(p, value_length); + p += sizeof(uint32_t); + bh_memcpy_s(p, value_length, value, value_length); + } + + if ((p = (char*) attr_container_find_attr(attr_cont, key))) { + /* key found */ + p1 = attr_container_get_attr_next(p); + + if (p1 - p == attr_len) { + bh_memcpy_s(p, attr_len, attr_buf, attr_len); + attr_container_free(attr_buf); + return true; + } + + if (p1 - p + msg_end - attr_end >= attr_len) { + memmove(p, p1, attr_end - p1); + bh_memcpy_s(p + (attr_end - p1), attr_len, attr_buf, attr_len); + attr_container_free(attr_buf); + return true; + } + + total_length += attr_len + 100; + if (!(attr_cont1 = attr_container_malloc( + offsetof(attr_container_t, buf) + total_length))) { + attr_container_printf( + "Set attr failed: allocate memory failed.\r\n"); + attr_container_free(attr_buf); + return false; + } + + bh_memcpy_s(attr_cont1, p - (char* )attr_cont, attr_cont, + p - (char* )attr_cont); + bh_memcpy_s((char* )attr_cont1 + (unsigned )(p - (char* )attr_cont), + attr_end - p1, p1, attr_end - p1); + bh_memcpy_s( + (char* )attr_cont1 + (unsigned )(p - (char* )attr_cont) + + (unsigned )(attr_end - p1), attr_len, attr_buf, + attr_len); + p = attr_cont1->buf; + set_uint32(p, total_length); + *p_attr_cont = attr_cont1; + /* Free original buffer */ + attr_container_free(attr_cont); + attr_container_free(attr_buf); + return true; + } else { + /* key not found */ + if (msg_end - attr_end >= attr_len) { + bh_memcpy_s(attr_end, msg_end - attr_end, attr_buf, attr_len); + attr_container_inc_attr_num(attr_cont); + attr_container_free(attr_buf); + return true; + } + + total_length += attr_len + 100; + if (!(attr_cont1 = attr_container_malloc( + offsetof(attr_container_t, buf) + total_length))) { + attr_container_printf( + "Set attr failed: allocate memory failed.\r\n"); + attr_container_free(attr_buf); + return false; + } + + bh_memcpy_s(attr_cont1, attr_end - (char* )attr_cont, attr_cont, + attr_end - (char* )attr_cont); + bh_memcpy_s( + (char* )attr_cont1 + (unsigned )(attr_end - (char* )attr_cont), + attr_len, attr_buf, attr_len); + attr_container_inc_attr_num(attr_cont1); + p = attr_cont1->buf; + set_uint32(p, total_length); + *p_attr_cont = attr_cont1; + /* Free original buffer */ + attr_container_free(attr_cont); + attr_container_free(attr_buf); + return true; + } + + return false; +} + +bool attr_container_set_short(attr_container_t **p_attr_cont, const char *key, + short value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_SHORT, &value, 2); +} + +bool attr_container_set_int(attr_container_t **p_attr_cont, const char *key, + int value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_INT, &value, 4); +} + +bool attr_container_set_int64(attr_container_t **p_attr_cont, const char *key, + int64_t value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_INT64, &value, 8); +} + +bool attr_container_set_byte(attr_container_t **p_attr_cont, const char *key, + int8_t value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_BYTE, &value, 1); +} + +bool attr_container_set_uint16(attr_container_t **p_attr_cont, const char *key, + uint16_t value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_UINT16, &value, + 2); +} + +bool attr_container_set_float(attr_container_t **p_attr_cont, const char *key, + float value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_FLOAT, &value, 4); +} + +bool attr_container_set_double(attr_container_t **p_attr_cont, const char *key, + double value) +{ + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_DOUBLE, &value, + 8); +} + +bool attr_container_set_bool(attr_container_t **p_attr_cont, const char *key, + bool value) +{ + int8_t value1 = value ? 1 : 0; + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_BOOLEAN, &value1, + 1); +} + +bool attr_container_set_string(attr_container_t **p_attr_cont, const char *key, + const char *value) +{ + if (!value) { + attr_container_printf("Set attr failed: invald input arguments.\r\n"); + return false; + } + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_STRING, value, + strlen(value) + 1);; +} + +bool attr_container_set_bytearray(attr_container_t **p_attr_cont, + const char *key, const int8_t *value, unsigned length) +{ + if (!value) { + attr_container_printf("Set attr failed: invald input arguments.\r\n"); + return false; + } + return attr_container_set_attr(p_attr_cont, key, ATTR_TYPE_BYTEARRAY, value, + length);; +} + +static const char* +attr_container_get_attr(const attr_container_t *attr_cont, const char *key) +{ + const char *attr_addr; + + if (!attr_cont || !key) { + attr_container_printf( + "Get attribute failed: invalid input arguments.\r\n"); + return NULL; + } + + if (!(attr_addr = attr_container_find_attr(attr_cont, key))) { + attr_container_printf("Get attribute failed: lookup key failed.\r\n"); + return false; + } + + /* key len + key + '\0' */ + return attr_addr + 2 + strlen(key) + 1; +} + +#define TEMPLATE_ATTR_BUF_TO_VALUE(attr, key, var_name) do {\ + jvalue val; \ + const char *addr = attr_container_get_attr(attr, key); \ + uint8_t type; \ + if (!addr) \ + return 0; \ + val.j = 0; \ + type = *(uint8_t*)addr++; \ + switch (type) { \ + case ATTR_TYPE_SHORT: \ + case ATTR_TYPE_INT: \ + case ATTR_TYPE_INT64: \ + case ATTR_TYPE_BYTE: \ + case ATTR_TYPE_UINT16: \ + case ATTR_TYPE_FLOAT: \ + case ATTR_TYPE_DOUBLE: \ + case ATTR_TYPE_BOOLEAN: \ + bh_memcpy_s(&val, sizeof(val.var_name), addr, 1 << (type & 3)); \ + break; \ + case ATTR_TYPE_STRING: \ + { \ + unsigned len= get_uint16(addr); \ + addr += 2; \ + if (len > sizeof(val.var_name)) \ + len = sizeof(val.var_name); \ + bh_memcpy_s(&val.var_name, sizeof(val.var_name), addr, len); \ + break; \ + } \ + case ATTR_TYPE_BYTEARRAY: \ + { \ + unsigned len= get_uint32(addr); \ + addr += 4; \ + if (len > sizeof(val.var_name)) \ + len = sizeof(val.var_name); \ + bh_memcpy_s(&val.var_name, sizeof(val.var_name), addr, len); \ + break; \ + } \ + } \ + return val.var_name; \ + } while (0) + +short attr_container_get_as_short(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, s); +} + +int attr_container_get_as_int(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, i); +} + +int64_t attr_container_get_as_int64(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, j); +} + +int8_t attr_container_get_as_byte(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, b); +} + +uint16_t attr_container_get_as_uint16(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, s); +} + +float attr_container_get_as_float(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, f); +} + +double attr_container_get_as_double(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, d); +} + +bool attr_container_get_as_bool(const attr_container_t *attr_cont, + const char *key) +{ + TEMPLATE_ATTR_BUF_TO_VALUE(attr_cont, key, z); +} + +const int8_t* +attr_container_get_as_bytearray(const attr_container_t *attr_cont, + const char *key, unsigned *array_length) +{ + const char *addr = attr_container_get_attr(attr_cont, key); + uint8_t type; + uint32_t length; + + if (!addr) + return NULL; + + if (!array_length) { + attr_container_printf("Get attribute failed: invalid input arguments."); + return NULL; + } + + type = *(uint8_t*) addr++; + switch (type) { + case ATTR_TYPE_SHORT: + case ATTR_TYPE_INT: + case ATTR_TYPE_INT64: + case ATTR_TYPE_BYTE: + case ATTR_TYPE_UINT16: + case ATTR_TYPE_FLOAT: + case ATTR_TYPE_DOUBLE: + case ATTR_TYPE_BOOLEAN: + length = 1 << (type & 3); + break; + case ATTR_TYPE_STRING: + length = get_uint16(addr); + addr += 2; + break; + case ATTR_TYPE_BYTEARRAY: + length = get_uint32(addr); + addr += 4; + break; + default: + return NULL; + } + + *array_length = length; + return (const int8_t*) addr; +} + +char* +attr_container_get_as_string(const attr_container_t *attr_cont, const char *key) +{ + unsigned array_length; + return (char*) attr_container_get_as_bytearray(attr_cont, key, + &array_length); +} + +const char* +attr_container_get_tag(const attr_container_t *attr_cont) +{ + return attr_cont ? + attr_cont->buf + sizeof(uint32_t) + sizeof(uint16_t) : NULL; +} + +bool attr_container_contain_key(const attr_container_t *attr_cont, + const char *key) +{ + if (!attr_cont || !key || !strlen(key)) { + attr_container_printf( + "Check contain key failed: invalid input arguments.\r\n"); + return false; + } + return attr_container_find_attr(attr_cont, key) ? true : false; +} + +unsigned int attr_container_get_serialize_length( + const attr_container_t *attr_cont) +{ + const char *p; + + if (!attr_cont) { + attr_container_printf( + "Get container serialize length failed: invalid input arguments.\r\n"); + return 0; + } + + p = attr_cont->buf; + return sizeof(uint16_t) + get_uint32(p); +} + +bool attr_container_serialize(char *buf, const attr_container_t *attr_cont) +{ + const char *p; + uint16_t flags; + uint32_t length; + + if (!buf || !attr_cont) { + attr_container_printf( + "Container serialize failed: invalid input arguments.\r\n"); + return false; + } + + p = attr_cont->buf; + length = sizeof(uint16_t) + get_uint32(p); + bh_memcpy_s(buf, length, attr_cont, length); + /* Set readonly */ + flags = get_uint16((const char*) attr_cont); + set_uint16(buf, flags | (1 << ATTR_CONT_READONLY_SHIFT)); + + return true; +} + +bool attr_container_is_constant(const attr_container_t* attr_cont) +{ + uint16_t flags; + + if (!attr_cont) { + attr_container_printf( + "Container check const: invalid input arguments.\r\n"); + return false; + } + + flags = get_uint16((const char*) attr_cont); + return (flags & (1 << ATTR_CONT_READONLY_SHIFT)) ? true : false; +} + +void attr_container_dump(const attr_container_t *attr_cont) +{ + uint32_t total_length; + uint16_t attr_num, i, type; + const char *p, *tag, *key; + jvalue value; + + if (!attr_cont) + return; + + tag = attr_container_get_tag(attr_cont); + if (!tag) + return; + + attr_container_printf("Attribute container dump:\n"); + attr_container_printf("Tag: %s\n", tag); + + p = attr_container_get_attr_begin(attr_cont, &total_length, &attr_num); + if (!p) + return; + + attr_container_printf("Attribute list:\n"); + for (i = 0; i < attr_num; i++) { + key = p + 2; + /* Skip key len and key */ + p += 2 + get_uint16(p); + type = *p++; + attr_container_printf(" key: %s", key); + + switch (type) { + case ATTR_TYPE_SHORT: + bh_memcpy_s(&value.s, sizeof(int16_t), p, sizeof(int16_t)); + attr_container_printf(", type: short, value: 0x%x\n", + value.s & 0xFFFF); + p += 2; + break; + case ATTR_TYPE_INT: + bh_memcpy_s(&value.i, sizeof(int32_t), p, sizeof(int32_t)); + attr_container_printf(", type: int, value: 0x%x\n", value.i); + p += 4; + break; + case ATTR_TYPE_INT64: + bh_memcpy_s(&value.j, sizeof(uint64_t), p, sizeof(uint64_t)); + attr_container_printf(", type: int64, value: 0x%llx\n", value.j); + p += 8; + break; + case ATTR_TYPE_BYTE: + bh_memcpy_s(&value.b, 1, p, 1); + attr_container_printf(", type: byte, value: 0x%x\n", + value.b & 0xFF); + p++; + break; + case ATTR_TYPE_UINT16: + bh_memcpy_s(&value.c, sizeof(uint16_t), p, sizeof(uint16_t)); + attr_container_printf(", type: uint16, value: 0x%x\n", value.c); + p += 2; + break; + case ATTR_TYPE_FLOAT: + bh_memcpy_s(&value.f, sizeof(float), p, sizeof(float)); + attr_container_printf(", type: float, value: %f\n", value.f); + p += 4; + break; + case ATTR_TYPE_DOUBLE: + bh_memcpy_s(&value.d, sizeof(double), p, sizeof(double)); + attr_container_printf(", type: double, value: %f\n", value.d); + p += 8; + break; + case ATTR_TYPE_BOOLEAN: + bh_memcpy_s(&value.z, 1, p, 1); + attr_container_printf(", type: bool, value: 0x%x\n", value.z); + p++; + break; + case ATTR_TYPE_STRING: + attr_container_printf(", type: string, value: %s\n", + p + sizeof(uint16_t)); + p += sizeof(uint16_t) + get_uint16(p); + break; + case ATTR_TYPE_BYTEARRAY: + attr_container_printf(", type: byte array, length: %d\n", + get_uint32(p)); + p += sizeof(uint32_t) + get_uint32(p); + break; + } + } + + attr_container_printf("\n"); +} + diff --git a/core/iwasm/lib/native-interface/attr-container.h b/core/iwasm/lib/native-interface/attr-container.h new file mode 100644 index 000000000..2b093bf0d --- /dev/null +++ b/core/iwasm/lib/native-interface/attr-container.h @@ -0,0 +1,436 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ATTR_CONTAINER_H_ +#define _ATTR_CONTAINER_H_ + +#include +#include +#include +#include +#include +#include +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Attribute type */ +enum { + ATTR_TYPE_BEGIN = 1, + ATTR_TYPE_SHORT = ATTR_TYPE_BEGIN, + ATTR_TYPE_INT, + ATTR_TYPE_INT64, + ATTR_TYPE_BYTE, + ATTR_TYPE_UINT16, + ATTR_TYPE_FLOAT, + ATTR_TYPE_DOUBLE, + ATTR_TYPE_BOOLEAN, + ATTR_TYPE_STRING, + ATTR_TYPE_BYTEARRAY, + ATTR_TYPE_END = ATTR_TYPE_BYTEARRAY +}; + +#define ATTR_CONT_READONLY_SHIFT 2 + +typedef struct attr_container { + /* container flag: + * bit0, bit1 denote the implemenation algorithm, 00: buffer, 01: link list + * bit2 denotes the readonly flag: 1 is readonly and attr cannot be set + */ + char flags[2]; + /** + * Buffer format + * for buffer implementation: + * buf length (4 bytes) + * tag length (2 bytes) + * tag + * attr num (2bytes) + * attr[0..n-1]: + * attr key length (2 bytes) + * attr type (1byte) + * attr value (length depends on attr type) + */ + char buf[1]; +} attr_container_t; + +/** + * Create attribute container + * + * @param tag tag of current attribute container + * + * @return the created attribute container, NULL if failed + */ +attr_container_t * +attr_container_create(const char *tag); + +/** + * Destroy attribute container + * + * @param attr_cont the attribute container to destroy + */ +void +attr_container_destroy(const attr_container_t *attr_cont); + +/** + * Set short attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_short(attr_container_t **p_attr_cont, const char *key, + short value); + +/** + * Set int attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_int(attr_container_t **p_attr_cont, const char *key, + int value); + +/** + * Set int64 attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_int64(attr_container_t **p_attr_cont, const char *key, + int64_t value); + +/** + * Set byte attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_byte(attr_container_t **p_attr_cont, const char *key, + int8_t value); + +/** + * Set uint16 attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_uint16(attr_container_t **p_attr_cont, const char *key, + uint16_t value); + +/** + * Set float attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_float(attr_container_t **p_attr_cont, const char *key, + float value); + +/** + * Set double attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_double(attr_container_t **p_attr_cont, const char *key, + double value); + +/** + * Set bool attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_bool(attr_container_t **p_attr_cont, const char *key, + bool value); + +/** + * Set string attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the attribute value + * + * @return true if success, false otherwise + */ +bool +attr_container_set_string(attr_container_t **p_attr_cont, const char *key, + const char *value); + +/** + * Set bytearray attribute in attribute container + * + * @param p_attr_cont pointer to attribute container to set attribute, and + * return the new attribute container if it is re-created + * @param key the attribute key + * @param value the bytearray buffer + * @param length the bytearray length + * + * @return true if success, false otherwise + */ +bool +attr_container_set_bytearray(attr_container_t **p_attr_cont, const char *key, + const int8_t *value, unsigned length); + +/** + * Get tag of current attribute container + * + * @param attr_cont the attribute container + * + * @return tag of current attribute container + */ +const char* +attr_container_get_tag(const attr_container_t *attr_cont); + +/** + * Get attribute number of current attribute container + * + * @param attr_cont the attribute container + * + * @return attribute number of current attribute container + */ +uint16_t +attr_container_get_attr_num(const attr_container_t *attr_cont); + +/** + * Whether the attribute container contains an attribute key. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return true if key is contained in message, false otherwise + */ +bool +attr_container_contain_key(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as short value, + * return 0 if attribute isn't found in message. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the short value of the attribute, 0 if key isn't found + */ +short +attr_container_get_as_short(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as int value, + * return 0 if attribute isn't found in message. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the int value of the attribute, 0 if key isn't found + */ +int +attr_container_get_as_int(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as int64 value, + * return 0 if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the long value of the attribute, 0 if key isn't found + */ +int64_t +attr_container_get_as_int64(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as byte value, + * return 0 if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the byte value of the attribute, 0 if key isn't found + */ +int8_t +attr_container_get_as_byte(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as uint16 value, + * return 0 if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the char value of the attribute, 0 if key isn't found + */ +uint16_t +attr_container_get_as_uint16(const attr_container_t *attr_cont, + const char *key); + +/** + * Get attribute from attribute container and return it as float value, + * return 0 if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the float value of the attribute, 0 if key isn't found + */ +float +attr_container_get_as_float(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as double value, + * return 0 if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the double value of the attribute, 0 if key isn't found + */ +double +attr_container_get_as_double(const attr_container_t *attr_cont, + const char *key); + +/** + * Get attribute from attribute container and return it as bool value, + * return false if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the bool value of the attribute, 0 if key isn't found + */ +bool +attr_container_get_as_bool(const attr_container_t *attr_cont, const char *key); + +/** + * Get attribute from attribute container and return it as string value, + * return NULL if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the string value of the attribute, NULL if key isn't found + */ +char* +attr_container_get_as_string(const attr_container_t *attr_cont, + const char *key); + +/** + * Get attribute from attribute container and return it as bytearray value, + * return 0 if attribute isn't found in attribute container. + * + * @param attr_cont the attribute container + * @param key the attribute key + * + * @return the bytearray value of the attribute, NULL if key isn't found + */ +const int8_t* +attr_container_get_as_bytearray(const attr_container_t *attr_cont, + const char *key, unsigned *array_length); + +/** + * Get the buffer size of attribute container + * + * @param attr_cont the attribute container + * + * @return the buffer size of attribute container + */ +unsigned +attr_container_get_serialize_length(const attr_container_t *attr_cont); + +/** + * Serialize attribute container to a buffer + * + * @param buf the buffer to receive the serialized data + * @param attr_cont the attribute container to be serialized + * + * @return true if success, false otherwise + */ +bool +attr_container_serialize(char *buf, const attr_container_t *attr_cont); + +/** + * Whether the attribute container is const, or set attribute isn't supported + * + * @param attr_cont the attribute container + * + * @return true if const, false otherwise + */ +bool +attr_container_is_constant(const attr_container_t* attr_cont); + +void +attr_container_dump(const attr_container_t *attr_cont); + +#ifndef attr_container_malloc +#define attr_container_malloc wa_malloc +#endif + +#ifndef attr_container_free +#define attr_container_free wa_free +#endif + +#ifndef attr_container_printf +#define attr_container_printf printf +#endif + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* end of _ATTR_CONTAINER_H_ */ + diff --git a/core/iwasm/lib/native-interface/native_interface.cmake b/core/iwasm/lib/native-interface/native_interface.cmake new file mode 100644 index 000000000..b7d442964 --- /dev/null +++ b/core/iwasm/lib/native-interface/native_interface.cmake @@ -0,0 +1,23 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (NATIVE_INTERFACE_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${NATIVE_INTERFACE_DIR}) + + +file (GLOB_RECURSE source_all ${NATIVE_INTERFACE_DIR}/*.c) + +set (NATIVE_INTERFACE_SOURCE ${source_all}) + diff --git a/core/iwasm/lib/native-interface/native_interface.h b/core/iwasm/lib/native-interface/native_interface.h new file mode 100644 index 000000000..a538330b7 --- /dev/null +++ b/core/iwasm/lib/native-interface/native_interface.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ +#define DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ + +// note: the bh_plaform.h is the only head file separately +// implemented by both [app] and [native] worlds +#include "bh_platform.h" + +#define get_module_inst() \ + wasm_runtime_get_current_module_inst() + +#define validate_app_addr(offset, size) \ + wasm_runtime_validate_app_addr(module_inst, offset, size) + +#define addr_app_to_native(offset) \ + wasm_runtime_addr_app_to_native(module_inst, offset) + +#define addr_native_to_app(ptr) \ + wasm_runtime_addr_native_to_app(module_inst, ptr) + +#define module_malloc(size) \ + wasm_runtime_module_malloc(module_inst, size) + +#define module_free(offset) \ + wasm_runtime_module_free(module_inst, offset) + +char *wa_strdup(const char *); + +bool +wasm_response_send(int32 buffer_offset, int size); + +void wasm_register_resource(int32 url_offset); + +void wasm_post_request(int32 buffer_offset, int size); + +void wasm_sub_event(int32 url_offset); + +/* + * ************* sensor interfaces ************* + */ + +bool +wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay); +uint32 +wasm_sensor_open(int32 name_offset, int instance); +bool +wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, + int len); + +bool +wasm_sensor_close(uint32 sensor); + +/* + * *** timer interface *** + */ + +typedef unsigned int timer_id_t; +timer_id_t wasm_create_timer(int interval, bool is_period, bool auto_start); +void wasm_timer_destory(timer_id_t timer_id); +void wasm_timer_cancel(timer_id_t timer_id); +void wasm_timer_restart(timer_id_t timer_id, int interval); +uint32 wasm_get_sys_tick_ms(void); +#endif /* DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_NATIVE_INTERFACE_H_ */ diff --git a/core/iwasm/lib/native-interface/readme.txt b/core/iwasm/lib/native-interface/readme.txt new file mode 100644 index 000000000..e3b59042b --- /dev/null +++ b/core/iwasm/lib/native-interface/readme.txt @@ -0,0 +1,12 @@ +Attention: +======= +Only add files are shared by both wasm application and native runtime into this directory! + +The c files are both compiled into the the WASM APP and native runtime. + +native_interface.h +============= +The interface declaration for the native API which are exposed to the WASM app + +Any API in this file should be incuded with EXPORT_WASM_API() somewhere. + diff --git a/core/iwasm/lib/native-interface/restful_utils.c b/core/iwasm/lib/native-interface/restful_utils.c new file mode 100644 index 000000000..5240494ec --- /dev/null +++ b/core/iwasm/lib/native-interface/restful_utils.c @@ -0,0 +1,424 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "native_interface.h" +#include "shared_utils.h" + +/* Serialization of request and response message + * + * Choices: + * We considered a few options: + * 1. coap + * 2. flatbuffer + * 3. cbor + * 4. attr-containers of our own + * 5. customized serialization for request/response + * + * Now we choose the #5 mainly because we need to quickly get the URL for dispatching + * and sometimes we want to change the URL in the original packet. the request format: + * fixed part: version: (1 byte), code (1 byte), fmt(2 byte), mid (4 bytes), sender_id(4 bytes), url_len(2 bytes), payload_len(4bytes) + * dynamic part: url (bytes in url_len), payload + * + * response format: + * fixed part: (1 byte), code (1 byte), fmt(2 byte), mid (4 bytes), sender_id(4 bytes), payload_len(4bytes) + * dynamic part: payload + */ +#define REQUES_PACKET_VER 1 +#define REQUEST_PACKET_FIX_PART_LEN 18 +#define REQUEST_PACKET_URL_OFFSET REQUEST_PACKET_FIX_PART_LEN +#define REQUEST_PACKET_URL_LEN *((uint16*)( (char*) buffer + 12))) //!!! to ensure little endian +#define REQUEST_PACKET_PAYLOAD_LEN *((uint32*)( (char*) buffer + 14))) //!!! to ensure little endian +#define REQUEST_PACKET_URL(buffer) ((char*) buffer + REQUEST_PACKET_URL_OFFSET) +#define REQUEST_PACKET_PAYLOAD(buffer) ((char*) buffer + REQUEST_PACKET_URL_OFFSET + REQUEST_PACKET_URL_LEN(buffer)) + +#define RESPONSE_PACKET_FIX_PART_LEN 16 + +char * pack_request(request_t *request, int * size) +{ + int url_len = strlen(request->url) + 1; + int len = REQUEST_PACKET_FIX_PART_LEN + url_len + request->payload_len; + char * packet = (char*) wa_malloc(len); + if (packet == NULL) + return NULL; + + // TODO: ensure little endian for words and dwords + *packet = REQUES_PACKET_VER; + *((uint8*) (packet + 1)) = request->action; + *((uint16*) (packet + 2)) = htons(request->fmt); + *((uint32*) (packet + 4)) = htonl(request->mid); + *((uint32*) (packet + 8)) = htonl(request->sender); + *((uint16*) (packet + 12)) = htons(url_len); + *((uint32*) (packet + 14)) = htonl(request->payload_len); + strcpy(packet + REQUEST_PACKET_URL_OFFSET, request->url); + memcpy(packet + REQUEST_PACKET_URL_OFFSET + url_len, request->payload, + request->payload_len); + + *size = len; + return packet; +} + +void free_req_resp_packet(char * packet) +{ + wa_free(packet); +} + +request_t * unpack_request(char * packet, int size, request_t * request) +{ + if (*packet != REQUES_PACKET_VER) { + printf("version fail\n"); + return NULL; + } + if (size < REQUEST_PACKET_FIX_PART_LEN) { + printf("size error: %d\n", size); + return NULL; + } + uint16 url_len = ntohs(*((uint16*) (packet + 12))); + uint32 payload_len = ntohl(*((uint32*) (packet + 14))); + + if (size != ( REQUEST_PACKET_FIX_PART_LEN + url_len + payload_len)) { + printf("size error: %d, expect: %d\n", size, + REQUEST_PACKET_FIX_PART_LEN + url_len + payload_len); + return NULL; + } + if (*(packet + REQUEST_PACKET_FIX_PART_LEN + url_len - 1) != 0) { + printf("url not end with 0\n"); + return NULL; + } + + request->action = *((uint8*) (packet + 1)); + request->fmt = ntohs(*((uint16*) (packet + 2))); + request->mid = ntohl(*((uint32*) (packet + 4))); + request->sender = ntohl(*((uint32*) (packet + 8))); + request->payload_len = payload_len; + request->url = REQUEST_PACKET_URL(packet); + request->payload = packet + REQUEST_PACKET_URL_OFFSET + url_len; + + return request; +} + +char * pack_response(response_t *response, int * size) +{ + int len = RESPONSE_PACKET_FIX_PART_LEN + response->payload_len; + char * packet = (char*) wa_malloc(len); + if (packet == NULL) + return NULL; + + // TODO: ensure little endian for words and dwords + *packet = REQUES_PACKET_VER; + *((uint8*) (packet + 1)) = response->status; + *((uint16*) (packet + 2)) = htons(response->fmt); + *((uint32*) (packet + 4)) = htonl(response->mid); + *((uint32*) (packet + 8)) = htonl(response->reciever); + *((uint32*) (packet + 12)) = htonl(response->payload_len); + memcpy(packet + RESPONSE_PACKET_FIX_PART_LEN, response->payload, + response->payload_len); + + *size = len; + return packet; +} + +response_t * unpack_response(char * packet, int size, response_t * response) +{ + if (*packet != REQUES_PACKET_VER) + return NULL; + if (size < RESPONSE_PACKET_FIX_PART_LEN) + return NULL; + uint32 payload_len = ntohl(*((uint32*) (packet + 12))); + if (size != ( RESPONSE_PACKET_FIX_PART_LEN + payload_len)) + return NULL; + + response->status = *((uint8*) (packet + 1)); + response->fmt = ntohs(*((uint16*) (packet + 2))); + response->mid = ntohl(*((uint32*) (packet + 4))); + response->reciever = ntohl(*((uint32*) (packet + 8))); + response->payload_len = payload_len; + response->payload = packet + RESPONSE_PACKET_FIX_PART_LEN; + + return response; +} + +request_t *clone_request(request_t *request) +{ + /* deep clone */ + request_t *req = (request_t *) wa_malloc(sizeof(request_t)); + if (req == NULL) + return NULL; + + memset(req, 0, sizeof(*req)); + req->action = request->action; + req->fmt = request->fmt; + req->url = wa_strdup(request->url); + req->sender = request->sender; + req->mid = request->mid; + + if (req->url == NULL) + goto fail; + + req->payload_len = request->payload_len; + + if (request->payload_len) { + req->payload = (char *) wa_malloc(request->payload_len); + if (!req->payload) + goto fail; + memcpy(req->payload, request->payload, request->payload_len); + } else { + // when payload_len is 0, the payload may be used for carrying some handle or integer + req->payload = request->payload; + } + + return req; + + fail: request_cleaner(req); + return NULL; +} + +void request_cleaner(request_t *request) +{ + if (request->url != NULL) + wa_free(request->url); + if (request->payload != NULL && request->payload_len > 0) + wa_free(request->payload); + + wa_free(request); +} + +void response_cleaner(response_t * response) +{ + if (response->payload != NULL && response->payload_len > 0) + wa_free(response->payload); + + wa_free(response); +} + +response_t * clone_response(response_t * response) +{ + response_t *clone = (response_t *) wa_malloc(sizeof(response_t)); + if (clone == NULL) + return NULL; + + memset(clone, 0, sizeof(*clone)); + clone->fmt = response->fmt; + clone->mid = response->mid; + clone->status = response->status; + clone->reciever = response->reciever; + clone->payload_len = response->payload_len; + if (clone->payload_len) { + clone->payload = (char *) wa_malloc(response->payload_len); + if (!clone->payload) + goto fail; + memcpy(clone->payload, response->payload, response->payload_len); + } else { + // when payload_len is 0, the payload may be used for carrying some handle or integer + clone->payload = response->payload; + } + return clone; + + fail: response_cleaner(clone); + return NULL; +} + +response_t * set_response(response_t * response, int status, int fmt, + const char *payload, int payload_len) +{ + response->payload = payload; + response->payload_len = payload_len; + response->status = status; + response->fmt = fmt; + return response; +} + +response_t * make_response_for_request(request_t * request, + response_t * response) +{ + response->mid = request->mid; + response->reciever = request->sender; + + return response; +} + +request_t * init_request(request_t * request, char *url, int action, int fmt, + void *payload, int payload_len) +{ + static unsigned int mid = 0; + request->url = url; + request->action = action; + request->fmt = fmt; + request->payload = payload; + request->payload_len = payload_len; + request->mid = ++mid; + + return request; +} + +/* + check if the "url" is starting with "leading_str" + return: 0 - not match; >0 - the offset of matched url, include any "/" at the end + notes: + 1. it ensures the leading_str "/abc" can pass "/abc/cde" and "/abc/, but fail "/ab" and "/abcd". + leading_str "/abc/" can pass "/abc" + 2. it omit the '/' at the first char + 3. it ensure the leading_str "/abc" can pass "/abc?cde + */ + +int check_url_start(const char* url, int url_len, const char * leading_str) +{ + int offset = 0; + if (*leading_str == '/') + leading_str++; + if (url_len > 0 && *url == '/') { + url_len--; + url++; + offset++; + } + + int len = strlen(leading_str); + if (len == 0) + return 0; + + // ensure leading_str not end with "/" + if (leading_str[len - 1] == '/') { + len--; + if (len == 0) + return 0; + } + + // equal length + if (url_len == len) { + if (memcmp(url, leading_str, url_len) == 0) { + return (offset + len); + } else { + return 0; + } + } + + if (url_len < len) + return 0; + + else if (memcmp(url, leading_str, len) != 0) + return 0; + + else if (url[len] != '/' && url[len] != '?') + return 0; + else + return (offset + len + 1); +} + +// * @pattern: +// * sample 1: /abcd, match /abcd only +// * sample 2: /abcd/ match match "/abcd" and "/abcd/*" +// * sample 3: /abcd*, match any url started with "/abcd" +// * sample 4: /abcd/*, exclude "/abcd" + +bool match_url(char * pattern, char * matched) +{ + if (*pattern == '/') + pattern++; + if (*matched == '/') + matched++; + + int matched_len = strlen(matched); + if (matched_len == 0) + return false; + + if (matched[matched_len - 1] == '/') { + matched_len--; + if (matched_len == 0) + return false; + } + + int len = strlen(pattern); + if (len == 0) + return false; + + if (pattern[len - 1] == '/') { + len--; + if (strncmp(pattern, matched, len) != 0) + return false; + + if (len == matched_len) + return true; + + if (matched_len > len && matched[len] == '/') + return true; + + return false; + + } else if (pattern[len - 1] == '*') { + if (pattern[len - 2] == '/') { + if (strncmp(pattern, matched, len - 1) == 0) + return true; + + else + return false; + } else { + return (strncmp(pattern, matched, len - 1) == 0); + } + } else { + return (strcmp(pattern, matched) == 0); + } +} + +/* + * get the value of the key from following format buffer: + * key1=value1;key2=value2;key3=value3 + */ +char * find_key_value(char * buffer, int buffer_len, char * key, char * value, + int value_len, char delimiter) +{ + char * p = buffer; + int i = 0; + int remaining = buffer_len; + int key_len = strlen(key); + + char * item_start = p; + while (*p != 0 && remaining > 0) { + while (*p == ' ' || *p == delimiter) { + p++; + remaining--; + } + + if (remaining <= key_len) + return NULL; + + // find the key + if (0 == strncmp(p, key, key_len) && p[key_len] == '=') { + p += (key_len + 1); + remaining -= (key_len + 1); + char * v = value; + memset(value, 0, value_len); + value_len--; // ensure last char is 0 + while (*p != delimiter && remaining > 0 && value_len > 0) { + *v++ = *p++; + remaining--; + value_len--; + } + return value; + } + + // goto next key + while (*p != delimiter && remaining > 0) { + p++; + remaining--; + } + } + + return NULL; +} diff --git a/core/iwasm/lib/native-interface/sensor_api.h b/core/iwasm/lib/native-interface/sensor_api.h new file mode 100644 index 000000000..0f8a8583b --- /dev/null +++ b/core/iwasm/lib/native-interface/sensor_api.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ +#define DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +uint32 +wasm_sensor_open(const char* name, int instance); + +bool +wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay); + +bool +wasm_sensor_config_with_attr_container(uint32 sensor, char * buffer, int len); + +bool +wasm_sensor_close(uint32 sensor); + +#ifdef __cplusplus +} +#endif + +#endif /* DEPS_IWASM_APP_LIBS_NATIVE_INTERFACE_SENSOR_API_H_ */ diff --git a/core/iwasm/lib/native-interface/shared_utils.h b/core/iwasm/lib/native-interface/shared_utils.h new file mode 100644 index 000000000..1cc3ede50 --- /dev/null +++ b/core/iwasm/lib/native-interface/shared_utils.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ +#define DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ + +#include "native_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define FMT_ATTR_CONTAINER 99 +#define FMT_APP_RAW_BINARY 98 + +typedef struct request { + // message id + uint32 mid; + + // url of the request + char *url; + + // action of the request, can be PUT/GET/POST/DELETE + int action; + + // payload format, currently only support attr_container_t type + int fmt; + + // payload of the request, currently only support attr_container_t type + void *payload; + + int payload_len; + + unsigned long sender; +} request_t; + +typedef struct response { + // message id + uint32 mid; + + // status of the response + int status; + + // payload format + int fmt; + + // payload of the response, + void *payload; + + int payload_len; + + unsigned long reciever; +} response_t; + +int check_url_start(const char* url, int url_len, const char * leading_str); +bool match_url(char * pattern, char * matched); +char * find_key_value(char * buffer, int buffer_len, char * key, char * value, + int value_len, char delimiter); + +request_t *clone_request(request_t *request); +void request_cleaner(request_t *request); + +response_t * clone_response(response_t * response); +void response_cleaner(response_t * response); + +response_t * set_response(response_t * response, int status, int fmt, + const char *payload, int payload_len); +response_t * make_response_for_request(request_t * request, + response_t * response); + +request_t * init_request(request_t * request, char *url, int action, int fmt, + void *payload, int payload_len); + +char * pack_request(request_t *request, int * size); +request_t * unpack_request(char * packet, int size, request_t * request); +char * pack_response(response_t *response, int * size); +response_t * unpack_response(char * packet, int size, response_t * response); +void free_req_resp_packet(char * packet); + +#ifdef __cplusplus +} +#endif + +#endif /* DEPS_SSG_MICRO_RUNTIME_WASM_POC_APP_LIBS_NATIVE_INTERFACE_SHARED_UTILS_H_ */ diff --git a/core/iwasm/lib/native/base/base-lib-export.c b/core/iwasm/lib/native/base/base-lib-export.c new file mode 100644 index 000000000..b91782f49 --- /dev/null +++ b/core/iwasm/lib/native/base/base-lib-export.c @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "lib-export.h" + +#ifdef WASM_ENABLE_BASE_LIB +#include "base-lib-export.h" +#endif + +static NativeSymbol extended_native_symbol_defs[] = { +/* TODO: use macro EXPORT_WASM_API() or EXPORT_WASM_API2() to + add functions to register. */ + +#ifdef WASM_ENABLE_BASE_LIB + EXPORT_WASM_API(wasm_register_resource), + EXPORT_WASM_API(wasm_response_send), + EXPORT_WASM_API(wasm_post_request), + EXPORT_WASM_API(wasm_sub_event), + EXPORT_WASM_API(wasm_create_timer), + EXPORT_WASM_API(wasm_timer_destory), + EXPORT_WASM_API(wasm_timer_cancel), + EXPORT_WASM_API(wasm_timer_restart), + EXPORT_WASM_API(wasm_get_sys_tick_ms), +#endif + }; + +int get_base_lib_export_apis(NativeSymbol **p_base_lib_apis) +{ + *p_base_lib_apis = extended_native_symbol_defs; + return sizeof(extended_native_symbol_defs) / sizeof(NativeSymbol); +} + diff --git a/core/iwasm/lib/native/base/base-lib-export.h b/core/iwasm/lib/native/base/base-lib-export.h new file mode 100644 index 000000000..a77168bb0 --- /dev/null +++ b/core/iwasm/lib/native/base/base-lib-export.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BASE_LIB_EXPORT_H_ +#define _BASE_LIB_EXPORT_H_ + +#include "attr-container.h" +#include "native_interface.h" + +#endif /* end of _BASE_LIB_EXPORT_H_ */ + diff --git a/core/iwasm/lib/native/base/request_response.c b/core/iwasm/lib/native/base/request_response.c new file mode 100644 index 000000000..573dd48f5 --- /dev/null +++ b/core/iwasm/lib/native/base/request_response.c @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "native_interface.h" +#include "app-manager-export.h" +#include "coap_ext.h" +#include "wasm-export.h" + +extern void module_request_handler(request_t *request, uint32 register_id); + +bool wasm_response_send(int32 buffer_offset, int size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *buffer = NULL; + + if (!validate_app_addr(buffer_offset, size)) + return false; + + buffer = addr_app_to_native(buffer_offset); + + if (buffer != NULL) { + response_t response[1]; + + if (NULL == unpack_response(buffer, size, response)) + return false; + + am_send_response(response); + + return true; + } + + return false; +} + +void wasm_register_resource(int32 url_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *url = NULL; + + if (!validate_app_addr(url_offset, 1)) + return; + + url = addr_app_to_native(url_offset); + + if (url != NULL) { + unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); + am_register_resource(url, module_request_handler, mod_id); + } +} + +void wasm_post_request(int32 buffer_offset, int size) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *buffer = NULL; + + if (!validate_app_addr(buffer_offset, size)) + return; + + buffer = addr_app_to_native(buffer_offset); + + if (buffer != NULL) { + request_t req[1]; + + if (!unpack_request(buffer, size, req)) + return; + + // TODO: add permission check, ensure app can't do harm + + // set sender to help dispatch the response to the sender ap + unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); + req->sender = mod_id; + + if (req->action == COAP_EVENT) { + am_publish_event(req); + return; + } + + am_dispatch_request(req); + } +} + +void wasm_sub_event(int32 url_offset) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *url = NULL; + + if (!validate_app_addr(url_offset, 1)) + return; + + url = addr_app_to_native(url_offset); + + if (url != NULL) { + unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); + + am_register_event(url, mod_id); + } +} + diff --git a/core/iwasm/lib/native/base/runtime_lib.h b/core/iwasm/lib/native/base/runtime_lib.h new file mode 100644 index 000000000..bf4dccfe3 --- /dev/null +++ b/core/iwasm/lib/native/base/runtime_lib.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIB_BASE_RUNTIME_LIB_H_ +#define LIB_BASE_RUNTIME_LIB_H_ + +#include "native_interface.h" + +#include "runtime_timer.h" + +void init_wasm_timer(); +timer_ctx_t get_wasm_timer_ctx(); +timer_ctx_t create_wasm_timer_ctx(unsigned int module_id, int prealloc_num); +void destory_module_timer_ctx(unsigned int module_id); + +#endif /* LIB_BASE_RUNTIME_LIB_H_ */ diff --git a/core/iwasm/lib/native/base/timer_wrapper.c b/core/iwasm/lib/native/base/timer_wrapper.c new file mode 100644 index 000000000..12d8f58ff --- /dev/null +++ b/core/iwasm/lib/native/base/timer_wrapper.c @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "runtime_timer.h" +#include "app-manager-export.h" +#include "module_wasm_app.h" +#include "bh_list.h" +#include "bh_thread.h" +#include "bh_time.h" + +bh_list g_timer_ctx_list; +korp_cond g_timer_ctx_list_cond; +korp_mutex g_timer_ctx_list_mutex; +typedef struct { + bh_list_link l; + timer_ctx_t timer_ctx; +} timer_ctx_node_t; + +void wasm_timer_callback(timer_id_t id, unsigned int mod_id) +{ + module_data* module = module_data_list_lookup_id(mod_id); + if (module == NULL) + return; + + // !!! the length parameter must be 0, so the receiver will + // not free the payload pointer. + bh_post_msg(module->queue, TIMER_EVENT_WASM, (char *) id, 0); +} + +/// +/// why we create a separate link for module timer contexts +/// rather than traverse the module list? +/// It helps to reduce the lock frequency for the module list. +/// Also when we lock the module list and then call the callback for +/// timer expire, the callback is request the list lock again for lookup +/// the module from module id. It is for avoiding that situation. + +void * thread_modulers_timer_check(void * arg) +{ + + int ms_to_expiry; + while (1) { + ms_to_expiry = -1; + vm_mutex_lock(&g_timer_ctx_list_mutex); + timer_ctx_node_t* elem = (timer_ctx_node_t*) bh_list_first_elem( + &g_timer_ctx_list); + while (elem) { + int next = check_app_timers(elem->timer_ctx); + if (next != -1) { + if (ms_to_expiry == -1 || ms_to_expiry > next) + ms_to_expiry = next; + } + + elem = (timer_ctx_node_t*) bh_list_elem_next(elem); + } + vm_mutex_unlock(&g_timer_ctx_list_mutex); + + if (ms_to_expiry == -1) + ms_to_expiry = 60 * 1000; + vm_mutex_lock(&g_timer_ctx_list_mutex); + vm_cond_reltimedwait(&g_timer_ctx_list_cond, &g_timer_ctx_list_mutex, + ms_to_expiry); + vm_mutex_unlock(&g_timer_ctx_list_mutex); + } +} + +void wakeup_modules_timer_thread(timer_ctx_t ctx) +{ + vm_mutex_lock(&g_timer_ctx_list_mutex); + vm_cond_signal(&g_timer_ctx_list_cond); + vm_mutex_unlock(&g_timer_ctx_list_mutex); +} + +void init_wasm_timer() +{ + korp_tid tm_tid; + bh_list_init(&g_timer_ctx_list); + + vm_cond_init(&g_timer_ctx_list_cond); + /* temp solution for: thread_modulers_timer_check thread would recursive lock the mutex */ + vm_recursive_mutex_init(&g_timer_ctx_list_mutex); + + vm_thread_create(&tm_tid, thread_modulers_timer_check, + NULL, + BH_APPLET_PRESERVED_STACK_SIZE); +} + +timer_ctx_t create_wasm_timer_ctx(unsigned int module_id, int prealloc_num) +{ + timer_ctx_t ctx = create_timer_ctx(wasm_timer_callback, + wakeup_modules_timer_thread, prealloc_num, module_id); + + if (ctx == NULL) + return NULL; + + timer_ctx_node_t * node = (timer_ctx_node_t*) bh_malloc( + sizeof(timer_ctx_node_t)); + if (node == NULL) { + destroy_timer_ctx(ctx); + return NULL; + } + memset(node, 0, sizeof(*node)); + node->timer_ctx = ctx; + + vm_mutex_lock(&g_timer_ctx_list_mutex); + bh_list_insert(&g_timer_ctx_list, node); + vm_mutex_unlock(&g_timer_ctx_list_mutex); + + return ctx; +} + +void destory_module_timer_ctx(unsigned int module_id) +{ + vm_mutex_lock(&g_timer_ctx_list_mutex); + timer_ctx_node_t* elem = (timer_ctx_node_t*) bh_list_first_elem( + &g_timer_ctx_list); + while (elem) { + if (timer_ctx_get_owner(elem->timer_ctx) == module_id) { + bh_list_remove(&g_timer_ctx_list, elem); + destroy_timer_ctx(elem->timer_ctx); + bh_free(elem); + break; + } + + elem = (timer_ctx_node_t*) bh_list_elem_next(elem); + } + vm_mutex_unlock(&g_timer_ctx_list_mutex); +} + +timer_ctx_t get_wasm_timer_ctx() +{ + module_data * m = app_manager_get_module_data(Module_WASM_App); + if (m == NULL) + return NULL; + return m->timer_ctx; +} + +timer_id_t wasm_create_timer(int interval, bool is_period, bool auto_start) +{ + return sys_create_timer(get_wasm_timer_ctx(), interval, is_period, + auto_start); +} + +void wasm_timer_destory(timer_id_t timer_id) +{ + sys_timer_destory(get_wasm_timer_ctx(), timer_id); +} + +void wasm_timer_cancel(timer_id_t timer_id) +{ + sys_timer_cancel(get_wasm_timer_ctx(), timer_id); +} + +void wasm_timer_restart(timer_id_t timer_id, int interval) +{ + sys_timer_restart(get_wasm_timer_ctx(), timer_id, interval); +} + +extern uint32 get_sys_tick_ms(); + +uint32 wasm_get_sys_tick_ms(void) +{ + return (uint32) bh_get_tick_ms(); +} + diff --git a/core/iwasm/lib/native/base/wasm_lib_base.cmake b/core/iwasm/lib/native/base/wasm_lib_base.cmake new file mode 100644 index 000000000..de80a5784 --- /dev/null +++ b/core/iwasm/lib/native/base/wasm_lib_base.cmake @@ -0,0 +1,23 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (WASM_LIB_BASE_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${WASM_LIB_BASE_DIR}) + + +file (GLOB_RECURSE source_all ${WASM_LIB_BASE_DIR}/*.c) + +set (WASM_LIB_BASE_SOURCE ${source_all}) + diff --git a/core/iwasm/lib/native/extension/sensor/runtime_sensor.c b/core/iwasm/lib/native/extension/sensor/runtime_sensor.c new file mode 100644 index 000000000..4ae6f2743 --- /dev/null +++ b/core/iwasm/lib/native/extension/sensor/runtime_sensor.c @@ -0,0 +1,425 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "runtime_sensor.h" +#include "app-manager-export.h" +#include "module_wasm_app.h" +#include "bh_thread.h" +#include "bh_time.h" + +static sys_sensor_t * g_sys_sensors = NULL; +static int g_sensor_id_max = 0; +static sensor_client_t *find_sensor_client(sys_sensor_t * sensor, + unsigned int client_id, bool remove_if_found); + +void (*rechedule_sensor_callback)() = NULL; + +/* + * API for the applications to call - don't call it from the runtime + * + */ + +static void sensor_event_cleaner(sensor_event_data_t *sensor_event) +{ + if (sensor_event->data != NULL) { + if (sensor_event->data_fmt == FMT_ATTR_CONTAINER) + attr_container_destroy(sensor_event->data); + else + bh_free(sensor_event->data); + } + + bh_free(sensor_event); +} + +static void wasm_sensor_callback(void *client, uint32 sensor_id, + void *user_data) +{ + attr_container_t *sensor_data = (attr_container_t *) user_data; + attr_container_t *sensor_data_clone; + int sensor_data_len; + sensor_event_data_t *sensor_event; + bh_message_t msg; + sensor_client_t *c = (sensor_client_t *) client; + + module_data *module = module_data_list_lookup_id(c->client_id); + if (module == NULL) + return; + + if (sensor_data == NULL) + return; + + sensor_data_len = attr_container_get_serialize_length(sensor_data); + sensor_data_clone = (attr_container_t *)bh_malloc(sensor_data_len); + if (sensor_data_clone == NULL) + return; + + /* multiple sensor clients may use/free the sensor data, so make a copy */ + memcpy(sensor_data_clone, sensor_data, sensor_data_len); + + sensor_event = (sensor_event_data_t *)bh_malloc(sizeof(*sensor_event)); + if (sensor_event == NULL) { + bh_free(sensor_data_clone); + return; + } + + memset(sensor_event, 0, sizeof(*sensor_event)); + sensor_event->sensor_id = sensor_id; + sensor_event->data = sensor_data_clone; + sensor_event->data_fmt = FMT_ATTR_CONTAINER; + + msg = bh_new_msg(SENSOR_EVENT_WASM, + sensor_event, + sizeof(*sensor_event), + sensor_event_cleaner); + if (!msg) { + sensor_event_cleaner(sensor_event); + return; + } + + bh_post_msg2(module->queue, msg); +} + +bool wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay) +{ + attr_container_t * attr_cont; + sensor_client_t * c; + sensor_obj_t s = find_sys_sensor_id(sensor); + if (s == NULL) + return false; + + unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); + + vm_mutex_lock(&s->lock); + + c = find_sensor_client(s, mod_id, false); + if (c == NULL) { + vm_mutex_unlock(&s->lock); + return false; + } + + c->interval = interval; + c->bit_cfg = bit_cfg; + c->delay = delay; + + vm_mutex_unlock(&s->lock); + + if (s->config != NULL) { + attr_cont = attr_container_create("config sensor"); + attr_container_set_int(&attr_cont, "interval", interval); + attr_container_set_int(&attr_cont, "bit_cfg", bit_cfg); + attr_container_set_int(&attr_cont, "delay", delay); + s->config(s, attr_cont); + attr_container_destroy(attr_cont); + } + + refresh_read_interval(s); + + reschedule_sensor_read(); + + return true; +} + +uint32 wasm_sensor_open(int32 name_offset, int instance) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *name = NULL; + + if (!validate_app_addr(name_offset, 1)) + return -1; + + name = addr_app_to_native(name_offset); + + if (name != NULL) { + sensor_client_t *c; + sys_sensor_t *s = find_sys_sensor(name, instance); + if (s == NULL) + return -1; + + unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); + + vm_mutex_lock(&s->lock); + + c = find_sensor_client(s, mod_id, false); + if (c) { + // the app already opened this sensor + vm_mutex_unlock(&s->lock); + return -1; + } + + sensor_client_t * client = (sensor_client_t*) bh_malloc( + sizeof(sensor_client_t)); + if (client == NULL) { + vm_mutex_unlock(&s->lock); + return -1; + } + + memset(client, 0, sizeof(sensor_client_t)); + client->client_id = mod_id; + client->client_callback = wasm_sensor_callback; + client->interval = s->default_interval; + client->next = s->clients; + s->clients = client; + + vm_mutex_unlock(&s->lock); + + refresh_read_interval(s); + + reschedule_sensor_read(); + + return s->sensor_id; + } + + return -1; +} + +bool wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, + int len) +{ + wasm_module_inst_t module_inst = get_module_inst(); + char *buffer = NULL; + + if (!validate_app_addr(buffer_offset, len)) + return false; + + buffer = addr_app_to_native(buffer_offset); + + if (buffer != NULL) { + attr_container_t * cfg; + + sensor_obj_t s = find_sys_sensor_id(sensor); + if (s == NULL) + return false; + + if (s->config == NULL) + return false; + + return s->config(s, cfg); + } + + return false; +} + +bool wasm_sensor_close(uint32 sensor) +{ + unsigned int mod_id = app_manager_get_module_id(Module_WASM_App); + unsigned int client_id = mod_id; + sensor_obj_t s = find_sys_sensor_id(sensor); + sensor_client_t *c; + + if (s == NULL) + return false; + + vm_mutex_lock(&s->lock); + if ((c = find_sensor_client(s, client_id, true)) != NULL) + bh_free(c); + vm_mutex_unlock(&s->lock); + + refresh_read_interval(s); + + reschedule_sensor_read(); + + return true; +} + +/* + * + * sensor framework API - don't expose to the applications + * + */ +void set_sensor_reshceduler(void (*callback)()) +{ + rechedule_sensor_callback = callback; +} + +// used for other threads to wakeup the sensor read thread +void reschedule_sensor_read() +{ + if (rechedule_sensor_callback) + rechedule_sensor_callback(); +} + +void refresh_read_interval(sensor_obj_t sensor) +{ + sensor_client_t *c; + uint32 interval = sensor->default_interval; + vm_mutex_lock(&sensor->lock); + + c = sensor->clients; + if (c) + interval = c->interval; + + while (c) { + if (c->interval < interval) + interval = c->interval; + c = c->next; + } + + vm_mutex_unlock(&sensor->lock); + + sensor->read_interval = interval; +} + +sensor_obj_t add_sys_sensor(char * name, char * description, int instance, + uint32 default_interval, void * read_func, void * config_func) +{ + sys_sensor_t * s = (sys_sensor_t *) bh_malloc(sizeof(sys_sensor_t)); + if (s == NULL) + return NULL; + + memset(s, 0, sizeof(*s)); + s->name = bh_strdup(name); + s->sensor_instance = instance; + s->default_interval = default_interval; + + if (!s->name) { + bh_free(s); + return NULL; + } + + if (description) { + s->description = bh_strdup(description); + if (!s->description) { + bh_free(s->name); + bh_free(s); + return NULL; + } + } + + g_sensor_id_max++; + if (g_sensor_id_max == -1) + g_sensor_id_max++; + s->sensor_id = g_sensor_id_max; + + s->read = read_func; + s->config = config_func; + + if (g_sys_sensors == NULL) { + g_sys_sensors = s; + } else { + s->next = g_sys_sensors; + g_sys_sensors = s; + } + + vm_mutex_init(&s->lock); + + return s; +} + +sensor_obj_t find_sys_sensor(const char* name, int instance) +{ + sys_sensor_t * s = g_sys_sensors; + while (s) { + if (strcmp(s->name, name) == 0 && s->sensor_instance == instance) + return s; + + s = s->next; + } + return NULL; +} + +sensor_obj_t find_sys_sensor_id(uint32 sensor_id) +{ + sys_sensor_t * s = g_sys_sensors; + while (s) { + if (s->sensor_id == sensor_id) + return s; + + s = s->next; + } + return NULL; +} + +sensor_client_t *find_sensor_client(sys_sensor_t * sensor, + unsigned int client_id, bool remove_if_found) +{ + sensor_client_t *prev = NULL, *c = sensor->clients; + + while (c) { + sensor_client_t *next = c->next; + if (c->client_id == client_id) { + if (remove_if_found) { + if (prev) + prev->next = next; + else + sensor->clients = next; + } + return c; + } else { + c = c->next; + } + } + + return NULL; +} + +// return the milliseconds to next check +int check_sensor_timers() +{ + int ms_to_next_check = -1; + uint32 now = (uint32) bh_get_tick_ms(); + + sys_sensor_t * s = g_sys_sensors; + while (s) { + uint32 last_read = s->last_read; + uint32 elpased_ms = bh_get_elpased_ms(&last_read); + + if (s->read_interval <= 0 || s->clients == NULL) { + s = s->next; + continue; + } + + if (elpased_ms >= s->read_interval) { + attr_container_t * data = s->read(s); + if (data) { + sensor_client_t * client = s->clients; + while (client) { + client->client_callback(client, s->sensor_id, data); + client = client->next; + } + attr_container_destroy(data); + } + + s->last_read = now; + + if (ms_to_next_check == -1 || (ms_to_next_check < s->read_interval)) + ms_to_next_check = s->read_interval; + } else { + int remaining = s->read_interval - elpased_ms; + if (ms_to_next_check == -1 || (ms_to_next_check < remaining)) + ms_to_next_check = remaining; + + } + + s = s->next; + } + + return ms_to_next_check; +} + +void sensor_cleanup_callback(uint32 module_id) +{ + sys_sensor_t * s = g_sys_sensors; + + while (s) { + sensor_client_t *c; + vm_mutex_lock(&s->lock); + if ((c = find_sensor_client(s, module_id, true)) != NULL) { + bh_free(c); + } + vm_mutex_unlock(&s->lock); + s = s->next; + } +} diff --git a/core/iwasm/lib/native/extension/sensor/runtime_sensor.h b/core/iwasm/lib/native/extension/sensor/runtime_sensor.h new file mode 100644 index 000000000..a9e803d95 --- /dev/null +++ b/core/iwasm/lib/native/extension/sensor/runtime_sensor.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIB_EXTENSION_RUNTIME_SENSOR_H_ +#define LIB_EXTENSION_RUNTIME_SENSOR_H_ + +#include "bh_platform.h" +#include "attr-container.h" +struct _sys_sensor; +typedef struct _sys_sensor* sensor_obj_t; + +typedef struct _sensor_client { + struct _sensor_client * next; + unsigned int client_id; // the app id + int interval; + int bit_cfg; + int delay; + void (*client_callback)(void * client, uint32, attr_container_t *); +} sensor_client_t; + +typedef struct _sys_sensor { + struct _sys_sensor * next; + char * name; + int sensor_instance; + char * description; + uint32 sensor_id; + sensor_client_t * clients; + /* app, sensor mgr and app mgr may access the clients at the same time, + * so need a lock to protect the clients */ + korp_mutex lock; + uint32 last_read; + uint32 read_interval; + uint32 default_interval; + + attr_container_t * (*read)(void *); /* TODO: may support other type return value, such as 'cbor' */ + bool (*config)(void *, void *); + +} sys_sensor_t; + +sensor_obj_t add_sys_sensor(char * name, char * description, int instance, + uint32 default_interval, void * read_func, void * config_func); +sensor_obj_t find_sys_sensor(const char* name, int instance); +sensor_obj_t find_sys_sensor_id(uint32 sensor_id); +void refresh_read_interval(sensor_obj_t sensor); +void sensor_cleanup_callback(uint32 module_id); +int check_sensor_timers(); +void reschedule_sensor_read(); + +uint32 +wasm_sensor_open(int32 name_offset, int instance); + +bool +wasm_sensor_config(uint32 sensor, int interval, int bit_cfg, int delay); + +bool +wasm_sensor_config_with_attr_container(uint32 sensor, int32 buffer_offset, + int len); + +bool +wasm_sensor_close(uint32 sensor); + +#endif /* LIB_EXTENSION_RUNTIME_SENSOR_H_ */ diff --git a/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl b/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl new file mode 100644 index 000000000..ea8a6d3a8 --- /dev/null +++ b/core/iwasm/lib/native/extension/sensor/runtime_sensor.inl @@ -0,0 +1,20 @@ +/* +* Copyright (C) 2019 Intel Corporation. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +EXPORT_WASM_API(wasm_sensor_open), +EXPORT_WASM_API(wasm_sensor_config), +EXPORT_WASM_API(wasm_sensor_config_with_attr_container), +EXPORT_WASM_API(wasm_sensor_close), diff --git a/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c b/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c new file mode 100644 index 000000000..4b6492cfc --- /dev/null +++ b/core/iwasm/lib/native/extension/sensor/sensor_mgr_ref.c @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_common.h" +#include "bh_queue.h" +#include "bh_thread.h" +#include "runtime_sensor.h" +#include "attr-container.h" +#include "module_wasm_app.h" +#include "wasm-export.h" + +/* + * + * One reference implementation for sensor manager + * + * + */ +static korp_cond cond; +static korp_mutex mutex; + +void app_mgr_sensor_event_callback(module_data *m_data, bh_message_t msg) +{ + uint32 argv[3]; + wasm_function_inst_t func_onSensorEvent; + + bh_assert(SENSOR_EVENT_WASM == bh_message_type(msg)); + wasm_data *wasm_app_data = (wasm_data*) m_data->internal_data; + wasm_module_inst_t inst = wasm_app_data->wasm_module_inst; + + sensor_event_data_t *payload = (sensor_event_data_t*) bh_message_payload( + msg); + if (payload == NULL) + return; + + func_onSensorEvent = wasm_runtime_lookup_function(inst, "_on_sensor_event", + "(i32i32i32)"); + if (!func_onSensorEvent) { + printf("Cannot find function onRequest\n"); + } else { + int32 sensor_data_offset; + uint32 sensor_data_len; + + if (payload->data_fmt == FMT_ATTR_CONTAINER) { + sensor_data_len = attr_container_get_serialize_length( + payload->data); + } else { + printf("Unsupported sensor data format: %d\n", payload->data_fmt); + return; + } + + sensor_data_offset = wasm_runtime_module_dup_data(inst, payload->data, + sensor_data_len); + if (sensor_data_offset == 0) { + printf("Got exception running wasm code: %s\n", + wasm_runtime_get_exception(inst)); + wasm_runtime_clear_exception(inst); + return; + } + + argv[0] = payload->sensor_id; + argv[1] = (uint32) sensor_data_offset; + argv[2] = sensor_data_len; + + if (!wasm_runtime_call_wasm(inst, NULL, func_onSensorEvent, 3, argv)) { + printf(":Got exception running wasm code: %s\n", + wasm_runtime_get_exception(inst)); + wasm_runtime_clear_exception(inst); + wasm_runtime_module_free(inst, sensor_data_offset); + return; + } + + wasm_runtime_module_free(inst, sensor_data_offset); + } +} + +static attr_container_t * read_test_sensor(void * sensor) +{ + //luc: for test + attr_container_t *attr_obj = attr_container_create("read test sensor data"); + if (attr_obj) { + attr_container_set_string(&attr_obj, "name", "read test sensor"); + return attr_obj; + } + return NULL; +} + +static bool config_test_sensor(void * s, void * config) +{ + + return false; +} + +static void * thread_sensor_check(void * arg) +{ + while (1) { + int ms_to_expiry = check_sensor_timers(); + if (ms_to_expiry == -1) + ms_to_expiry = 5000; + vm_mutex_lock(&mutex); + vm_cond_reltimedwait(&cond, &mutex, ms_to_expiry); + vm_mutex_unlock(&mutex); + } +} + +static void cb_wakeup_thread() +{ + vm_cond_signal(&cond); +} + +void init_sensor_framework() +{ + // init the mutext and conditions + korp_thread tid; + vm_cond_init(&cond); + vm_mutex_init(&mutex); + + // add the sys sensor objects + add_sys_sensor("sensor_test", "This is a sensor for test", 0, 1000, + read_test_sensor, config_test_sensor); + + set_sensor_reshceduler(cb_wakeup_thread); + + wasm_register_msg_callback(SENSOR_EVENT_WASM, + app_mgr_sensor_event_callback); + + wasm_register_cleanup_callback(sensor_cleanup_callback); + + vm_thread_create(&tid, thread_sensor_check, NULL, + BH_APPLET_PRESERVED_STACK_SIZE); + +} + diff --git a/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake b/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake new file mode 100644 index 000000000..9461f841b --- /dev/null +++ b/core/iwasm/lib/native/extension/sensor/wasm_lib_sensor.cmake @@ -0,0 +1,23 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (WASM_LIB_SENSOR_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${WASM_LIB_SENSOR_DIR}) + + +file (GLOB_RECURSE source_all ${WASM_LIB_SENSOR_DIR}/*.c) + +set (WASM_LIB_SENSOR_SOURCE ${source_all}) + diff --git a/core/iwasm/lib/native/extension/template/lib-export-template.c b/core/iwasm/lib/native/extension/template/lib-export-template.c new file mode 100644 index 000000000..6becf41c5 --- /dev/null +++ b/core/iwasm/lib/native/extension/template/lib-export-template.c @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "lib-export.h" + +/* TODO: use macro EXPORT_WASM_API() or EXPORT_WASM_API2() to add functions to register. */ + +NativeSymbol extended_native_symbol_defs[] = { + +/*EXPORT_WASM_API(publish_event)*/ + +}; diff --git a/core/iwasm/lib/native/libc/libc_wrapper.c b/core/iwasm/lib/native/libc/libc_wrapper.c new file mode 100644 index 000000000..a0994a9c2 --- /dev/null +++ b/core/iwasm/lib/native/libc/libc_wrapper.c @@ -0,0 +1,893 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-native.h" +#include "wasm-export.h" +#include "wasm_log.h" +#include "wasm_platform_log.h" + +void +wasm_runtime_set_exception(wasm_module_inst_t module, const char *exception); +uint32 +wasm_runtime_get_temp_ret(wasm_module_inst_t module); +void +wasm_runtime_set_temp_ret(wasm_module_inst_t module, uint32 temp_ret); +uint32 +wasm_runtime_get_llvm_stack(wasm_module_inst_t module); +void +wasm_runtime_set_llvm_stack(wasm_module_inst_t module, uint32 llvm_stack); + +#define get_module_inst() \ + wasm_runtime_get_current_module_inst() + +#define validate_app_addr(offset, size) \ + wasm_runtime_validate_app_addr(module_inst, offset, size) + +#define addr_app_to_native(offset) \ + wasm_runtime_addr_app_to_native(module_inst, offset) + +#define addr_native_to_app(ptr) \ + wasm_runtime_addr_native_to_app(module_inst, ptr) + +#define module_malloc(size) \ + wasm_runtime_module_malloc(module_inst, size) + +#define module_free(offset) \ + wasm_runtime_module_free(module_inst, offset) + +typedef int (*out_func_t)(int c, void *ctx); + +enum pad_type { + PAD_NONE, PAD_ZERO_BEFORE, PAD_SPACE_BEFORE, PAD_SPACE_AFTER, +}; + +/** + * @brief Output an unsigned long in hex format + * + * Output an unsigned long on output installed by platform at init time. Should + * be able to handle an unsigned long of any size, 32 or 64 bit. + * @param num Number to output + * + * @return N/A + */ +static void _printf_hex_ulong(out_func_t out, void *ctx, + const unsigned long num, enum pad_type padding, int min_width) +{ + int size = sizeof(num) * 2; + int found_largest_digit = 0; + int remaining = 8; /* 8 digits max */ + int digits = 0; + + for (; size; size--) { + char nibble = (num >> ((size - 1) << 2) & 0xf); + + if (nibble || found_largest_digit || size == 1) { + found_largest_digit = 1; + nibble += nibble > 9 ? 87 : 48; + out((int) nibble, ctx); + digits++; + continue; + } + + if (remaining-- <= min_width) { + if (padding == PAD_ZERO_BEFORE) { + out('0', ctx); + } else if (padding == PAD_SPACE_BEFORE) { + out(' ', ctx); + } + } + } + + if (padding == PAD_SPACE_AFTER) { + remaining = min_width * 2 - digits; + while (remaining-- > 0) { + out(' ', ctx); + } + } +} + +/** + * @brief Output an unsigned long (32-bit) in decimal format + * + * Output an unsigned long on output installed by platform at init time. Only + * works with 32-bit values. + * @param num Number to output + * + * @return N/A + */ +static void _printf_dec_ulong(out_func_t out, void *ctx, + const unsigned long num, enum pad_type padding, int min_width) +{ + unsigned long pos = 999999999; + unsigned long remainder = num; + int found_largest_digit = 0; + int remaining = 10; /* 10 digits max */ + int digits = 1; + + /* make sure we don't skip if value is zero */ + if (min_width <= 0) { + min_width = 1; + } + + while (pos >= 9) { + if (found_largest_digit || remainder > pos) { + found_largest_digit = 1; + out((int) ((remainder / (pos + 1)) + 48), ctx); + digits++; + } else if (remaining <= min_width && padding < PAD_SPACE_AFTER) { + out((int) (padding == PAD_ZERO_BEFORE ? '0' : ' '), ctx); + digits++; + } + remaining--; + remainder %= (pos + 1); + pos /= 10; + } + out((int) (remainder + 48), ctx); + + if (padding == PAD_SPACE_AFTER) { + remaining = min_width - digits; + while (remaining-- > 0) { + out(' ', ctx); + } + } +} + +static void _vprintf(out_func_t out, void *ctx, const char *fmt, va_list ap, + wasm_module_inst_t module_inst) +{ + int might_format = 0; /* 1 if encountered a '%' */ + enum pad_type padding = PAD_NONE; + int min_width = -1; + int long_ctr = 0; + + /* fmt has already been adjusted if needed */ + + while (*fmt) { + if (!might_format) { + if (*fmt != '%') { + out((int) *fmt, ctx); + } else { + might_format = 1; + min_width = -1; + padding = PAD_NONE; + long_ctr = 0; + } + } else { + switch (*fmt) { + case '-': + padding = PAD_SPACE_AFTER; + goto still_might_format; + + case '0': + if (min_width < 0 && padding == PAD_NONE) { + padding = PAD_ZERO_BEFORE; + goto still_might_format; + } + /* Fall through */ + case '1' ... '9': + if (min_width < 0) { + min_width = *fmt - '0'; + } else { + min_width = 10 * min_width + *fmt - '0'; + } + + if (padding == PAD_NONE) { + padding = PAD_SPACE_BEFORE; + } + goto still_might_format; + + case 'l': + long_ctr++; + /* Fall through */ + case 'z': + case 'h': + /* FIXME: do nothing for these modifiers */ + goto still_might_format; + + case 'd': + case 'i': { + long d; + if (long_ctr < 2) { + d = va_arg(ap, long); + } else { + d = (long)va_arg(ap, long long); + } + + if (d < 0) { + out((int) '-', ctx); + d = -d; + min_width--; + } + _printf_dec_ulong(out, ctx, d, padding, min_width); + break; + } + + case 'u': { + unsigned long u; + + if (long_ctr < 2) { + u = va_arg(ap, unsigned long); + } else { + u = (unsigned long)va_arg(ap, + unsigned long long); +} +_printf_dec_ulong(out, ctx, u, padding, min_width); +break; +} + +case 'p': +out('0', ctx); +out('x', ctx); +/* left-pad pointers with zeros */ +padding = PAD_ZERO_BEFORE; +min_width = 8; +/* Fall through */ +case 'x': +case 'X': { +unsigned long x; + +if (long_ctr < 2) { +x = va_arg(ap, unsigned long); +} else { +x = (unsigned long)va_arg(ap, unsigned long long); +} + +_printf_hex_ulong(out, ctx, x, padding, min_width); +break; +} + +case 's': { +char *s; +char *start; +int32 s_offset = va_arg(ap, uint32); + +if (!validate_app_addr(s_offset, 1)) { +wasm_runtime_set_exception(module_inst, "out of bounds memory access"); +return; +} + +s = start = addr_app_to_native(s_offset); + +while (*s) +out((int) (*s++), ctx); + +if (padding == PAD_SPACE_AFTER) { +int remaining = min_width - (s - start); +while (remaining-- > 0) { +out(' ', ctx); +} +} +break; +} + +case 'c': { +int c = va_arg(ap, int); +out(c, ctx); +break; +} + +case '%': { +out((int) '%', ctx); +break; +} + +default: +out((int) '%', ctx); +out((int) *fmt, ctx); +break; +} + +might_format = 0; +} + +still_might_format: ++fmt; +} +} + +struct str_context { +char *str; +int max; +int count; +}; + +static int sprintf_out(int c, struct str_context *ctx) +{ +if (!ctx->str || ctx->count >= ctx->max) { +ctx->count++; +return c; +} + +if (ctx->count == ctx->max - 1) { +ctx->str[ctx->count++] = '\0'; +} else { +ctx->str[ctx->count++] = c; +} + +return c; +} + +static int printf_out(int c, struct str_context *ctx) +{ +printf("%c", c); +ctx->count++; +return c; +} + +static inline va_list get_va_list(uint32 *args) +{ +union { +uint32 u; +va_list v; +} u; +u.u = args[0]; +return u.v; +} + +static bool parse_printf_args(wasm_module_inst_t module_inst, int32 fmt_offset, +int32 va_list_offset, const char **p_fmt, va_list *p_va_args) +{ +const char *fmt; +union { +uintptr_t u; +va_list v; +} u; + +if (!validate_app_addr(fmt_offset, +1) || !validate_app_addr(va_list_offset, sizeof(int32))) +return false; + +fmt = (const char*) addr_app_to_native(fmt_offset); +u.u = (uintptr_t) addr_app_to_native(va_list_offset); + +*p_fmt = fmt; +*p_va_args = u.v; +return true; +} + +static int _printf_wrapper(int32 fmt_offset, int32 va_list_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +struct str_context ctx = { NULL, 0, 0 }; +const char *fmt; +va_list va_args; + +if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) +return 0; + +_vprintf((out_func_t) printf_out, &ctx, fmt, va_args, module_inst); +return ctx.count; +} + +static int _sprintf_wrapper(int32 str_offset, int32 fmt_offset, +int32 va_list_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +struct str_context ctx; +char *str; +const char *fmt; +va_list va_args; + +if (!validate_app_addr(str_offset, 1)) +return 0; + +str = addr_app_to_native(str_offset); + +if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) +return 0; + +ctx.str = str; +ctx.max = INT_MAX; +ctx.count = 0; + +_vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); + +if (ctx.count < ctx.max) { +str[ctx.count] = '\0'; +} + +return ctx.count; +} + +static int _snprintf_wrapper(int32 str_offset, int32 size, int32 fmt_offset, +int32 va_list_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +struct str_context ctx; +char *str; +const char *fmt; +va_list va_args; + +if (!validate_app_addr(str_offset, size)) +return 0; + +str = addr_app_to_native(str_offset); + +if (!parse_printf_args(module_inst, fmt_offset, va_list_offset, &fmt, &va_args)) +return 0; + +ctx.str = str; +ctx.max = size; +ctx.count = 0; + +_vprintf((out_func_t) sprintf_out, &ctx, fmt, va_args, module_inst); + +if (ctx.count < ctx.max) { +str[ctx.count] = '\0'; +} + +return ctx.count; +} + +static int _puts_wrapper(int32 str_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +const char *str; + +if (!validate_app_addr(str_offset, 1)) +return 0; + +str = addr_app_to_native(str_offset); +return printf("%s\n", str); +} + +static int _putchar_wrapper(int c) +{ +printf("%c", c); +return 1; +} + +static int32 _strdup_wrapper(int32 str_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char *str, *str_ret; +uint32 len; +int32 str_ret_offset = 0; + +if (!validate_app_addr(str_offset, 1)) +return 0; + +str = addr_app_to_native(str_offset); + +if (str) { +len = strlen(str) + 1; + +str_ret_offset = module_malloc(len); +if (str_ret_offset) { +str_ret = addr_app_to_native(str_ret_offset); +memcpy(str_ret, str, len); +} +} + +return str_ret_offset; +} + +static int32 _memcmp_wrapper(int32 s1_offset, int32 s2_offset, int32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *s1, *s2; + +if (!validate_app_addr(s1_offset, size) || !validate_app_addr(s2_offset, size)) +return 0; + +s1 = addr_app_to_native(s1_offset); +s2 = addr_app_to_native(s2_offset); +return memcmp(s1, s2, size); +} + +static int32 _memcpy_wrapper(int32 dst_offset, int32 src_offset, int32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *dst, *src; + +if (size == 0) +return dst_offset; + +if (!validate_app_addr(dst_offset, size) || !validate_app_addr(src_offset, size)) +return dst_offset; + +dst = addr_app_to_native(dst_offset); +src = addr_app_to_native(src_offset); +memcpy(dst, src, size); +return dst_offset; +} + +static int32 _memmove_wrapper(int32 dst_offset, int32 src_offset, int32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *dst, *src; + +if (!validate_app_addr(dst_offset, size) || !validate_app_addr(src_offset, size)) +return dst_offset; + +dst = addr_app_to_native(dst_offset); +src = addr_app_to_native(src_offset); +memmove(dst, src, size); +return dst_offset; +} + +static int32 _memset_wrapper(int32 s_offset, int32 c, int32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *s; + +if (!validate_app_addr(s_offset, size)) +return s_offset; + +s = addr_app_to_native(s_offset); +memset(s, c, size); +return s_offset; +} + +static int32 _strchr_wrapper(int32 s_offset, int32 c) +{ +wasm_module_inst_t module_inst = get_module_inst(); +const char *s; +char *ret; + +if (!validate_app_addr(s_offset, 1)) +return s_offset; + +s = addr_app_to_native(s_offset); +ret = strchr(s, c); +return ret ? addr_native_to_app(ret) : 0; +} + +static int32 _strcmp_wrapper(int32 s1_offset, int32 s2_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *s1, *s2; + +if (!validate_app_addr(s1_offset, 1) || !validate_app_addr(s2_offset, 1)) +return 0; + +s1 = addr_app_to_native(s1_offset); +s2 = addr_app_to_native(s2_offset); +return strcmp(s1, s2); +} + +static int32 _strncmp_wrapper(int32 s1_offset, int32 s2_offset, uint32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *s1, *s2; + +if (!validate_app_addr(s1_offset, size) || !validate_app_addr(s2_offset, size)) +return 0; + +s1 = addr_app_to_native(s1_offset); +s2 = addr_app_to_native(s2_offset); +return strncmp(s1, s2, size); +} + +static int32 _strcpy_wrapper(int32 dst_offset, int32 src_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char *dst, *src; + +if (!validate_app_addr(dst_offset, 1) || !validate_app_addr(src_offset, 1)) +return 0; + +dst = addr_app_to_native(dst_offset); +src = addr_app_to_native(src_offset); +strcpy(dst, src); +return dst_offset; +} + +static int32 _strncpy_wrapper(int32 dst_offset, int32 src_offset, uint32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char *dst, *src; + +if (!validate_app_addr(dst_offset, size) || !validate_app_addr(src_offset, size)) +return 0; + +dst = addr_app_to_native(dst_offset); +src = addr_app_to_native(src_offset); +strncpy(dst, src, size); +return dst_offset; +} + +static uint32 _strlen_wrapper(int32 s_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char *s; + +if (!validate_app_addr(s_offset, 1)) +return 0; + +s = addr_app_to_native(s_offset); +return strlen(s); +} + +static int32 _malloc_wrapper(uint32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +return module_malloc(size); +} + +static int32 _calloc_wrapper(uint32 nmemb, uint32 size) +{ +uint64 total_size = (uint64) nmemb * (uint64) size; +wasm_module_inst_t module_inst = get_module_inst(); +uint32 ret_offset = 0; +uint8 *ret_ptr; + +if (total_size > UINT32_MAX) +total_size = UINT32_MAX; + +ret_offset = module_malloc((uint32 )total_size); +if (ret_offset) { +ret_ptr = addr_app_to_native(ret_offset); +memset(ret_ptr, 0, (uint32) total_size); +} + +return ret_offset; +} + +static void _free_wrapper(int32 ptr_offset) +{ +wasm_module_inst_t module_inst = get_module_inst(); + +if (!validate_app_addr(ptr_offset, 4)) +return; +return module_free(ptr_offset); +} + +static void setTempRet0_wrapper(uint32 temp_ret) +{ +wasm_module_inst_t module_inst = get_module_inst(); +wasm_runtime_set_temp_ret(module_inst, temp_ret); +} + +static uint32 getTempRet0_wrapper() +{ +wasm_module_inst_t module_inst = get_module_inst(); +return wasm_runtime_get_temp_ret(module_inst); +} + +static uint32 _llvm_bswap_i16_wrapper(uint32 data) +{ +return (data & 0xFFFF0000) | ((data & 0xFF) << 8) | ((data & 0xFF00) >> 8); +} + +static uint32 _llvm_bswap_i32_wrapper(uint32 data) +{ +return ((data & 0xFF) << 24) | ((data & 0xFF00) << 8) | ((data & 0xFF0000) >> 8) +| ((data & 0xFF000000) >> 24); +} + +static uint32 _bitshift64Lshr_wrapper(uint32 uint64_part0, uint32 uint64_part1, +uint32 bits) +{ +wasm_module_inst_t module_inst = get_module_inst(); +union { +uint64 value; +uint32 parts[2]; +} u; + +u.parts[0] = uint64_part0; +u.parts[1] = uint64_part1; + +u.value >>= bits; +/* return low 32bit and save high 32bit to temp ret */ +wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32)); +return (uint32) u.value; +} + +static uint32 _bitshift64Shl_wrapper(uint32 int64_part0, uint32 int64_part1, +uint32 bits) +{ +wasm_module_inst_t module_inst = get_module_inst(); +union { +int64 value; +uint32 parts[2]; +} u; + +u.parts[0] = int64_part0; +u.parts[1] = int64_part1; + +u.value <<= bits; +/* return low 32bit and save high 32bit to temp ret */ +wasm_runtime_set_temp_ret(module_inst, (uint32) (u.value >> 32)); +return (uint32) u.value; +} + +static void _llvm_stackrestore_wrapper(uint32 llvm_stack) +{ +wasm_module_inst_t module_inst = get_module_inst(); +printf("_llvm_stackrestore called!\n"); +wasm_runtime_set_llvm_stack(module_inst, llvm_stack); +} + +static uint32 _llvm_stacksave_wrapper() +{ +wasm_module_inst_t module_inst = get_module_inst(); +printf("_llvm_stacksave called!\n"); +return wasm_runtime_get_llvm_stack(module_inst); +} + +static int32 _emscripten_memcpy_big_wrapper(int32 dst_offset, int32 src_offset, +uint32 size) +{ +wasm_module_inst_t module_inst = get_module_inst(); +void *dst, *src; + +if (!validate_app_addr(dst_offset, size) || !validate_app_addr(src_offset, size)) +return dst_offset; + +dst = addr_app_to_native(dst_offset); +src = addr_app_to_native(src_offset); + +memcpy(dst, src, size); +return dst_offset; +} + +static void abort_wrapper(int32 code) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char buf[32]; +snprintf(buf, sizeof(buf), "env.abort(%i)", code); +wasm_runtime_set_exception(module_inst, buf); +} + +static void abortStackOverflow_wrapper(int32 code) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char buf[32]; +snprintf(buf, sizeof(buf), "env.abortStackOverflow(%i)", code); +wasm_runtime_set_exception(module_inst, buf); +} + +static void nullFunc_X_wrapper(int32 code) +{ +wasm_module_inst_t module_inst = get_module_inst(); +char buf[32]; +snprintf(buf, sizeof(buf), "env.nullFunc_X(%i)", code); +wasm_runtime_set_exception(module_inst, buf); +} + +/* TODO: add function parameter/result types check */ +#define REG_NATIVE_FUNC(module_name, func_name) \ + {#module_name, #func_name, func_name##_wrapper} + +typedef struct WASMNativeFuncDef { +const char *module_name; +const char *func_name; +void *func_ptr; +} WASMNativeFuncDef; + +static WASMNativeFuncDef native_func_defs[] = { +REG_NATIVE_FUNC(env, _printf), +REG_NATIVE_FUNC(env, _sprintf), +REG_NATIVE_FUNC(env, _snprintf), +REG_NATIVE_FUNC(env, _puts), +REG_NATIVE_FUNC(env, _putchar), +REG_NATIVE_FUNC(env, _memcmp), +REG_NATIVE_FUNC(env, _memcpy), +REG_NATIVE_FUNC(env, _memmove), +REG_NATIVE_FUNC(env, _memset), +REG_NATIVE_FUNC(env, _strchr), +REG_NATIVE_FUNC(env, _strcmp), +REG_NATIVE_FUNC(env, _strcpy), +REG_NATIVE_FUNC(env, _strlen), +REG_NATIVE_FUNC(env, _strncmp), +REG_NATIVE_FUNC(env, _strncpy), +REG_NATIVE_FUNC(env, _malloc), +REG_NATIVE_FUNC(env, _calloc), +REG_NATIVE_FUNC(env, _strdup), +REG_NATIVE_FUNC(env, _free), +REG_NATIVE_FUNC(env, setTempRet0), +REG_NATIVE_FUNC(env, getTempRet0), +REG_NATIVE_FUNC(env, _llvm_bswap_i16), +REG_NATIVE_FUNC(env, _llvm_bswap_i32), +REG_NATIVE_FUNC(env, _bitshift64Lshr), +REG_NATIVE_FUNC(env, _bitshift64Shl), +REG_NATIVE_FUNC(env, _llvm_stackrestore), +REG_NATIVE_FUNC(env, _llvm_stacksave), +REG_NATIVE_FUNC(env, _emscripten_memcpy_big), +REG_NATIVE_FUNC(env, abort), +REG_NATIVE_FUNC(env, abortStackOverflow), +REG_NATIVE_FUNC(env, nullFunc_X), }; + +void* +wasm_native_func_lookup(const char *module_name, const char *func_name) +{ +uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef); +WASMNativeFuncDef *func_def = native_func_defs; +WASMNativeFuncDef *func_def_end = func_def + size; +void *ret; + +if (!module_name || !func_name) +return NULL; + +while (func_def < func_def_end) { +if (!strcmp(func_def->module_name, module_name) +&& !strcmp(func_def->func_name, func_name)) +return (void*) (uintptr_t) func_def->func_ptr; +func_def++; +} + +if ((ret = wasm_platform_native_func_lookup(module_name, func_name))) +return ret; + +return NULL; +} + +/************************************* + * Global Variables * + *************************************/ + +typedef struct WASMNativeGlobalDef { +const char *module_name; +const char *global_name; +WASMValue global_data; +} WASMNativeGlobalDef; + +static WASMNativeGlobalDef native_global_defs[] = { { "env", "STACKTOP", +.global_data.u32 = 0 }, { "env", "STACK_MAX", .global_data.u32 = 0 }, { "env", +"ABORT", .global_data.u32 = 0 }, { "env", "memoryBase", .global_data.u32 = 0 }, +{ "env", "__memory_base", .global_data.u32 = 0 }, { "env", "tableBase", +.global_data.u32 = 0 }, { "env", "__table_base", .global_data.u32 = 0 }, { +"env", "DYNAMICTOP_PTR", .global_data.addr = 0 }, { "env", "tempDoublePtr", +.global_data.addr = 0 }, { "global", "NaN", .global_data.u64 = +0x7FF8000000000000LL }, { "global", "Infinity", .global_data.u64 = +0x7FF0000000000000LL }, }; + +bool wasm_native_global_lookup(const char *module_name, const char *global_name, +WASMGlobalImport *global) +{ +uint32 size = sizeof(native_global_defs) / sizeof(WASMNativeGlobalDef); +WASMNativeGlobalDef *global_def = native_global_defs; +WASMNativeGlobalDef *global_def_end = global_def + size; + +if (!module_name || !global_name || !global) +return false; + +/* Lookup constant globals which can be defined by table */ +while (global_def < global_def_end) { +if (!strcmp(global_def->module_name, module_name) +&& !strcmp(global_def->global_name, global_name)) { +global->global_data_linked = global_def->global_data; +return true; +} +global_def++; +} + +/* Lookup non-constant globals which cannot be defined by table */ +if (!strcmp(module_name, "env")) { +if (!strcmp(global_name, "_stdin")) { +global->global_data_linked.addr = (uintptr_t) stdin; +global->is_addr = true; +return true; +} else if (!strcmp(global_name, "_stdout")) { +global->global_data_linked.addr = (uintptr_t) stdout; +global->is_addr = true; +return true; +} else if (!strcmp(global_name, "_stderr")) { +global->global_data_linked.addr = (uintptr_t) stderr; +global->is_addr = true; +return true; +} +} + +return false; +} + +bool wasm_native_init() +{ +/* TODO: qsort the function defs and global defs. */ +return true; +} + diff --git a/core/iwasm/lib/native/libc/wasm_libc.cmake b/core/iwasm/lib/native/libc/wasm_libc.cmake new file mode 100644 index 000000000..52e55123f --- /dev/null +++ b/core/iwasm/lib/native/libc/wasm_libc.cmake @@ -0,0 +1,23 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (WASM_LIBC_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${WASM_LIBC_DIR}) + + +file (GLOB_RECURSE source_all ${WASM_LIBC_DIR}/*.c) + +set (WASM_LIBC_SOURCE ${source_all}) + diff --git a/core/iwasm/products/linux/CMakeLists.txt b/core/iwasm/products/linux/CMakeLists.txt new file mode 100644 index 000000000..5421d11ee --- /dev/null +++ b/core/iwasm/products/linux/CMakeLists.txt @@ -0,0 +1,92 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cmake_minimum_required (VERSION 2.8) + +project (iwasm) + +set (PLATFORM "linux") + +# Reset default linker flags +set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + +# Enable repl mode if want to test spec cases +# add_definitions(-DWASM_ENABLE_REPL) + +if (NOT ("$ENV{VALGRIND}" STREQUAL "YES")) + add_definitions(-DNVALGRIND) +endif () + +# Currently build as 32-bit by default. +set (BUILD_AS_64BIT_SUPPORT "NO") + +if (CMAKE_SIZEOF_VOID_P EQUAL 8) +if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES") + # Add -fPIC flag if build as 64-bit + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -fPIC") +else () + add_definitions (-m32) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32") +endif () +endif () + +set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic") + +set (SHARED_LIB_DIR ../../../shared-lib) + +include_directories (. + ../../runtime/include + ../../runtime/platform/include + ${SHARED_LIB_DIR}/include) + +enable_language (ASM) + +include (../../runtime/platform/${PLATFORM}/platform.cmake) +include (../../runtime/utils/utils.cmake) +include (../../runtime/vmcore_wasm/vmcore.cmake) +include (../../lib/native/base/wasm_lib_base.cmake) +include (../../lib/native/libc/wasm_libc.cmake) +include (${SHARED_LIB_DIR}/platform/${PLATFORM}/shared_platform.cmake) +include (${SHARED_LIB_DIR}/mem-alloc/mem_alloc.cmake) + +add_library (vmlib + ${WASM_PLATFORM_LIB_SOURCE} + ${WASM_UTILS_LIB_SOURCE} + ${VMCORE_LIB_SOURCE} + ${WASM_LIB_BASE_DIR}/base-lib-export.c + ${WASM_LIBC_SOURCE} + ${PLATFORM_SHARED_SOURCE} + ${MEM_ALLOC_SHARED_SOURCE}) + +add_executable (iwasm main.c ext-lib-export.c) + +target_link_libraries (iwasm vmlib -lm -ldl -lpthread) + +add_library (libiwasm SHARED + ${WASM_PLATFORM_LIB_SOURCE} + ${WASM_UTILS_LIB_SOURCE} + ${VMCORE_LIB_SOURCE} + ${WASM_LIB_BASE_DIR}/base-lib-export.c + ${WASM_LIBC_SOURCE} + ${PLATFORM_SHARED_SOURCE} + ${MEM_ALLOC_SHARED_SOURCE}) + +set_target_properties (libiwasm PROPERTIES OUTPUT_NAME iwasm) + +target_link_libraries (libiwasm -lm -ldl -lpthread) + diff --git a/core/iwasm/products/linux/b/CMakeCache.txt b/core/iwasm/products/linux/b/CMakeCache.txt new file mode 100644 index 000000000..24a8c55de --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeCache.txt @@ -0,0 +1,341 @@ +# This is the CMakeCache file. +# For build in directory: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//The ASM compiler +CMAKE_ASM_COMPILER:FILEPATH=/usr/bin/cc + +//Flags used by the assembler during all build types. +CMAKE_ASM_FLAGS:STRING= + +//Flags used by the assembler during debug builds. +CMAKE_ASM_FLAGS_DEBUG:STRING=-g + +//Flags used by the assembler during release minsize builds. +CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the assembler during release builds. +CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the assembler during Release with Debug Info builds. +CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or +// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//Flags used by the compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release builds for minimum +// size. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during release builds with debug info. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//Flags used by the compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release builds for minimum +// size. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during release builds with debug info. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=iwasm + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Flags used by the linker during the creation of dll's. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Value Computed by CMake +iwasm_BINARY_DIR:STATIC=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b + +//Value Computed by CMake +iwasm_SOURCE_DIR:STATIC=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +//Dependencies for the target +libiwasm_LIB_DEPENDS:STATIC=general;-lm;general;-ldl;general;-lpthread; + +//Dependencies for target +vmlib_LIB_DEPENDS:STATIC= + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ASM_COMPILER +CMAKE_ASM_COMPILER-ADVANCED:INTERNAL=1 +CMAKE_ASM_COMPILER_WORKS:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ASM_FLAGS +CMAKE_ASM_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ASM_FLAGS_DEBUG +CMAKE_ASM_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ASM_FLAGS_MINSIZEREL +CMAKE_ASM_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ASM_FLAGS_RELEASE +CMAKE_ASM_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ASM_FLAGS_RELWITHDEBINFO +CMAKE_ASM_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=5 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=1 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.5 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeASMCompiler.cmake b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeASMCompiler.cmake new file mode 100644 index 000000000..db6db32a3 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeASMCompiler.cmake @@ -0,0 +1,12 @@ +set(CMAKE_ASM_COMPILER "/usr/bin/cc") +set(CMAKE_ASM_COMPILER_ARG1 "") +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_ASM_COMPILER_LOADED 1) +set(CMAKE_ASM_COMPILER_ID "GNU") +set(CMAKE_ASM_COMPILER_ENV_VAR "ASM") + +set(CMAKE_ASM_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_ASM_LINKER_PREFERENCE 0) + diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCCompiler.cmake b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCCompiler.cmake new file mode 100644 index 000000000..f40522e62 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCCompiler.cmake @@ -0,0 +1,67 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "5.4.0") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..013ee9298 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeCXXCompiler.cmake @@ -0,0 +1,68 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "5.4.0") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP) +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;c") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..8fadb3a4377be9080de10797e815ab49faade975 GIT binary patch literal 8640 zcmeHNeQXrR6`#BF$2m6Vg8(rfE!!3vL*>ocHI5-_+4I?EO>9GrP191dKKsu0k@KB< zw?_<08Y(9!rv!qMs6|y9QB{?wlveaZEm7KF0t&QhBu5o(8uAAXC71w>Q4(ZD#Mk#` z=iSG6krG8!|6#1#H}5y^_vT|~XJ_8}(U$gBr^CT0Ioa14YNI6@hpa1PmvU8LjjW7m zYz14+N&qQ_pTK{+v@dj6=WaJkW@rFs)ZyTs>rJrylTNCIVl=OlKO{z!(X@X*X`6mLtR6` zn)x*+(H7H|i)IM(!@|+9TSFLhOV)FZF_Ogl2Jo<*pEP-eVV9`yR^u`)`bScz?4D?( zzoGt~Xs9L{iKWJB#u^)H8tT<#T&?5%M*nELv9pKQMB}J{hHYL5Kb!+t{>S!r{&8cI z^UX^$m!Hl2_U;1{fBjPzmSKO8R|>y_-o0-2g~jFWqM~_E6fq6U@K$3zO)Y1y?ko%Z z{iO@fJY2EX&qQ2@SlS8!eSt|vr5c(=MY+R33;1 zlgV(>YLjh?Hnz7l1&lhiPF-vDmd3~dPnP{3K6ChIJr~GIEselq;$-J67i^}okLU3D z!Doz8m6%8PtWiB!rjK8B>rWQHR;Doh@d>kd>MI;PkN*At za0e%5UEn}ZPwOY9Ht3F5_19<3MOkm<f4>*! zdF9I!j+UE*JdlUngl1&B!pFn^P5(B3I^*y0cen3f)mfrI=l0j2+}f7D(Uv~jzWO4+ zXD2>(O>LOXWc0_cnM&HBb>xj(SLTka^B9gMYgwr*aZ_tWfi6FgN{-!;QTMaC-!9kHG(91T=X6Vp4?U3S7i;oRt-#fcACs zgiiajB|@k3)iR;u8j6XIlU4Bg#DwcECMy4MHWNqvkW)j!-y0|=iZm4bY=Cmcsi9zZ z@GE1Ngv9+irYcJ?+D8gCxA%eV0VZ05$)4ULxF5oFmnE3HMB_Qar;9C}+D&{sn_wax zmU-TvNnsDKIIh#UP7D2rD7V=E`zxJe<(jsMe#-d9Kw!O6-P50nnJHzhTCe(Q8d6-V z{a$T@>Z@04eXFekrOsE|;A`-$lYPj#3uaZLQ4!AaD^jTHxUo~2E;aYF*0tmuhRLREn%}xGxV{>ck z)|PIg+uzjQf>rZ4+GmWKNwGLh%MWLLmY`Z*Jk1L7eX5`uQr#si1YZP8XgvtYB&T=NVBNc?6Me?-#Gwg zP)%?oG5~Feo9G@83}&hji)1Ry^AVW4Hmk#@hwyy|k7Razq>q@3Je!bC``bxDPy}CYzknI;N3f~Hr+x6W;8Q=Te!2gT z34W7sNargzRtPDdk9nDY05BXAVV?cYpa_7@nP9?`7*$G? h_R~7>c_^%dAN5DL=ijjH>OZsC@|OF51WT9e|1S#bm#zQ+ literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..f89cba0f5e50283f60499d801dbc6711babc578c GIT binary patch literal 8656 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 X8jo<#ziHdGe_@f~ZN0_0wf%nsz9@%^ literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeSystem.cmake b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeSystem.cmake new file mode 100644 index 000000000..115428224 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-4.15.0-47-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-47-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-4.15.0-47-generic") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "4.15.0-47-generic") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 000000000..570a15e99 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,544 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(__ARMCC_VERSION) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if !defined(__STDC_VERSION__) + "90" +#elif __STDC_VERSION__ >= 201000L + "11" +#elif __STDC_VERSION__ >= 199901L + "99" +#else +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/a.out b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..afc42a94bbc7371ac5a573a3b9eb6b0812ecca21 GIT binary patch literal 8800 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 literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..e6d853637 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,533 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(__ARMCC_VERSION) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if __cplusplus >= 201402L + "14" +#elif __cplusplus >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/a.out b/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..648b86701f00871e7148b5f6fcce25d049005826 GIT binary patch literal 8808 zcmeHMeQZN9lDd>ZEGQq^YCQRDwXT{xhY2(0^77vkluk|mi>tP`5p zF76j~AgP5*lNzK}kLfD8X4*h@E}%7V`J9%(=hS3}>HU@%B3O+_h!o?MnnqoV{-;GjmDu9WgN1IYb9JO;g~Mbz?kyIv-BP z+LDP>ZnkaK*VWe5sb>r622g)xxMn%?=i_gz%>C=e z4^s6{?fB`Y6Nu#tx}UnO2g^-WtUn7frHWj@JjQX@UBWQ1Z)DAA#x$m*i4;gCr_(8t z7-C;2*c~uB)DCqwc(NX>14fDC6^47`b`5&SPoeU?;poD31UfTNgDnSUMi!}_=XCLNr=?E(jS{c$${f+Ct)^J?x-TK%=U);F^#ptsKt{;QnXHnpH zdrmq78|$1&h-~R%AYKK19QEC9&v%^N?v@u_y>8`nO}D%Cg<9S1Jz1x_eRK8wZY|^X z`Q2W>yS3Y`fF0O(yBp-ZUIDlQ^DX~wpv$}MZU*jV;BE%)X5elH{?{2;fc+r0d7_em z8}Ct>ZXm_HOOw5g#9xGMCAKZ{j`h~4>}?~S>mx2FTSzZ|tHFl#|F~U9Bjk)zLsF{w zC?4*ov7L2lNW?wz4)r8atOKyMSVS}vWrDSbY_MI$#=o&_&-(=2pJUr>5iv{gSw2cU zkDKvO1jxob{EW-_Xk-uD7s)%w?mF>4(v$fAPPmS>2fB2panxzjbcpCA(Jaw@fxx3m z>+o1EW#*LKDr^kfx^j|h|7Lra>g`n9y$@OnrNi6ay=JXPp?W>gS%~daATvFZjKx zly49VRsC!fOI79W;yF&GpGLv&X{FpFmg)VilsCb7gjOz+eHT>Pi&f?K7T^1FkPCLT z{JvMpn+2A2_U00wfpeE?^38(l>T-+=-*$SRE9F~+QdPcHV3}%fF2P@`lEwku8u3w~ zB(Zw<9dy9g#Xf%g{yBwPcx>NM^o;UBn_MNi{kz*E{g=jxNT>o$lFrBHb1DX=4VC1?p?D^ z{we*eT@Ox~khSw_mh!dhwiV=#D(mENkZ*##;pqrA{yi7~xgsT%x9>{%+I96b$UX4u zXJ1!3$Tx|#@7=RfUg;aTdGcdlw=aQQS!*s{0eO>ii)gj2=hsjUBjWeEhOmE-@-4zg z_Wb+x7RWIVcsztn*04Ztz~vEJ#UY#jACmpDO9KlbxYmA`{CjQwZ-5;A*zl%|!LVV7SUeM-Ok~Y?#xSRi@nkv`&w@oPZA>Q9W6`7$Gt-%@5zWmCJZ?$G z&3H_GWcQxV>PE&yB9$qemDZ+%!T^{ zn743rEEyL@JQg*h3@M$;YFha@EMyq0tRq^mtvIg*T{dk@MN=_!7d!w~u|&$qW#cg+ z)4-=x90bROle4sZDhArIY?eaEb72WiMpKiy=p;On%A+h{>_1`*(OL*3quH!n2rxHJ zGfukdl%-!hB@;r;9-TI$V?fP}MW?uzNWmhT5o#)J##MiJu+5B45;vL3sbjeWoXRI+ zLPc&Wnw=7A>}U%7S=7u}8am6XU<}Y@;>jois5g@|g({PxLRXzk18c@-;f^a5jMDNk zsqraVlT$Hp!kh)Q7N>>a{?p@N24SMpiE$W1+C=vt!Dp^QzJ&_;pN6Gxd%^!p7Jql) zRWE+mc|XbjKXLuR?$NfqJpc^u`Qfu5TiB@)m1NDgh`+Oz7S7?JQ;z5TsYwoZvLR7B zz6aztp+?~NXPla}JVOE=f31|3>L_Bx0Ccb>V*FXB1{~H;k_g=*^1m*eJO3WQj!L#C z;EpvD|) z<02)T>t(jLum4{Wo}VA@XO;<%XXWKhDQBSn8@Mn&t^bd^tX^gEOEjkI(hnDozR-+gn_TXZhbjQI0Rxc@#ilAW_CKUA5tP zU#$?{dj~v=Z$k%t@%(vzIY@Yp!}gR8W`zp`D6_|5JpQ9x-Wboc36vbW-0nwo(1!no ql{XtJWAoZCw|kz(|1v$e&w&!h$n)XvBEFy1;(O^}Y|`f39{=B25Op{J literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/CMakeDirectoryInformation.cmake b/core/iwasm/products/linux/b/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..57c0e8064 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/core/iwasm/products/linux/b/CMakeFiles/CMakeOutput.log b/core/iwasm/products/linux/b/CMakeFiles/CMakeOutput.log new file mode 100644 index 000000000..da6f8edfb --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/CMakeOutput.log @@ -0,0 +1,554 @@ +The system is: Linux - 4.15.0-47-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/3.5.1/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_be8b7/fast" +/usr/bin/make -f CMakeFiles/cmTC_be8b7.dir/build.make CMakeFiles/cmTC_be8b7.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_be8b7.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_be8b7.dir/testCCompiler.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_be8b7 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_be8b7.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_be8b7.dir/testCCompiler.c.o -o cmTC_be8b7 -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_7e61b/fast" +/usr/bin/make -f CMakeFiles/cmTC_7e61b.dir/build.make CMakeFiles/cmTC_7e61b.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -o CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c +Linking C executable cmTC_7e61b +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7e61b.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o -o cmTC_7e61b -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_7e61b' '-rdynamic' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/cc55FSYW.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_7e61b /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/make" "cmTC_7e61b/fast"] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_7e61b.dir/build.make CMakeFiles/cmTC_7e61b.dir/build] + ignore line: [make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c] + ignore line: [Linking C executable cmTC_7e61b] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7e61b.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o -o cmTC_7e61b -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_7e61b' '-rdynamic' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/cc55FSYW.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_7e61b /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/5/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc55FSYW.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--sysroot=/] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_7e61b] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] + arg [CMakeFiles/cmTC_7e61b.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] ==> ignore + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5] ==> [/usr/lib/gcc/x86_64-linux-gnu/5] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> [/usr/lib] + implicit libs: [c] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_d8be6/fast" +/usr/bin/make -f CMakeFiles/cmTC_d8be6.dir/build.make CMakeFiles/cmTC_d8be6.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_d8be6.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_d8be6.dir/feature_tests.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/feature_tests.c +Linking C executable cmTC_d8be6 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d8be6.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_d8be6.dir/feature_tests.c.o -o cmTC_d8be6 -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_a38f5/fast" +/usr/bin/make -f CMakeFiles/cmTC_a38f5.dir/build.make CMakeFiles/cmTC_a38f5.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_a38f5.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_a38f5.dir/feature_tests.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/feature_tests.c +Linking C executable cmTC_a38f5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a38f5.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_a38f5.dir/feature_tests.c.o -o cmTC_a38f5 -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_99b3d/fast" +/usr/bin/make -f CMakeFiles/cmTC_99b3d.dir/build.make CMakeFiles/cmTC_99b3d.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_99b3d.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_99b3d.dir/feature_tests.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/feature_tests.c +Linking C executable cmTC_99b3d +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_99b3d.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_99b3d.dir/feature_tests.c.o -o cmTC_99b3d -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros +Determining if the CXX compiler works passed with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_6785b/fast" +/usr/bin/make -f CMakeFiles/cmTC_6785b.dir/build.make CMakeFiles/cmTC_6785b.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_6785b.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_6785b.dir/testCXXCompiler.cxx.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_6785b +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6785b.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_6785b.dir/testCXXCompiler.cxx.o -o cmTC_6785b -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_eaf78/fast" +/usr/bin/make -f CMakeFiles/cmTC_eaf78.dir/build.make CMakeFiles/cmTC_eaf78.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -o CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp +Linking CXX executable cmTC_eaf78 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_eaf78.dir/link.txt --verbose=1 +/usr/bin/c++ -v CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_eaf78 -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_eaf78' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccl1noZy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_eaf78 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/make" "cmTC_eaf78/fast"] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_eaf78.dir/build.make CMakeFiles/cmTC_eaf78.dir/build] + ignore line: [make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -o CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Linking CXX executable cmTC_eaf78] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_eaf78.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_eaf78 -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.10' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_eaf78' '-rdynamic' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccl1noZy.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o cmTC_eaf78 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/5/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccl1noZy.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--sysroot=/] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_eaf78] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] + arg [CMakeFiles/cmTC_eaf78.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/5/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o] ==> ignore + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5] ==> [/usr/lib/gcc/x86_64-linux-gnu/5] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/5/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;c] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/5;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + + +Detecting CXX [-std=c++14] compiler features compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_77ea0/fast" +/usr/bin/make -f CMakeFiles/cmTC_77ea0.dir/build.make CMakeFiles/cmTC_77ea0.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_77ea0.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++14 -o CMakeFiles/cmTC_77ea0.dir/feature_tests.cxx.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_77ea0 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_77ea0.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_77ea0.dir/feature_tests.cxx.o -o cmTC_77ea0 -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:1cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:1cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:1cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:1cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:1cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:1cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:1cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:1cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:1cxx_relaxed_constexpr + Feature record: CXX_FEATURE:1cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:1cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++11] compiler features compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_68031/fast" +/usr/bin/make -f CMakeFiles/cmTC_68031.dir/build.make CMakeFiles/cmTC_68031.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_68031.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++11 -o CMakeFiles/cmTC_68031.dir/feature_tests.cxx.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_68031 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_68031.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_68031.dir/feature_tests.cxx.o -o cmTC_68031 -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:1cxx_alias_templates + Feature record: CXX_FEATURE:1cxx_alignas + Feature record: CXX_FEATURE:1cxx_alignof + Feature record: CXX_FEATURE:1cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:1cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:1cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:1cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:1cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:1cxx_default_function_template_args + Feature record: CXX_FEATURE:1cxx_defaulted_functions + Feature record: CXX_FEATURE:1cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:1cxx_delegating_constructors + Feature record: CXX_FEATURE:1cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:1cxx_enum_forward_declarations + Feature record: CXX_FEATURE:1cxx_explicit_conversions + Feature record: CXX_FEATURE:1cxx_extended_friend_declarations + Feature record: CXX_FEATURE:1cxx_extern_templates + Feature record: CXX_FEATURE:1cxx_final + Feature record: CXX_FEATURE:1cxx_func_identifier + Feature record: CXX_FEATURE:1cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:1cxx_inheriting_constructors + Feature record: CXX_FEATURE:1cxx_inline_namespaces + Feature record: CXX_FEATURE:1cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:1cxx_local_type_template_args + Feature record: CXX_FEATURE:1cxx_long_long_type + Feature record: CXX_FEATURE:1cxx_noexcept + Feature record: CXX_FEATURE:1cxx_nonstatic_member_init + Feature record: CXX_FEATURE:1cxx_nullptr + Feature record: CXX_FEATURE:1cxx_override + Feature record: CXX_FEATURE:1cxx_range_for + Feature record: CXX_FEATURE:1cxx_raw_string_literals + Feature record: CXX_FEATURE:1cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:1cxx_right_angle_brackets + Feature record: CXX_FEATURE:1cxx_rvalue_references + Feature record: CXX_FEATURE:1cxx_sizeof_member + Feature record: CXX_FEATURE:1cxx_static_assert + Feature record: CXX_FEATURE:1cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:1cxx_thread_local + Feature record: CXX_FEATURE:1cxx_trailing_return_types + Feature record: CXX_FEATURE:1cxx_unicode_literals + Feature record: CXX_FEATURE:1cxx_uniform_initialization + Feature record: CXX_FEATURE:1cxx_unrestricted_unions + Feature record: CXX_FEATURE:1cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:1cxx_variadic_macros + Feature record: CXX_FEATURE:1cxx_variadic_templates + + +Detecting CXX [-std=c++98] compiler features compiled with the following output: +Change Dir: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_92e24/fast" +/usr/bin/make -f CMakeFiles/cmTC_92e24.dir/build.make CMakeFiles/cmTC_92e24.dir/build +make[1]: Entering directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_92e24.dir/feature_tests.cxx.o +/usr/bin/c++ -std=c++98 -o CMakeFiles/cmTC_92e24.dir/feature_tests.cxx.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx +Linking CXX executable cmTC_92e24 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_92e24.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_92e24.dir/feature_tests.cxx.o -o cmTC_92e24 -rdynamic +make[1]: Leaving directory '/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/CMakeTmp' + + + Feature record: CXX_FEATURE:0cxx_aggregate_default_initializers + Feature record: CXX_FEATURE:0cxx_alias_templates + Feature record: CXX_FEATURE:0cxx_alignas + Feature record: CXX_FEATURE:0cxx_alignof + Feature record: CXX_FEATURE:0cxx_attributes + Feature record: CXX_FEATURE:0cxx_attribute_deprecated + Feature record: CXX_FEATURE:0cxx_auto_type + Feature record: CXX_FEATURE:0cxx_binary_literals + Feature record: CXX_FEATURE:0cxx_constexpr + Feature record: CXX_FEATURE:0cxx_contextual_conversions + Feature record: CXX_FEATURE:0cxx_decltype + Feature record: CXX_FEATURE:0cxx_decltype_auto + Feature record: CXX_FEATURE:0cxx_decltype_incomplete_return_types + Feature record: CXX_FEATURE:0cxx_default_function_template_args + Feature record: CXX_FEATURE:0cxx_defaulted_functions + Feature record: CXX_FEATURE:0cxx_defaulted_move_initializers + Feature record: CXX_FEATURE:0cxx_delegating_constructors + Feature record: CXX_FEATURE:0cxx_deleted_functions + Feature record: CXX_FEATURE:0cxx_digit_separators + Feature record: CXX_FEATURE:0cxx_enum_forward_declarations + Feature record: CXX_FEATURE:0cxx_explicit_conversions + Feature record: CXX_FEATURE:0cxx_extended_friend_declarations + Feature record: CXX_FEATURE:0cxx_extern_templates + Feature record: CXX_FEATURE:0cxx_final + Feature record: CXX_FEATURE:0cxx_func_identifier + Feature record: CXX_FEATURE:0cxx_generalized_initializers + Feature record: CXX_FEATURE:0cxx_generic_lambdas + Feature record: CXX_FEATURE:0cxx_inheriting_constructors + Feature record: CXX_FEATURE:0cxx_inline_namespaces + Feature record: CXX_FEATURE:0cxx_lambdas + Feature record: CXX_FEATURE:0cxx_lambda_init_captures + Feature record: CXX_FEATURE:0cxx_local_type_template_args + Feature record: CXX_FEATURE:0cxx_long_long_type + Feature record: CXX_FEATURE:0cxx_noexcept + Feature record: CXX_FEATURE:0cxx_nonstatic_member_init + Feature record: CXX_FEATURE:0cxx_nullptr + Feature record: CXX_FEATURE:0cxx_override + Feature record: CXX_FEATURE:0cxx_range_for + Feature record: CXX_FEATURE:0cxx_raw_string_literals + Feature record: CXX_FEATURE:0cxx_reference_qualified_functions + Feature record: CXX_FEATURE:0cxx_relaxed_constexpr + Feature record: CXX_FEATURE:0cxx_return_type_deduction + Feature record: CXX_FEATURE:0cxx_right_angle_brackets + Feature record: CXX_FEATURE:0cxx_rvalue_references + Feature record: CXX_FEATURE:0cxx_sizeof_member + Feature record: CXX_FEATURE:0cxx_static_assert + Feature record: CXX_FEATURE:0cxx_strong_enums + Feature record: CXX_FEATURE:1cxx_template_template_parameters + Feature record: CXX_FEATURE:0cxx_thread_local + Feature record: CXX_FEATURE:0cxx_trailing_return_types + Feature record: CXX_FEATURE:0cxx_unicode_literals + Feature record: CXX_FEATURE:0cxx_uniform_initialization + Feature record: CXX_FEATURE:0cxx_unrestricted_unions + Feature record: CXX_FEATURE:0cxx_user_literals + Feature record: CXX_FEATURE:0cxx_variable_templates + Feature record: CXX_FEATURE:0cxx_variadic_macros + Feature record: CXX_FEATURE:0cxx_variadic_templates diff --git a/core/iwasm/products/linux/b/CMakeFiles/Makefile.cmake b/core/iwasm/products/linux/b/CMakeFiles/Makefile.cmake new file mode 100644 index 000000000..582713e1a --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/Makefile.cmake @@ -0,0 +1,131 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/wasm_lib_base.cmake" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm_libc.cmake" + "../CMakeLists.txt" + "CMakeFiles/3.5.1/CMakeASMCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake" + "CMakeFiles/3.5.1/CMakeSystem.cmake" + "CMakeFiles/feature_tests.c" + "CMakeFiles/feature_tests.cxx" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/platform.cmake" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/utils.cmake" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/vmcore.cmake" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.cmake" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/shared_platform.cmake" + "/usr/share/cmake-3.5/Modules/CMakeASMCompiler.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeASMInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCCompiler.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeCCompilerABI.c" + "/usr/share/cmake-3.5/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCXXCompiler.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeCXXCompilerABI.cpp" + "/usr/share/cmake-3.5/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.5/Modules/CMakeCompilerIdDetection.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineASMCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineCompilerId.cmake" + "/usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake" + "/usr/share/cmake-3.5/Modules/CMakeFindBinUtils.cmake" + "/usr/share/cmake-3.5/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.5/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeParseArguments.cmake" + "/usr/share/cmake-3.5/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/share/cmake-3.5/Modules/CMakeSystem.cmake.in" + "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.5/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestASMCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestCXXCompiler.cmake" + "/usr/share/cmake-3.5/Modules/CMakeTestCompilerCommon.cmake" + "/usr/share/cmake-3.5/Modules/CMakeUnixFindMake.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-ASM.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-C-FeatureTests.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX-FeatureTests.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/MIPSpro-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.5/Modules/Internal/FeatureTesting.cmake" + "/usr/share/cmake-3.5/Modules/MultiArchCross.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-CXX.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.5/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.5/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.5.1/CMakeSystem.cmake" + "CMakeFiles/3.5.1/CMakeCCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCCompiler.cmake" + "CMakeFiles/3.5.1/CMakeCXXCompiler.cmake" + "CMakeFiles/3.5.1/CMakeASMCompiler.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/vmlib.dir/DependInfo.cmake" + "CMakeFiles/iwasm.dir/DependInfo.cmake" + "CMakeFiles/libiwasm.dir/DependInfo.cmake" + ) diff --git a/core/iwasm/products/linux/b/CMakeFiles/Makefile2 b/core/iwasm/products/linux/b/CMakeFiles/Makefile2 new file mode 100644 index 000000000..a8ff742a6 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/Makefile2 @@ -0,0 +1,182 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b + +#============================================================================= +# Target rules for target CMakeFiles/vmlib.dir + +# All Build rule for target. +CMakeFiles/vmlib.dir/all: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/depend + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53 "Built target vmlib" +.PHONY : CMakeFiles/vmlib.dir/all + +# Include target in all. +all: CMakeFiles/vmlib.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/vmlib.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 25 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/vmlib.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 0 +.PHONY : CMakeFiles/vmlib.dir/rule + +# Convenience name for target. +vmlib: CMakeFiles/vmlib.dir/rule + +.PHONY : vmlib + +# clean rule for target. +CMakeFiles/vmlib.dir/clean: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/clean +.PHONY : CMakeFiles/vmlib.dir/clean + +# clean rule for target. +clean: CMakeFiles/vmlib.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/iwasm.dir + +# All Build rule for target. +CMakeFiles/iwasm.dir/all: CMakeFiles/vmlib.dir/all + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/depend + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=1,2,3 "Built target iwasm" +.PHONY : CMakeFiles/iwasm.dir/all + +# Include target in all. +all: CMakeFiles/iwasm.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/iwasm.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 28 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/iwasm.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 0 +.PHONY : CMakeFiles/iwasm.dir/rule + +# Convenience name for target. +iwasm: CMakeFiles/iwasm.dir/rule + +.PHONY : iwasm + +# clean rule for target. +CMakeFiles/iwasm.dir/clean: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/clean +.PHONY : CMakeFiles/iwasm.dir/clean + +# clean rule for target. +clean: CMakeFiles/iwasm.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/libiwasm.dir + +# All Build rule for target. +CMakeFiles/libiwasm.dir/all: + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/depend + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 "Built target libiwasm" +.PHONY : CMakeFiles/libiwasm.dir/all + +# Include target in all. +all: CMakeFiles/libiwasm.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +CMakeFiles/libiwasm.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 25 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/libiwasm.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 0 +.PHONY : CMakeFiles/libiwasm.dir/rule + +# Convenience name for target. +libiwasm: CMakeFiles/libiwasm.dir/rule + +.PHONY : libiwasm + +# clean rule for target. +CMakeFiles/libiwasm.dir/clean: + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/clean +.PHONY : CMakeFiles/libiwasm.dir/clean + +# clean rule for target. +clean: CMakeFiles/libiwasm.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/core/iwasm/products/linux/b/CMakeFiles/TargetDirectories.txt b/core/iwasm/products/linux/b/CMakeFiles/TargetDirectories.txt new file mode 100644 index 000000000..3b0e955b1 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,5 @@ +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/edit_cache.dir +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/rebuild_cache.dir diff --git a/core/iwasm/products/linux/b/CMakeFiles/cmake.check_cache b/core/iwasm/products/linux/b/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/core/iwasm/products/linux/b/CMakeFiles/feature_tests.bin b/core/iwasm/products/linux/b/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..6c440e3f3fecefb9cee9c3151cbf31e26cbe7575 GIT binary patch literal 12696 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 404 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx b/core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx new file mode 100644 index 000000000..b93418c6e --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/feature_tests.cxx @@ -0,0 +1,405 @@ + + const char features[] = {"\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_aggregate_default_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alias_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_alignof\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_attributes\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_attribute_deprecated\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_auto_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_binary_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_contextual_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_decltype\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_decltype_auto\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_decltype_incomplete_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_default_function_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_defaulted_move_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_delegating_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_deleted_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_digit_separators\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_enum_forward_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_explicit_conversions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extended_friend_declarations\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_extern_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_final\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_func_identifier\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_generalized_initializers\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_generic_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_inheriting_constructors\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_inline_namespaces\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_lambdas\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_lambda_init_captures\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_local_type_template_args\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_long_long_type\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_noexcept\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_nonstatic_member_init\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_nullptr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_override\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_range_for\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_raw_string_literals\n" +"CXX_FEATURE:" +#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_reference_qualified_functions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_relaxed_constexpr\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_return_type_deduction\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_right_angle_brackets\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_rvalue_references\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_sizeof_member\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_static_assert\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_strong_enums\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus +"1" +#else +"0" +#endif +"cxx_template_template_parameters\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_thread_local\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_trailing_return_types\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unicode_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_uniform_initialization\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_unrestricted_unions\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_user_literals\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L +"1" +#else +"0" +#endif +"cxx_variable_templates\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_macros\n" +"CXX_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) +"1" +#else +"0" +#endif +"cxx_variadic_templates\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/C.includecache b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/C.includecache new file mode 100644 index 000000000..60b4951ea --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/C.includecache @@ -0,0 +1,172 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../../../../shared-lib/include/bh_memory.h + +../../../../shared-lib/include/config.h + +../../../runtime/include/ext-lib-export.h +lib-export.h +../../../runtime/include/lib-export.h + +../../../runtime/include/lib-export.h + +../../../runtime/include/wasm-export.h +inttypes.h +- +stdbool.h +- + +../../../runtime/include/wasm_log.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/platform/include/wasm_assert.h +bh_assert.h +../../../runtime/platform/include/bh_assert.h + +../../../runtime/platform/include/wasm_config.h +config.h +../../../runtime/platform/include/config.h + +../../../runtime/platform/include/wasm_memory.h +bh_memory.h +../../../runtime/platform/include/bh_memory.h + +../../../runtime/platform/include/wasm_platform_log.h + +../../../runtime/platform/include/wasm_thread.h +bh_thread.h +../../../runtime/platform/include/bh_thread.h + +../../../runtime/platform/include/wasm_types.h +wasm_config.h +../../../runtime/platform/include/wasm_config.h +wasm_platform.h +../../../runtime/platform/include/wasm_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.c +lib-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/lib-export.h +ext-lib-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/main.c +stdlib.h +- +string.h +- +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm_assert.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm_log.h +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm_platform.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm_platform_log.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm_thread.h +wasm-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm-export.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/wasm_memory.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/bh_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +wasm_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_config.h +wasm_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_types.h +inttypes.h +- +stdbool.h +- +stdarg.h +- +ctype.h +- +pthread.h +- +limits.h +- +semaphore.h +- +errno.h +- +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +stdio.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/config.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_config.h +bh_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_types.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_memory.h +inttypes.h +- +stdbool.h +- +assert.h +- +time.h +- +string.h +- +stdio.h +- +assert.h +- +stdarg.h +- +ctype.h +- +pthread.h +- +limits.h +- +semaphore.h +- +errno.h +- +sys/socket.h +- +netinet/in.h +- + diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/DependInfo.cmake b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/DependInfo.cmake new file mode 100644 index 000000000..ce56dc181 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/DependInfo.cmake @@ -0,0 +1,44 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/ext-lib-export.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/main.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/main.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "NVALGRIND" + "_POSIX_C_SOURCE=199309L" + "_XOPEN_SOURCE=600" + "__POSIX__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "../." + "../../../runtime/include" + "../../../runtime/platform/include" + "../../../../shared-lib/include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/build.make b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/build.make new file mode 100644 index 000000000..b7b18b3b6 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/build.make @@ -0,0 +1,141 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b + +# Include any dependencies generated for this target. +include CMakeFiles/iwasm.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/iwasm.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/iwasm.dir/flags.make + +CMakeFiles/iwasm.dir/main.c.o: CMakeFiles/iwasm.dir/flags.make +CMakeFiles/iwasm.dir/main.c.o: ../main.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/iwasm.dir/main.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/iwasm.dir/main.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/main.c + +CMakeFiles/iwasm.dir/main.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/iwasm.dir/main.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/main.c > CMakeFiles/iwasm.dir/main.c.i + +CMakeFiles/iwasm.dir/main.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/iwasm.dir/main.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/main.c -o CMakeFiles/iwasm.dir/main.c.s + +CMakeFiles/iwasm.dir/main.c.o.requires: + +.PHONY : CMakeFiles/iwasm.dir/main.c.o.requires + +CMakeFiles/iwasm.dir/main.c.o.provides: CMakeFiles/iwasm.dir/main.c.o.requires + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/main.c.o.provides.build +.PHONY : CMakeFiles/iwasm.dir/main.c.o.provides + +CMakeFiles/iwasm.dir/main.c.o.provides.build: CMakeFiles/iwasm.dir/main.c.o + + +CMakeFiles/iwasm.dir/ext-lib-export.c.o: CMakeFiles/iwasm.dir/flags.make +CMakeFiles/iwasm.dir/ext-lib-export.c.o: ../ext-lib-export.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object CMakeFiles/iwasm.dir/ext-lib-export.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/iwasm.dir/ext-lib-export.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.c + +CMakeFiles/iwasm.dir/ext-lib-export.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/iwasm.dir/ext-lib-export.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.c > CMakeFiles/iwasm.dir/ext-lib-export.c.i + +CMakeFiles/iwasm.dir/ext-lib-export.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/iwasm.dir/ext-lib-export.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.c -o CMakeFiles/iwasm.dir/ext-lib-export.c.s + +CMakeFiles/iwasm.dir/ext-lib-export.c.o.requires: + +.PHONY : CMakeFiles/iwasm.dir/ext-lib-export.c.o.requires + +CMakeFiles/iwasm.dir/ext-lib-export.c.o.provides: CMakeFiles/iwasm.dir/ext-lib-export.c.o.requires + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/ext-lib-export.c.o.provides.build +.PHONY : CMakeFiles/iwasm.dir/ext-lib-export.c.o.provides + +CMakeFiles/iwasm.dir/ext-lib-export.c.o.provides.build: CMakeFiles/iwasm.dir/ext-lib-export.c.o + + +# Object files for target iwasm +iwasm_OBJECTS = \ +"CMakeFiles/iwasm.dir/main.c.o" \ +"CMakeFiles/iwasm.dir/ext-lib-export.c.o" + +# External object files for target iwasm +iwasm_EXTERNAL_OBJECTS = + +iwasm: CMakeFiles/iwasm.dir/main.c.o +iwasm: CMakeFiles/iwasm.dir/ext-lib-export.c.o +iwasm: CMakeFiles/iwasm.dir/build.make +iwasm: libvmlib.a +iwasm: CMakeFiles/iwasm.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable iwasm" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/iwasm.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/iwasm.dir/build: iwasm + +.PHONY : CMakeFiles/iwasm.dir/build + +CMakeFiles/iwasm.dir/requires: CMakeFiles/iwasm.dir/main.c.o.requires +CMakeFiles/iwasm.dir/requires: CMakeFiles/iwasm.dir/ext-lib-export.c.o.requires + +.PHONY : CMakeFiles/iwasm.dir/requires + +CMakeFiles/iwasm.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/iwasm.dir/cmake_clean.cmake +.PHONY : CMakeFiles/iwasm.dir/clean + +CMakeFiles/iwasm.dir/depend: + cd /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/iwasm.dir/depend + diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/cmake_clean.cmake b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/cmake_clean.cmake new file mode 100644 index 000000000..35c504e8f --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/iwasm.dir/main.c.o" + "CMakeFiles/iwasm.dir/ext-lib-export.c.o" + "iwasm.pdb" + "iwasm" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/iwasm.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.internal b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.internal new file mode 100644 index 000000000..524823e14 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.internal @@ -0,0 +1,25 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +CMakeFiles/iwasm.dir/ext-lib-export.c.o + ../../../runtime/include/ext-lib-export.h + ../../../runtime/include/lib-export.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/ext-lib-export.c +CMakeFiles/iwasm.dir/main.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm-export.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/main.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.make b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.make new file mode 100644 index 000000000..8599a8813 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/depend.make @@ -0,0 +1,25 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +CMakeFiles/iwasm.dir/ext-lib-export.c.o: ../../../runtime/include/ext-lib-export.h +CMakeFiles/iwasm.dir/ext-lib-export.c.o: ../../../runtime/include/lib-export.h +CMakeFiles/iwasm.dir/ext-lib-export.c.o: ../ext-lib-export.c + +CMakeFiles/iwasm.dir/main.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/iwasm.dir/main.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/include/wasm-export.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/iwasm.dir/main.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/iwasm.dir/main.c.o: ../main.c +CMakeFiles/iwasm.dir/main.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/iwasm.dir/main.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/iwasm.dir/main.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/iwasm.dir/main.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/iwasm.dir/main.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/iwasm.dir/main.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/ext-lib-export.c.o b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/ext-lib-export.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6e5624ac48fcf0e4ddb26b74bdf3f12587fe0243 GIT binary patch literal 1176 zcma)6%Wl&^6unMT8q|lNuq%tOqDW-qpkM(jplY+>A&{~}mYqyV)Wojh2@0qWHb_OV z=37`+LI{@p1RuZ`z&W-@omML4NN4W*&K=Ll2OEz!JE-E@iZ~h#vRpGelwWnR%^c%D8H>*{>>uLxb3$BKk)Cd z^ePv?d;3DX-MY8BSgRdkfNSuP#1$?Nm+S8b=*bfaPFNnQ zOsc};qAE36aU33O7gd>aO;p!U*%wdQ^P)-*&$7aLJu}VGFmCGEPC7BFM~6=Ox*sNy z8NSwG_GTQXqp+{HGI^y1EU-&!dcR>q#jzc)y`F^0t&PTtU s?=p1z?bzcd@;*~3VfS_SWQhNTBX9{^0NL*n$lh+h845Syv#|aC0tSqEEdT%j literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/flags.make b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/flags.make new file mode 100644 index 000000000..74130b86b --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile C with /usr/bin/cc +C_FLAGS = -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic -m32 + +C_DEFINES = -DNVALGRIND -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600 -D__POSIX__ + +C_INCLUDES = -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/. -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/platform/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../../shared-lib/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc + diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/link.txt b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/link.txt new file mode 100644 index 000000000..a8500b5d8 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic -m32 -Wl,--gc-sections CMakeFiles/iwasm.dir/main.c.o CMakeFiles/iwasm.dir/ext-lib-export.c.o -o iwasm libvmlib.a -lm -ldl -lpthread diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/main.c.o b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..7010356fd172a8035b323b05308f346019f8a1b9 GIT binary patch literal 6188 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 G-hTjAqxCib literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/progress.make b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/progress.make new file mode 100644 index 000000000..6a9dc74f4 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/iwasm.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 +CMAKE_PROGRESS_3 = 3 + diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/ASM.includecache b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/ASM.includecache new file mode 100644 index 000000000..c28ead375 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/ASM.includecache @@ -0,0 +1,10 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/C.includecache b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/C.includecache new file mode 100644 index 000000000..a54d4cac6 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/C.includecache @@ -0,0 +1,512 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../../../../shared-lib/include/bh_log.h +stdarg.h +- +korp_types.h +../../../../shared-lib/include/korp_types.h + +../../../../shared-lib/include/bh_memory.h + +../../../../shared-lib/include/config.h + +../../../../shared-lib/include/korp_types.h +bh_platform.h +../../../../shared-lib/include/bh_platform.h + +../../../../shared-lib/include/mem_alloc.h +inttypes.h +- + +../../../runtime/include/lib-export.h + +../../../runtime/include/wasm-export.h +inttypes.h +- +stdbool.h +- + +../../../runtime/include/wasm_hashmap.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/include/wasm_log.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/include/wasm_vector.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/platform/include/wasm_assert.h +bh_assert.h +../../../runtime/platform/include/bh_assert.h + +../../../runtime/platform/include/wasm_config.h +config.h +../../../runtime/platform/include/config.h + +../../../runtime/platform/include/wasm_memory.h +bh_memory.h +../../../runtime/platform/include/bh_memory.h + +../../../runtime/platform/include/wasm_platform_log.h + +../../../runtime/platform/include/wasm_thread.h +bh_thread.h +../../../runtime/platform/include/bh_thread.h + +../../../runtime/platform/include/wasm_types.h +wasm_config.h +../../../runtime/platform/include/wasm_config.h +wasm_platform.h +../../../runtime/platform/include/wasm_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c +stdio.h +- +stdlib.h +- +string.h +- +lib-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/lib-export.h +base-lib-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h +attr-container.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/attr-container.h +native_interface.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/native_interface.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm-native.h +wasm-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm-export.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm_log.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm_platform_log.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-runtime.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_memory.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform_log.h +sys/ioctl.h +- +sys/uio.h +- +sys/syscall.h +- +sys/types.h +- +sys/stat.h +- +unistd.h +- +pwd.h +- +fcntl.h +- +errno.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_log.h +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_memory.h +sys/types.h +- +sys/stat.h +- +fcntl.h +- +unistd.h +- +dlfcn.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +wasm_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_config.h +wasm_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_types.h +inttypes.h +- +stdbool.h +- +stdarg.h +- +ctype.h +- +pthread.h +- +limits.h +- +semaphore.h +- +errno.h +- +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +stdio.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_thread.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_platform_log.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_thread.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.h +wasm_vector.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c +errno.h +- +stdlib.h +- +string.h +- +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm-interp.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_assert.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_platform_log.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c +wasm-interp.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm-opcode.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +wasm-loader.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c +wasm-loader.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +wasm-opcode.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_hashmap.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm-loader.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +wasm-interp.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_platform_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h +mem_alloc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/mem_alloc.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_hashmap.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_assert.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_thread.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_platform.h +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_hashmap.h +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_assert.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.h +mem_alloc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.h +stdio.h +- +stdlib.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c +ems_gc_internal.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +valgrind/memcheck.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +bh_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_thread.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_memory.h +bh_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_assert.h +ems_gc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c +ems_gc_internal.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c +ems_gc_internal.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +valgrind/memcheck.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c +mem_alloc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.h +config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/config.h +ems/ems_gc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +tlsf/tlsf.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/tlsf/tlsf.h +bh_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_thread.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/config.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_time.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_definition.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +bh_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +bh_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.h +stdarg.h +- +stdio.h +- +stdlib.h +- +setjmp.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c +bh_definition.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +stdlib.h +- +string.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_config.h +bh_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_types.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_memory.h +inttypes.h +- +stdbool.h +- +assert.h +- +time.h +- +string.h +- +stdio.h +- +assert.h +- +stdarg.h +- +ctype.h +- +pthread.h +- +limits.h +- +semaphore.h +- +errno.h +- +sys/socket.h +- +netinet/in.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +stdio.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c +bh_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.h +bh_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.h +bh_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_log.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_memory.h +stdio.h +- +stdlib.h +- +sys/time.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c +bh_time.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.h +unistd.h +- +stdio.h +- +sys/timeb.h +- +time.h +- + diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/DependInfo.cmake b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/DependInfo.cmake new file mode 100644 index 000000000..201f83499 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/DependInfo.cmake @@ -0,0 +1,95 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "ASM" + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_ASM + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" + ) +set(CMAKE_ASM_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_ASM + "NVALGRIND" + "_POSIX_C_SOURCE=199309L" + "_XOPEN_SOURCE=600" + "__POSIX__" + ) + +# The include file search paths: +set(CMAKE_ASM_TARGET_INCLUDE_PATH + "../." + "../../../runtime/include" + "../../../runtime/platform/include" + "../../../../shared-lib/include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc" + ) +set(CMAKE_DEPENDS_CHECK_C + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "NVALGRIND" + "_POSIX_C_SOURCE=199309L" + "_XOPEN_SOURCE=600" + "__POSIX__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "../." + "../../../runtime/include" + "../../../runtime/platform/include" + "../../../../shared-lib/include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/build.make b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/build.make new file mode 100644 index 000000000..0e0505cad --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/build.make @@ -0,0 +1,726 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b + +# Include any dependencies generated for this target. +include CMakeFiles/libiwasm.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/libiwasm.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/libiwasm.dir/flags.make + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building ASM object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" + /usr/bin/cc $(ASM_DEFINES) $(ASM_INCLUDES) $(ASM_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: CMakeFiles/libiwasm.dir/flags.make +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building C object CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c > CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c -o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires: + +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides.build +.PHONY : CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides.build: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + + +# Object files for target libiwasm +libiwasm_OBJECTS = \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" \ +"CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + +# External object files for target libiwasm +libiwasm_EXTERNAL_OBJECTS = + +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o +libiwasm.so: CMakeFiles/libiwasm.dir/build.make +libiwasm.so: CMakeFiles/libiwasm.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Linking C shared library libiwasm.so" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/libiwasm.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/libiwasm.dir/build: libiwasm.so + +.PHONY : CMakeFiles/libiwasm.dir/build + +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires +CMakeFiles/libiwasm.dir/requires: CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires + +.PHONY : CMakeFiles/libiwasm.dir/requires + +CMakeFiles/libiwasm.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/libiwasm.dir/cmake_clean.cmake +.PHONY : CMakeFiles/libiwasm.dir/clean + +CMakeFiles/libiwasm.dir/depend: + cd /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/libiwasm.dir/depend + diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/cmake_clean.cmake b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/cmake_clean.cmake new file mode 100644 index 000000000..5a402fcda --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/cmake_clean.cmake @@ -0,0 +1,33 @@ +file(REMOVE_RECURSE + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" + "CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + "libiwasm.pdb" + "libiwasm.so" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ASM C) + include(CMakeFiles/libiwasm.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.internal b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.internal new file mode 100644 index 000000000..df5647107 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.internal @@ -0,0 +1,293 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + ../../../runtime/include/lib-export.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm-export.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + ../../../../shared-lib/include/config.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_log.h + ../../../runtime/include/wasm_vector.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../../shared-lib/include/mem_alloc.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/mem_alloc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../../shared-lib/include/mem_alloc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + ../../../../shared-lib/include/bh_log.h + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../../shared-lib/include/korp_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_time.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.make b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.make new file mode 100644 index 000000000..f504ff52f --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/depend.make @@ -0,0 +1,293 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: ../../../runtime/include/lib-export.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/include/wasm-export.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/include/wasm_vector.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../../shared-lib/include/mem_alloc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: ../../../../shared-lib/include/mem_alloc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: ../../../../shared-lib/include/mem_alloc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/bh_log.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/korp_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c + +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_time.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c + diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/flags.make b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/flags.make new file mode 100644 index 000000000..0dda062e9 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/flags.make @@ -0,0 +1,17 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile ASM with /usr/bin/cc +# compile C with /usr/bin/cc +ASM_FLAGS = -fPIC -m32 + +ASM_DEFINES = -DNVALGRIND -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600 -D__POSIX__ -Dlibiwasm_EXPORTS + +ASM_INCLUDES = -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/. -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/platform/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../../shared-lib/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc + +C_FLAGS = -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic -fPIC -m32 + +C_DEFINES = -DNVALGRIND -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600 -D__POSIX__ -Dlibiwasm_EXPORTS + +C_INCLUDES = -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/. -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/platform/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../../shared-lib/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc + diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o new file mode 100644 index 0000000000000000000000000000000000000000..f7f7f7242403345600f4d869c1956bc006645746 GIT binary patch literal 1468 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 literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o new file mode 100644 index 0000000000000000000000000000000000000000..af42b2a2a193bad6cad319e597ae80f7b6893736 GIT binary patch literal 3252 zcma)8O>9(E6h8A)XknnG;vZCb5{UT2b1Jn_?1C0v>!L~nG%+#woSD9%BlFYDywO6a zLS7-A3{4u-7#3_WCN(iG{aLuE8BkfdHF4oa6AX=s2@4lZ#_zlHZu>g4$Z6i3d;Y$2 z?>*<8*N?5?!B8k9nnDthRY|0)tzqd=?0`HjJC%JqWcsz^8Lj;3Ep^;kuGi}=)cs^F zE7LdDa$l%@e(`n<9w)t}sB*bf3&Te(rx)F}ss~Aal+btN-p%Mcr)yZ8a1vuiI+Jw_ zw_qg8>9kWc(h108hmB1BgG4sdFy|9F$0!tyqT?E+%z4M$^5EFQgp+UJ?l1X(40&L_ zbjeM)>jXV$kBMxykTP;ku24Mpuz89rXHFIJu9HVjbz*Fg7kFuD8XFDVVbyA_SkqN2 zR#*dQ;QlZt|usN_o$$y4{iYg?}p4yV;>``mY|;2sNRhUY^#rigneS zx>_&q_m*N%&w71;T^nyS;_t!WEw#>C*GKB*t2+MjqI*b(PTU`=Oe@X}pfBN8wSKNx zb5&~&4kH??V$FL~^HP3(*8BWEsE&1@?xqw%6dRfk?5Sd1TkBl4uDx!}O#%1U4RGi6 z9@G}^Zmn7utD|$3j;b|Zee<4kXd7?aZBbs;)62JO)#$!jwQFBZhK?RRY#bO(mh*1e zc*X27;|F`oO6vZoyVs2OnBDQ`8V2L#cz18SH~t#1h(`*YKOvzDt)bnqXmkb@>Vl3B zX)k~Jx3^vn4{U3B_ZB=v45(Nl(o6i&_G4ZoUF%m)2GsB2A>H7cseOjLNaWMdts0Oz zpk{lK0IP_)YyMj6d~t;lPE%C=sp~a)1b;z_tROeE5ormU;k~Iz-rOYn!^qc0WNVW> z)+BREtx`lytDwANRlq7DolP=tV3pQRM*4^45#P*v*n$0PMAoWPHp{-%aOn(hm%{;> z=p(+&+I32sqyqNNaJ!uIW!9}zV)9AA&iLz1@{J~Wp-KL#N&dD;{=P}R8I(D=KTMQz z_Cz+}rVGWKnG)O1lPU)H@*sDs~u$vXN0p|)UcLRwoq~; zId13FAQlEvOcxyo2{6!8XYJJZS(_8q#;8tY1=SJ>qoC}fEqEbYDL*E{E~3m@N6{ir zfxm!4v-@ag&1q+C+YmGe9(_V2N&ckBd0&6U*MCO7OXO=`|AVjpg?zWj-{gGhQFG$O zz=^ku9QIyvY+}fl-v+1O7-jes$)Co%3m)Fnm=R&TT1NmG#v#YZ@hZ)b0HiDB*EQcgOBT#>rA?0jwRfLn8{K}{h0Sv-Yhy!aeKv zo?0B_WT;%L;>Vx~+OM_23W&koL_7PtnL+^2B@m~0@@vPhzXI>C54OxB5z)2d< z#yW`C1rP%|;!&^hE?~`=Fdh=WVeJ|OYxe7RA87>XkZG)gdHay}3+R}a zvqI-xz*^z?iQmA5>s&Cc;MJP^hBxs0-S>+#7&HRE-o{e>G8dmaK37WoT!CMZ^f{KH zUgA2{y;=y+a!A@zCL^TAZHR*`Kw8EkqP%n7x`34l$o=ZQg) ReZibTyf_N;8+4j9-hXqZO(g&T literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a8474f2af41d34225415439efefa8775420147ef GIT binary patch literal 3232 zcma)9O>7%g5T5lq)M=b1gp^WRAV`!3m989=MnDQQNjJSj{Ym2k60ow9&5zm16~Z59k(5_OQF$|BA0!${le118_e*B zoD4ct(ANvmjVfd@9B}mN3>0ANMc84xsPyZ_ zw#zTWb)7fDdHvoG%MB}aBT(eptP?FFpR!W8@$KCwl$AUGV6Be6UR44Yd2%z~F3T+F z8}|GLJvgYkl zcv0BpEiSll1HU6sJcixQ2VxeF?R!RBpnNBy6nj2Q`E6pgYh%^5II;^>y+MqP#sy%Gr>zCmal3#PjchZ!ZIoyL=ni5xNiE#sr3C4(O*v+*62F5LQQ`56T9Z|!CfeZ< zIIjZRFDgBN_uUn)JpkJ;Dut-qb8y`O*nUxIJN0=Eu1A6G7nNG*cop8_hq3xFnN@hW z25+UaRd{O+E~|6hD)A0iM5T_3fsslN)z}Z#*b2Sx^K=B->2sgW*}tx_#R&%=Kl2Xk z_DT)DT4U2&v0T!aNKB5Wv~kL%vz9TLh)ubp+?ixNoiH+1mJ;doY(8VS9*W0urjd$S zGjE!n%a|}Hb7an0_1tyn2{ToP&0fQpd%jPbGA$!BZdlX#)T|btBjeb}iNS#pR8btJy z02?$_qd@MV25|x^uh8p!?izQ=^*c`+PbZUR3RS1lmZ=>(9zB?|V&k(UDl(^y$!siX zk~Wo1=QG&6t;r$0pLjH7;a=fBd>9v6QJkE7hM^6`?;m**9)|4~K1W%e#KmKI0ypCA z2Z!hRKi;!-cyca4VlLLNcw_(i#CMB9h>YpS7%fRhaIt)d06y!vUXJBjd0nsK;ux9l zX&6^vOOg4aaQO3G^X20_GG7v7f4#SnfH5g@{4N|@;eED6-i_CIXh=Jl$2H6O4tP9oS_*;3=aUqo|{ds0$>ngTIEd4t_WMQ(Xn`Fk+?1A!|7& eW1k{u9nM`C%lC-ClRT$C-+MSWeSbsBb^Hfb-9j<| literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o new file mode 100644 index 0000000000000000000000000000000000000000..22623c6021690108444b7dbaba478e91920aa2a3 GIT binary patch literal 6136 zcmb_gU2Ggz6~6nEbdzkF&32QTB)}LV2vsuOpkTFWikzQKLgl8b)C(vAEo*yhuf0EJ zcg9Id4XLIPUKXQD@B#v<4^%}WLLej*0S|5r6e=G45FS80Adw=X-G_~^R30js@4GX1 zcRcnOM{up#d(Zzp=bm$BuD_NUIv)y!gc>0c5j{wVi;p>!6LLBtJ|qrG`aZzq+m9#L zc=tuSo%-kdtE;Qqh-~KK^SPB9b1TA3+U@wN6>BU>s{NZpE8)j9zxe(imM#|Rlg}4s zw9%STFb!?IP%If^C$)O0CM}t_yU~T4Njpfi{X!)(bg&TKn%-s{_Be(k?(b^{Ug_iBb zzDA}av$~^9H8LwU(x2MRAniW{!EQ%atysU}CFQ{IZmNbw67l-@bhOTC&(;TF{ zJ=YP|uVHg4t|F+gk1yD#){D13N7-DQF~f|Q;TY7OhF?PfJ2H$!Ej$;+z8b^xzy`a0 z8%9K{e^VCvzop>MtlzN{{I{jo!Ml*=HxGVCI@;+5zumedr4an~y5K+2%(QXR$o|b7 zLr%5Qk`sr~w&&Wyy0sa<^kqwdcs(c(fBD}7u|5k6DiG_l@LBd2a~HFPsgm*~PEav8 zS%KJi6ZO0QpV-_Dip|p?Y-U2zHct|NY}zStFUjBEqh+Q39@X(JDClrtwbZC z0@v;ZP8Ax8|CvnN+DB$KtyuH<75l9yORa_0aD66Y!JHcBz8>L8j!M zn`iMkv#Bh0zgc~<`N!~X^0gwTGXJ3>6VMjl&a|n%HOn33+THT&w63V^aB3`pwwjXL zOt|gP?S>0u}K>2S|~68Sf33EMwGtU!f#b2YlVmv_ljT2=>(*Qka`O?5rTSws%uy z7bCUCRODrJW#KlXhnJd%4ljudXV0G0j^swHifL(|(og8=V*{3ij(_#|fSx{~A5VY6 zA!wgWA0J2$q@QLWQvAUPy>wZGUXFzh#-q`BB(4VBArdgo@#plTv76yDySJUQBQO7U z30w}(AZZvi$ar}oQz6Nv0X>F?W6sZG^?2qT7O}(66YBBYa(NE z9E^V$uy;fRzQ{ZyB6fHn+S}!Wcl+QyK6tMWb}uL{HX?X4>5YiIp?KlG9)MLue82}k z?t{J2B7Ycnpx#J^_lXldP{!gpA3W-VYc9-OOd=j%_t2B!{o)56n6Z7+2mj0m%Z}pW z$iL{Wna4@Q_fIa&iS)nw;D5O=b2=$@i|ww<%-^KgBM!PSb2TaUinI$eFO%Xiao&Zg zM&`oRLcN^lbqu#0eN6Zs26FPu3& zlz-v;`4=<8`Qg)NhBA4PpDpKW#;8@R7iWz%N>A9&V&1t!Ze(Z#h9qyPIw3|T z!Ogp#z+JCym_&@%3`4Bd=G>}8*C20sJ;()TMtE^NvS^c#`ykLR@m;D=z#!&S;+OSL9hR{e##kblXtFg-0?e%q+q>b0uF)T687_STw5d=1$xo*=R;lpvy8 zGC^dwc!J2PXdI_DZaRT9^a*{mS}q$E1gTOr4gJEU+_Ab@Kn)BkoQ?Ml#&-wvmESOYbMZaS$Io{PIK{`jQhZ1&0hQgiE_22^NaN_o!?k+52l0Iz zJhb!Q_|mSv?U*^J&#P0}JqkSE_=9*jZXqu<%=DMCQ9QIqS<3K#IUMtNbOm5dK8`FN z@+rH&0FV5pBN0Q{WvzMb{tAeuuSJUmQt02pspv{8jqyW9{8v214?C6?hJ%?_I3D z`i7w7B5>5lFF2)-|38-c+_RrRzavczrLW(|HyyzDtjm{n6;#1Dpp;>zK0f@0;jG3R z;PVbeyW;Yx)cg_nPAMV;)LuUeoY&v)c>LuTr}CGvRJBHXe+6RNqfae4E1TrIhoqYU Z0i literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o new file mode 100644 index 0000000000000000000000000000000000000000..811f8cfb8ffaa768c293a314955e7894f06edc05 GIT binary patch literal 4260 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 Q7H-9F_qk3X&DHn+03F)E^8f$< literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9e7252b73f2621e14bf4f15ec6cdfe0e0d6d82db GIT binary patch literal 72964 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%0ATk%=<%fl!xY{!-n~(grEiZ6#e?xZ_Ja5 z>e>R`E?c16x;qQlg0U`E)%FB;LmALUix|z8_(*X#MvD79gCe!pM_EY@Qn5cq>DwpTO8cd$M%qtTO&wq&^RqEq#+#*J!%E%OfK z(n?ZII#5kolNWobT}^PH(p62`!gXz^CWGv1g3<~=S4qkd6{J)wy40y4GnsKyRTJkx z@6l9(ZO-ZvDo3fOa@ciZZBldW(BloP_bD>;u-6C1+4BsA9+gTbF3 zZU&-B!{h}H3FHQ1*@aY(EkCfk8ArRp?s zK>1mzSUBkn8KxtV?JaIWw#rDN)gDQ#H0qv+Oqe>b*DfSk2Z())AvnQYfA+WWT^+kMxH9?=V)A;k$an{v(H-U3rg*`I5u_Z#?zD9;!77dA%2` za}4ViVZ}iFZ>enT0dPcP=SO2BqOr51u`{EwGorDqXzbKz?Bw_e*KNC*4K*0w?g<`5 zNGmoKhmNtY5h*-q7L;M(M{JwGLxye9W-Cn>*|NjIgP6!5Al_FxxN>K_L88n)Uf9Qy zNbDofyAH~#V8*V4r;TfqqwfjccpDO5_OXw|yBbT;zUxy%&Wo2=s7XBAICPmggDBr4 zlK1fv-}U2{gzS7Ll*6(R*W!=ZemLH^Cw~c+3yxtMIud5S(KI!i2L&`$0p$;H41A=i zpd9x|emM?pTq)-)lZQ)NmhTByCE=JRGo+#qwNtOB zG;6g?XBl5g1)ITJubsQy@*zo3X2F~+&+F~X#-Z8o3m&5IcxtxEP&FB%4dDu=2 z!r8A~zTqyoWDBfWGB(S`=@-{trn7>M*LLs@=x$7?IEcf}Kzl}~ESu`9j9n+{JMBc6 zvc82C-+q;muO9uhzV4@JoKJ!Ko?shGOS;RQ@%5KB^ln&xX}1e3Vej9MaOiB~?<%5e z(Kl|AEl_w;^D?4?s+Kuji~UND>3cTA+jOm-aLp1feOXq*?h%$oe#(J8cdM}-gwYX9 z2@jZ>pr>n*H4e;CI7TGNcf{E7;Y|j!%Ovg{$cn!HH-;8qw2`31*y$K?A$OVgH(efr+$H>o7RNHbsnQ`f(OzOATsxZrouy?tUF}kdtPRzxqgO|DNndP z2-oXKzTk<3?-XNOhKmyQcczFTwnS}wlSEh8qt)e|$>gWNduk~;c1Vb=^G#+OWAXuRDQo)KQeGtrHA5V9XRemr z3~p)z&Ee{#%~=B00(iI)0y`$Gd0jZ>uXi1xGaL|LK>of&s? z7oPd_KnBkO99fBugPd-EalujZ&@l7V#SbSOLU$xak8Zw8^e#8I2s?WA@JCkek~nbs zA#Pmag1tVCA3Jy+KWqo7AGUWqe%O9cKWr*^{IJNZepod2_+jBGw8YNS)l9;yV&utL zu}a%3Ybc?MQh2!qIyoG{96l-eDRwi63uf|OEtV$HqRY)K!iggg*CJ;5o?LM#U`nyP ziyymt<5%VO!?SCU!t+S+Ubj?gq&?liOcqV*cC?#Kh1;ZI-P#!3A}4}2%ZZ>(kzk-H zxY5;@$`T5C(5)c?o0JL^cN)#_Zz+#8MLN#R>Pes%xqYKCme)H%WSwucz1^nVrOb^ zCyxgicMi2BH%RGc z;F4wzBiCmSwWs@LWykpz)?+9jN~t{!N(;Y@6Pm;7@xiwFBGc_wS38rkF^wgkPx$Vu z&2@#kul7Q4tf`&n;#iX)cTH$YxGviYjpm#%8bq3~12&>LI*(7y(dEVgQ{-%C%f!6k zfp?M716lS^IeciA=+|C&Y~-Q`R_ohj8@`pg4ephJGRDF<+S?)n<(-k>Nbe`J_Hsq* z09tk8L7q_n9zq8}JdD0zU-)QUs2sPoCx?%&31xT6!tT-gLLk?MZt46yk|nk{3g>#T z2G3D#bMOF0w5{=3zAnc%Jj^`sh%d&=2e6{EkDrn{jP=;V(}RaroCHMVy_8mqZmb7M zQ7)4NIod5m)^^jpcJh;3K&%iQR{M$#;c{g1&dgq0nCMbB4R0TcSk`&4+Jk){toH16 zul6)YLnun*u{pX*9u77~*T}=6=K6X*#C5yErQ7GJOk1~i%b7zdf`e-!cQqg@tq~01 z+ag)wcqro*v-uUTjz-V+yY8#Vi@Nr2ZkQp@txB|FY3#P+kQ-3Bm_Eeif`Htpnkl{o z^I?2TB;m7GsKWS=;3p3qg1e~Gp66vWHDt@lwV_Q7S@Mw8)G!ne_QdW0KJI2%@~fH} zs>os(^M^MzKpOfP6 zJ`pXqnPyF7G1m-Z%Z!MeL5#1dVU{C)x;$sz&n_h*DH0Z>zrds^QA$&AL%42()qOgq zARUq529xqnI@vVhfAEvm*4Fpl+VysN6VG(W8E5R&Nb0B>N!lYc;^h8u&AejyBciBR z@_k4~I5904ap& z4XkG?h8n6#C=(!jFdLDlb#A$ZQW+P!35k>|D-9#ylKHg2m3-$T^TE|~yR5G?Tmdd7 zg&Tol$~5%`S$`g!pB`eb@K+cfHsBe zHuX>mpQK4*sqBOokXE(-Oaa|{lc#|0po3Q7F(@|KCC6w91^1&$7*i9d9G=9 z(fo4s=CPooZt*ynfl<*}E;$$;vbFBqHQSYnNInLO;{0tmho56RleW?{v+H28n16W3 zGVh4JYs&czC|{^s{^#8M5$T99Kjgl%o#jY=mKwZ{NmvWm@zUx$f9fR6wzT!h6E+VK zg`Z%;vcpeEMobJi50B|+i%i_@-b||J+~!9ZgEI@ar&muQ#%_Xgtc##bB!B}fTTt^O z97TcR(8>{;E0&SjP#Vuj=DHa-Fb-;-`v;;4?!e0f${cM*Vj*YY&sjALLm*_sz0I&C zT(`y6i!K{@3+##;IPEFMG^tq!#QcUv1OUeto!80n3VWh zg(p%`_7;1f*ZC|=a{!vJABlx`9aL<^P8Hudl5TQ^vBnfeaydm5ZjBG*esBn7aH;m; zGJUuLAAmZai`U(<<)<|^d>BFNpW}TkzJn%hHi~K8S2%{V+iup7wV4eOxEa>E+H-8y z(5eKsy4od%<-Xd{+7%p4TQSe(!CHxR#eKCiZ5l>RdZG!lruK$-n1IbAVb;{5#A)g1 zSr}%GR@m0$^=K%~zni>sc!`<*o`$<1lFKQv(UC{^99Qal?e?gM8qN2uYpFdeZ1^Jr zT2yT_2%x{;0IC(hhC+i1Zy_Qz$ zuxdYmSGl{imHlk+)-6R0ozGuCAXWc0h)Fhb+1mG!)I#bp z&B=&fH7DmGN%hb1-pl5MtUWX*Wa(>j!Y~8ZoIH13_bOs@k}!n2xI2ZCyYtMM9IKd7 z)w&@dIxDe{HUJ&W5~elDtaV%8t*jBr(gr!@c%F?W+E1%8n9A%)lA+A(m`6Dx!%dc6Rtu&;uX-H^#DikILc;7le90 z9G!VJ-!+xR%)~(bY?mAUIfJIDE&ssJLpHg^_t4>KB1})#+n(#g`L6UkGZ-gFNyq#B z)YZE0eH7L6eU!ieRL_&IVY<6k&+Yd5_egvFJA?1HZr6F(DW@i#hm|2wHvdR)ulR^9 z1}6=-V;$4|$w9o=hYr3Jb{89Ev(0uwXcNu41kv77V0_nNQF3As$a8{VmTw zU5WC%3>G>7|CUKTziyCtFRW3W!b?MY3qp!^&)XfuH=@H4qh zJD6MG=fp1N9_<<7qibu=btU}8*r_h+rKk~tM*Uc0!v)AAx~yj(gJoBd+B?0fzkZg<0+H`2ll#17A|)ed1p86!gL)N(r`R9P^%VR4 za2SB1c~Wff#8k!GQpxUnvH#M^{)s8}I+5=w_BwB|d&0A+H%7|4k! zlb6P&sOEhylbf9EpO`ZFJG9xQd0gWyljEw28+sLmr`S&$>nZksjTw+)A0;+;Vv4<0 z$|{NMz8Cv4C;KUjT@}Xa)VuRLBYKqCIcQ*%{F0P-5=9I^yD0v5RYb!aqLb}N8QOV1Cl-W7`(g9KOKczTNjFP{UN_H28@EwB$C9m-)xd^$n zl{`?Ee7Z|!@`CI9pN|ZPlGjUdCQ-6xsh^|FTSrkTp5aDMBmd7|Vrx=I{*7=LfM#o( zXfs(J``nJNgVycBPF^s_r?<;QejoK#da<1-)!Qv_NTs*5-k;K5C56~UZw=g9H}7WP zC@m)_{hcUWEd}1k+^!z!$?Xz2q|R-AZx;(cC93a|TYTQPaR2dTvqZ|rlg)vha;5hw z3ePxi{6!v3UI2%%oC(7F2gg&e|0QMQ$#GA!jc;D)NzNm1Fv-EG!{bTLyOL2)at3yw z{YbB(@D#u^7kF~~O*-_sQ99o#$CLxs<5J(tQZOF%_0*WZ5%A>gCv@m@-fnV?B4ytC zEHkZVna8ECZ%MKCQD5IX-=nWhbnxb_$8q&I$E3ok#?{A_w_i%J_Azhm=XvtBhYo$t zTZv;*Df8B6nP>DY^SJc&tQ2b>_4W9NJ^K0r9lUw#arl3YV^Y1YJ3Y$$yHk`YWgeHl zz9{nhsIU7*c=WZL4qkorIFi5EmA77w(N&}9lZML zaVj|2mA4Zy7=A*EwU2pQb&e-*i|NqkyiImYDy5zGS!SoB_LMS@%N9N(^82W-8_xFV zYZ@KAdF!#?Iop-D6m{pg^7euht0!**JBD7+t0+`6_HI??aF6=_eO7OX%RuTaUeX*fFV; z)$_RWc4@M_4eSK9RV>G&zAjOyX6)AO$}>Fb8$*XatM69FYE!DO&oT$~Ec3XEWQ$l% zPx?BpC}#C43Qv(dak{5SHqybXz8?GQpE@O*vPh0AZ`C5-qrRTj4EAMt^7axPym{-f z<^Ja|Tg-`Rxi^aZKIZLzGwnoaOY}A!ym{-fCA!F!w-YhWdPU5uk9oV$o43=G<*mp0 z#2m-8PfWQT7W4AtZD7Zc(OyO2snUNu)ngjJpo7;mdNlj9oZ53@)b|4^g&<$|K?cOi7|~wMg9p@-=tne;ZfhcCwbJzzx~`reLeQa&pAeXVp_yv zk$*zfXZ0!ykNPejZw1T;q&Az zmk!>%_1Nfs!?CavV;ZwWzNg#$tM=W_+Y=oRIO7W%q&NeVb zJAW+q-Ex0k?mOiEeYtOy`#0sjN$y{e`+B*5TJDW=bL}OLa z*z#y>Sv0md8Y_*)N}{oQqOm)pvH8(hVKg>38oMbPn;nf^AB|lbja?IsG?o*MjgH1fMPnC7V;A=P$N1`>W1eS(20P!svXUY9)xnCjoNpjDXJO4CAv~#4~`FG5tox|lmOzuPFev;fRxxX*ALvxLG{#ot^ z<^Go3_sji%@S*9#})ogyHI`T6}d| zKK>l3J5V;^N-U7tU$<^9J96heMR&ghm;bx|PXqt|)j)Y=Noi4NbyZnWP1(ZG(#i^` z!nl>4R#IMGxzMs!;;$YSttct4Ei*AL zEGsWBs;FIVMbbyU6d8fv6(e7=uDj-%X@OCN3u-GuwSl~xi8;ArC)Ely?!Ix8a&jl; zjLW^$cm&4hj+>M_DR-)6v2OE9`@~!;ZB0hnxkJ;_8_}Q!;D*B&axLP0#%UQ1zN=3i zG&Ah?-ShHGU=yBv;jpY656>dQB0Qzav&_TeTVR+N54(O|H}Pi2<-6f!JDx3c$AwpV z&W6uncX!7@ga9h^jiFTaK-#hXA z1t<&GztPRQdHnzI3DYPz&s3h77}PmD!3X@|bpOvlJfztE9!RQ;Eb$({G&c-}`a&$zhg=jQQW zd#aOnd_!HX2qps#kI8%eAWz=QmG^J%G%?*VlkNaSM3qNATIouc|GhZRcIBBwbo1nx zGNGJyjt?JJKq~p&r9~IZ_VdZ()U7qBL#BC>=wv6kiZks00oM;LD-Zu}v0IMcAJ6w@<*9J<_?J2P-mU&0bNe&BR~s2@ z8xJban|HY4xnA4GpWTtrHev_M8jiIKUaBsOZex(_eS9JjRt<$VhCD~8;K)WwLw6sDU*iZRHYjF<0HOyM4B>N~IX!qquZ``a7 z?2~*>?`$0X)|uAV)Svy4548L8TTnrb8=%G{pj)ct3UfE zALu_P@RuoN^Pgu8)&gc<<+E^f*LC@=fOU@gv#;`jzF29NM4H7?j9-51LhCB^XTRkG z?Y{ihNK0%Sj_kL5pxu|>y2QFw!?Vxwfp%YhYm~K2{n=mnK)Wx$b(vMK{_LZCpdVHm z2Pu%=#cp=k!x(F;`m?|Cfo@Tn}0FTXX(l0FlTw0j?D_vN>yShG}qK=L!i?T!3S zvkqvLWZ&ci?Y{ih71o^^p6!g!Dt3D#{8iQ}^=H531MR;2R=(A!{nrS_){_L}Spxu|>y4Fo1J+rLc%1=o?(C*7`ea!lW`m<=X&UQ9{N`64;nxF8J~5lbwp{lgK5@M5C44YRFn%Z_BlRl zzC7DEzjcRop8B)D@qu<T#E_ru@{+7darnLa{Q5U@!wB5!r{&LXYg|5wYrp0>q zM@QZ?YbEGiwm0fy9q7X@It==JC;T+43G_S{{Ta|<7ySt6@4M(Pf_~FQe-(6=EB$jlC;b+VHJ)U>F=uSLmp>4JO{{s5!F8c4F|Kg(m7qmUrqx>}Z-RCO*!JyZ< z=u<&I=nM;rtusLX&1D~FgIh&(~TEfUjlvmWpRI&?enAK^kbke8XKp-3%W5UPCo_uoy+6& z4?+LT>4uA~U7&}s^OURD+5`GM7yT2^Gn{U>*m@mwn~VMx=ojlz(?dXC>vX%tRwn3% zkH-B!1bX<4IDIbYBQE*^&?B#j`+o%V!kKY;Ea-m(*DlBL4V5W zc8jeb=pS7l_rC#jhCL{Uz1$4?I;Wd0wr&G`(VRH{-Jp-T=!Kwv<8;Ht)>6>tINflu zRSEj`o8#eYL2q!nq|;3oTMvT%Okv#Lej@s<3O5PbX~@Lgj~>*0 z`N7c)dGjJMjAu18$MF#dZ_X|53r z!}u)2X=_b>&r_On|6yqFW$|?^S82Bgd>oQV@APc$JGmxYR)h20tuW!2S{)kOawbm>awB*t3zcBXDz5MsaUuKf*Kxr9_ zqjI&i5GE5UD_UMzT3cRbsjHo(8rxeHT4Q-O9Fpp6GIX|ZN!h}CVSgpKSJlG$6C5h5 zEIP^_g;iBqWgc>7Pnc@u%$_)Diro2}2it>7E^p&`o50&d-tuspFqw`M%=5%a@;q7Y z6ft2U15e0f=m~k_lUVX3mOP0iZwk|vH${{+Rl-hX3iD7Cd1ngqrZOdYQza!+CElqL?^Fppm0>64 zGVG*WhMknlu#<8bc2X|GPReCi>;uW2VJD#y@h)MaT0dCgdHzo$4l7p5_Y_VMZ=#qUB~o4%KC0)oRmhvlD=ORnelQ6{X}^ zR9#l)@zRF6NNdi*CHG1)imkZvZPTLa%H{DE!reB-`5n1-JL6`f0*V$OPxls;l$KVb zzstu&{C}#s=g+8%SE@{l=2jUh-c;Ir}Y( z!*23%I7_}obpNeo-A{Z2^IqcbFrOxNSk}ux^8XA-et3z$S3ZZE{Rj-y%)t3rfGL^f-)x$X5y^UlnP@`)Q@Wp!6=Kf1>o?iEkn@TthyNG!n6N z!gLa;Zz9Ks#B9akilT402b3PEI7)GhVy@yuMNV@lkJA@oz9Od=q-QD4RxD7Qr#N5n zF2!QSQpF{T5GC@e6hn%uh}D+0hFD`+^+b5CBi7;v^uZ3GLb106q@mw$0%;Gsfz)#w z-NE!vy1#{ebS;-rS}t>yzDMcL5FzI^b^o=xbKQvU`M@D1mNlCQ`L`(E4rD#3RQkVw zjQ4wVM|%FL?t}cs{SG4JeE~>0-&A+*1(HrrH+HHVnQGTN#pLSEG@qHagf35@4|B$+0rsXSp32?6gO})OWc#GfA zn-t$sl)WJEJ*?&Y6_zi;|BMKC9=s)TE==V9BI9o(4L;vV#{DM6&jRWHCDQPJ6$Q$0 zL!cnKe+WqT>BKWE>yt$Izo7oFs{dcre=@?*|3$@r0V!t)8g9y&22B5hW!+8sVyw3T z>Hjd@VQhb-`?;9EVUvmO=K&e+79!TB)~b6%-G4+xeCG}|xD1&7NBqHiAj3aG8gd_3 z`WYbQrK4k`e-@B*KkD(g?R%-T$RHQ|*9jwT$N#Ao+hzckpvfl<|CA z?O}%^*J{YeH5u~Vsq|tX^UJ;LWc6Z!=JQeJv(%D3Ov-so^Zi{Q>*rpj_W>zi+E1kK zEX}9XTex$5oatN1d+X=?QcwnSSK+zlqSR^c$d0L3(KqmumX+H2pH(g8zPX zKdA0Ul}^`meOS|lC==R=g{uE2fRz6#km-_s4Ef`7BGWZd(^aeK`i|1nH^aHhn|fh? z!EtJ_ri16Q=>E9U&nUe|>DPhO-yyocsro}DMe`>8FN#>wbpeokXvP!z=MvJ;!#9Au#I(+ETAan6SHCyiW=ix9Qw znen)3(X*=@WPbI#uKH)Zw1csf3t`Bbi#`-XM0RLL)H_>wP=<@1hdT%uSEA=x7>0miuecsaJ#GS0kFU`EO(YK2kmYbwWIl%6uk8acOX+N4SlfpRZ6AOEx&ucl zj#8BNVIA~Lx&iIK;uPWoI)6sI`J^Aj`D9|F&YvLY z+^N{2xLa|rVyj}C;y%T8#r=vMiU$-ADjrfitawE6sNx622yU=HBIk`mkm(F!Gs>U% zX_P$d{>z`HC|YWj+CS)=T;q zD9%%yuXvYYv0|wr>oLQXD^@9n6jv#7UQNDw#dV5}iVrD971t|nP~51vNpZ8{7R9ZK z+Z4Ae?oiyR*rK>waj#;lVw>VV#dgL0iXDmv6b~vMQar49MDeKN2Z|Qj8R{WjQO04Q zhbql;H1y{71t>?Dn6tbRa~#QL2;wvCdJK)TNJk{Zd2T@xI=NLVvFK# z#l4EHifxMf6x$W|D|RRzP&}x3Nb#`Z5yhj5A1GSrN2ni;^NAUXLv0#OgnJ!p1lx^8 zIu1mCaye-rhNLn-&L^UAx|{f0%fir7#xrbJ*?(pL-ST9dHxJ_;xKqv@^v5_z_|WK` z3YzO@`RYGg{iQtwzx1!bKdArTfLsUhj+35XxZ8C70=NYB?~H3)@k~}Z`HI&o&Q<&t z(04n|Zz#@CIZP+>#d!wPdo$hPDDeRA2Ti?v3CMi1ePBMhzR2-jr}}doK>q-c{`o-q zbN!Uz9|h9?8$kNMMEAGghVt@3k32g`|FNXu&$CfOiZLGqay;-35qv)M|KvNJ;{fnY zILY{bnh5`|1L^;L((r#83MKs`AoD*81w?saBKS7|>HjU#;6LSLqzj$UQXt(|0qOpE zrMD>UJH_~)4y6A)B8=y8;+;4r2;?|w&`^{AbAXh0DUkg9I7E5}&bO%hm(_hM-C=Kk zB8_x@1ZBW*lYk8OvC|BFJCO8e@MC&6W`Rb$ZxInLfFHw605abzlx`r6FrOc0{I>u} z&w>Fk+yg*{`#foc8=P(2uLIKkR?^^K_8~*B29o|g5&55ZCJ^a(7|3)LpJnK85+VPu zK+55Sjp4paM7Z3u4c`hP_B}`2zh@Z!vB(h@y`R&|1(7RcMu`xk_!yqLLk#wO&WaJ7aIRNh>-I+ApQ9#CFnoq zA|T{c6XE}w;?R+X?|dNhyOwwx#`PB)z6FY#fRy(nY4DwKiQ!wJ_%9;l-u@ATp97Nr z+oZvN@+iaqSt9t}Q5=1#;kyb*zAqCIf7)dR8;RgQpm^bE!=DEv{|cp>lzxW@{_DpW zd=SWVe1SChf1~uDm7Y7+@O?+|5Rm-GNP|B=$I!O`Nk2n`{4*{$cr%dvrKI8i4W)M| zJtEiettKL0);L371!TCJNh93%i15b=1(E+1BIrvd82SMs=uX8|6Ae8$&)_n}*MXG# zN79gc?Ih#>T_D|GBn@}}WJ8|`B)x(N`M*>5ch!CF6yyFwAj7{#8vL144SgYy^!-GH zkE#2=)%~N>4BuQJ`MysC-?`I`JOB7N-7A&8U+K4q;Je`p!*>sme9sf%{*fz<`!pck z|4ZplEB$98_-?z(@GS$9@5e;AkNv2@M}f@OW2E8#w$lGn`tE$g*P?jo48wl~ko+5o zkT>XR<31cn_uG{&SGtu5zPxJ;-z*^cwh-Zd%1nbHAk*_8Y54C|`Zr2X4;sEND-OQa z@Sg)D|0jr$_j`5!hq~W-opFBwNcle}4gT@7jQbaXbpH-%xSw{tasRmDuYvS`hcx`> ze9ZW7Q#|_y<39#S|A&Z3$6plZ&o=(|0_p!M5&jeB829UdbpI9+?pZe)_ltmZ4-?^j zNZpUAd(lnC{YAym1t#28K!*D=5#iEqHnHfn zu4{Zw*EKevJ)-;PbzS2NXb(w$QP(v#>beHxp*Tej)GY`#2+mi$OR-q7RB;LMOPJRZ zzpU#TkQY+_Rf=mA>xo~{b&XBBuJKja8{NN#{+jr8%Yq6deq=!qNfq2g+^p*w-_U*Y zZ|eH$x3Isb{@WFIDDG5jAtKyv#l4EHifxMf6x)eg%znm@$Iy?H{x@*EOEhbq!#E?!b|XqZG#| z<|=7 zuHr<+DT-Gp<}1!roJD*N<*!(vI8SlD;$4cxilxNoF9yEhvBDF0(IB+(PgW?V%D*H~w7UIjO|B8Ewui*O^ zifzO_*bh@|C!&$qPy7+;zv2Pnk5T@LhlsCYUPwe^a)kI3lt1w`^Sy*2Keem?ngGsm zXA%cPf5ekb`^R}Xn+T5g*$#1>YQb)}4?L3iAyZ$uPsjSja~iB4JeNT`_XUtn;zfv$ zcroHb{M^r*NxW3gv5iLiN;(JOh~rHDxSz*$7w+SYBu>UUCvhs`BTh$rM2yXL5@#SB z@fyTO3?jaC;B|ay}2I_AikOt3kxC?xkXC&+WED~*iA;K@EV;}MhazCzqD@y&&}yYmi1+$rhX z3~_Hcl^TDqK|D-qbCP*U-o+!~t2`cg<{-bm!Qk;re7(WrDFIztmY7Tkm#h072af>H z+YTPzF7G{f{7t&;Hy}Kon(!39o_8EPVLfj6W?y|FeQBh!o!pBE`-M~@vR7t zXX3GB@pKzO5^pgC*P9XYnoeA*%P0OKMN;p?S1RHxi7!{g-Q9w6Oz9;klZ$)B($PD1LUlSV~Bc_dCeD32ydf=i}3GaLda^;oEva z5J%p3@a#@s4#uV!7CM(L@7r*3%NqlE0k|=JS@_xMdj-#Kd1a8d))u0E0P98k-125a zo}J%e@U!Lp3eRqN2N2oc;bvd9=wHCWEpH9v6~m3`%f`=^cNEWVdA~xXlJD2SotG`| z2%g>Y_CwwVxKZAj_}TJ!o{C{?J7`B_jiBv|e7xkn8DKsMT%rADEr9Y^F1EZeDi76N zu42pyIM%i=JAI?@;7;GV-+}{fly?q(w!B#$d7ID1*+N^034%M~@XC7wdnj z@=87OK5;Jg`jW^i_Q=~0d3O0?I^)RWxg-X+^ZN@##<{tD*^hO2aOZdE@8anTfZ0wT z&oMHLE$=ZzcDpSE?)D?ksk-HrLY|$z3tjTIf{$TrdA@*|)4@qDTizCry!DVb3LMnm zNc`;d@%)ur-m-vxLl8W?Y z0zUikZ1B0uW9IMU^4P}P@}_&_<)N|SnO*y`7jdWW z;e7qxqKdTTZScrD0C`)$!}LwW&rV;9N8YEdG4BSdI46Cwo&v{w^?2xymKDG=X4_Xgy>2Y>srgwg{or%UEA5Qy4?!GxXL{si+z5NNg}CGm^T^u| zc~ST?eF);n8|RTX1%t_l?aJbkH`XJs{O!2B0++lSJ@Q_~+8@6cVqbPrKjxA50p#rf z6Vo>rKX}VHJEZdLByGf+VHR|6U*zLe<&n2NW?2Ck1?A1d&z84Q<=OVK^$wiHpa8w> z^lk9S+xORadvz;#ZF&4A62sW?uDR2+yIy(U^T-?dZhU+&-zAUhrfzvL$UDVO6!`2% ze$UlyFS8*pAO6fQvgD-iZI8Tv+=XwD*+Rf)KmO4p?;%(E5X6!9Z;!mvd(1m$V3Es~ z_r6EocF1ErWBL%pk;ijj3}fr>J4N`W8Z)4mE$>wDx%2x01BCAn!ST`zC&oj~Bmt=H}a+g6}IHz8&B@#fXr* zEw9DHw;OzCB;kA0!`BWzOhKH>mdE!}-RV07K1|J=%jUbt!}kIBFlBHqn~&@8ly{OU z`a{nfo!N}^<5le8J39s68V}!xQ}At2zFZ^Tx&V9}kJuOEcjMA`f!JMlj##}X3F^R4EKH4 z&)#dVoD&@9-u>j9wb%N-^{#Jy>s#Mi>)Si$S#Q$)6k*V$P=a z*5sUR&24kG)_1ke>FU~;Xl-ujY)^Ei+fvP~$=QwD+v-s=yS}5NYj#Ix`{rars%uU| zduMV^v#g>S=WJriUt8qB%0eAliT8V-KEu%XlRGR!~IOvZ)izseHHGeZflr*cSn6^eQTm2+0v3|OSi^v)5VI}6o>T3dUBA|@D&yZV>Kh)+?JYm`^*`B zrP;Cp*6*5Wq+rhUI^6G#E$tiXTQ1r0pdDRdc3j=4Hq^atA=$QtT8I7JTi=xwiG<1| zHZUhurpuN3Wbu9L9$dP5<+9p`Y7#ZIYsJI0OP4)>jJipzUiv7yDw^AxQ;FoZj?US4 zrz>=mYG{|lTiYAcEy>w;H@9}Qccu~{foyw5bmf)aI@-HZFjRjc6K@&;AXryI zYe@n^WL54MDh#-i{ZYiuWGb*>l7MIHRjK8Y>YSzqMha2i*w`ufm1wL_)zeh{Od{C^ z->V1FP_3+_vpmt2+&KGgZD9U1hj0Or_N6Cfg>ONL)b@@fn_T(e%G!kYXwBM0?YbH- zv2xz+iDeHx_;79f>8Il#5aWKYHgW%|hwfdv3OdSC7Wb zSJiobN5&f;;>Mx7)?`~M-k!#%Dc)J%wlP_uW~kDu@d@0P(&R z`@ZTI)T|K34Pb)7-EfXbk9{czA<}JK=?*%GWMjO&BiUKcYInwyZ7ubk8_l|1A@qd^0zqoYo*k(5Hid3klf7%bE6Nbu4vSrjZzp^z@WJ%5| zWvFBD7f9CKo3NdDDYt|U%w|7gvlAOqTBROv*(|=iJ;Jmyq$w6)pl-se`S!fJXmFQYq{1o4aMsfIz#gSSACb~VBQ8#P48 z4O8J9MOwlc3a!*E!8hioEG)~`V9t)_n3ckSGD{Z7ZviOiaqqNrb>8X21JSH^MmBQBXejFqWV#0& z{Z7UFGz?0=*TLyZ{hpzI2Mkd*i9tJY+&e`<-hK{WIqzg|O(a`)(zm~X-l}NMJCUoI z%p`gc$>C=`VO3JP1XvRAg$#^HGO3`L5 z_D+@VdJ@44BjEmV1T4<2sLj=#%ASn$M@~Xnk=Ju8U>3!>ZQ=g_TaaItqfbwh6k zbwtgk8@a8?l;OLkHWp8S4|DeI!uX}@#uUOxjXKLL z|8hhcufGQR{)O`*E=4i(Vt@iuiJV`U7bTn*gE?CX%UAAB zS$-Z#q~#AKa_qgpGaP{<TY7`YyA;yL4(o!x;>f$ z{%E>;d|SDcjY~N@O5Xte4Rbul-+)ZTI+)itdaTf#0>-FHEEatSP%8ZINeAe>s<%Ja%HDw8BB-GczNRp8nJn z>CJ{M>y)-Q^nmG&8Xh@`@8%??369P@l0A9&e9>ZWI52=;*#=O{LDJLN-#cM$**kll zJFyQbyuGfnCL*>_oEO@zrR89U2g{iptSX#>60g9jvRhdWw>(A(YT|v-SdP1@jL4ae zR;sh!spH-NMHuSNd8ab{Xbk5x1VQKs&+f(`@_rKUYhYE(TrM-w93~%lYsxS-*`>wV zHE@xfj?#Ia9UEbYV3ojf@M?7w<5QIJPUCYHmNfv&I;AYDaIURuQTi$bl2SoRR#K9y zJIzx<8QVuXVs_lH8Z})0!9`AIxLgd%@NsX1gYq`xN^l=?TUgxt<#Rv|W&jSeJL86d zlcV>`Lk>d<8z9tH#D8^&=~7Iw%qHCF9g-P$lRBl6HK7UMjZ5mss#Gl)NAyy2;w`!e(ZI~yt8 zwg2C_c~^RVUJ4E6!>C52saaD&EV(HSpc6JeH!M2?gwmgpEgvg zOa~O2&ensO?qPvg6kLQDS|TTljMLGi*PyPC>rAN97E{kJ#VI`@b0y>(Waemrr`#8UxfRVAIkm#b+w0QzO}u3cCd>k z&c;Zv47czr2-^B`;8b>Ohqa7C8(FUhp^>b&Bl)M3(O=Apx&6nz7jcVuu~#K8Fv)cH z2(vXk2j90D2mUf`j6f-4Y$J`>Mwy5U@tN+ji?EojG7kxJXr-o--)eIa&?E~#t%0y%J>qbo+YK0F{eJcMx$(oEGwbKqYNuP z$}kboyJB6Ynl_!04jY_^w)9EENl%mtxFc8hLeASOH(gW%G`cpV1JwYgDymJvy4CY_ zjD*bLppg2wocXGv+Z1*Ns52E@o8?{ECHNse_@{&GPI)&OcPrGLKS~g-&mJKq9h8BZ z43}Z|i0zxNP^Ir5U@t5=FkjM_v)iRTKY?w?vMF>WPz;m|j9FQ)U){)i9Lf-wWs4Wn z{vhVS!V}fOT;1NBcaYn?*JW8{);l28d4Odna^8zsZ~t-cW!moBJWJ)g{d#wGzB_eY z=6v_FmuJpDovL~Jiy&ssKa*OXIsa_w&WvHLj;cNJm8d8k=Yee55Y(zN2jTzf4(7aL zGob}gGTuRWz5_)=N!gCBoc7nd+32#r-o+*a4sJgVj&dQ(tv;aFvIE6Ke!bi6dVE5r z9An0N84h+owD?{F6D4kH@g&ufbi;U&B#T?_C#hnCJxdgG#(progZt#-Jg@r>LiM z-f3FLDeBgAmi}Y0_j2j3Ps{$&X6TVidl+amgZ((}rG$-ALLRE%*Um89!kD|S+Ld<4 zAF?`rhD+v>rKwv{Mc&>NRQiNnsbx&1o6>*4cB+dpDqYx6@HWsP74&R?Rbyj~+E}4l z()i9uKSMYfcEC+p)_X;LLe#g z5?*@B&jfoQNBuWQlmd{VHKK5k!)TZw^<-*_;b z?4AK|;C{ksa$4aGIj~Z3**)hK&00N_^Q{UmDPxZGVX|CthWPOI(m*4UYs9Sn;W`Qk zPkQ=t>Cxo8JGeDUO_02yXk?KrQb*AYA{eDTeKaR zs>1AH%Z4KUDawi1;NZNc2)ik~BM|I0%cSbe##gFGZhEPm)D{>@(H59dF+3s8Bo(;J z^hf9x>(kR@Cdy1#nyNs2o0(SgSop3>)@!%xrOeiP!l8>7g~%H~#)jGNCMkd%4o#3FtY2NR-kAwihQYG3%{(@8 z!_}LczF~^a`x){ujDrQ{uRk-jJbW07w=TGS$4cgpnjA77lW57jLi14N_Kt^V`m zH4A@PgyZ#nJc}5nzMr108#ebdvUPX{g?Ae+&#eaj*~lA16TVNq>4RGer^vy@b)#MJ z9AXr8!;v?T+45lsiRdZBH)pbAW%i)jM_9>PX7z==$5XEqW-35NLKHkS@ZVAxl|ACS zKB2gn)lmw*?Mf+l83ilrx}MtGvnc;`MG!O4%%H3`7pOSUk&^|J3{Jr`O@yX(&FNS?#Yt~-}`H`4QF3P-vOa5~b z4DCn`QGy{UK^p2X!VY(hBhHW!$Fdt`pFF1Ev8D7R7Lo55Df^v83v|h(-Iu43Yvg@u z5?Wy7UQvL1h085x;`*cN<>%%kUb79qe=FZPbV|*egW$!>&GsAQU4n1+C-CBaIw@aQ z_20jx*_(O}oPK9ETU+EoP#rd7H4_Czh{~+YGFy{)-@)2*3M?_yXnC zZ{COM}?RDnk7B z%DM9^=T|Ngg3CRx$fwte$kWAx%V2<~-r||1c@{W4?G{gs=J}Mv6MZDmNlNpC`h&K# z+N9oJ&^&W(oYtUEa@nJ(%!Jt2qDPnhcW8ANKF1kFw4|vXMp4m=YNlUNA zMI;I_$(Efui$o0RkG)C6m@9&c(Ux(Jj>la-5vBv zzGMx&K79OksK0}O{?2He-7e1##ltZZh(+*va1y@EIH)mOHi=eXjoB>C`wlA@Ubgvm z&}NP13Hc)MY*s9CZl^TQ9vdh6ysx9Zn%-j5*^Zu2ag-m@Ja;)fY26Na&S;)h4o~zx z#U$rHLI}LBU^fZ|aKKs%d=&VQc@Ey_+ z&(477WzF-r%TpWhoX|YST%NvwXGHUS!R6Vdc-ZI32odlqq?0O5zky7qPmcvUsnztW zZTgykp3?M>*z~%9zV{OK4_>1FDNUDayOFO(;g_M!QBBv=L$ItE+hty+Oyz=aPDOJS ziFa_y46c~a4n`Nn9F&-uWIlbOY?E28fl;9c#iwgw{QM;GF@4W{L{v<|zhtV5I*y2E zbxtKQafMi^OBDYVVuQ|8=MnL=&Z#6Ot`vW$OSlJ#B5z+YQHuXhRhN>t)Fz|%9}+L= z63+W5^7a)I9~S+(;AW&zi<3%Jfkk+-jyxK<450`5Jc$lF&;NK5jIV!pOi zQ4E&+Z<@;eL{wR}#V;+{%1`s}c@q;iIeGRXxMFJe;1|TyF3QT^=HK%s25&J*8x+^^ zsPY~@PfW}aaZTqM9!1{1Vq&hCr|De3qsTMD%1hb9c9qfJF)>fnYdY8ODDw6d6L*L$ zn$ER5ihNe*IZ_evX`3DLFAzJq2IAuS9Yx;0Vq%f_hOW=GJBs}O)Oq@sh;MDGR!l4w z`!ycd@hI}Y)cn^-{%#u{?cXIvG@X7oioAWr#64o7#^ZV(MgF5YPoEGG&)Dq1TPo&h zI@k6n@(<|z6v@BC;a?^iHN6Ius95IEJ@JgDEBQQ!e!uu5P3IaP759tp>pXpKM102K zUnzc}>3yI?{n@S9V&VbuTTSO$A4PtGc1fHm5%F2YsJ~-kwYXl>l|RThbb5i{iitHr z26r*>u#>NI@}G3_>zw>!PJX?UPdNE{C*R=YlTLo4lW%tNPdfQlC*SVmY30EcQ@dcl zASTlOJ#S)StCM%+Vr+aDRrqdj7^mFIfg;N+ij^4(58>*T+r^E`)^V}00f(aWPd#rLf| z+xwZ5KjY*_oP0!Y6u2IiW4*b?+Bgu;oE3OJEf+V4We$C{&M%ksr-@At{TZFVMbd8) zU(8=XIz4uR`>h;@=$llnJPaOX1%p%-)`5l>Z)0H~Bgzzuw6= zI{EEReuvKUoKX({^EI7+2Mv@X@^R4N|ACYLsgplx=i&R#={)xz)@vj%(*LnK)a*+`KOXukc z%0<0+Pv?=9`YgSScX%-XpK{S4X6QW2sPDx(|G1-5tMZj+gq&xAu6#Azz6vf033D%WtX$qI(mo*ZpmQKMm+1c6Nnb?qS zQa=nKqmKwlHar;wU>lQm2-g3ZfZ$gVWRV-H&D+a`m6htB-@6iF)I3q$`~bHv@T0c* zqP_Vm-7yb8ppj>o7A~0U$8W>(%*)cKp6x6ltY`#)#lAkDG1bFMax{~~lfBdqJNNj0^HFhOX*T3&br$kp4H>09x3q86SvIw)Gg;r5=-N)@fkkq(;THt9B&`B7 zff|!tsm}K8B3#jw%DRRXKU>ox+Y=i$C0gZg{EVG;N%Jc~iiG|pJ3A6V)exdG6aBM7 zVXTIhWPK-WC@-<4y}nVg^DfzmCnBc62+NX0Q)hcC+=Kkl1^uAJs*sOts;AomNL@u2 z!51X-?;F9d7)3!NO`XXkeF~fo6N{+<1CmM#D7vAwBiv1EMuiFC*$TXdj_uNV=hrM;=gLt!-i!x8#7cI5QzfD5eOsGb>xnU%QEeX;?+pt2=QWQXya zJq4)sDR|aRiH3A%Cw?--h#4C5#^fbgXcl1z`P(mHL2M@VGaIn(E^Y2+7&So~Yj{-h zS+M3eLurknEDCi*^EReC@<=CtqXs|Fl}NQG)Z7b8FMntYMv)+o{E3?owolgcb}WZ% zKvU5MV8RVhJ*i}CM*_=dm?9U)ycE`HX@MtD>tjeF)+$7kbFIETB?Px7(JexhAiW%0 z4Q@S{zf$LyBb|gm)>@`u=4p~CPlZL>3h-|%%hA6@jP||VK1GLlwV=qNG>fOW?M?6MtigpOG0%;V1ks72$ zING`O7_%TfPI?9(=Aln)y#xJP?QjoUv{N8zpya7#{yDtbjWh}&f1}HXboo^gRemGV zqFq8%GTlA4e>duSm8^&U<(0!4XQ?N&EBj-W$5}sDpd1@&m;a;W$Hv&z%abg}fdHb4 zqAv>Z4V}7t^I2}`gVBsAlnPT7MPCx)L+tODg_z3}IG2+SeR3a9`(^Zm^&63Ld^<=- zeeV5Pe}MU0gp5g&&UYY4zlQ0}Li`z1(EE^*{<@~~AMHr5#CeDGl}JgiV;=RJn1asO z(`_ZIR+6ntpij@6X%yRUn1}X6#Cmrp<)MbATYx-N7 z{!g0zd#1DSJOOgE-@QzM^Ab|x{12qWIm#4#|3EtU=1|@w+SPL3tJ4()kD-KyICLoI>5ANtRH)Te60e}35Cm87V%-SvfZbdqMkcn>rft@AjHc|F?oMV zKJ;$@DeDij9Q}Kb=^`OMLOIb-{-{KBsSvL)ovG|1S^>X?c^91zJ7((PT^6K8|3!!& zGLKI1S^lIpyvM>6_%l}=ce9wmU%aIcQdZxg= zS*N#Y`W5Ia>DMv^{d%2FN6Pxun!ZYxKdjSrn*O||zo5(iM5q5v(=X_J@kI0&dbC;e$^=C81r%I=HB4z!bGetX- zU`XVhwmWuUklmzT9@9;*dZ25c8AA`WaI$ z`(^2=in#l+t{~-j(XX(7ZvS_%97=QR%l*)w2{E7amj$AxNMQ$V{h272c0)SwzoqjB zb>8JqX}Vk&^61;u!~g4i9PQITRWpTfjZCjl`!cSN=xS&k9b_JQFQH$;cyWE;JgjAk z&E7Vq9}{99Qz(u5rs(zBe_@b|qR7XEn9g(>)^Daa3em#!Cai}{r^C-Pg*~5U3ZuBd z6v~|yLyG+g|A~kG@M)%VG4GjT9Y4ktgEYt#{GF^)OBhzI_${9||zf+;q0Q(&9X^+GIUibaO8=V$`$GJOK=GOfouH%vD` zKTI2hIL{P|WC_MF+JQl;=-S?jkR{Sor%E@OyHs*pN>uQtK}E#|{Iq06XR@V&g%wsL zxuUaOari`enzUY1m9gcZu1ogAy$*{!_M1?!L(3OO&d1_LlpP)uJYZ8Ywp@TN57LM- z2V|B6@#dgBbdr`qxdJp3P7286RzW^>C=Vzh&>+B8fI*7pN7D*0vByEktpJl7nJd61 z<7ea0oakEtP91a$sEFaTcQOR8lDMOG_<$! z=h;O?TYD;5asPvLv#pInl8>e8Ta%(hLK6ghmh;Dc?h z{J4BeP;U5S>`3!rOD`h$V4Eth`*dm&(s)h7hxgci%c~IIEugZUOY!l%=(c;SL{?v> zT^tEy?4?@MW?}DMhI{sxGPA#IZz(>kgX4s}sL?tS^hG{iJm1;v{s=sqB}ILic2^<` zRf}p>ESB)hfP1#fa?>tCQX#xKAm+o{r0Z29<<(;0;aKM5eF68jd|v||jw$|SG_-BW525L;dRi$D@ESm{T%l;Uisxh+|CO6GV;BF zyp4Cl!lV5fymxVL7{_gZEq9+jwU!ybptB@XAra#%l)NOakf4;PLs2jd#Jq zA7Jo$9K1Ea!!g{yK$h1I2k&{{nR$5~I1Jt& zJ9wW3-ckbsK6A@oxU~Db4|q6M%l1SO8~OMg%Ens-fb4%UI*_q@V*1O zxlDf$9lTvv2_gSyPXijf?>cy|0IwQ6#G8YU!F$ue`*|sz zwV}*h2Jhz%-Z1bEfQfjVPX_ND2QO8w|Nl<|8oYmY@b=XR5eE+b!yk9tY)o|YY ze+qLMyuWeqjsefu-%< zcu5DZ1TkRaUsi(I;C^lYu|L z)bsJKn-I2_-vVzB=;ku=eFS{Ay(|Hqu|Ev8kGIgld*(LmwG9|jgIDF?tpc7I-#QB~ z;o$ur;BkJN%iulc;H9ko;?|dMmxFf;7V}jG45`7(ICy(4ymb~H-|1%^GvB&^hbiJ; z2Je7_cMy0+e~*D1!zJg(KRS4OfS0eo|KQ*q1D=_`>n*%82xiOoGvMX(2PNRM$M=kd zm$2~eaq!*)UK(_Bnf@+z@J4}W#9;4c+L12yx3)7{e2sF`RwnagZB#XjQu@n;qm!AWdOUpUI!jrs(%^z zW`fVQmp%)x72HO?Pda$#fQK!Ie;K@o9lR43Ub}_&hYsEa;9*JkFN3$$!8>E&J!Rqj ziGz1F1}&d_|JA`8w(zt1GTj}uifNyFZzReEbi{P{MV(@YfUmy6c z$%FTb!*>dNwq6Y0&m6u%@Y&;Q_dUmt j)U-)b|03A^6+%3ZdlQc>!#%6ocqi`@;xS7;gZF;{pWA(+ literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o new file mode 100644 index 0000000000000000000000000000000000000000..002edf3045a5cd5a2648a12290a833ef130e48c1 GIT binary patch literal 3936 zcmbVO-EUMy6hHd`Y|Dalfhv@bD?%s{Znjz)1Vx}N)ua&x8cfh!cel6Q4g2Npy`d#k z(G3aBLefVcOym#nfkzVK(_+v!B0l=y10*DEOf-!lO0u5ceC!U_78=jy-kEdGZ+>TH z?wL9J`S9q;P$)!NLKLC4Ms%xFdiq7vOFO7X_&2i-TsJ@O7IU6ea0{i%v~@A(Wvz0l zl(%~Kl=oYE{C(C$DwlW1?au$=Qu%x-lk!Rx1uh$4=1pgvf`BNB!#YSdRW0uIthDPE ztsDo>rSiE;uFXR*W}@P{D;+U5`|wO{Vbh~0&1Un9Mwkg|3$dmjZ~8G|tKHc!JG@w% zStM`k-5LU5(e>fQS)ts9Wqx~YAu7k*5Z3qg(A&(~tbhFEr-qCZ6^>P)sLjO4>#NPg z$$Pav7CSN)_g=Ys1$3AMTW05=)W_noBO~o>N1E$p_vzWjvt!9M)y1@Gk3)V!br<5T zNy=p**xb@nt&5pl{n_uSEyQokeHe&~k@E*7sP=cr-=ezM$Cxp}`L6mEV3~v+&3nAH z&xzM9;$7!4Ce8l~CD&Gu?rzk#?QYP>;NW4acP#A}J>NQL_uI(>1HRDuKIll^vI za-VcquO<5ik^{*%XcMN-61sGnLYHHqo_I8RjX$Qvwry~*Wbrz_K6W*HV%@5tS|t3* z4-JM1%rW>_@_3n;@it~0K9;xfGB6hRj9yLalm&ALv2IF)*3g!x{A)}%kB<>f z0Yr|ENkzRQ)Isvz(*BNsUtMl3{MvwD&rX^n^g_Vj70@>Zblj3{iHO_M)L&{V+>5kU zE6ovlG2l0MANVjGRS4u=g4WVGV?-j{O$9^8_Z2sRvO)hU;QvPH$eRRzo$n2QBD|UI zD;@cn;Qe@L_`&y&(#yi%MdGqkHuyV@B|zV)bQy0W?G5-v5fG)t&XBAzPN6jJ5^9Xo zDj*~ag)`w7GlT*ld#E5{u!Az;pg1`gNRBggXuzIyJ*S*;ysTfmV5g_Z85uow;`pd@ z>g35Y!)Kkd$4`t7JBZp28YM8BZr$v#4hMcUQrf|p8j>s4f%)jiLh^2i=fc`35f)v9>eW*)<82a;LX%#0R> zc3Rt&l4Pv7c^eVzWfR?gCZwIJOW|}PKJ61@=qa1XH#w1|Q+`<=A38fzDiquz?^3bk zx%S9=V+X2UDsw@GaPfaGRdC6ktd#sRZ}!T><$J`uosql96Py8yAJhvxLEM{c(>PA$ z77l%;Y*i@ah$-+vUgigVT?v=NaoUME&%^Cs0*85P(S4jr%-iJCK45hpXMH8O^a^pG zG7js-zgEZ)Ki`R-eCfC|tOBPiJpMRjB}Ba8gG}>-Dt(L}$gg}(asKh$P@Tbt`QPNn zjMv?=kmHzAu??sr4>0&g8pe@Zo;de5;vE@Tm{?JGby@ z(ev9C!2P)l?x@0HFCc$0Za{X$8+>?16i&PL>x5MXU?ArePEC)1!`igyxt?R3x!yP{ z`upO)qh2re(hN1kxV#R=KHWvDV{(@)Cb+@|E}OKKAMkD92Qf{)o1EB(H3|E4_g^zS BgX#bP literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d190f29bdb42630285002ede6cc42ac06cfd0074 GIT binary patch literal 11464 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 I25No(2i9BI2><{9 literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o new file mode 100644 index 0000000000000000000000000000000000000000..677489e8749cc2ecfa497bc5ac0abe5fef56f124 GIT binary patch literal 660 zcmah`Jx{|h5PhMAQnA3y5+;h&S`JDr!CI9rs9R^0gh&;T6k$h#1^y^IGrxeIW1ldQ zfRmozJ>Tg*?6>*#RTM>Fi_pWj0>)mXZNdmc>;a3}>@ps$@}@RTJQb;s6V)xq<6wF>0U?gc61*oD}A%B8c_g3zf>m6iOrMa zHG8IfHW0U&$slsAA&N~^l{MYf8&itKay8K=EAD^P|4STG(C$Vr)tY-dFNk>W6YujT zzvZ1$-ag^Kys@t*iLKdss`cDq`&vvryIbIn9nU=95ozveLmz~>b-Zz&umw$xG@3% literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o new file mode 100644 index 0000000000000000000000000000000000000000..818f1dfb156b0fd5a003c0fe81012748c9b241f2 GIT binary patch literal 4936 zcma)9U2Gd!6~6vS>vYpL8)ezQKxf%>NhLD*X&MT&+qCH~&wQ&10(8=#}E`Jt0 zl>2+(vr?&4M+RF9*egLuBrJ_XIQrp(-~93NWaGd8djB5>faX@lfUZoe?&^0Jec8ln zf6R!?Dyg}!Ih9N<?m>3Y+oC_*~q)u1tmFb4HZCIoPjjqoX6E6EP#4(&O`SQ_sY2 z7;VR+CzLZvS7&#RFm52 zPZ;gd>+@kC?cr1^)1FEvXN-uM>4+rLMn@(VP8-qox%gy9!br4-=Mb~QNMxw#vr`c@ z!dN<)G}~XLQ7LE6Dwi&Y^nreTcx3eQ`62!C`EmWqYj0@EE3fQlIiq~r=}n7!#VYpj z1-`ZFr4)wJ#%wDLPS?NeL(v@VK;&1oADb6S2)+oUyJ(+UnNI&7U7 z4`=O^vMpAzVc8-m=wKf=@|}467o@ti*iiB@cI}u|43x6)Yu)SjA^dD@!x@Hk&rj(? z7}&;%2f1}VvMsCVkI~3xSSgzqSpb%@TLf(g$ky`Ky+#bEJd~WaZ7psy(;4NZz1h2X z_Pib1$^{$Hp9@$X2phSep9}e1Bk>@?Ikz<&6yJ52e6a?Gvf*e#frtr)(+W$O_!K3+;X@!9X`^1-=k=9qh~ za5ZV$HcD=H5dyKPxVDi4lOLU_92KbL%H9^s!Ozd$9QXOzlqcS)o3j#a@30y*!Kg&Kw>x^iK=TFXYI4qIO>8&y7R zt-EZ?EndpDLiKMi(Rs-Eo_JO)ZOa3{uWOA*e{d1?3m@y_<~Ju+X^eYmI^x{T*WzYO zPbHIc%=Wjg+6`zet*dOXzyE7WTWAs&ZdN&^_Nblhy;-hx-R$aBJA2fw&J&J7>F(_6 z?d)aFE;r7cQC#dVAP0C)93t=z`NcHhwIFT@NjHr2nX>P!X9+& z3h=9B1dZd)EBC)>`Fug&!&O940572tMd>4Az{h))yD$at&&dXQOdr`Nzj~gsH3FuB zB*M@*5w_vVGR6x9xWHVOGQ-r%lD&*VKpI#po^6^)QtkY|xLO%94T70Bz*|-uOz)JLh!NYWEHx+J7lLTph7+%uUAyou_J7!%6`b5 z64iDS_U}1qicMa;3M+3Q9RF-88a55xjHQiCEIAitx*iT#-4}^yM$6gy5)^+t{ zcTYD{hq_MV)7?p*F8UDGeG)wuPWP(QhN-6_2$Y?lRl^HR9~>IFfTz^Rz`zx4OdmUc zVMx>2bR@1v=mDvV2PB~CJE%s$$pw~5$LGx{hWA{?Fq!^#LQiB(V}Ww4v8tMqVfWTKI%?_@6?F z690+IPx|1GblcaPi61D14kGXQDN1D9?RuI4~;ynk9^REZlt3G}OW2P&+C;GV83K z5!0vA;e^4|>2xxi!utQ8w17IK?Gn@jfocLrgg2@aYSn)9+b;Z2X56Qi-$lvqCCTqa z$VgrOMI3@G6WNHU56LKhPW$=c2=MXzFTYOsRp&kJgyvt7_sh`ej_BhkV|P&VbT(*R za2)u2Y5v1#a=hEn>9<3Wi1!Tua=iDXc!bm1QM_q1>VxZm(|h>R-64qlh%#t$-d{lB z?r#G~I)>Lb=Ah^Lgi&g4h*08Nf}M;af!c0@dS`^oX5 zh$p{>M7;mFeh1vdZ^KX6VB#@|KaXG(Px#%~$L~~?-_3peUU&VdUWvX7zg|b=U&=-8 z4cAYY?!r$d@*$dc{lxllKVgJj%xMOgynY{H{rX_1{e8jpqdKKKL!32;YzuzxNb!V7 iT;wFbyEr`W1Hex&k4brHpDCvtZ~PE`LPQYQg!o^n#P-wx literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o new file mode 100644 index 0000000000000000000000000000000000000000..188dba480c2483db16e57a95be232c342dcf146e GIT binary patch literal 2296 zcma)7OHWfl6h7@OTI3-XiAFTmMgtX1ugl+R*kk?G(Y_BOxXr z#<=hYxO3xzh3?o@V@zDTV&R5F4IB0(^_+WW=x}M(lT6R+>vzsP@6*x5n9t_}B|b2q z<^gOpxtW-wdY}tJPQDHOnYHbym7T!Py=t}EM1NY@30BLk)pBsH;sjSdb*$gp`&y|3 zJcxST2=>2xk6S@>)+z52uLmwyV0?J^X1Hf&wwxE`@O2hrk-m7@@uE+naTbZOXr$Lo zgs(-S@kl&!1K^}PeegZH1HR>;ue&u6SjD-9F@9F&dPxtq2cP?g+L}gI4D)jZQ7&dc zVy<{FT*IU!=5IW!5)<+8q$N)W#@|Z}maZ%Mz6M~os)G#h>n@%G!{Z-hH9#H=i8A1* z2jA@RTRc9UpqdzPyyl=~0L`c-2DH~4wCI#723ofe_H$7~g#2yLuld9_;qmWFpY|q% z{V#a(>(Y1mo8he||3Uh+Cn0EoFP=Q)tQ2Seg6@FG-*6uFG*wZ4bpVHSZOII%vsc;=<2kxgtaJurA%Q0n=O@q z6|F3zAlu&*eIpvB)uJ}a%av@DcGk}=TYsxr($3|qJhqy*g~i4vX8KCPOwPOgT4`K) zGiL#tE867(&iKFOHzILM_J!VW+Be(|=cdtZrqPXq-UVD{M{Y^2lzKBRV1R7(Dm22; zU7|Yw!qJ`a)}?!P3m-yNv;zFQM__ z5!>gp(boCs?A7aU-ouyD_^6KR@0Ew|Bl@%kN>qO@FrfFhtntwcs`%ca?er&~?QNMu z<%r^|phvc<^$YE|gK&Q+N8_8+ZWQ3WB9H;){*XBJwFqNkQ~e1w^+&RWL!ZYRO!Q!k z_N@blng^Xxbym=XO-$^PAw|_Ct!h$g3j@z^(D#|X48%vgR8!}>i_Uk9DN%fX001IV ARsaA1 literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o new file mode 100644 index 0000000000000000000000000000000000000000..8ce28d5606b8edd9f0ffe5d6643f141c4dbac419 GIT binary patch literal 2440 zcma)6O>7%g5FY;o9M>%-F+Wlxw4fG>RIlweHEn36I>|aja-Gz%rBo_f4wegbi^QYc9I<$_Yo-B4Vltgn{XTDi1b zTmp#Z*4C6#d3mKM<#Xt^I47Mo&r7Ps7hNN{uv}EGovlY9)zmv$YP;1(t%h!NQtejP z-cD7UOf^l-u;dyvT5XMC3=N`-TGif=THS_z>?Cs%RCfPda}L9QJsJ*&clU#ssIwCR z`%Pyj2KMB@p-Sv3F=r>i;VBLiLpwgSV?#SJa3s{M^5xF`IOlu)w;%no?*=~O3*1*C zyUIadiSH^8v~LnT(!5<#{;ZZohrjxT}v~%Y8(19XZB%fVPQ@> zSE=Gf*wQ6=R!%3gHb(Zzt0!0PaM^CvLS_CcI@x(<1qX) z^gD!rE_OsA?0Y|j#-fH`!f!@z?_qe_5JcdlCr=>{Ky=K19McOLQRry3s|x}3)rdk6 z8v&H)mA>j}sE$*3o-00&so)7%@nNdhCu3L}!&@GvnonUqJ7f0#82)Swf9c0mUjOrB zY_+76%ePp*Qe2>!z?gjT!llf}Y1DR%ZC}pH8=A#>HD)#K?v`BL2DVgKna>s2N2)4I%i`K+O~+VD=#z@~0M&$enfEr2o8QfphR*4*L_tgY9u-vP4* z2x76Q`q5|Iex1atPa!6r^Ei$-2;)Uljl4;h16~06iFfEmef+h_HNDf(x_F|lZfWvTv6AGq$7A7fv?gm9 zG?e8HL$`aF*#D#7&<(HWh-OiuyCWU-I?V+7PUA;&K)lwgDEmpwh?h}GvX}x-@_P+^ zXrKS`JMYC4Q-3t_pts zcx?oHhN7NG#Jh>IKi*pyZyj|MkK%}U9h7N}$RmaV%{M_Jk55s-_w^iKLN09NEB5`? zlhdR`dIkNmuE_u7N8b+~=SuvodvOI8@qYIFgqi&4EeR55*hhsw->)%Wd|o_Xdg~%z v%3s_qif|A8{vg34u`hA4Cz*alu!l;j%`^B>JnBQ*(;x3P8oo!JAQA6hl{kz@ literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o new file mode 100644 index 0000000000000000000000000000000000000000..4589d8879a3620f491cadad4749fa2764041364a GIT binary patch literal 2948 zcmb7GO>7%g5PtqiW5PCaO$d|(WYi#n)GiLBR-rv4X`OHgt<+>A6-c+Xv-xRaJF<6a zf(WHr1;sK5aYbB^xPU-#>@mW$Qg5i@h&UiXm6}74BEg}O`M$UN?2Xk37;ATCzM1{z z{mj1g^~~gWC=?P(LLwqso)DjPdXZtN2E|d)E8}ta%sYb1sQ!NML8H;=AW+N1X6rzv z+?}2PYQ(C>Zq0~SjXigxM>w4~kt^c2&$t_LVaIAl&uK$@ zyWic3HXQA$XgIsox@2^JhR)C*o9`BG{qol2)(!OHe<%^{(8 zE{f2*u~45Djc%bI`hoGHBzPO`j%|j=4tJctg$yB*fX)zyZ1JYz=iEs6{abY=4FJBv z7^K9T${G70;zq*@_0ij-WJ@9>IiP28HS@@2cw9-qUo!@|%$wq3&WxAC-u{s>2!<$y z*l)hAFyCz|w!f07__LvG>Ii;8i8Pr#G$J~JVPqd_^J8s(SDUZ3`Q2?kXV8*}d~<{T zV=V_(q`9LW9PxIqnX~_tV1BsC$bC*={C&-A_~E!13iuq&gzt0D5+Wupw#6^C`B!|O zJ&+JxVmS~`gpY_D0iXP;7YNh;mm5O?ve%Z2}a#5J(+Nrd@VA070afAk3hvP=d(5f58=zL34~XyA{Daybjd>m1oNd;tB9wi_Ifvr z&3FVu@51)7gXkaj{WqYaj|*{)x>v}K3qL8aGG6{M;zxye+1GDTKjrfvj~zzd=lu92 zHD31iI%(q1c<*``Z9W1&jP{hb&~ufF(970}PEc=cP5^5yeGv2(6bsi5%EfJgYJI%|57{H^`GGO)pPnxj z3RV#VE|zRdpEz%vsMy*3vRBtyH0R6Nf+h5Ya>-f6y#J%@B9Gr;CHz)%51zoqcai56 zul78iyDAUc+05g6%d z{J_uXsW@!Tm(OyptjF>28O1jPdkdEm#Ww;V$hQN&Brx)kNAdAI3iAB|Uw)6EDT>d4 z9puw6fI(p7Dii`ATT7_VX{aIOtNjhzynIt54AQh{~ zAXxh%E?oEsLKN{0d;z74ZiFlg@jIEhW{4F%aPRs1?m6?Fx%Z`+U)D5@lxU<=&m)q0 zkeTVKDY`_-Zhi><=F#_c|8)H1tkdbdYQ+%wVzwFQA0|jX@=uc;FVW5VpHluu4S_Y~ z9+_?buubyXIjHy=&UL)D!XBILek-Em~Pzyq})hEO-^^rDw&AFs8F!*UP-f zWQ8#!GRCbSk-lqWvPRaphff;k?}BL0o{;uDp-m*?@i!ovMr@K3kQ#6EqlwqCg^__J zUyqeOw*aFQ!a2@C;(_{OkIpPkKRZ!?PCT2Q=$LU-^uDS(4MfvG^R#=S(}kV`OQ+#J zKhfuF_-}zQ$1&8u5hs~E`tix24K z2%O&_&jIxD3c)j66VQDBm?q1EK>gm;-Moqj+v@iH4R;e5?(;945!Q?Ljq+1{Zv)3S zHiyOX4$pzlG7rA#%!B*ou=vbi_*~w@j=ncl?`eqR8Y~~MvRy0K7{|*Abr2=`p^Q+g zdVImy4%^ZR?6nZXN_~R|JIdo54x|uc9{d6o5B_Irb};D#xVLPCqWVUAa%v8N6c*p{ Vi&$Kb>vPX&y@#l`jhGTu?-!onyT1Sc literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6e11243b432fbd1d4d5df36e5bccf0bc89a5abf8 GIT binary patch literal 2324 zcma)7OKcle6utfgOy!hdewA9lNI?XJ4mM5AM_YC{Ve$ZlXU69y2so2qUGP#W*XMr7K0`@##^M_L(#1|$f&U6$0_kFNJ&MD?# z9li`sycUwOfY+FVJ;j&7X+=6yfVY{0K~@>DPa|JrQ8;Y4GTM^z*FgJh6ZkVNF;ouG zghZPtA|>QDla8-bWAUM}n7eIc3AO9Y_|8!PFCiS!$P#jR6u{fR!x_ir?ufzp&!B$~ z8DC`LlXB9Css7?vygC+tHWt4c#az1##_JmSOgt@b8!`3YH)9;BPokLXni0%Tsp@Rj zi(aMGZaDSUx>Y6u$8j4Qo;c3d(*mRugCJ6^F|bIR44Qz>rLQNCQPD}hSg?^M}k zu526w;tCwPE8OSFjL0L1XEEtHv`HKc#k()OPsn>A%AaTcevvoO#*h4)_h7`EB@a4T z^03{`u*EiGC*rq@e8d(-uCu)ZFRSxr!z-51dhM{SYR_}GJh9e_UQw)4rz2L|ty=^w zbBgz&dP??#;Vguo-g+(%%we^xa;wpBo9Ifj<+;}KOZIU!-(i1TEK|GKaK&10xBN|v z=zrUfU}B1gHV2RM&oh7}P^Xvoz&P(YV48;|9rBLC=l!5hHRs+meRn(zkiNbx4&pru z4(t3Ek9%jluDU;g({$a(;d9AP;i0{b!OfuMc-d!;mGzeJn0i+c^So-)dJ6zdy=_B} zI$G~F_@>?-Vs$U0rD?ra;G241K_Cl^{liHg>eb*YJ^sYPW)ZNKHm&y|0F(E`0ld#6 z9_NvE0=z=#sy8+Gd>OS0#A}0~VLJR482zYwQb)jVwduZo1Hc^b&q(O?(EEz>$UUm} q05$#w?-x3e>AGf3rjDQk*8$=>5dJc-E_GSc)cYF27r?Y>y?+1%xk6C@ literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c8f93993cf6fac80f13c542ef01bded828a8a55e GIT binary patch literal 17500 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 DX2rbw literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6319327f7bcc0ce433bfee5482072645b7281626 GIT binary patch literal 3336 zcma)8TWl0n7(RQctfiFgid+O_Nr<+_PIhHk!FZv-fDc7XVb#Qxal75J+itt0J3~NG zF&m7NvBvm7z!&h92YoRqVq#hsv}hk{B(b7VjF>dAAype8+GPFyGjnE7mp1x0Gym;7 z-}(PJm+k9n`%aI?!-RO4k5xU!!gt%57+1|~6l1>h2SZxbM{gRsOJC+R$*yt?J}Uv&Y9>B#d2UMQSRvVREHfO(HqVo&(729 z#uJuWK9#*PjdW7ibw>MUa~(vm-BEXUuNPKwG?o`Pz!{>g~2HHDIcjEj4JW6PCKnRL3lJrKygm zKj00hGtm(XvBdZtt()pqYE7MTKL)R&Z{mWbUiD0f^i?-)s@ICIUSq~0zIr#7Rg7yD zW1?a-RE*2+_uP%bm(bKs;rs(z{tYE-&4v=&wSD_z;pRk_F`ygaO-f9Ow8jnYMPG}? zl}Jp9Mq2Dd_>o979*IY`Fk&O|yxhS&M+2VK4SxSy*pFev)=&cS0KM881INAFmelPi z`u1Ne0maw`gtt--a)Mq0qrT}Y`n^`E?TfaHK!%aZP#)4sFM$JBTH<<}a*(t15*VB7 zw9NG}=f-<>KtnAn#=D4n+V<^PWey<3dv=4u>_*`Z?>SJ|s z8tA)f{6LLgU*k8__>DC_bx;)_zeQyKo~i@O=dP?B_OVb+UhbCgUbfgl(0YeZe~UCC zHVyea#*HqOXCY`*T$v`0d$-af$&Cgg2m6OK)|5Nluo zsRgR%PbW``{8`7ReG+1gtg!~q?_CE&c-EEC^lX1xNioeawF7A#u~eVdpUvg6g>))E z(9JaM@aDKese>s^&lm%JO7bw%cD3)>*4D1=*|~GCx=-8Jwyj;&Sm8(kV|wN?cIET> z9L7{Gk2%0d^Mk*jC*h|ueOga4o70d@<`6czvxmB~8>vvYFw`_(L0u?FZbGVG>lw`V zYtb!_MljG}bg>0}u!k4H=j0acTralI66kttvsKW3TpaW>M{(Mz6n}`~%NesMzJg%~ zK;Ku*(+>6D%h-C-EAJfNOmSQ~r)k_g<5kM9W$bwecZl>l#@;6#X6!>~8V8ekaU6G$ z#xcy1Uc}hDq)`-Iv0fDaBWWDNY0|X$mBNvJJ=q1V5865-EIoZ#XG(WcPco&eP+-bn zI;T)jalf3qBGRW`2zSQ@sPfgWZ8bAzCTS9BJ?8Jsz^fjlK}>L11W}|H4HaK6zfcLxqTWA4Y)A%vL8cjR80Y zyk8ni{nC6d;Gr>suNOA|eT60weEVR_d;#q7Fk7BL}$k7}0ro|gFN*G|;;C2X1RJ2=CF%*l~k!Xxu#z_%GO>X+^y z!S^$4&PV^6Lf(OUf literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/link.txt b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/link.txt new file mode 100644 index 000000000..f134ba8ed --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -fPIC -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic -m32 -shared -Wl,-soname,libiwasm.so -o libiwasm.so CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o -lm -ldl -lpthread diff --git a/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/progress.make b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/progress.make new file mode 100644 index 000000000..5baa4b4fe --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/libiwasm.dir/progress.make @@ -0,0 +1,26 @@ +CMAKE_PROGRESS_1 = 4 +CMAKE_PROGRESS_2 = 5 +CMAKE_PROGRESS_3 = 6 +CMAKE_PROGRESS_4 = 7 +CMAKE_PROGRESS_5 = 8 +CMAKE_PROGRESS_6 = 9 +CMAKE_PROGRESS_7 = 10 +CMAKE_PROGRESS_8 = 11 +CMAKE_PROGRESS_9 = 12 +CMAKE_PROGRESS_10 = 13 +CMAKE_PROGRESS_11 = 14 +CMAKE_PROGRESS_12 = 15 +CMAKE_PROGRESS_13 = 16 +CMAKE_PROGRESS_14 = 17 +CMAKE_PROGRESS_15 = 18 +CMAKE_PROGRESS_16 = 19 +CMAKE_PROGRESS_17 = 20 +CMAKE_PROGRESS_18 = 21 +CMAKE_PROGRESS_19 = 22 +CMAKE_PROGRESS_20 = 23 +CMAKE_PROGRESS_21 = 24 +CMAKE_PROGRESS_22 = 25 +CMAKE_PROGRESS_23 = 26 +CMAKE_PROGRESS_24 = 27 +CMAKE_PROGRESS_25 = 28 + diff --git a/core/iwasm/products/linux/b/CMakeFiles/progress.marks b/core/iwasm/products/linux/b/CMakeFiles/progress.marks new file mode 100644 index 000000000..59343b09e --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/progress.marks @@ -0,0 +1 @@ +53 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/ASM.includecache b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/ASM.includecache new file mode 100644 index 000000000..c28ead375 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/ASM.includecache @@ -0,0 +1,10 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/C.includecache b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/C.includecache new file mode 100644 index 000000000..a54d4cac6 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/C.includecache @@ -0,0 +1,512 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../../../../shared-lib/include/bh_log.h +stdarg.h +- +korp_types.h +../../../../shared-lib/include/korp_types.h + +../../../../shared-lib/include/bh_memory.h + +../../../../shared-lib/include/config.h + +../../../../shared-lib/include/korp_types.h +bh_platform.h +../../../../shared-lib/include/bh_platform.h + +../../../../shared-lib/include/mem_alloc.h +inttypes.h +- + +../../../runtime/include/lib-export.h + +../../../runtime/include/wasm-export.h +inttypes.h +- +stdbool.h +- + +../../../runtime/include/wasm_hashmap.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/include/wasm_log.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/include/wasm_vector.h +wasm_platform.h +../../../runtime/include/wasm_platform.h + +../../../runtime/platform/include/wasm_assert.h +bh_assert.h +../../../runtime/platform/include/bh_assert.h + +../../../runtime/platform/include/wasm_config.h +config.h +../../../runtime/platform/include/config.h + +../../../runtime/platform/include/wasm_memory.h +bh_memory.h +../../../runtime/platform/include/bh_memory.h + +../../../runtime/platform/include/wasm_platform_log.h + +../../../runtime/platform/include/wasm_thread.h +bh_thread.h +../../../runtime/platform/include/bh_thread.h + +../../../runtime/platform/include/wasm_types.h +wasm_config.h +../../../runtime/platform/include/wasm_config.h +wasm_platform.h +../../../runtime/platform/include/wasm_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c +stdio.h +- +stdlib.h +- +string.h +- +lib-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/lib-export.h +base-lib-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h +attr-container.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/attr-container.h +native_interface.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/native_interface.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm-native.h +wasm-export.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm-export.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm_log.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/wasm_platform_log.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-runtime.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_memory.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform_log.h +sys/ioctl.h +- +sys/uio.h +- +sys/syscall.h +- +sys/types.h +- +sys/stat.h +- +unistd.h +- +pwd.h +- +fcntl.h +- +errno.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_log.h +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_memory.h +sys/types.h +- +sys/stat.h +- +fcntl.h +- +unistd.h +- +dlfcn.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +wasm_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_config.h +wasm_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_types.h +inttypes.h +- +stdbool.h +- +stdarg.h +- +ctype.h +- +pthread.h +- +limits.h +- +semaphore.h +- +errno.h +- +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +stdio.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_thread.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_platform_log.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_thread.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.h +wasm_vector.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c +errno.h +- +stdlib.h +- +string.h +- +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm-interp.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_assert.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_platform_log.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c +wasm-interp.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm-opcode.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +wasm-loader.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c +wasm-loader.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +wasm-opcode.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_hashmap.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c +wasm-runtime.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm-loader.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +wasm-native.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +wasm-interp.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +wasm_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_log.h +wasm_platform_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_platform_log.h +wasm_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_memory.h +mem_alloc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/mem_alloc.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +wasm.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm-thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_hashmap.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_assert.h +wasm_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_thread.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +wasm_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_platform.h +wasm_hashmap.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_hashmap.h +wasm_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm_assert.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.h +mem_alloc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.h +stdio.h +- +stdlib.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c +ems_gc_internal.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +valgrind/memcheck.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +bh_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_thread.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_memory.h +bh_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/bh_assert.h +ems_gc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c +ems_gc_internal.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c +ems_gc_internal.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +valgrind/memcheck.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c +mem_alloc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.h +config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/config.h +ems/ems_gc.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +tlsf/tlsf.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/tlsf/tlsf.h +bh_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_thread.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/config.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_time.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_definition.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +bh_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +bh_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.h +stdarg.h +- +stdio.h +- +stdlib.h +- +setjmp.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c +bh_definition.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.h +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +stdlib.h +- +string.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +bh_config.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_config.h +bh_types.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_types.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_memory.h +inttypes.h +- +stdbool.h +- +assert.h +- +time.h +- +string.h +- +stdio.h +- +assert.h +- +stdarg.h +- +ctype.h +- +pthread.h +- +limits.h +- +semaphore.h +- +errno.h +- +sys/socket.h +- +netinet/in.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c +bh_platform.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +stdio.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c +bh_thread.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.h +bh_assert.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.h +bh_log.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_log.h +bh_memory.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_memory.h +stdio.h +- +stdlib.h +- +sys/time.h +- + +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c +bh_time.h +/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.h +unistd.h +- +stdio.h +- +sys/timeb.h +- +time.h +- + diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/DependInfo.cmake b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/DependInfo.cmake new file mode 100644 index 000000000..21b8a3c38 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/DependInfo.cmake @@ -0,0 +1,95 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "ASM" + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_ASM + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" + ) +set(CMAKE_ASM_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_ASM + "NVALGRIND" + "_POSIX_C_SOURCE=199309L" + "_XOPEN_SOURCE=600" + "__POSIX__" + ) + +# The include file search paths: +set(CMAKE_ASM_TARGET_INCLUDE_PATH + "../." + "../../../runtime/include" + "../../../runtime/platform/include" + "../../../../shared-lib/include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc" + ) +set(CMAKE_DEPENDS_CHECK_C + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c" "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "NVALGRIND" + "_POSIX_C_SOURCE=199309L" + "_XOPEN_SOURCE=600" + "__POSIX__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "../." + "../../../runtime/include" + "../../../runtime/platform/include" + "../../../../shared-lib/include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include" + "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/build.make b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/build.make new file mode 100644 index 000000000..51da8dca6 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/build.make @@ -0,0 +1,727 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b + +# Include any dependencies generated for this target. +include CMakeFiles/vmlib.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/vmlib.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/vmlib.dir/flags.make + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building ASM object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" + /usr/bin/cc $(ASM_DEFINES) $(ASM_INCLUDES) $(ASM_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: CMakeFiles/vmlib.dir/flags.make +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building C object CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o -c /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c > CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s" + /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c -o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires: + +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides.build +.PHONY : CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.provides.build: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + + +# Object files for target vmlib +vmlib_OBJECTS = \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" \ +"CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + +# External object files for target vmlib +vmlib_EXTERNAL_OBJECTS = + +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o +libvmlib.a: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o +libvmlib.a: CMakeFiles/vmlib.dir/build.make +libvmlib.a: CMakeFiles/vmlib.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Linking C static library libvmlib.a" + $(CMAKE_COMMAND) -P CMakeFiles/vmlib.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/vmlib.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/vmlib.dir/build: libvmlib.a + +.PHONY : CMakeFiles/vmlib.dir/build + +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o.requires +CMakeFiles/vmlib.dir/requires: CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o.requires + +.PHONY : CMakeFiles/vmlib.dir/requires + +CMakeFiles/vmlib.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/vmlib.dir/cmake_clean.cmake +.PHONY : CMakeFiles/vmlib.dir/clean + +CMakeFiles/vmlib.dir/depend: + cd /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/vmlib.dir/depend + diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean.cmake b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean.cmake new file mode 100644 index 000000000..d01663de8 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean.cmake @@ -0,0 +1,33 @@ +file(REMOVE_RECURSE + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o" + "CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o" + "libvmlib.pdb" + "libvmlib.a" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ASM C) + include(CMakeFiles/vmlib.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean_target.cmake b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean_target.cmake new file mode 100644 index 000000000..c810433eb --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libvmlib.a" +) diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.internal b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.internal new file mode 100644 index 000000000..c87d7dc19 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.internal @@ -0,0 +1,293 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + ../../../runtime/include/lib-export.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm-export.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + ../../../../shared-lib/include/config.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_log.h + ../../../runtime/include/wasm_vector.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../../shared-lib/include/mem_alloc.h + ../../../runtime/include/wasm_hashmap.h + ../../../runtime/include/wasm_log.h + ../../../runtime/platform/include/wasm_assert.h + ../../../runtime/platform/include/wasm_config.h + ../../../runtime/platform/include/wasm_memory.h + ../../../runtime/platform/include/wasm_platform_log.h + ../../../runtime/platform/include/wasm_thread.h + ../../../runtime/platform/include/wasm_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/mem_alloc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../../shared-lib/include/mem_alloc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + ../../../../shared-lib/include/bh_log.h + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + ../../../../shared-lib/include/korp_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + ../../../../shared-lib/include/bh_memory.h + ../../../../shared-lib/include/config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_time.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.make b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.make new file mode 100644 index 000000000..c0a218be0 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/depend.make @@ -0,0 +1,293 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: ../../../runtime/include/lib-export.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/include/wasm-export.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/include/wasm_vector.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../../shared-lib/include/mem_alloc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/include/wasm_hashmap.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/include/wasm_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_platform_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: ../../../runtime/platform/include/wasm_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-native.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: ../../../../shared-lib/include/mem_alloc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc_internal.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: ../../../../shared-lib/include/mem_alloc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_gc.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/bh_log.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: ../../../../shared-lib/include/korp_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_assert.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_thread.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c + +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: ../../../../shared-lib/include/bh_memory.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: ../../../../shared-lib/include/config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_config.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_definition.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_time.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include/bh_types.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.h +CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c + diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/flags.make b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/flags.make new file mode 100644 index 000000000..adc53bc5a --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/flags.make @@ -0,0 +1,17 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# compile ASM with /usr/bin/cc +# compile C with /usr/bin/cc +ASM_FLAGS = -m32 + +ASM_DEFINES = -DNVALGRIND -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600 -D__POSIX__ + +ASM_INCLUDES = -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/. -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/platform/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../../shared-lib/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc + +C_FLAGS = -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -Wno-pedantic -m32 + +C_DEFINES = -DNVALGRIND -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600 -D__POSIX__ + +C_INCLUDES = -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/. -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../runtime/platform/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/../../../shared-lib/include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/../include -I/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc + diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o new file mode 100644 index 0000000000000000000000000000000000000000..0c7c358703868a5237f336c660f3773ff2cebfe3 GIT binary patch literal 1176 zcma)6&rcIU6n@hdso_UNyy2mq#DtDpQ#RsBAXpEA(WFPR*=+~g*lwHdloSHOg#=%K;F-DI36aE4G1@gV!nJ|zbe#tlU-kbNm_oh4P!P>hwLI|=Dl&33?sFll3s_8aQ z(=o+3Y z&|JzSg_r$W}#1O|sMiUaYAc~nN(Zb6pa?QW5cb3;1CAy7Q&)6LE%}Zyh$jg4ZD9 z6bC%VB*?Fa>#^SlS>u6>8tA81w(uEq$Lv{@Xx|!U=N!g2kZt?I4`IIqE$lr`5OC)^ ygUHUuaXa4(Z2Q}BjdSFEXT!kub$jv=|1X?^Q{V*1^&Ws++pRZ(@GW8%w%#R84tf*- literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o new file mode 100644 index 0000000000000000000000000000000000000000..1ba7383a93e3d4e6627ed905971c4dafe1efb99a GIT binary patch literal 19960 zcmd5^4Rn;%nZEN)C?ky~T540JI#8&fF$P77fHeq%XaOS-wF(X)nUHAyI+@|el0tVt znGRTX*R#v+_J>;BdRp6hPTlIUZa4fWx=Xh?D{DC|ZPS{qNt5lSyE)afhhz46?)TpB zyWf`q!EN{KJ!j^<@6Ubi|9gMtCfgIsmqsEHWkN(nmCq@){}xv>N0XUqt@@Oz%l}($ zc;>OhKn%iTiD9aaB}QCsl-%Hx_$nj@as!b=eNLgSJb&o5-{gC9ePz27Z|>-RQ)NqY z-NP#TzFhY}B)b3@%oB<5WAbHlN*Y-w#F5gY5x z9WBo#Mk7ND3yG1vwPX3Zkp+p0?Nzz%$&u_OuHl2##&YOV$enDt$m2$yYa5850IF=) zU1MWou!&}`E+i@v(ZA_BX@f$dfA6vggfGBCz4g0XPj#_+-+-d9 z#@DcBn`h{HPkf$DHZZ4hXo_#>$hJ3j#oJPC9qFy{`i6#7SC^X6HAy8~TQ{{O zyE63+52aIGnT~WS-caA#nrfVCtGenp`SMizrmFf49qG)>87;Gv$E_yDotskWrq+(l zo~k|D+PXB`-jKZ4h*YvO-O`?EQpqka(r#j%*-RGm-Wn&g8o6@P20_K`jTj#1& zrdn;Z;%+N#=-OQ0nQWOoSDHrn8?IN$4K10j=9Z?++&Rm;SRS8W-P~%oq%^WEV&kf0 zs;#Rb-O`y!wd-1UZUx3hrQ6y44z#cG+f}VzvuN=r*W6j_Mv^NQ-K!SedgrP&%I)o2 z>$?C?P;`BA1G!B7hSrqGb=(y%`P9lqD{fy5sATP$RVss)SkjS&X>BI0Hnw(bsBcv( z>sPAV+nZY2TQa(t8(VZMH)5QzEgMtmwCkhh9ZS4|xqw-B+$Fsj(__aHC&&%Xj&f$c zqO!{{b<4h|7S70g#Eq5xpeHnc2H_R~^9m>Lv4p?~sEhUshaQhOOg%6o_jX;`qkl$W z$u4F$)`wC6L=FBOgt_iswe^x*_i=ba$hA-Sl969*;Z)}ny+c

C$0RDu|K$E=hYLXxn4?`@312 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

^}JTXU|6=12cgH!l~U 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 literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/ext-lib-export.c b/core/iwasm/products/linux/ext-lib-export.c new file mode 100644 index 000000000..f5e9c34c6 --- /dev/null +++ b/core/iwasm/products/linux/ext-lib-export.c @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "lib-export.h" + +static NativeSymbol extended_native_symbol_defs[] = { }; + +#include "ext-lib-export.h" diff --git a/core/iwasm/products/linux/main.c b/core/iwasm/products/linux/main.c new file mode 100644 index 000000000..039b0ad7c --- /dev/null +++ b/core/iwasm/products/linux/main.c @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include +#include +#include "wasm_assert.h" +#include "wasm_log.h" +#include "wasm_platform.h" +#include "wasm_platform_log.h" +#include "wasm_thread.h" +#include "wasm-export.h" +#include "wasm_memory.h" +#include "bh_memory.h" + +static int app_argc; +static char **app_argv; + +static int print_help() +{ + wasm_printf("Usage: iwasm [-options] wasm_file [args...]\n"); + wasm_printf("options:\n"); + wasm_printf(" -f|--function name Specify function name to run " + "in module rather than main\n"); +#if WASM_ENABLE_LOG != 0 + wasm_printf( + " -v=X Set log verbose level (0 to 2, default is 1), larger level with more log\n"); +#endif + wasm_printf( + " --repl Start a very simple REPL (read-eval-print-loop) mode \n" + " that runs commands in the form of `FUNC ARG...`\n"); + return 1; +} + +static void* +app_instance_main(wasm_module_inst_t module_inst) +{ + const char *exception; + + wasm_application_execute_main(module_inst, app_argc, app_argv); + if ((exception = wasm_runtime_get_exception(module_inst))) + wasm_printf("%s\n", exception); + return NULL; +} + +static void* +app_instance_func(wasm_module_inst_t module_inst, const char *func_name) +{ + const char *exception; + + wasm_application_execute_func(module_inst, func_name, app_argc - 1, + app_argv + 1); + if ((exception = wasm_runtime_get_exception(module_inst))) + wasm_printf("%s\n", exception); + return NULL; +} + +/** + * Split a space separated strings into an array of strings + * Returns NULL on failure + * Memory must be freed by caller + * Based on: http://stackoverflow.com/a/11198630/471795 + */ +static char ** +split_string(char *str, int *count) +{ + char **res = NULL; + char *p; + int idx = 0; + + /* split string and append tokens to 'res' */ + do { + p = strtok(str, " "); + str = NULL; + res = (char**) realloc(res, sizeof(char*) * (idx + 1)); + if (res == NULL) { + return NULL; + } + res[idx++] = p; + } while (p); + + if (count) { + *count = idx - 1; + } + return res; +} + +static void* +app_instance_repl(wasm_module_inst_t module_inst) +{ + char *cmd = NULL; + size_t len = 0; + ssize_t n; + + while ((wasm_printf("webassembly> "), n = getline(&cmd, &len, stdin)) != -1) { + wasm_assert(n > 0); + if (cmd[n - 1] == '\n') { + if (n == 1) + continue; + else + cmd[n - 1] = '\0'; + } + app_argv = split_string(cmd, &app_argc); + if (app_argv == NULL) { + LOG_ERROR("Wasm prepare param failed: split string failed.\n"); + break; + } + if (app_argc != 0) { + wasm_application_execute_func(module_inst, app_argv[0], + app_argc - 1, app_argv + 1); + } + free(app_argv); + } + free(cmd); + return NULL; +} + +static char global_heap_buf[512 * 1024] = { 0 }; + +int main(int argc, char *argv[]) +{ + char *wasm_file = NULL; + const char *func_name = NULL; + uint8 *wasm_file_buf = NULL; + int wasm_file_size; + wasm_module_t wasm_module = NULL; + wasm_module_inst_t wasm_module_inst = NULL; + char error_buf[128]; +#if WASM_ENABLE_LOG != 0 + int log_verbose_level = 1; +#endif + bool is_repl_mode = false; + + /* Process options. */ + for (argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++) { + if (!strcmp(argv[0], "-f") || !strcmp(argv[0], "--function")) { + argc--, argv++; + if (argc < 2) { + print_help(); + return 0; + } + func_name = argv[0]; + } +#if WASM_ENABLE_LOG != 0 + else if (!strncmp(argv[0], "-v=", 3)) { + log_verbose_level = atoi(argv[0] + 3); + if (log_verbose_level < 0 || log_verbose_level > 2) + return print_help(); + } +#endif + else if (!strcmp(argv[0], "--repl")) + is_repl_mode = true; + else + return print_help(); + } + + if (argc == 0) + return print_help(); + + wasm_file = argv[0]; + app_argc = argc; + app_argv = argv; + + if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)) + != 0) { + wasm_printf("Init global heap failed.\n"); + return -1; + } + + /* initialize runtime environment */ + if (!wasm_runtime_init()) + goto fail1; + + wasm_log_set_verbose_level(log_verbose_level); + + /* load WASM byte buffer from WASM bin file */ + if (!(wasm_file_buf = (uint8*) wasm_read_file_to_buffer(wasm_file, + &wasm_file_size))) + goto fail2; + + /* load WASM module */ + if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size, + error_buf, sizeof(error_buf)))) { + wasm_printf("%s\n", error_buf); + goto fail3; + } + + /* instantiate the module */ + if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, 8 * 1024, + 8 * 1024, error_buf, sizeof(error_buf)))) { + wasm_printf("%s\n", error_buf); + goto fail4; + } + + if (is_repl_mode) + app_instance_repl(wasm_module_inst); + else if (func_name) + app_instance_func(wasm_module_inst, func_name); + else + app_instance_main(wasm_module_inst); + + /* destroy the module instance */ + wasm_runtime_deinstantiate(wasm_module_inst); + + fail4: + /* unload the module */ + wasm_runtime_unload(wasm_module); + + fail3: + /* free the file buffer */ + wasm_free(wasm_file_buf); + + fail2: + /* destroy runtime environment */ + wasm_runtime_destroy(); + + fail1: bh_memory_destroy(); + + (void) func_name; + return 0; +} + diff --git a/core/iwasm/products/zephyr/simple/CMakeLists.txt b/core/iwasm/products/zephyr/simple/CMakeLists.txt new file mode 100644 index 000000000..2968d45d2 --- /dev/null +++ b/core/iwasm/products/zephyr/simple/CMakeLists.txt @@ -0,0 +1,57 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cmake_minimum_required(VERSION 3.8.2) + +include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE) +project(NONE) + +enable_language (ASM) + +add_definitions (-DNVALGRIND) + +set (IWASM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/iwasm) +set (SHARED_LIB_ROOT ${IWASM_ROOT}/../shared-lib) + +include_directories (${IWASM_ROOT}/runtime/include + ${IWASM_ROOT}/runtime/platform/include + ${IWASM_ROOT}/runtime/platform/zephyr + ${IWASM_ROOT}/runtime/vmcore_wasm + ${SHARED_LIB_ROOT}/include + ${SHARED_LIB_ROOT}/platform/include + ${SHARED_LIB_ROOT}/platform/zephyr) + +set (IWASM_SRCS ${IWASM_ROOT}/runtime/utils/wasm_hashmap.c + ${IWASM_ROOT}/runtime/utils/wasm_log.c + ${IWASM_ROOT}/runtime/utils/wasm_dlfcn.c + ${IWASM_ROOT}/runtime/platform/zephyr/wasm_math.c + ${IWASM_ROOT}/runtime/platform/zephyr/wasm_platform.c + ${IWASM_ROOT}/runtime/platform/zephyr/wasm-native.c + ${IWASM_ROOT}/runtime/vmcore_wasm/wasm-application.c + ${IWASM_ROOT}/runtime/vmcore_wasm/wasm-interp.c + ${IWASM_ROOT}/runtime/vmcore_wasm/wasm-loader.c + ${IWASM_ROOT}/runtime/vmcore_wasm/wasm-runtime.c + ${IWASM_ROOT}/runtime/vmcore_wasm/invokeNative_general.c + ${IWASM_ROOT}/lib/native/libc/libc_wrapper.c + ${IWASM_ROOT}/lib/native/base/base-lib-export.c + ${SHARED_LIB_ROOT}/platform/zephyr/bh_platform.c + ${SHARED_LIB_ROOT}/platform/zephyr/bh_assert.c + ${SHARED_LIB_ROOT}/platform/zephyr/bh_thread.c + ${SHARED_LIB_ROOT}/mem-alloc/bh_memory.c + ${SHARED_LIB_ROOT}/mem-alloc/mem_alloc.c + ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_kfc.c + ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_alloc.c + ${SHARED_LIB_ROOT}/mem-alloc/ems/ems_hmu.c) + +target_sources(app PRIVATE ${IWASM_SRCS} src/main.c src/ext-lib-export.c) diff --git a/core/iwasm/products/zephyr/simple/prj.conf b/core/iwasm/products/zephyr/simple/prj.conf new file mode 100644 index 000000000..e69de29bb diff --git a/core/iwasm/products/zephyr/simple/src/ext-lib-export.c b/core/iwasm/products/zephyr/simple/src/ext-lib-export.c new file mode 100644 index 000000000..f5e9c34c6 --- /dev/null +++ b/core/iwasm/products/zephyr/simple/src/ext-lib-export.c @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "lib-export.h" + +static NativeSymbol extended_native_symbol_defs[] = { }; + +#include "ext-lib-export.h" diff --git a/core/iwasm/products/zephyr/simple/src/main.c b/core/iwasm/products/zephyr/simple/src/main.c new file mode 100644 index 000000000..7dc8c7ba8 --- /dev/null +++ b/core/iwasm/products/zephyr/simple/src/main.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "wasm_assert.h" +#include "wasm_log.h" +#include "wasm_platform.h" +#include "wasm_platform_log.h" +#include "wasm_thread.h" +#include "wasm-export.h" +#include "wasm_memory.h" +#include "bh_memory.h" +#include "test_wasm.h" + +static int app_argc; +static char **app_argv; + +static void* +app_instance_main(wasm_module_inst_t module_inst) +{ + const char *exception; + + wasm_application_execute_main(module_inst, app_argc, app_argv); + if ((exception = wasm_runtime_get_exception(module_inst))) + wasm_printf("%s\n", exception); + return NULL; +} + +static char global_heap_buf[512 * 1024] = { 0 }; + +void iwasm_main(void *arg1, void *arg2, void *arg3) +{ + uint8 *wasm_file_buf = NULL; + int wasm_file_size; + wasm_module_t wasm_module = NULL; + wasm_module_inst_t wasm_module_inst = NULL; + char error_buf[128]; +#if WASM_ENABLE_LOG != 0 + int log_verbose_level = 1; +#endif + + (void) arg1; + (void) arg2; + (void) arg3; + + if (bh_memory_init_with_pool(global_heap_buf, sizeof(global_heap_buf)) + != 0) { + wasm_printf("Init global heap failed.\n"); + return; + } + + /* initialize runtime environment */ + if (!wasm_runtime_init()) + goto fail1; + +#if WASM_ENABLE_LOG != 0 + wasm_log_set_verbose_level(log_verbose_level); +#endif + + /* load WASM byte buffer from byte buffer of include file */ + wasm_file_buf = (uint8*) wasm_test_file; + wasm_file_size = sizeof(wasm_test_file); + + /* load WASM module */ + if (!(wasm_module = wasm_runtime_load(wasm_file_buf, wasm_file_size, + error_buf, sizeof(error_buf)))) { + wasm_printf("%s\n", error_buf); + goto fail2; + } + + /* instantiate the module */ + if (!(wasm_module_inst = wasm_runtime_instantiate(wasm_module, 8 * 1024, + 8 * 1024, error_buf, sizeof(error_buf)))) { + wasm_printf("%s\n", error_buf); + goto fail3; + } + + app_instance_main(wasm_module_inst); + + /* destroy the module instance */ + wasm_runtime_deinstantiate(wasm_module_inst); + + fail3: + /* unload the module */ + wasm_runtime_unload(wasm_module); + + fail2: + /* destroy runtime environment */ + wasm_runtime_destroy(); + + fail1: bh_memory_destroy(); +} + +#define DEFAULT_THREAD_STACKSIZE (6 * 1024) +#define DEFAULT_THREAD_PRIORITY 5 + +K_THREAD_STACK_DEFINE(iwasm_main_thread_stack, DEFAULT_THREAD_STACKSIZE); +static struct k_thread iwasm_main_thread; + +bool iwasm_init(void) +{ + k_tid_t tid = k_thread_create(&iwasm_main_thread, iwasm_main_thread_stack, + DEFAULT_THREAD_STACKSIZE, iwasm_main, NULL, NULL, NULL, + DEFAULT_THREAD_PRIORITY, 0, K_NO_WAIT); + return tid ? true : false; +} + +#ifndef CONFIG_AEE_ENABLE +void main(void) +{ + iwasm_init(); +} +#endif + diff --git a/core/iwasm/products/zephyr/simple/src/test_wasm.h b/core/iwasm/products/zephyr/simple/src/test_wasm.h new file mode 100644 index 000000000..aa9572b0c --- /dev/null +++ b/core/iwasm/products/zephyr/simple/src/test_wasm.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +unsigned char wasm_test_file[] = { 0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x0D, 0x06, 0x64, 0x79, 0x6C, 0x69, 0x6E, 0x6B, 0xC0, 0x80, + 0x04, 0x04, 0x00, 0x00, 0x01, 0x13, 0x04, 0x60, 0x01, 0x7F, 0x00, 0x60, + 0x01, 0x7F, 0x01, 0x7F, 0x60, 0x02, 0x7F, 0x7F, 0x01, 0x7F, 0x60, 0x00, + 0x00, 0x02, 0x58, 0x06, 0x03, 0x65, 0x6E, 0x76, 0x05, 0x5F, 0x66, 0x72, + 0x65, 0x65, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x07, 0x5F, 0x6D, 0x61, + 0x6C, 0x6C, 0x6F, 0x63, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76, 0x07, 0x5F, + 0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x00, 0x02, 0x03, 0x65, 0x6E, 0x76, + 0x05, 0x5F, 0x70, 0x75, 0x74, 0x73, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76, + 0x0D, 0x5F, 0x5F, 0x6D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x5F, 0x62, 0x61, + 0x73, 0x65, 0x03, 0x7F, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x6D, 0x65, + 0x6D, 0x6F, 0x72, 0x79, 0x02, 0x00, 0x01, 0x03, 0x04, 0x03, 0x02, 0x03, + 0x03, 0x06, 0x10, 0x03, 0x7F, 0x01, 0x41, 0x00, 0x0B, 0x7F, 0x01, 0x41, + 0x00, 0x0B, 0x7F, 0x00, 0x41, 0x1B, 0x0B, 0x07, 0x33, 0x04, 0x12, 0x5F, + 0x5F, 0x70, 0x6F, 0x73, 0x74, 0x5F, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, + 0x74, 0x69, 0x61, 0x74, 0x65, 0x00, 0x06, 0x05, 0x5F, 0x6D, 0x61, 0x69, + 0x6E, 0x00, 0x04, 0x0B, 0x72, 0x75, 0x6E, 0x50, 0x6F, 0x73, 0x74, 0x53, + 0x65, 0x74, 0x73, 0x00, 0x05, 0x04, 0x5F, 0x73, 0x74, 0x72, 0x03, 0x03, + 0x0A, 0xBA, 0x01, 0x03, 0x9E, 0x01, 0x01, 0x01, 0x7F, 0x23, 0x01, 0x21, + 0x00, 0x23, 0x01, 0x41, 0x10, 0x6A, 0x24, 0x01, 0x20, 0x00, 0x41, 0x08, + 0x6A, 0x21, 0x02, 0x23, 0x00, 0x41, 0x1B, 0x6A, 0x10, 0x03, 0x1A, 0x41, + 0x80, 0x08, 0x10, 0x01, 0x21, 0x01, 0x20, 0x01, 0x04, 0x7F, 0x20, 0x00, + 0x20, 0x01, 0x36, 0x02, 0x00, 0x23, 0x00, 0x20, 0x00, 0x10, 0x02, 0x1A, + 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x0D, 0x3A, 0x00, 0x00, 0x20, 0x01, + 0x23, 0x00, 0x2C, 0x00, 0x0E, 0x3A, 0x00, 0x01, 0x20, 0x01, 0x23, 0x00, + 0x2C, 0x00, 0x0F, 0x3A, 0x00, 0x02, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, + 0x10, 0x3A, 0x00, 0x03, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x11, 0x3A, + 0x00, 0x04, 0x20, 0x01, 0x23, 0x00, 0x2C, 0x00, 0x12, 0x3A, 0x00, 0x05, + 0x20, 0x02, 0x20, 0x01, 0x36, 0x02, 0x00, 0x23, 0x00, 0x41, 0x13, 0x6A, + 0x20, 0x02, 0x10, 0x02, 0x1A, 0x20, 0x01, 0x10, 0x00, 0x20, 0x00, 0x24, + 0x01, 0x41, 0x00, 0x05, 0x23, 0x00, 0x41, 0x28, 0x6A, 0x10, 0x03, 0x1A, + 0x20, 0x00, 0x24, 0x01, 0x41, 0x7F, 0x0B, 0x0B, 0x03, 0x00, 0x01, 0x0B, + 0x14, 0x00, 0x23, 0x00, 0x41, 0x40, 0x6B, 0x24, 0x01, 0x23, 0x01, 0x41, + 0x80, 0x80, 0x04, 0x6A, 0x24, 0x02, 0x10, 0x05, 0x0B, 0x0B, 0x3F, 0x01, + 0x00, 0x23, 0x00, 0x0B, 0x39, 0x62, 0x75, 0x66, 0x20, 0x70, 0x74, 0x72, + 0x3A, 0x20, 0x25, 0x70, 0x0A, 0x00, 0x31, 0x32, 0x33, 0x34, 0x0A, 0x00, + 0x62, 0x75, 0x66, 0x3A, 0x20, 0x25, 0x73, 0x00, 0x48, 0x65, 0x6C, 0x6C, + 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x00, 0x6D, 0x61, 0x6C, + 0x6C, 0x6F, 0x63, 0x20, 0x62, 0x75, 0x66, 0x20, 0x66, 0x61, 0x69, 0x6C, + 0x65, 0x64, 0x00, 0x50, 0x04, 0x6E, 0x61, 0x6D, 0x65, 0x01, 0x49, 0x07, + 0x00, 0x05, 0x5F, 0x66, 0x72, 0x65, 0x65, 0x01, 0x07, 0x5F, 0x6D, 0x61, + 0x6C, 0x6C, 0x6F, 0x63, 0x02, 0x07, 0x5F, 0x70, 0x72, 0x69, 0x6E, 0x74, + 0x66, 0x03, 0x05, 0x5F, 0x70, 0x75, 0x74, 0x73, 0x04, 0x05, 0x5F, 0x6D, + 0x61, 0x69, 0x6E, 0x05, 0x0B, 0x72, 0x75, 0x6E, 0x50, 0x6F, 0x73, 0x74, + 0x53, 0x65, 0x74, 0x73, 0x06, 0x12, 0x5F, 0x5F, 0x70, 0x6F, 0x73, 0x74, + 0x5F, 0x69, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x00, 0x20, 0x10, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x4D, 0x61, 0x70, + 0x70, 0x69, 0x6E, 0x67, 0x55, 0x52, 0x4C, 0x0E, 0x61, 0x2E, 0x6F, 0x75, + 0x74, 0x2E, 0x77, 0x61, 0x73, 0x6D, 0x2E, 0x6D, 0x61, 0x70 }; diff --git a/core/iwasm/runtime/include/ext-lib-export.h b/core/iwasm/runtime/include/ext-lib-export.h new file mode 100644 index 000000000..d2ae82fca --- /dev/null +++ b/core/iwasm/runtime/include/ext-lib-export.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _EXT_LIB_EXPORT_H_ +#define _EXT_LIB_EXPORT_H_ + +#include "lib-export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int +get_ext_lib_export_apis(NativeSymbol **p_ext_lib_apis) +{ + *p_ext_lib_apis = extended_native_symbol_defs; + return sizeof(extended_native_symbol_defs) / sizeof(NativeSymbol); +} + +#ifdef __cplusplus +} +#endif + +#endif /* end of _EXT_LIB_EXPORT_H_ */ + diff --git a/core/iwasm/runtime/include/lib-export.h b/core/iwasm/runtime/include/lib-export.h new file mode 100644 index 000000000..d6b335f2e --- /dev/null +++ b/core/iwasm/runtime/include/lib-export.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LIB_EXPORT_H_ +#define _LIB_EXPORT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct NativeSymbol { + const char *symbol; + void *func_ptr; +} NativeSymbol; + +#define EXPORT_WASM_API(symbol) {#symbol, symbol} +#define EXPORT_WASM_API2(symbol) {#symbol, symbol##_wrapper} + +/** + * Get the exported APIs of base lib + * + * @param p_base_lib_apis return the exported API array of base lib + * + * @return the number of the exported API + */ +int +get_base_lib_export_apis(NativeSymbol **p_base_lib_apis); + +/** + * Get the exported APIs of extend lib + * + * @param p_base_lib_apis return the exported API array of extend lib + * + * @return the number of the exported API + */ +int +get_extend_lib_export_apis(NativeSymbol **p_base_lib_apis); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/core/iwasm/runtime/include/wasm-export.h b/core/iwasm/runtime/include/wasm-export.h new file mode 100644 index 000000000..0492fcb44 --- /dev/null +++ b/core/iwasm/runtime/include/wasm-export.h @@ -0,0 +1,421 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_EXPORT_H +#define _WASM_EXPORT_H + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Uninstantiated WASM module loaded from WASM binary file */ +struct WASMModule; +typedef struct WASMModule *wasm_module_t; + +/* Instantiated WASM module */ +struct WASMModuleInstance; +typedef struct WASMModuleInstance *wasm_module_inst_t; + +/* Function instance */ +struct WASMFunctionInstance; +typedef struct WASMFunctionInstance *wasm_function_inst_t; + +/* WASM section */ +typedef struct wasm_section { + struct wasm_section *next; + /* section type */ + int section_type; + /* section body, not include type and size */ + uint8_t *section_body; + /* section body size */ + uint32_t section_body_size; +} wasm_section_t, *wasm_section_list_t; + +/* Execution environment, e.g. stack info */ +typedef struct WASMExecEnv { + uint8_t *stack; + uint32_t stack_size; +} *wasm_exec_env_t; + +/* Package Type */ +typedef enum { + Wasm_Module_Bytecode = 0, + Wasm_Module_AoT, + Package_Type_Unknown = 0xFFFF +} package_type_t; + +/** + * Initialize the WASM runtime environment. + * + * @return true if success, false otherwise + */ +bool +wasm_runtime_init(); + +/** + * Destroy the WASM runtime environment. + */ +void +wasm_runtime_destroy(); + +/** + * Get the package type of a buffer. + * + * @param buf the package buffer + * @param size the package buffer size + * + * @return the package type, return Package_Type_Unknown if the type is unknown + */ +package_type_t +get_package_type(const uint8_t *buf, uint32_t size); + +/** + * Load a WASM module from a specified byte buffer. + * + * @param buf the byte buffer which contains the WASM binary data + * @param size the size of the buffer + * @param error_buf output of the exception info + * @param error_buf_size the size of the exception string + * + * @return return WASM module loaded, NULL if failed + */ +wasm_module_t +wasm_runtime_load(const uint8_t *buf, uint32_t size, + char *error_buf, uint32_t error_buf_size); + +/** + * Load a WASM module from a specified WASM section list. + * + * @param section_list the section list which contains each section data + * @param error_buf output of the exception info + * @param error_buf_size the size of the exception string + * + * @return return WASM module loaded, NULL if failed + */ +wasm_module_t +wasm_runtime_load_from_sections(wasm_section_list_t section_list, + char *error_buf, uint32_t error_buf_size); + +/** + * Unload a WASM module. + * + * @param module the module to be unloaded + */ +void +wasm_runtime_unload(wasm_module_t module); + +/** + * Instantiate a WASM module. + * + * @param module the WASM module to instantiate + * @param stack_size the default stack size of the module instance, a stack + * will be created when function wasm_runtime_call_wasm() is called + * to run WASM function and the exec_env argument passed to + * wasm_runtime_call_wasm() is NULL. That means this parameter is + * ignored if exec_env is not NULL. + * @param heap_size the default heap size of the module instance, a heap will + * be created besides the app memory space. Both wasm app and native + * function can allocate memory from the heap. If heap_size is 0, the + * default heap size will be used. + * @param error_buf buffer to output the error info if failed + * @param error_buf_size the size of the error buffer + * + * @return return the instantiated WASM module instance, NULL if failed + */ +wasm_module_inst_t +wasm_runtime_instantiate(const wasm_module_t module, + uint32_t stack_size, uint32_t heap_size, + char *error_buf, uint32_t error_buf_size); + +/** + * Deinstantiate a WASM module instance, destroy the resources. + * + * @param module_inst the WASM module instance to destroy + */ +void +wasm_runtime_deinstantiate(wasm_module_inst_t module_inst); + +/** + * Load WASM module instance from AOT file. + * + * @param aot_file the AOT file of a WASM module + * @param aot_file_size the AOT file size + * @param heap_size the default heap size of the module instance, a heap will + * be created besides the app memory space. Both wasm app and native + * function can allocate memory from the heap. If heap_size is 0, the + * default heap size will be used. + * @param error_buf buffer to output the error info if failed + * @param error_buf_size the size of the error buffer + * + * @return the instantiated WASM module instance, NULL if failed + */ +wasm_module_inst_t +wasm_runtime_load_aot(uint8_t *aot_file, uint32_t aot_file_size, + uint32_t heap_size, + char *error_buf, uint32_t error_buf_size); + +/** + * Lookup an exported function in the WASM module instance. + * + * @param module_inst the module instance + * @param name the name of the function + * @param signature the signature of the function, use "i32"/"i64"/"f32"/"f64" + * to represent the type of i32/i64/f32/f64, e.g. "(i32i64)" "(i32)f32" + * + * @return the function instance found, if the module instance is loaded from + * the AOT file, the return value is the function pointer + */ +wasm_function_inst_t +wasm_runtime_lookup_function(const wasm_module_inst_t module_inst, + const char *name, const char *signature); + +/** + * Create execution environment. + * + * @param stack_size the stack size to execute a WASM function + * + * @return the execution environment + */ +wasm_exec_env_t +wasm_runtime_create_exec_env(uint32_t stack_size); + +/** + * Destroy the execution environment. + * + * @param env the execution environment to destroy + */ +void +wasm_runtime_destory_exec_env(wasm_exec_env_t env); + +/** + * Call the given WASM function of a WASM module instance with + * arguments (bytecode and AoT). + * + * @param module_inst the WASM module instance which the function belongs to + * @param exec_env the execution environment to call the function. If the module + * instance is created by AoT mode, it is ignored and just set it to NULL. + * If the module instance is created by bytecode mode and it is NULL, + * a temporary env object will be created + * @param function the function to be called + * @param argc the number of arguments + * @param argv the arguments. If the function method has return value, + * the first (or first two in case 64-bit return value) element of + * argv stores the return value of the called WASM function after this + * function returns. + * + * @return true if success, false otherwise and exception will be thrown, + * the caller can call wasm_runtime_get_exception to get exception info. + */ +bool +wasm_runtime_call_wasm(wasm_module_inst_t module_inst, + wasm_exec_env_t exec_env, + wasm_function_inst_t function, + uint32_t argc, uint32_t argv[]); + +/** + * Get exception info of the WASM module instance. + * + * @param module_inst the WASM module instance + * + * @return the exception string + */ +const char* +wasm_runtime_get_exception(wasm_module_inst_t module_inst); + +/** + * Clear exception info of the WASM module instance. + * + * @param module_inst the WASM module instance + */ +void +wasm_runtime_clear_exception(wasm_module_inst_t module_inst); + +/** + * Attach the current native thread to a WASM module instance. + * A native thread cannot be attached simultaneously to two WASM module + * instances. The WASM module instance will be attached to the native + * thread which it is instantiated in by default. + * + * @param module_inst the WASM module instance to attach + * @param thread_data the thread data that current native thread requires + * the WASM module instance to store + * + * @return true if SUCCESS, false otherwise + */ +bool +wasm_runtime_attach_current_thread(wasm_module_inst_t module_inst, + void *thread_data); + +/** + * Detach the current native thread from a WASM module instance. + * + * @param module_inst the WASM module instance to detach + */ +void +wasm_runtime_detach_current_thread(wasm_module_inst_t module_inst); + +/** + * Get the thread data that the current native thread requires the WASM + * module instance to store when attaching. + * + * @return the thread data stored when attaching + */ +void* +wasm_runtime_get_current_thread_data(); + +/** + * Get current WASM module instance of the current native thread + * + * @return current WASM module instance of the current native thread, NULL + * if not found + */ +wasm_module_inst_t +wasm_runtime_get_current_module_inst(); + +/** + * Allocate memory from the heap of WASM module instance + * + * @param module_inst the WASM module instance which contains heap + * @param size the size bytes to allocate + * + * @return the allocated memory address, which is a relative offset to the + * base address of the module instance's memory space, the value range + * is (-heap_size, 0). Note that it is not an absolute address. + * Return non-zero if success, zero if failed. + */ +int32_t +wasm_runtime_module_malloc(wasm_module_inst_t module_inst, uint32_t size); + +/** + * Free memory to the heap of WASM module instance + * + * @param module_inst the WASM module instance which contains heap + * @param ptr the pointer to free + */ +void +wasm_runtime_module_free(wasm_module_inst_t module_inst, int32_t ptr); + +/** + * Allocate memory from the heap of WASM module instance and initialize + * the memory with src + * + * @param module_inst the WASM module instance which contains heap + * @param src the source data to copy + * @param size the size of the source data + * + * @return the allocated memory address, which is a relative offset to the + * base address of the module instance's memory space, the value range + * is (-heap_size, 0). Note that it is not an absolute address. + * Return non-zero if success, zero if failed. + */ +int32_t +wasm_runtime_module_dup_data(wasm_module_inst_t module_inst, + const char *src, uint32_t size); + +/** + * Validate the app address, check whether it belongs to WASM module + * instance's address space, or in its heap space or memory space. + * + * @param module_inst the WASM module instance + * @param app_offset the app address to validate, which is a relative address + * @param size the size bytes of the app address + * + * @return true if success, false otherwise. If failed, an exception will + * be thrown. + */ +bool +wasm_runtime_validate_app_addr(wasm_module_inst_t module_inst, + int32_t app_offset, uint32_t size); + +/** + * Validate the native address, check whether it belongs to WASM module + * instance's address space, or in its heap space or memory space. + * + * @param module_inst the WASM module instance + * @param native_ptr the native address to validate, which is an absolute + * address + * @param size the size bytes of the app address + * + * @return true if success, false otherwise. If failed, an exception will + * be thrown. + */ +bool +wasm_runtime_validate_native_addr(wasm_module_inst_t module_inst, + void *native_ptr, uint32_t size); + +/** + * Convert app address(relative address) to native address(absolute address) + * + * @param module_inst the WASM module instance + * @param app_offset the app adress + * + * @return the native address converted + */ +void * +wasm_runtime_addr_app_to_native(wasm_module_inst_t module_inst, + int32_t app_offset); + +/** + * Convert native address(absolute address) to app address(relative address) + * + * @param module_inst the WASM module instance + * @param native_ptr the native address + * + * @return the app address converted + */ +int32_t +wasm_runtime_addr_native_to_app(wasm_module_inst_t module_inst, + void *native_ptr); + +/** + * Find the unique main function from a WASM module instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the main function is called, false otherwise. + */ +bool +wasm_application_execute_main(wasm_module_inst_t module_inst, + int argc, char *argv[]); + +/** + * Find the specified function in argv[0] from WASM module of current instance + * and execute that function. + * + * @param module_inst the WASM module instance + * @param name the name of the function to execute + * @param argc the number of arguments + * @param argv the arguments array + * + * @return true if the specified function is called, false otherwise. + */ +bool +wasm_application_execute_func(wasm_module_inst_t module_inst, + const char *name, int argc, char *argv[]); + + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_EXPORT_H */ diff --git a/core/iwasm/runtime/include/wasm_hashmap.h b/core/iwasm/runtime/include/wasm_hashmap.h new file mode 100644 index 000000000..c9f719122 --- /dev/null +++ b/core/iwasm/runtime/include/wasm_hashmap.h @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef WASM_HASHMAP_H +#define WASM_HASHMAP_H + +#include "wasm_platform.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Maximum initial size of hash map */ +#define HASH_MAP_MAX_SIZE 65536 + +struct HashMap; +typedef struct HashMap HashMap; + +/* Hash function: to get the hash value of key. */ +typedef uint32 (*HashFunc)(const void *key); + +/* Key equal function: to check whether two keys are equal. */ +typedef bool (*KeyEqualFunc)(void *key1, void *key2); + +/* Key destroy function: to destroy the key, auto called + when an hash element is removed. */ +typedef void (*KeyDestroyFunc)(void *key); + +/* Value destroy function: to destroy the value, auto called + when an hash element is removed. */ +typedef void (*ValueDestroyFunc)(void *key); + +/** + * Create a hash map. + * + * @param size: the initial size of the hash map + * @param use_lock whether to lock the hash map when operating on it + * @param hash_func hash function of the key, must be specified + * @param key_equal_func key equal function, check whether two keys + * are equal, must be specified + * @param key_destroy_func key destroy function, called when an hash element + * is removed if it is not NULL + * @param value_destroy_func value destroy function, called when an hash + * element is removed if it is not NULL + * + * @return the hash map created, NULL if failed + */ +HashMap* +wasm_hash_map_create(uint32 size, bool use_lock, + HashFunc hash_func, + KeyEqualFunc key_equal_func, + KeyDestroyFunc key_destroy_func, + ValueDestroyFunc value_destroy_func); + +/** + * Insert an element to the hash map + * + * @param map the hash map to insert element + * @key the key of the element + * @value the value of the element + * + * @return true if success, false otherwise + * Note: fail if key is NULL or duplicated key exists in the hash map, + */ +bool +wasm_hash_map_insert(HashMap *map, void *key, void *value); + +/** + * Find an element in the hash map + * + * @param map the hash map to find element + * @key the key of the element + * + * @return the value of the found element if success, NULL otherwise + */ +void* +wasm_hash_map_find(HashMap *map, void *key); + +/** + * Update an element in the hash map with new value + * + * @param map the hash map to update element + * @key the key of the element + * @value the new value of the element + * @p_old_value if not NULL, copies the old value to it + * + * @return true if success, false otherwise + * Note: the old value won't be destroyed by value destory function, + * it will be copied to p_old_value for user to process. + */ +bool +wasm_hash_map_update(HashMap *map, void *key, void *value, + void **p_old_value); + +/** + * Remove an element from the hash map + * + * @param map the hash map to remove element + * @key the key of the element + * @p_old_key if not NULL, copies the old key to it + * @p_old_value if not NULL, copies the old value to it + * + * @return true if success, false otherwise + * Note: the old key and old value won't be destroyed by key destroy + * function and value destroy function, they will be copied to + * p_old_key and p_old_value for user to process. + */ +bool +wasm_hash_map_remove(HashMap *map, void *key, + void **p_old_key, void **p_old_value); + +/** + * Destroy the hashmap + * + * @param map the hash map to destroy + * + * @return true if success, false otherwise + * Note: the key destroy function and value destroy function will be + * called to destroy each element's key and value if they are + * not NULL. + */ +bool +wasm_hash_map_destroy(HashMap *map); + +#ifdef __cplusplus +} +#endif + +#endif /* endof WASM_HASHMAP_H */ + diff --git a/core/iwasm/runtime/include/wasm_log.h b/core/iwasm/runtime/include/wasm_log.h new file mode 100644 index 000000000..112db2f14 --- /dev/null +++ b/core/iwasm/runtime/include/wasm_log.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @brief This log system supports wrapping multiple outputs into one + * log message. This is useful for outputting variable-length logs + * without additional memory overhead (the buffer for concatenating + * the message), e.g. exception stack trace, which cannot be printed + * by a single log calling without the help of an additional buffer. + * Avoiding additional memory buffer is useful for resource-constraint + * systems. It can minimize the impact of log system on applications + * and logs can be printed even when no enough memory is available. + * Functions with prefix "_" are private functions. Only macros that + * are not start with "_" are exposed and can be used. + */ + +#ifndef _WASM_LOG_H +#define _WASM_LOG_H + +#include "wasm_platform.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * The following functions are the primitive operations of this log system. + * A normal usage of the log system is to call wasm_log_begin and then call + * wasm_log_printf or wasm_log_vprintf one or multiple times and then call + * wasm_log_end to wrap (mark) the previous outputs into one log message. + * The wasm_log and macros LOG_ERROR etc. can be used to output log messages + * by one log calling. + */ +int _wasm_log_init (void); +void _wasm_log_set_verbose_level (int level); +bool _wasm_log_begin (int level); +void _wasm_log_printf (const char *fmt, ...); +void _wasm_log_vprintf (const char *fmt, va_list ap); +void _wasm_log_end (void); +void _wasm_log (int level, const char *file, int line, + const char *fmt, ...); + +#if WASM_ENABLE_LOG != 0 +# define wasm_log_init() _wasm_log_init () +# define wasm_log_set_verbose_level(l) _wasm_log_set_verbose_level (l) +# define wasm_log_begin(l) _wasm_log_begin (l) +# define wasm_log_printf(...) _wasm_log_printf (__VA_ARGS__) +# define wasm_log_vprintf(...) _wasm_log_vprintf (__VA_ARGS__) +# define wasm_log_end() _wasm_log_end () +# define wasm_log(...) _wasm_log (__VA_ARGS__) +#else /* WASM_ENABLE_LOG != 0 */ +# define wasm_log_init() 0 +# define wasm_log_set_verbose_level(l) (void)0 +# define wasm_log_begin() false +# define wasm_log_printf(...) (void)0 +# define wasm_log_vprintf(...) (void)0 +# define wasm_log_end() (void)0 +# define wasm_log(...) (void)0 +#endif /* WASM_ENABLE_LOG != 0 */ + +#define LOG_ERROR(...) wasm_log (0, NULL, 0, __VA_ARGS__) +#define LOG_WARNING(...) wasm_log (1, NULL, 0, __VA_ARGS__) +#define LOG_VERBOSE(...) wasm_log (2, NULL, 0, __VA_ARGS__) + +#if defined(WASM_DEBUG) +# define LOG_DEBUG(...) _wasm_log (1, __FILE__, __LINE__, __VA_ARGS__) +#else /* defined(WASM_DEBUG) */ +# define LOG_DEBUG(...) (void)0 +#endif /* defined(WASM_DEBUG) */ + +#define LOG_PROFILE_HEAP_GC(heap, size) \ + LOG_VERBOSE("PROF.HEAP.GC: HEAP=%08X SIZE=%d", heap, size) + +#ifdef __cplusplus +} +#endif + + +#endif /* _WASM_LOG_H */ diff --git a/core/iwasm/runtime/include/wasm_vector.h b/core/iwasm/runtime/include/wasm_vector.h new file mode 100644 index 000000000..4723ff687 --- /dev/null +++ b/core/iwasm/runtime/include/wasm_vector.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_VECTOR_H +#define _WASM_VECTOR_H + +#include "wasm_platform.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +#define DEFAULT_VECTOR_INIT_SIZE 8 + +typedef struct Vector { + /* size of each element */ + uint32 size_elem; + /* max element number */ + uint32 max_elements; + /* current element num */ + uint32 num_elements; + /* vector data allocated */ + uint8 *data; +} Vector; + +/** + * Initialize vector + * + * @param vector the vector to init + * @param init_length the initial length of the vector + * @param size_elem size of each element + * + * @return true if success, false otherwise + */ +bool +wasm_vector_init(Vector *vector, uint32 init_length, uint32 size_elem); + +/** + * Set element of vector + * + * @param vector the vector to set + * @param index the index of the element to set + * @param elem_buf the element buffer which stores the element data + * + * @return true if success, false otherwise + */ +bool +wasm_vector_set(Vector *vector, uint32 index, const void *elem_buf); + +/** + * Get element of vector + * + * @param vector the vector to get + * @param index the index of the element to get + * @param elem_buf the element buffer to store the element data, + * whose length must be no less than element size + * + * @return true if success, false otherwise + */ +bool +wasm_vector_get(const Vector *vector, uint32 index, void *elem_buf); + +/** + * Insert element of vector + * + * @param vector the vector to insert + * @param index the index of the element to insert + * @param elem_buf the element buffer which stores the element data + * + * @return true if success, false otherwise + */ +bool +wasm_vector_insert(Vector *vector, uint32 index, const void *elem_buf); + +/** + * Append element to the end of vector + * + * @param vector the vector to append + * @param elem_buf the element buffer which stores the element data + * + * @return true if success, false otherwise + */ +bool +wasm_vector_append(Vector *vector, const void *elem_buf); + +/** + * Remove element from vector + * + * @param vector the vector to remove element + * @param index the index of the element to remove + * @param old_elem_buf if not NULL, copies the element data to the buffer + * + * @return true if success, false otherwise + */ +bool +wasm_vector_remove(Vector *vector, uint32 index, void *old_elem_buf); + +/** + * Return the size of the vector + * + * @param vector the vector to get size + * + * @return return the size of the vector + */ +uint32 +wasm_vector_size(const Vector *vector); + +/** + * Destroy the vector + * + * @param vector the vector to destroy + * + * @return true if success, false otherwise + */ +bool +wasm_vector_destroy(Vector *vector); + +#ifdef __cplusplus +} +#endif + +#endif /* endof _WASM_VECTOR_H */ + diff --git a/core/iwasm/runtime/platform/include/wasm_assert.h b/core/iwasm/runtime/platform/include/wasm_assert.h new file mode 100644 index 000000000..687c8e590 --- /dev/null +++ b/core/iwasm/runtime/platform/include/wasm_assert.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_ASSERT_H +#define _WASM_ASSERT_H + +#include "bh_assert.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +#define wasm_assert bh_assert + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_ASSERT_H */ + diff --git a/core/iwasm/runtime/platform/include/wasm_config.h b/core/iwasm/runtime/platform/include/wasm_config.h new file mode 100644 index 000000000..06aa5e107 --- /dev/null +++ b/core/iwasm/runtime/platform/include/wasm_config.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_CONFIG_H +#define _WASM_CONFIG_H + +#include "config.h" + +#endif /* end of _WASM_CONFIG_H */ + diff --git a/core/iwasm/runtime/platform/include/wasm_memory.h b/core/iwasm/runtime/platform/include/wasm_memory.h new file mode 100644 index 000000000..549ba4768 --- /dev/null +++ b/core/iwasm/runtime/platform/include/wasm_memory.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_MEMORY_H +#define _WASM_MEMORY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bh_memory.h" + +#define wasm_malloc bh_malloc +#define wasm_free bh_free + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_MEMORY_H */ + diff --git a/core/iwasm/runtime/platform/include/wasm_platform_log.h b/core/iwasm/runtime/platform/include/wasm_platform_log.h new file mode 100644 index 000000000..3fe55bf59 --- /dev/null +++ b/core/iwasm/runtime/platform/include/wasm_platform_log.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_PLATFORM_LOG +#define _WASM_PLATFORM_LOG + +#define wasm_printf printf + +#define wasm_vprintf vprintf + +#endif /* _WASM_PLATFORM_LOG */ diff --git a/core/iwasm/runtime/platform/include/wasm_thread.h b/core/iwasm/runtime/platform/include/wasm_thread.h new file mode 100644 index 000000000..c14ae5982 --- /dev/null +++ b/core/iwasm/runtime/platform/include/wasm_thread.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file wasm_thread.h + * @brief This file contains Beihai platform abstract layer interface for + * thread relative function. + */ + +#ifndef _WASM_THREAD_H +#define _WASM_THREAD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bh_thread.h" + + +#define ws_thread_sys_init vm_thread_sys_init + +#define ws_thread_sys_destroy vm_thread_sys_destroy + +#define ws_self_thread vm_self_thread + +#define ws_tls_put(ptr) vm_tls_put(0, ptr) + +#define ws_tls_get() vm_tls_get(0) + +static inline int +ws_mutex_init(korp_mutex *mutex, bool is_recursive) +{ + if (is_recursive) + return vm_recursive_mutex_init(mutex); + else + return vm_mutex_init(mutex); +} + +#define ws_mutex_destroy vm_mutex_destroy + +#define ws_mutex_lock vm_mutex_lock + +#define ws_mutex_unlock vm_mutex_unlock + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_THREAD_H */ + diff --git a/core/iwasm/runtime/platform/include/wasm_types.h b/core/iwasm/runtime/platform/include/wasm_types.h new file mode 100644 index 000000000..a0bdbc169 --- /dev/null +++ b/core/iwasm/runtime/platform/include/wasm_types.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_TYPES_H +#define _WASM_TYPES_H + +#include "wasm_config.h" + +typedef unsigned char uint8; +typedef char int8; +typedef unsigned short uint16; +typedef short int16; +typedef unsigned int uint32; +typedef int int32; + +#include "wasm_platform.h" + +#ifndef __cplusplus +#define true 1 +#define false 0 +#define inline __inline +#endif + +#endif /* end of _WASM_TYPES_H */ + diff --git a/core/iwasm/runtime/platform/linux/platform.cmake b/core/iwasm/runtime/platform/linux/platform.cmake new file mode 100644 index 000000000..c01fd0e57 --- /dev/null +++ b/core/iwasm/runtime/platform/linux/platform.cmake @@ -0,0 +1,25 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L) + +set (PLATFORM_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_LIB_DIR}) +include_directories(${PLATFORM_LIB_DIR}/../include) + +file (GLOB_RECURSE source_all ${PLATFORM_LIB_DIR}/*.c) + +set (WASM_PLATFORM_LIB_SOURCE ${source_all}) + diff --git a/core/iwasm/runtime/platform/linux/wasm-native.c b/core/iwasm/runtime/platform/linux/wasm-native.c new file mode 100644 index 000000000..b24ac184e --- /dev/null +++ b/core/iwasm/runtime/platform/linux/wasm-native.c @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE /* for O_DIRECT */ +#endif + +#include "wasm-native.h" +#include "wasm-runtime.h" +#include "wasm_log.h" +#include "wasm_memory.h" +#include "wasm_platform_log.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define get_module_inst() \ + wasm_runtime_get_current_module_inst() + +#define validate_app_addr(offset, size) \ + wasm_runtime_validate_app_addr(module_inst, offset, size) + +#define addr_app_to_native(offset) \ + wasm_runtime_addr_app_to_native(module_inst, offset) + +#define addr_native_to_app(ptr) \ + wasm_runtime_addr_native_to_app(module_inst, ptr) + +#define module_malloc(size) \ + wasm_runtime_module_malloc(module_inst, size) + +#define module_free(offset) \ + wasm_runtime_module_free(module_inst, offset) + + +static int32 +__syscall0_wrapper(int32 arg0) +{ + switch (arg0) { + case 199: /* getuid */ + /* TODO */ + default: + printf("##_syscall0 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall1_wrapper(int32 arg0, int32 arg1) +{ + switch (arg0) { + case 6: /* close */ + /* TODO */ + default: + printf("##_syscall1 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall2_wrapper(int32 arg0, int32 arg1, int32 arg2) +{ + switch (arg0) { + case 183: /* getcwd */ + /* TODO */ + default: + printf("##_syscall2 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall3_wrapper(int32 arg0, int32 arg1, int32 arg2, int32 arg3) +{ + WASMModuleInstance *module_inst = get_module_inst(); + + switch (arg0) { + case 54: /* ioctl */ + { + /* Implement syscall 54 and syscall 146 to support printf() + for non SIDE_MODULE=1 mode */ + struct winsize *wsz; + + if (!validate_app_addr(arg3, sizeof(struct winsize))) + return 0; + + wsz = (struct winsize*)addr_app_to_native(arg3); + return syscall(54, arg1, arg2, wsz); + } + + case 145: /* readv */ + case 146: /* writev */ + { + /* Implement syscall 54 and syscall 146 to support printf() + for non SIDE_MODULE=1 mode */ + uint32 iovcnt = arg3, i; + struct iovec *vec_begin, *vec; + + if (!validate_app_addr(arg2, sizeof(struct iovec))) + return 0; + + vec_begin = vec = (struct iovec*)addr_app_to_native(arg2); + for (i = 0; i < iovcnt; i++, vec++) { + if (vec->iov_len > 0) { + if (!validate_app_addr((int32)vec->iov_base, 1)) + return 0; + vec->iov_base = addr_app_to_native((int32)vec->iov_base); + } + } + if (arg0 == 145) + return syscall(145, arg1, vec_begin, arg3); + else + return syscall(146, arg1, vec_begin, arg3); + } + + case 3: /* read*/ + case 5: /* open */ + case 221: /* fcntl */ + /* TODO */ + default: + printf("##_syscall3 called, syscall id: %d\n", arg0); + } + return 0; +} + +static int32 +__syscall4_wrapper(int32 arg0, int32 arg1, int32 arg2, + int32 arg3, int32 arg4) +{ + printf("##_syscall4 called, syscall id: %d\n", arg0); + return 0; +} + +static int32 +__syscall5_wrapper(int32 arg0, int32 arg1, int32 arg2, + int32 arg3, int32 arg4, int32 arg5) +{ + switch (arg0) { + case 140: /* llseek */ + /* TODO */ + default: + printf("##_syscall5 called, args[0]: %d\n", arg0); + } + return 0; +} + +#define GET_EMCC_SYSCALL_ARGS() \ + WASMModuleInstance *module_inst = get_module_inst(); \ + int32 *args; \ + if (!validate_app_addr(args_off, 1)) \ + return 0; \ + args = addr_app_to_native(args_off) \ + +#define EMCC_SYSCALL_WRAPPER0(id) \ + static int32 ___syscall##id##_wrapper(int32 _id) { \ + return __syscall0_wrapper(id); \ + } + +#define EMCC_SYSCALL_WRAPPER1(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall1_wrapper(id, args[0]); \ + } + +#define EMCC_SYSCALL_WRAPPER2(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall2_wrapper(id, args[0], args[1]); \ + } + +#define EMCC_SYSCALL_WRAPPER3(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall3_wrapper(id, args[0], args[1], args[2]); \ + } + +#define EMCC_SYSCALL_WRAPPER4(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall4_wrapper(id, args[0], args[1], args[2], args[3]);\ + } + +#define EMCC_SYSCALL_WRAPPER5(id) \ + static int32 ___syscall##id##_wrapper(int32 _id, int32 args_off) {\ + GET_EMCC_SYSCALL_ARGS(); \ + return __syscall5_wrapper(id, args[0], args[1], args[2], \ + args[3], args[4]); \ + } + +EMCC_SYSCALL_WRAPPER0(199) + +EMCC_SYSCALL_WRAPPER1(6) + +EMCC_SYSCALL_WRAPPER2(183) + +EMCC_SYSCALL_WRAPPER3(3) +EMCC_SYSCALL_WRAPPER3(5) +EMCC_SYSCALL_WRAPPER3(54) +EMCC_SYSCALL_WRAPPER3(145) +EMCC_SYSCALL_WRAPPER3(146) +EMCC_SYSCALL_WRAPPER3(221) + +EMCC_SYSCALL_WRAPPER5(140) + +static int32 +getTotalMemory_wrapper() +{ + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + WASMMemoryInstance *memory = module_inst->default_memory; + return NumBytesPerPage * memory->cur_page_count; +} + +static int32 +enlargeMemory_wrapper() +{ + bool ret; + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + WASMMemoryInstance *memory = module_inst->default_memory; + uint32 DYNAMICTOP_PTR_offset = module_inst->DYNAMICTOP_PTR_offset; + uint32 addr_data_offset = *(uint32*)(memory->global_data + DYNAMICTOP_PTR_offset); + uint32 *DYNAMICTOP_PTR = (uint32*)(memory->memory_data + addr_data_offset); + uint32 memory_size_expected = *DYNAMICTOP_PTR; + uint32 total_page_count = (memory_size_expected + NumBytesPerPage - 1) / NumBytesPerPage; + + if (total_page_count < memory->cur_page_count) { + return 1; + } + else { + ret = wasm_runtime_enlarge_memory(module_inst, total_page_count - + memory->cur_page_count); + return ret ? 1 : 0; + } +} + +static void +_abort_wrapper(int32 code) +{ + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + char buf[32]; + + snprintf(buf, sizeof(buf), "env.abort(%i)", code); + wasm_runtime_set_exception(module_inst, buf); +} + +static void +abortOnCannotGrowMemory_wrapper() +{ + WASMModuleInstance *module_inst = wasm_runtime_get_current_module_inst(); + wasm_runtime_set_exception(module_inst, "abort on cannot grow memory"); +} + +static void +___setErrNo_wrapper(int32 error_no) +{ + errno = error_no; +} + +/* TODO: add function parameter/result types check */ +#define REG_NATIVE_FUNC(module_name, func_name) \ + {#module_name, #func_name, func_name##_wrapper} + +typedef struct WASMNativeFuncDef { + const char *module_name; + const char *func_name; + void *func_ptr; +} WASMNativeFuncDef; + +static WASMNativeFuncDef native_func_defs[] = { + REG_NATIVE_FUNC(env, __syscall0), + REG_NATIVE_FUNC(env, __syscall1), + REG_NATIVE_FUNC(env, __syscall2), + REG_NATIVE_FUNC(env, __syscall3), + REG_NATIVE_FUNC(env, __syscall4), + REG_NATIVE_FUNC(env, __syscall5), + REG_NATIVE_FUNC(env, ___syscall3), + REG_NATIVE_FUNC(env, ___syscall5), + REG_NATIVE_FUNC(env, ___syscall6), + REG_NATIVE_FUNC(env, ___syscall54), + REG_NATIVE_FUNC(env, ___syscall140), + REG_NATIVE_FUNC(env, ___syscall145), + REG_NATIVE_FUNC(env, ___syscall146), + REG_NATIVE_FUNC(env, ___syscall183), + REG_NATIVE_FUNC(env, ___syscall199), + REG_NATIVE_FUNC(env, ___syscall221), + REG_NATIVE_FUNC(env, _abort), + REG_NATIVE_FUNC(env, abortOnCannotGrowMemory), + REG_NATIVE_FUNC(env, enlargeMemory), + REG_NATIVE_FUNC(env, getTotalMemory), + REG_NATIVE_FUNC(env, ___setErrNo), +}; + +void* +wasm_platform_native_func_lookup(const char *module_name, + const char *func_name) +{ + uint32 size = sizeof(native_func_defs) / sizeof(WASMNativeFuncDef); + WASMNativeFuncDef *func_def = native_func_defs; + WASMNativeFuncDef *func_def_end = func_def + size; + + if (!module_name || !func_name) + return NULL; + + while (func_def < func_def_end) { + if (!strcmp(func_def->module_name, module_name) + && !strcmp(func_def->func_name, func_name)) + return (void*)(uintptr_t)func_def->func_ptr; + func_def++; + } + + return NULL; +} + diff --git a/core/iwasm/runtime/platform/linux/wasm_platform.c b/core/iwasm/runtime/platform/linux/wasm_platform.c new file mode 100644 index 000000000..53600a25b --- /dev/null +++ b/core/iwasm/runtime/platform/linux/wasm_platform.c @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_log.h" +#include "wasm_platform.h" +#include "wasm_memory.h" + +#include +#include +#include +#include +#include + +bool is_little_endian = false; + +bool __is_little_endian() +{ + union w + { + int a; + char b; + }c; + + c.a = 1; + return (c.b == 1); +} + +int +wasm_platform_init() +{ + if (__is_little_endian()) + is_little_endian = true; + + return 0; +} + +char* +wasm_read_file_to_buffer(const char *filename, int *ret_size) +{ + char *buffer; + int file; + int file_size, read_size; + struct stat stat_buf; + + if (!filename || !ret_size) { + LOG_ERROR("Read file to buffer failed: invalid filename or ret size.\n"); + return NULL; + } + + if ((file = open(filename, O_RDONLY, 0)) == -1) { + LOG_ERROR("Read file to buffer failed: open file %s failed.\n", + filename); + return NULL; + } + + if (fstat(file, &stat_buf) != 0) { + LOG_ERROR("Read file to buffer failed: fstat file %s failed.\n", + filename); + close(file); + return NULL; + } + + file_size = stat_buf.st_size; + + if (!(buffer = wasm_malloc(file_size))) { + LOG_ERROR("Read file to buffer failed: alloc memory failed.\n"); + close(file); + return NULL; + } + + read_size = read(file, buffer, file_size); + close(file); + + if (read_size < file_size) { + LOG_ERROR("Read file to buffer failed: read file content failed.\n"); + wasm_free(buffer); + return NULL; + } + + *ret_size = file_size; + return buffer; +} + diff --git a/core/iwasm/runtime/platform/linux/wasm_platform.h b/core/iwasm/runtime/platform/linux/wasm_platform.h new file mode 100644 index 000000000..7a6320957 --- /dev/null +++ b/core/iwasm/runtime/platform/linux/wasm_platform.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_PLATFORM_H +#define _WASM_PLATFORM_H + +#include "wasm_config.h" +#include "wasm_types.h" + +#include +#include +typedef uint64_t uint64; +typedef int64_t int64; +typedef float float32; +typedef double float64; + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +#define WASM_PLATFORM "Linux" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * Return the offset of the given field in the given type. + * + * @param Type the type containing the filed + * @param field the field in the type + * + * @return the offset of field in Type + */ +#ifndef offsetof +#define offsetof(Type, field) ((size_t)(&((Type *)0)->field)) +#endif + +typedef pthread_t korp_tid; +typedef pthread_mutex_t korp_mutex; + +int wasm_platform_init(); + +extern bool is_little_endian; + +#include + +/* The following operations declared in string.h may be defined as + macros on Linux, so don't declare them as functions here. */ +/* memset */ +/* memcpy */ +/* memmove */ + +/* #include */ + +/* Unit test framework is based on C++, where the declaration of + snprintf is different. */ +#ifndef __cplusplus +int snprintf(char *buffer, size_t count, const char *format, ...); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* #include */ + +#ifndef __cplusplus +double sqrt(double x); +#endif + +#include +extern int fopen_s(FILE ** pFile, const char *filename, const char *mode); + +char* +wasm_read_file_to_buffer(const char *filename, int *ret_size); + +void* +wasm_dlsym(void *handle, const char *symbol); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/iwasm/runtime/platform/zephyr/COPYRIGHT b/core/iwasm/runtime/platform/zephyr/COPYRIGHT new file mode 100644 index 000000000..a0e1c83a9 --- /dev/null +++ b/core/iwasm/runtime/platform/zephyr/COPYRIGHT @@ -0,0 +1,126 @@ +# $FreeBSD$ +# @(#)COPYRIGHT 8.2 (Berkeley) 3/21/94 + +The compilation of software known as FreeBSD is distributed under the +following terms: + +Copyright (c) 1992-2019 The FreeBSD Project. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The 4.4BSD and 4.4BSD-Lite software is distributed under the following +terms: + +All of the documentation and software included in the 4.4BSD and 4.4BSD-Lite +Releases is copyrighted by The Regents of the University of California. + +Copyright 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The Institute of Electrical and Electronics Engineers and the American +National Standards Committee X3, on Information Processing Systems have +given us permission to reprint portions of their documentation. + +In the following statement, the phrase ``this text'' refers to portions +of the system documentation. + +Portions of this text are reprinted and reproduced in electronic form in +the second BSD Networking Software Release, from IEEE Std 1003.1-1988, IEEE +Standard Portable Operating System Interface for Computer Environments +(POSIX), copyright C 1988 by the Institute of Electrical and Electronics +Engineers, Inc. In the event of any discrepancy between these versions +and the original IEEE Standard, the original IEEE Standard is the referee +document. + +In the following statement, the phrase ``This material'' refers to portions +of the system documentation. + +This material is reproduced with permission from American National +Standards Committee X3, on Information Processing Systems. Computer and +Business Equipment Manufacturers Association (CBEMA), 311 First St., NW, +Suite 500, Washington, DC 20001-2178. The developmental work of +Programming Language C was completed by the X3J11 Technical Committee. + +The views and conclusions contained in the software and documentation are +those of the authors and should not be interpreted as representing official +policies, either expressed or implied, of the Regents of the University +of California. + + +NOTE: The copyright of UC Berkeley's Berkeley Software Distribution ("BSD") +source has been updated. The copyright addendum may be found at +ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change and is +included below. + +July 22, 1999 + +To All Licensees, Distributors of Any Version of BSD: + +As you know, certain of the Berkeley Software Distribution ("BSD") source +code files require that further distributions of products containing all or +portions of the software, acknowledge within their advertising materials +that such products contain software developed by UC Berkeley and its +contributors. + +Specifically, the provision reads: + +" * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors." + +Effective immediately, licensees and distributors are no longer required to +include the acknowledgement within advertising materials. Accordingly, the +foregoing paragraph of those BSD Unix files containing it is hereby deleted +in its entirety. + +William Hoskins +Director, Office of Technology Licensing +University of California, Berkeley diff --git a/core/iwasm/runtime/platform/zephyr/wasm-native.c b/core/iwasm/runtime/platform/zephyr/wasm-native.c new file mode 100644 index 000000000..1d35be453 --- /dev/null +++ b/core/iwasm/runtime/platform/zephyr/wasm-native.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-native.h" + + +void* +wasm_platform_native_func_lookup(const char *module_name, + const char *func_name) +{ + return NULL; +} + diff --git a/core/iwasm/runtime/platform/zephyr/wasm_math.c b/core/iwasm/runtime/platform/zephyr/wasm_math.c new file mode 100644 index 000000000..bad81eac3 --- /dev/null +++ b/core/iwasm/runtime/platform/zephyr/wasm_math.c @@ -0,0 +1,581 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include "wasm_log.h" +#include "wasm_platform.h" +#include "wasm_platform_log.h" +#include "wasm_memory.h" + +#define __FDLIBM_STDC__ + +typedef uint32_t u_int32_t; +typedef uint64_t u_int64_t; + +typedef union u32double_tag { + int *pint; + double *pdouble; +} U32DOUBLE; + +static inline int * +pdouble2pint(double *pdouble) +{ + U32DOUBLE u; + u.pdouble = pdouble; + return u.pint; +} + +typedef union +{ + double value; + struct + { + u_int32_t lsw; + u_int32_t msw; + } parts; + struct + { + u_int64_t w; + } xparts; +} ieee_double_shape_type_little; + +typedef union +{ + double value; + struct + { + u_int32_t msw; + u_int32_t lsw; + } parts; + struct + { + u_int64_t w; + } xparts; +} ieee_double_shape_type_big; + +typedef union { + double d; + struct { + unsigned int manl :32; + unsigned int manh :20; + unsigned int exp :11; + unsigned int sign :1; + } bits; +} IEEEd2bits_L; + +typedef union { + double d; + struct { + unsigned int sign :1; + unsigned int exp :11; + unsigned int manh :20; + unsigned int manl :32; + } bits; +} IEEEd2bits_B; + +#define __HIL(x) *(1+pdouble2pint(&x)) +#define __LOL(x) *(pdouble2pint(&x)) +#define __HIB(x) *(int*)&x +#define __LOB(x) *(1+(int*)&x) + +/* Get two 32 bit ints from a double. */ + +#define EXTRACT_WORDS_L(ix0,ix1,d) \ +do { \ + ieee_double_shape_type_little ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ +} while (0) + +/* Set a double from two 32 bit ints. */ + +#define INSERT_WORDS_L(d,ix0,ix1) \ +do { \ + ieee_double_shape_type_little iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ +} while (0) + +/* Get two 32 bit ints from a double. */ + +#define EXTRACT_WORDS_B(ix0,ix1,d) \ +do { \ + ieee_double_shape_type_big ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ +} while (0) + +/* Set a double from two 32 bit ints. */ + +#define INSERT_WORDS_B(d,ix0,ix1) \ +do { \ + ieee_double_shape_type_big iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ +} while (0) + +/* Get the more significant 32 bit int from a double. */ +#define GET_HIGH_WORD_L(i,d) \ +do { \ + ieee_double_shape_type_little gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ +} while (0) + +/* Get the more significant 32 bit int from a double. */ +#define GET_HIGH_WORD_B(i,d) \ +do { \ + ieee_double_shape_type_big gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ +} while (0) + +/* Set the more significant 32 bits of a double from an int. */ +#define SET_HIGH_WORD_L(d,v) \ +do { \ + ieee_double_shape_type_little sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ +} while (0) + +/* Set the more significant 32 bits of a double from an int. */ +#define SET_HIGH_WORD_B(d,v) \ +do { \ + ieee_double_shape_type_big sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ +} while (0) + +/* Macro wrappers. */ +#define EXTRACT_WORDS(ix0,ix1,d) do { \ + if (is_little_endian) \ + EXTRACT_WORDS_L(ix0,ix1,d); \ + else \ + EXTRACT_WORDS_B(ix0,ix1,d); \ +} while (0) + +#define INSERT_WORDS(d,ix0,ix1) do { \ + if (is_little_endian) \ + INSERT_WORDS_L(d,ix0,ix1); \ + else \ + INSERT_WORDS_B(d,ix0,ix1); \ +} while (0) + +#define GET_HIGH_WORD(i,d) \ +do { \ + if (is_little_endian) \ + GET_HIGH_WORD_L(i,d); \ + else \ + GET_HIGH_WORD_B(i,d); \ +} while (0) + +#define SET_HIGH_WORD(d,v) \ +do { \ + if (is_little_endian) \ + SET_HIGH_WORD_L(d,v); \ + else \ + SET_HIGH_WORD_B(d,v); \ +} while (0) + +#define __HI(x) (is_little_endian ? __HIL(x) : __HIB(x)) + +#define __LO(x) (is_little_endian ? __LOL(x) : __LOB(x)) + +/* + * Attempt to get strict C99 semantics for assignment with non-C99 compilers. + */ +#if FLT_EVAL_METHOD == 0 || __GNUC__ == 0 +#define STRICT_ASSIGN(type, lval, rval) ((lval) = (rval)) +#else +#define STRICT_ASSIGN(type, lval, rval) do { \ + volatile type __lval; \ + \ + if (sizeof(type) >= sizeof(long double)) \ + (lval) = (rval); \ + else { \ + __lval = (rval); \ + (lval) = __lval; \ + } \ +} while (0) +#endif + +#ifdef __FDLIBM_STDC__ +static const double huge = 1.0e300; +#else +static double huge = 1.0e300; +#endif + +#ifdef __STDC__ +static const double +#else +static double +#endif +tiny = 1.0e-300; + +#ifdef __STDC__ +static const double +#else +static double +#endif +one= 1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */ + +#ifdef __STDC__ +static const double +#else +static double +#endif +TWO52[2]={ + 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ + -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ +}; + +static double freebsd_sqrt(double x); +static double freebsd_floor(double x); +static double freebsd_ceil(double x); +static double freebsd_fabs(double x); +static double freebsd_rint(double x); +static int freebsd_isnan(double x); + +static double freebsd_sqrt(double x) /* wrapper sqrt */ +{ + double z; + int32_t sign = (int)0x80000000; + int32_t ix0,s0,q,m,t,i; + u_int32_t r,t1,s1,ix1,q1; + + EXTRACT_WORDS(ix0,ix1,x); + + /* take care of Inf and NaN */ + if((ix0&0x7ff00000)==0x7ff00000) { + return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf + sqrt(-inf)=sNaN */ + } + /* take care of zero */ + if(ix0<=0) { + if(((ix0&(~sign))|ix1)==0) return x;/* sqrt(+-0) = +-0 */ + else if(ix0<0) + return (x-x)/(x-x); /* sqrt(-ve) = sNaN */ + } + /* normalize x */ + m = (ix0>>20); + if(m==0) { /* subnormal x */ + while(ix0==0) { + m -= 21; + ix0 |= (ix1>>11); ix1 <<= 21; + } + for(i=0;(ix0&0x00100000)==0;i++) ix0<<=1; + m -= i-1; + ix0 |= (ix1>>(32-i)); + ix1 <<= i; + } + m -= 1023; /* unbias exponent */ + ix0 = (ix0&0x000fffff)|0x00100000; + if(m&1){ /* odd m, double x to make it even */ + ix0 += ix0 + ((ix1&sign)>>31); + ix1 += ix1; + } + m >>= 1; /* m = [m/2] */ + + /* generate sqrt(x) bit by bit */ + ix0 += ix0 + ((ix1&sign)>>31); + ix1 += ix1; + q = q1 = s0 = s1 = 0; /* [q,q1] = sqrt(x) */ + r = 0x00200000; /* r = moving bit from right to left */ + + while(r!=0) { + t = s0+r; + if(t<=ix0) { + s0 = t+r; + ix0 -= t; + q += r; + } + ix0 += ix0 + ((ix1&sign)>>31); + ix1 += ix1; + r>>=1; + } + + r = sign; + while(r!=0) { + t1 = s1+r; + t = s0; + if((t>31); + ix1 += ix1; + r>>=1; + } + + /* use floating add to find out rounding direction */ + if((ix0|ix1)!=0) { + z = one-tiny; /* trigger inexact flag */ + if (z>=one) { + z = one+tiny; + if (q1==(u_int32_t)0xffffffff) { q1=0; q += 1;} + else if (z>one) { + if (q1==(u_int32_t)0xfffffffe) q+=1; + q1+=2; + } else + q1 += (q1&1); + } + } + ix0 = (q>>1)+0x3fe00000; + ix1 = q1>>1; + if ((q&1)==1) ix1 |= sign; + ix0 += (m <<20); + + INSERT_WORDS(z,ix0,ix1); + + return z; +} + +static double freebsd_floor(double x) +{ + int32_t i0,i1,j0; + u_int32_t i,j; + + EXTRACT_WORDS(i0,i1,x); + + j0 = ((i0>>20)&0x7ff)-0x3ff; + if(j0<20) { + if(j0<0) { /* raise inexact if x != 0 */ + if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ + if(i0>=0) {i0=i1=0;} + else if(((i0&0x7fffffff)|i1)!=0) + { i0=0xbff00000;i1=0;} + } + } else { + i = (0x000fffff)>>j0; + if(((i0&i)|i1)==0) return x; /* x is integral */ + if(huge+x>0.0) { /* raise inexact flag */ + if(i0<0) i0 += (0x00100000)>>j0; + i0 &= (~i); i1=0; + } + } + } else if (j0>51) { + if(j0==0x400) return x+x; /* inf or NaN */ + else return x; /* x is integral */ + } else { + i = ((u_int32_t)(0xffffffff))>>(j0-20); + if((i1&i)==0) return x; /* x is integral */ + if(huge+x>0.0) { /* raise inexact flag */ + if(i0<0) { + if(j0==20) i0+=1; + else { + j = i1+(1<<(52-j0)); + if(j>20)&0x7ff)-0x3ff; + if(j0<20) { + if(j0<0) { /* raise inexact if x != 0 */ + if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ + if(i0<0) {i0=0x80000000;i1=0;} + else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;} + } + } else { + i = (0x000fffff)>>j0; + if(((i0&i)|i1)==0) return x; /* x is integral */ + if(huge+x>0.0) { /* raise inexact flag */ + if(i0>0) i0 += (0x00100000)>>j0; + i0 &= (~i); i1=0; + } + } + } else if (j0>51) { + if(j0==0x400) return x+x; /* inf or NaN */ + else return x; /* x is integral */ + } else { + i = ((u_int32_t)(0xffffffff))>>(j0-20); + if((i1&i)==0) return x; /* x is integral */ + if(huge+x>0.0) { /* raise inexact flag */ + if(i0>0) { + if(j0==20) i0+=1; + else { + j = i1 + (1<<(52-j0)); + if(j>31)&1; + j0 = ((i0>>20)&0x7ff)-0x3ff; + if(j0<20) { + if(j0<0) { + if(((i0&0x7fffffff)|i1)==0) return x; + i1 |= (i0&0x0fffff); + i0 &= 0xfffe0000; + i0 |= ((i1|-i1)>>12)&0x80000; + SET_HIGH_WORD(x,i0); + STRICT_ASSIGN(double,w,TWO52[sx]+x); + t = w-TWO52[sx]; + GET_HIGH_WORD(i0,t); + SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31)); + return t; + } else { + i = (0x000fffff)>>j0; + if(((i0&i)|i1)==0) return x; /* x is integral */ + i>>=1; + if(((i0&i)|i1)!=0) { + /* + * Some bit is set after the 0.5 bit. To avoid the + * possibility of errors from double rounding in + * w = TWO52[sx]+x, adjust the 0.25 bit to a lower + * guard bit. We do this for all j0<=51. The + * adjustment is trickiest for j0==18 and j0==19 + * since then it spans the word boundary. + */ + if(j0==19) i1 = 0x40000000; else + if(j0==18) i1 = 0x80000000; else + i0 = (i0&(~i))|((0x20000)>>j0); + } + } + } else if (j0>51) { + if(j0==0x400) return x+x; /* inf or NaN */ + else return x; /* x is integral */ + } else { + i = ((u_int32_t)(0xffffffff))>>(j0-20); + if((i1&i)==0) return x; /* x is integral */ + i>>=1; + if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20)); + } + INSERT_WORDS(x,i0,i1); + STRICT_ASSIGN(double,w,TWO52[sx]+x); + return w-TWO52[sx]; +} + +static int freebsd_isnan(double d) +{ + if (is_little_endian) { + IEEEd2bits_L u; + u.d = d; + return (u.bits.exp == 2047 && (u.bits.manl != 0 || u.bits.manh != 0)); + } + else { + IEEEd2bits_B u; + u.d = d; + return (u.bits.exp == 2047 && (u.bits.manl != 0 || u.bits.manh != 0)); + } +} + +static double freebsd_fabs(double x) +{ + u_int32_t high; + GET_HIGH_WORD(high,x); + SET_HIGH_WORD(x,high&0x7fffffff); + return x; +} + +double sqrt(double x) +{ + return freebsd_sqrt(x); +} + +double floor(double x) +{ + return freebsd_floor(x); +} + +double ceil(double x) +{ + return freebsd_ceil(x); +} + +double fmin(double x, double y) +{ + return x < y ? x : y; +} + +double fmax(double x, double y) +{ + return x > y ? x : y; +} + +double rint(double x) +{ + return freebsd_rint(x); +} + +double fabs(double x) +{ + return freebsd_fabs(x); +} + +int isnan(double x) +{ + return freebsd_isnan(x); +} + +double trunc(double x) +{ + return (x > 0) ? freebsd_floor(x) : freebsd_ceil(x); +} + +int signbit(double x) +{ + return ((__HI(x) & 0x80000000) >> 31); +} + diff --git a/core/iwasm/runtime/platform/zephyr/wasm_platform.c b/core/iwasm/runtime/platform/zephyr/wasm_platform.c new file mode 100644 index 000000000..08b1650eb --- /dev/null +++ b/core/iwasm/runtime/platform/zephyr/wasm_platform.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_platform.h" + +#ifndef CONFIG_AEE_ENABLE +static int +_stdout_hook_iwasm(int c) +{ + printk("%c", (char)c); + return 1; +} + +extern void __stdout_hook_install(int (*hook)(int)); +#endif + +bool is_little_endian = false; + +bool __is_little_endian() +{ + union w + { + int a; + char b; + }c; + + c.a = 1; + return (c.b == 1); +} + +int wasm_platform_init() +{ + if (__is_little_endian()) + is_little_endian = true; + +#ifndef CONFIG_AEE_ENABLE + /* Enable printf() in Zephyr */ + __stdout_hook_install(_stdout_hook_iwasm); +#endif + + return 0; +} + diff --git a/core/iwasm/runtime/platform/zephyr/wasm_platform.h b/core/iwasm/runtime/platform/zephyr/wasm_platform.h new file mode 100644 index 000000000..e14d213d7 --- /dev/null +++ b/core/iwasm/runtime/platform/zephyr/wasm_platform.h @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_PLATFORM_H +#define _WASM_PLATFORM_H + +#include "wasm_config.h" +#include "wasm_types.h" +#include +#include +#include +#include + +#include +typedef uint64_t uint64; +typedef int64_t int64; +typedef float float32; +typedef double float64; + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +#define WASM_PLATFORM "Zephyr" + +#include +#include +#include +#include +#include +#include + +/** + * Return the offset of the given field in the given type. + * + * @param Type the type containing the filed + * @param field the field in the type + * + * @return the offset of field in Type + */ +#ifndef offsetof +#define offsetof(Type, field) ((size_t)(&((Type *)0)->field)) +#endif + +typedef struct k_thread korp_thread; +typedef korp_thread *korp_tid; +typedef struct k_mutex korp_mutex; + +int wasm_platform_init(); + +extern bool is_little_endian; + +#include + +/* The following operations declared in string.h may be defined as + macros on Linux, so don't declare them as functions here. */ +/* memset */ +/* memcpy */ +/* memmove */ + +/* #include */ + +/* Unit test framework is based on C++, where the declaration of + snprintf is different. */ +#ifndef __cplusplus +int snprintf(char *buffer, size_t count, const char *format, ...); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* math functions */ +double sqrt(double x); +double floor(double x); +double ceil(double x); +double fmin(double x, double y); +double fmax(double x, double y); +double rint(double x); +double fabs(double x); +double trunc(double x); +int signbit(double x); +int isnan(double x); + +void* +wasm_dlsym(void *handle, const char *symbol); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/iwasm/runtime/utils/utils.cmake b/core/iwasm/runtime/utils/utils.cmake new file mode 100644 index 000000000..a636cb4c8 --- /dev/null +++ b/core/iwasm/runtime/utils/utils.cmake @@ -0,0 +1,22 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (UTILS_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${UTILS_LIB_DIR}) + +file (GLOB_RECURSE source_all ${UTILS_LIB_DIR}/*.c ) + +set (WASM_UTILS_LIB_SOURCE ${source_all}) + diff --git a/core/iwasm/runtime/utils/wasm_dlfcn.c b/core/iwasm/runtime/utils/wasm_dlfcn.c new file mode 100644 index 000000000..de7123125 --- /dev/null +++ b/core/iwasm/runtime/utils/wasm_dlfcn.c @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_platform.h" + + +static bool sort_flag = false; + +typedef struct NativeSymbol { + const char *symbol; + void *func_ptr; +} NativeSymbol; + +static bool +sort_symbol_ptr(NativeSymbol *ptr, int len) +{ + int i, j; + NativeSymbol temp; + + for (i = 0; i < len - 1; ++i) { + for (j = i + 1; j < len; ++j) { + if (strcmp((ptr+i)->symbol, (ptr+j)->symbol) > 0) { + temp = ptr[i]; + ptr[i] = ptr[j]; + ptr[j] = temp; + } + } + } + + return true; +} + +static void * +lookup_symbol(NativeSymbol *ptr, int len, const char *symbol) +{ + int low = 0, mid, ret; + int high = len - 1; + + while (low <= high) { + mid = (low + high) / 2; + ret = strcmp(symbol, ptr[mid].symbol); + + if (ret == 0) + return ptr[mid].func_ptr; + else if (ret < 0) + high = mid - 1; + else + low = mid + 1; + } + + return NULL; +} + +int +get_base_lib_export_apis(NativeSymbol **p_base_lib_apis); + +int +get_ext_lib_export_apis(NativeSymbol **p_ext_lib_apis); + +static NativeSymbol *base_native_symbol_defs; +static NativeSymbol *ext_native_symbol_defs; +static int base_native_symbol_len; +static int ext_native_symbol_len; + +void * +wasm_dlsym(void *handle, const char *symbol) +{ + void *ret; + + if (!sort_flag) { + base_native_symbol_len = get_base_lib_export_apis(&base_native_symbol_defs); + ext_native_symbol_len = get_ext_lib_export_apis(&ext_native_symbol_defs); + + if (base_native_symbol_len > 0) + sort_symbol_ptr(base_native_symbol_defs, base_native_symbol_len); + + if (ext_native_symbol_len > 0) + sort_symbol_ptr(ext_native_symbol_defs, ext_native_symbol_len); + + sort_flag = true; + } + + if (!symbol) + return NULL; + + if ((ret = lookup_symbol(base_native_symbol_defs, base_native_symbol_len, + symbol)) + || (ret = lookup_symbol(ext_native_symbol_defs, ext_native_symbol_len, + symbol))) + return ret; + + return NULL; +} + diff --git a/core/iwasm/runtime/utils/wasm_hashmap.c b/core/iwasm/runtime/utils/wasm_hashmap.c new file mode 100644 index 000000000..f0a24a41b --- /dev/null +++ b/core/iwasm/runtime/utils/wasm_hashmap.c @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_hashmap.h" +#include "wasm_log.h" +#include "wasm_thread.h" +#include "wasm_memory.h" + + +typedef struct HashMapElem { + void *key; + void *value; + struct HashMapElem *next; +} HashMapElem; + +struct HashMap { + /* size of element array */ + uint32 size; + /* lock for elements */ + korp_mutex *lock; + /* hash function of key */ + HashFunc hash_func; + /* key equal function */ + KeyEqualFunc key_equal_func; + KeyDestroyFunc key_destroy_func; + ValueDestroyFunc value_destroy_func; + HashMapElem *elements[1]; +}; + +HashMap* +wasm_hash_map_create(uint32 size, bool use_lock, + HashFunc hash_func, + KeyEqualFunc key_equal_func, + KeyDestroyFunc key_destroy_func, + ValueDestroyFunc value_destroy_func) +{ + HashMap *map; + uint32 total_size; + + if (size > HASH_MAP_MAX_SIZE) { + LOG_ERROR("HashMap create failed: size is too large.\n"); + return NULL; + } + + if (!hash_func || !key_equal_func) { + LOG_ERROR("HashMap create failed: hash function or key equal function " + " is NULL.\n"); + return NULL; + } + + total_size = offsetof(HashMap, elements) + + sizeof(HashMapElem) * size + + (use_lock ? sizeof(korp_mutex) : 0); + + if (!(map = wasm_malloc(total_size))) { + LOG_ERROR("HashMap create failed: alloc memory failed.\n"); + return NULL; + } + + memset(map, 0, total_size); + + if (use_lock) { + map->lock = (korp_mutex*) + ((uint8*)map + offsetof(HashMap, elements) + sizeof(HashMapElem) * size); + if (ws_mutex_init(map->lock, false)) { + LOG_ERROR("HashMap create failed: init map lock failed.\n"); + wasm_free(map); + return NULL; + } + } + + map->size = size; + map->hash_func = hash_func; + map->key_equal_func = key_equal_func; + map->key_destroy_func = key_destroy_func; + map->value_destroy_func = value_destroy_func; + return map; +} + +bool +wasm_hash_map_insert(HashMap *map, void *key, void *value) +{ + uint32 index; + HashMapElem *elem; + + if (!map || !key) { + LOG_ERROR("HashMap insert elem failed: map or key is NULL.\n"); + return false; + } + + if (map->lock) { + ws_mutex_lock(map->lock); + } + + index = map->hash_func(key) % map->size; + elem = map->elements[index]; + while (elem) { + if (map->key_equal_func(elem->key, key)) { + LOG_ERROR("HashMap insert elem failed: duplicated key found.\n"); + goto fail; + } + elem = elem->next; + } + + if (!(elem = wasm_malloc(sizeof(HashMapElem)))) { + LOG_ERROR("HashMap insert elem failed: alloc memory failed.\n"); + goto fail; + } + + elem->key = key; + elem->value = value; + elem->next = map->elements[index]; + map->elements[index] = elem; + + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return true; + +fail: + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return false; +} + +void* +wasm_hash_map_find(HashMap *map, void *key) +{ + uint32 index; + HashMapElem *elem; + void *value; + + if (!map || !key) { + LOG_ERROR("HashMap find elem failed: map or key is NULL.\n"); + return NULL; + } + + if (map->lock) { + ws_mutex_lock(map->lock); + } + + index = map->hash_func(key) % map->size; + elem = map->elements[index]; + + while (elem) { + if (map->key_equal_func(elem->key, key)) { + value = elem->value; + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return value; + } + elem = elem->next; + } + + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return NULL; +} + +bool +wasm_hash_map_update(HashMap *map, void *key, void *value, + void **p_old_value) +{ + uint32 index; + HashMapElem *elem; + + if (!map || !key) { + LOG_ERROR("HashMap update elem failed: map or key is NULL.\n"); + return false; + } + + if (map->lock) { + ws_mutex_lock(map->lock); + } + + index = map->hash_func(key) % map->size; + elem = map->elements[index]; + + while (elem) { + if (map->key_equal_func(elem->key, key)) { + if (p_old_value) + *p_old_value = elem->value; + elem->value = value; + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return true; + } + elem = elem->next; + } + + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return false; +} + +bool +wasm_hash_map_remove(HashMap *map, void *key, + void **p_old_key, void **p_old_value) +{ + uint32 index; + HashMapElem *elem, *prev; + + if (!map || !key) { + LOG_ERROR("HashMap remove elem failed: map or key is NULL.\n"); + return false; + } + + if (map->lock) { + ws_mutex_lock(map->lock); + } + + index = map->hash_func(key) % map->size; + prev = elem = map->elements[index]; + + while (elem) { + if (map->key_equal_func(elem->key, key)) { + if (p_old_key) + *p_old_key = elem->key; + if (p_old_value) + *p_old_value = elem->value; + + if (elem == map->elements[index]) + map->elements[index] = elem->next; + else + prev->next = elem->next; + + wasm_free(elem); + + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return true; + } + + prev = elem; + elem = elem->next; + } + + if (map->lock) { + ws_mutex_unlock(map->lock); + } + return false; +} + +bool +wasm_hash_map_destroy(HashMap *map) +{ + uint32 index; + HashMapElem *elem, *next; + + if (!map) { + LOG_ERROR("HashMap destroy failed: map is NULL.\n"); + return false; + } + + if (map->lock) { + ws_mutex_lock(map->lock); + } + + for (index = 0; index < map->size; index++) { + elem = map->elements[index]; + while (elem) { + next = elem->next; + + if (map->key_destroy_func) { + map->key_destroy_func(elem->key); + } + if (map->value_destroy_func) { + map->value_destroy_func(elem->value); + } + wasm_free(elem); + + elem = next; + } + } + + if (map->lock) { + ws_mutex_unlock(map->lock); + ws_mutex_destroy(map->lock); + } + wasm_free(map); + return true; +} diff --git a/core/iwasm/runtime/utils/wasm_log.c b/core/iwasm/runtime/utils/wasm_log.c new file mode 100644 index 000000000..0bbb877b5 --- /dev/null +++ b/core/iwasm/runtime/utils/wasm_log.c @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_log.h" + +#include "wasm_platform_log.h" +#include "wasm_thread.h" + + +/** + * The verbose level of the log system. Only those verbose logs whose + * levels are less than or equal to this value are outputed. + */ +static int log_verbose_level; + +/** + * The lock for protecting the global output stream of logs. + */ +static korp_mutex log_stream_lock; + + +int +_wasm_log_init () +{ + log_verbose_level = 1; + return ws_mutex_init (&log_stream_lock, false); +} + +void +_wasm_log_set_verbose_level (int level) +{ + log_verbose_level = level; +} + +bool +_wasm_log_begin (int level) +{ + korp_tid self; + + if (level > log_verbose_level) { + return false; + } + + /* Try to own the log stream and start the log output. */ + ws_mutex_lock (&log_stream_lock); + self = ws_self_thread (); + wasm_printf ("[%X]: ", (int)self); + + return true; +} + +void +_wasm_log_vprintf (const char *fmt, va_list ap) +{ + wasm_vprintf (fmt, ap); +} + +void +_wasm_log_printf (const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + _wasm_log_vprintf (fmt, ap); + va_end (ap); +} + +void +_wasm_log_end () +{ + ws_mutex_unlock (&log_stream_lock); +} + +void +_wasm_log (int level, const char *file, int line, + const char *fmt, ...) +{ + if (_wasm_log_begin (level)) { + va_list ap; + + if (file) + _wasm_log_printf ("%s:%d ", file, line); + + va_start (ap, fmt); + _wasm_log_vprintf (fmt, ap); + va_end (ap); + + _wasm_log_end (); + } +} diff --git a/core/iwasm/runtime/utils/wasm_vector.c b/core/iwasm/runtime/utils/wasm_vector.c new file mode 100644 index 000000000..f04f4b3fb --- /dev/null +++ b/core/iwasm/runtime/utils/wasm_vector.c @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm_log.h" +#include "wasm_vector.h" +#include "wasm_memory.h" + + +static uint8* +alloc_vector_data(uint32 length, uint32 size_elem) +{ + uint64 total_size = ((uint64)size_elem) * length; + uint8 *data; + + if (total_size > UINT32_MAX) { + return NULL; + } + + if ((data = wasm_malloc((uint32)total_size))) { + memset(data, 0, (uint32)total_size); + } + + return data; +} + +static bool +extend_vector(Vector *vector, uint32 length) +{ + uint8 *data; + + if (length <= vector->max_elements) + return true; + + if (length < vector->size_elem * 3 / 2) + length = vector->size_elem * 3 / 2; + + if (!(data = alloc_vector_data(length, vector->size_elem))) { + return false; + } + + memcpy(data, vector->data, vector->size_elem * vector->max_elements); + free(vector->data); + vector->data = data; + vector->max_elements = length; + return true; +} + +bool +wasm_vector_init(Vector *vector, uint32 init_length, uint32 size_elem) +{ + if (!vector) { + LOG_ERROR("Init vector failed: vector is NULL.\n"); + return false; + } + + if (init_length == 0) { + init_length = 4; + } + + if (!(vector->data = alloc_vector_data(init_length, size_elem))) { + LOG_ERROR("Init vector failed: alloc memory failed.\n"); + return false; + } + + vector->size_elem = size_elem; + vector->max_elements = init_length; + vector->num_elements = 0; + return true; +} + +bool +wasm_vector_set(Vector *vector, uint32 index, const void *elem_buf) +{ + if (!vector || !elem_buf) { + LOG_ERROR("Set vector elem failed: vector or elem buf is NULL.\n"); + return false; + } + + if (index >= vector->num_elements) { + LOG_ERROR("Set vector elem failed: invalid elem index.\n"); + return false; + } + + memcpy(vector->data + vector->size_elem * index, + elem_buf, vector->size_elem); + return true; +} + +bool wasm_vector_get(const Vector *vector, uint32 index, void *elem_buf) +{ + if (!vector || !elem_buf) { + LOG_ERROR("Get vector elem failed: vector or elem buf is NULL.\n"); + return false; + } + + if (index >= vector->num_elements) { + LOG_ERROR("Get vector elem failed: invalid elem index.\n"); + return false; + } + + memcpy(elem_buf, vector->data + vector->size_elem * index, + vector->size_elem); + return true; +} + +bool wasm_vector_insert(Vector *vector, uint32 index, const void *elem_buf) +{ + uint32 i; + uint8 *p; + + if (!vector || !elem_buf) { + LOG_ERROR("Insert vector elem failed: vector or elem buf is NULL.\n"); + return false; + } + + if (index >= vector->num_elements) { + LOG_ERROR("Insert vector elem failed: invalid elem index.\n"); + return false; + } + + if (!extend_vector(vector, vector->num_elements + 1)) { + LOG_ERROR("Insert vector elem failed: extend vector failed.\n"); + return false; + } + + p = vector->data + vector->size_elem * vector->num_elements; + for (i = vector->num_elements - 1; i > index; i--) { + memcpy(p, p - vector->size_elem, vector->size_elem); + p -= vector->size_elem; + } + + memcpy(p, elem_buf, vector->size_elem); + vector->num_elements++; + return true; +} + +bool wasm_vector_append(Vector *vector, const void *elem_buf) +{ + if (!vector || !elem_buf) { + LOG_ERROR("Append vector elem failed: vector or elem buf is NULL.\n"); + return false; + } + + if (!extend_vector(vector, vector->num_elements + 1)) { + LOG_ERROR("Append ector elem failed: extend vector failed.\n"); + return false; + } + + memcpy(vector->data + vector->size_elem * vector->num_elements, + elem_buf, vector->size_elem); + vector->num_elements++; + return true; +} + +bool +wasm_vector_remove(Vector *vector, uint32 index, void *old_elem_buf) +{ + uint32 i; + uint8 *p; + + if (!vector) { + LOG_ERROR("Remove vector elem failed: vector is NULL.\n"); + return false; + } + + if (index >= vector->num_elements) { + LOG_ERROR("Remove vector elem failed: invalid elem index.\n"); + return false; + } + + p = vector->data + vector->size_elem * index; + + if (old_elem_buf) { + memcpy(old_elem_buf, p, vector->size_elem); + } + + for (i = index; i < vector->num_elements - 1; i++) { + memcpy(p, p + vector->size_elem, vector->size_elem); + p += vector->size_elem; + } + + vector->num_elements--; + return true; +} + +uint32 +wasm_vector_size(const Vector *vector) +{ + return vector ? vector->num_elements : 0; +} + +bool +wasm_vector_destroy(Vector *vector) +{ + if (!vector) { + LOG_ERROR("Destroy vector elem failed: vector is NULL.\n"); + return false; + } + + if (vector->data) + wasm_free(vector->data); + memset(vector, 0, sizeof(Vector)); + return true; +} diff --git a/core/iwasm/runtime/vmcore_wasm/invokeNative_general.c b/core/iwasm/runtime/vmcore_wasm/invokeNative_general.c new file mode 100644 index 000000000..19bc6951c --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/invokeNative_general.c @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-runtime.h" + +void invokeNative(uint32 argv[], uint32 argc, void (*native_code)()) +{ + WASMThread *self; + switch(argc) { + case 0: + native_code(); + break; + case 1: + native_code(argv[0]); + break; + case 2: + native_code(argv[0], argv[1]); + break; + case 3: + native_code(argv[0], argv[1], argv[2]); + break; + case 4: + native_code(argv[0], argv[1], argv[2], argv[3]); + break; + case 5: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4]); + break; + case 6: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]); + break; + case 7: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); + break; + case 8: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]); + break; + case 9: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]); + break; + case 10: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]); + break; + case 11: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]); + break; + case 12: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11]); + break; + case 13: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]); + break; + case 14: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]); + break; + case 15: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]); + break; + case 16: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15]); + break; + case 17: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16]); + break; + case 18: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16], argv[17]); + break; + case 19: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16], argv[17], argv[18]); + break; + case 20: + native_code(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14], argv[15], argv[16], argv[17], argv[18], argv[19]); + break; + default: + /* FIXME: If this happen, add more cases. */ + self = wasm_runtime_get_self(); + wasm_runtime_set_exception(self->module_inst, "the argument number of native function exceeds maximum"); + return; + } +} diff --git a/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s b/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s new file mode 100644 index 000000000..8c1d843e0 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s @@ -0,0 +1,56 @@ +// Copyright (C) 2019 Intel Corporation. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Author: Ivan Volosyuk +// + .text + .align 2 +.globl invokeNative + .type invokeNative, @function +invokeNative: + + push %ebp + movl %esp, %ebp + push %ecx + movl 8(%ebp), %eax /* eax = argv */ + movl 12(%ebp), %ecx /* ecx = argc */ + test %ecx, %ecx + je restore_ecx /* if ecx == 0, skip pushing arguments */ + leal -4(%eax,%ecx,4), %eax /* eax = eax + ecx * 4 - 4 */ + subl %esp, %eax /* eax = eax - esp */ +1: + push 0(%esp,%eax) + loop 1b /* loop ecx counts */ +restore_ecx: + movl -4(%ebp), %ecx /* restore ecx */ + movl 16(%ebp), %eax /* eax = func_ptr */ + call *%eax + leave + ret + diff --git a/core/iwasm/runtime/vmcore_wasm/vmcore.cmake b/core/iwasm/runtime/vmcore_wasm/vmcore.cmake new file mode 100644 index 000000000..8e3d94ca9 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/vmcore.cmake @@ -0,0 +1,28 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (VMCORE_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${VMCORE_LIB_DIR}) +include_directories(${VMCORE_LIB_DIR}/../include) + +if (${BUILD_AS_64BIT_SUPPORT} STREQUAL "YES") +file (GLOB_RECURSE source_all ${VMCORE_LIB_DIR}/*.c) +else () +file (GLOB_RECURSE source_all ${VMCORE_LIB_DIR}/*.c ${VMCORE_LIB_DIR}/*.s) +list (REMOVE_ITEM source_all ${VMCORE_LIB_DIR}/invokeNative_general.c) +endif () + +set (VMCORE_LIB_SOURCE ${source_all}) + diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-application.c b/core/iwasm/runtime/vmcore_wasm/wasm-application.c new file mode 100644 index 000000000..5c43b8c8c --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-application.c @@ -0,0 +1,390 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "wasm.h" +#include "wasm-interp.h" +#include "wasm-runtime.h" +#include "wasm-thread.h" +#include "wasm_assert.h" +#include "wasm_log.h" +#include "wasm_memory.h" +#include "wasm_platform_log.h" + + +static WASMFunctionInstance* +resolve_main_function(const WASMModuleInstance *module_inst) +{ + uint32 i; + for (i = 0; i < module_inst->export_func_count; i++) + if (!strcmp(module_inst->export_functions[i].name, "_main") + || !strcmp(module_inst->export_functions[i].name, "main")) + return module_inst->export_functions[i].function; + + LOG_ERROR("WASM execute application failed: main function not found.\n"); + return NULL; +} + +static bool +check_main_func_type(const WASMType *type) +{ + if (!(type->param_count == 0 || type->param_count == 2) + ||type->result_count > 1) { + LOG_ERROR("WASM execute application failed: invalid main function type.\n"); + return false; + } + + if (type->param_count == 2 + && !(type->types[0] == VALUE_TYPE_I32 + && type->types[1] == VALUE_TYPE_I32)) { + LOG_ERROR("WASM execute application failed: invalid main function type.\n"); + return false; + } + + if (type->result_count + && type->types[type->param_count] != VALUE_TYPE_I32) { + LOG_ERROR("WASM execute application failed: invalid main function type.\n"); + return false; + } + + return true; +} + +bool +wasm_application_execute_main(WASMModuleInstance *module_inst, + int argc, char *argv[]) +{ + WASMFunctionInstance *func = resolve_main_function(module_inst); + uint32 argc1 = 0, argv1[2] = { 0 }; + uint32 total_argv_size = 0, total_size; + int32 argv_buf_offset, i; + char *argv_buf, *p; + int32 *argv_offsets; + + if (!func || func->is_import_func) + return false; + + if (!check_main_func_type(func->u.func->func_type)) + return false; + + if (func->u.func->func_type->param_count) { + for (i = 0; i < argc; i++) + total_argv_size += strlen(argv[i]) + 1; + total_argv_size = align_uint(total_argv_size, 4); + + total_size = total_argv_size + sizeof(int32) * argc; + + if (!(argv_buf_offset = wasm_runtime_module_malloc(module_inst, total_size))) + return false; + + argv_buf = p = wasm_runtime_addr_app_to_native(module_inst, argv_buf_offset); + argv_offsets = (int32*)(p + total_argv_size); + + for (i = 0; i < argc; i++) { + memcpy(p, argv[i], strlen(argv[i]) + 1); + argv_offsets[i] = argv_buf_offset + (p - argv_buf); + p += strlen(argv[i]) + 1; + } + + argc1 = 2; + argv1[0] = argc; + argv1[1] = (uint32)wasm_runtime_addr_native_to_app(module_inst, argv_offsets); + } + + return wasm_runtime_call_wasm(module_inst, NULL, func, argc1, argv1); +} + +static WASMFunctionInstance* +resolve_function(const WASMModuleInstance *module_inst, char *name) +{ + uint32 i; + for (i = 0; i < module_inst->export_func_count; i++) + if (!strcmp(module_inst->export_functions[i].name, name)) + return module_inst->export_functions[i].function; + return NULL; +} + +union ieee754_float { + float f; + + /* This is the IEEE 754 single-precision format. */ + union { + struct { + unsigned int negative:1; + unsigned int exponent:8; + unsigned int mantissa:23; + } ieee_big_endian; + struct { + unsigned int mantissa:23; + unsigned int exponent:8; + unsigned int negative:1; + } ieee_little_endian; + } ieee; +}; + +union ieee754_double { + double d; + + /* This is the IEEE 754 double-precision format. */ + union { + struct { + unsigned int negative:1; + unsigned int exponent:11; + /* Together these comprise the mantissa. */ + unsigned int mantissa0:20; + unsigned int mantissa1:32; + } ieee_big_endian; + + struct { + /* Together these comprise the mantissa. */ + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; + } ieee_little_endian; + } ieee; +}; + +bool +wasm_application_execute_func(WASMModuleInstance *module_inst, + char *name, int argc, char *argv[]) +{ + WASMFunctionInstance *func; + WASMType *type; + uint32 argc1, *argv1; + int32 i, p; + const char *exception; + + wasm_assert(argc >= 0); + func = resolve_function(module_inst, name); + if (!func || func->is_import_func) { + LOG_ERROR("Wasm lookup function %s failed.\n", name); + return false; + } + + type = func->u.func->func_type; + if (type->param_count != (uint32)argc) { + LOG_ERROR("Wasm prepare param failed: invalid param count.\n"); + return false; + } + + argc1 = func->param_cell_num; + argv1 = wasm_malloc(sizeof(uint32) * (argc1 > 2 ? argc1 : 2)); + if (argv1 == NULL) { + LOG_ERROR("Wasm prepare param failed: malloc failed.\n"); + return false; + } + + /* Parse arguments */ + for (i = 0, p = 0; i < argc; i++) { + char *endptr; + wasm_assert(argv[i] != NULL); + if (argv[i][0] == '\0') { + LOG_ERROR("Wasm prepare param failed: invalid num (%s).\n", argv[i]); + goto fail; + } + switch (type->types[i]) { + case VALUE_TYPE_I32: + argv1[p++] = strtoul(argv[i], &endptr, 0); + break; + case VALUE_TYPE_I64: + { + union { uint64 val; uint32 parts[2]; } u; + u.val = strtoull(argv[i], &endptr, 0); + argv1[p++] = u.parts[0]; + argv1[p++] = u.parts[1]; + break; + } + case VALUE_TYPE_F32: + { + float32 f32 = strtof(argv[i], &endptr); + if (isnan(f32)) { + if (argv[i][0] == '-') { + f32 = -f32; + } + if (endptr[0] == ':') { + uint32 sig; + union ieee754_float u; + sig = strtoul(endptr + 1, &endptr, 0); + u.f = f32; + if (is_little_endian) + u.ieee.ieee_little_endian.mantissa = sig; + else + u.ieee.ieee_big_endian.mantissa = sig; + f32 = u.f; + } + } + *(float32*)&argv1[p++] = f32; + break; + } + case VALUE_TYPE_F64: + { + union { float64 val; uint32 parts[2]; } u; + u.val = strtod(argv[i], &endptr); + if (isnan(u.val)) { + if (argv[i][0] == '-') { + u.val = -u.val; + } + if (endptr[0] == ':') { + uint64 sig; + union ieee754_double ud; + sig = strtoull(endptr + 1, &endptr, 0); + ud.d = u.val; + if (is_little_endian) { + ud.ieee.ieee_little_endian.mantissa0 = sig >> 32; + ud.ieee.ieee_little_endian.mantissa1 = sig; + } + else { + ud.ieee.ieee_big_endian.mantissa0 = sig >> 32; + ud.ieee.ieee_big_endian.mantissa1 = sig; + } + u.val = ud.d; + } + } + argv1[p++] = u.parts[0]; + argv1[p++] = u.parts[1]; + break; + } + } + if (*endptr != '\0' && *endptr != '_') { + LOG_ERROR("Wasm prepare param failed: invalid num (%s).\n", argv[i]); + goto fail; + } + if (errno != 0) { + LOG_ERROR("Wasm prepare param failed: errno %d.\n", errno); + goto fail; + } + } + wasm_assert(p == (int32)argc1); + + wasm_runtime_set_exception(module_inst, NULL); + if (!wasm_runtime_call_wasm(module_inst, NULL, func, argc1, argv1)) { + exception = wasm_runtime_get_exception(module_inst); + wasm_printf("%s\n", exception); + goto fail; + } + + /* print return value */ + switch (type->types[type->param_count]) { + case VALUE_TYPE_I32: + wasm_printf("0x%x:i32", argv1[0]); + break; + case VALUE_TYPE_I64: + { + union { uint64 val; uint32 parts[2]; } u; + u.parts[0] = argv1[0]; + u.parts[1] = argv1[1]; + wasm_printf("0x%llx:i64", u.val); + break; + } + case VALUE_TYPE_F32: + wasm_printf("%.7g:f32", *(float32*)argv1); + break; + case VALUE_TYPE_F64: + { + union { float64 val; uint32 parts[2]; } u; + u.parts[0] = argv1[0]; + u.parts[1] = argv1[1]; + wasm_printf("%.7g:f64", u.val); + break; + } + } + wasm_printf("\n"); + + wasm_free(argv1); + return true; + +fail: + wasm_free(argv1); + return false; +} + +static bool +check_type(uint8 type, const char *p) +{ + const char *str = "i32"; + + if (strlen(p) < 3) + return false; + + switch (type) { + case VALUE_TYPE_I32: + str = "i32"; + break; + case VALUE_TYPE_I64: + str = "i64"; + break; + case VALUE_TYPE_F32: + str = "f32"; + break; + case VALUE_TYPE_F64: + str = "f64"; + break; + } + if (strncmp(p, str, 3)) + return false; + + return true; +} + +static bool +check_function_type(const WASMType *type, + const char *signature) +{ + uint32 i; + const char *p = signature; + + if (!p || *p++ != '(') + return false; + + for (i = 0; i < type->param_count; i++) { + if (!check_type(type->types[i], p)) + return false; + p += 3; + } + + if (*p++ != ')') + return false; + + if (type->result_count) { + if (!check_type(type->types[type->param_count], p)) + return false; + p += 3; + } + + if (*p != '\0') + return false; + + return true; +} + +WASMFunctionInstance* +wasm_runtime_lookup_function(const WASMModuleInstance *module_inst, + const char *name, + const char *signature) +{ + uint32 i; + for (i = 0; i < module_inst->export_func_count; i++) + if (!strcmp(module_inst->export_functions[i].name, name) + && check_function_type( + module_inst->export_functions[i].function->u.func->func_type, + signature)) + return module_inst->export_functions[i].function; + return NULL; +} + diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-interp.c b/core/iwasm/runtime/vmcore_wasm/wasm-interp.c new file mode 100644 index 000000000..6f86bc7f5 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-interp.c @@ -0,0 +1,2160 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-interp.h" +#include "wasm-runtime.h" +#include "wasm-thread.h" +#include "wasm-opcode.h" +#include "wasm-loader.h" +#include "wasm_log.h" +#include "wasm_memory.h" + +typedef int32 CellType_I32; +typedef int64 CellType_I64; +typedef float32 CellType_F32; +typedef float64 CellType_F64; + +#define BR_TABLE_TMP_BUF_LEN 32 + +/* 64-bit Memory accessors. */ +#if WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0 +#define PUT_I64_TO_ADDR(addr, value) do { \ + *(int64*)(addr) = (int64)(value); \ + } while (0) + +#define PUT_F64_TO_ADDR(addr, value) do { \ + *(float64*)(addr) = (float64)(value); \ + } while (0) + +#define GET_I64_FROM_ADDR(addr) (*(int64*)(addr)) +#define GET_F64_FROM_ADDR(addr) (*(float64*)(addr)) +#else /* WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0 */ +#define PUT_I64_TO_ADDR(addr, value) do { \ + union { int64 val; uint32 parts[2]; } u; \ + u.val = (value); \ + (addr)[0] = u.parts[0]; \ + (addr)[1] = u.parts[1]; \ + } while (0) +#define PUT_F64_TO_ADDR(addr, value) do { \ + union { float64 val; uint32 parts[2]; } u; \ + u.val = (value); \ + (addr)[0] = u.parts[0]; \ + (addr)[1] = u.parts[1]; \ + } while (0) + +static inline int64 +GET_I64_FROM_ADDR(uint32 *addr) +{ + union { int64 val; uint32 parts[2]; } u; + u.parts[0] = addr[0]; + u.parts[1] = addr[1]; + return u.val; +} + +static inline float64 +GET_F64_FROM_ADDR (uint32 *addr) +{ + union { float64 val; uint32 parts[2]; } u; + u.parts[0] = addr[0]; + u.parts[1] = addr[1]; + return u.val; +} +#endif /* WASM_CPU_SUPPORTS_UNALIGNED_64BIT_ACCESS != 0 */ + +#define is_valid_addr(memory, heap, addr) \ + (memory->base_addr <= addr && addr <= memory->end_addr) \ + +#define CHECK_MEMORY_OVERFLOW() do { \ + uint8 *maddr1; \ + if (flags != 2) \ + LOG_VERBOSE("unaligned load/store in wasm interp, flag is: %d.\n", flags);\ + if (offset + addr < addr) { \ + wasm_runtime_set_exception(module, "out of bounds memory access"); \ + goto got_exception; \ + } \ + maddr = memory->memory_data + (offset + addr); \ + if (!is_valid_addr(memory, NULL, maddr)) { \ + wasm_runtime_set_exception(module, "out of bounds memory access"); \ + goto got_exception; \ + } \ + maddr1 = maddr + LOAD_SIZE[opcode - WASM_OP_I32_LOAD]; \ + if (!is_valid_addr(memory, NULL, maddr1)) { \ + wasm_runtime_set_exception(module, "out of bounds memory access"); \ + goto got_exception; \ + } \ + } while (0) + +static inline uint32 +rotl32(uint32 n, unsigned int c) +{ + const unsigned int mask = (31); + c = c % 32; + c &= mask; + return (n<>( (-c)&mask )); +} + +static inline uint32 +rotr32(uint32 n, unsigned int c) +{ + const unsigned int mask = (31); + c = c % 32; + c &= mask; + return (n>>c) | (n<<( (-c)&mask )); +} + +static inline uint64 +rotl64(uint64 n, unsigned int c) +{ + const unsigned int mask = (63); + c = c % 64; + c &= mask; + return (n<>( (-c)&mask )); +} + +static inline uint64 +rotr64(uint64 n, unsigned int c) +{ + const unsigned int mask = (63); + c = c % 64; + c &= mask; + return (n>>c) | (n<<( (-c)&mask )); +} + +static inline double +wa_fmax(double a, double b) +{ + double c = fmax(a, b); + if (c==0 && a==b) + return signbit(a) ? b : a; + return c; +} + +static inline double +wa_fmin(double a, double b) +{ + double c = fmin(a, b); + if (c==0 && a==b) + return signbit(a) ? a : b; + return c; +} + +static inline uint32 +clz32(uint32 type) +{ + uint32 num = 0; + if (type == 0) + return 32; + while (!(type & 0x80000000)) { + num++; + type <<= 1; + } + return num; +} + +static inline uint32 +clz64(uint64 type) +{ + uint32 num = 0; + if (type == 0) + return 64; + while (!(type & 0x8000000000000000LL)) { + num++; + type <<= 1; + } + return num; +} + +static inline uint32 +ctz32(uint32 type) +{ + uint32 num = 0; + if (type == 0) + return 32; + while (!(type & 1)) { + num++; + type >>= 1; + } + return num; +} + +static inline uint32 +ctz64(uint64 type) +{ + uint32 num = 0; + if (type == 0) + return 64; + while (!(type & 1)) { + num++; + type >>= 1; + } + return num; +} + +static inline uint32 +popcount32(uint32 u) +{ + uint32 ret = 0; + while (u) { + u = (u & (u - 1)); + ret++; + } + return ret; +} + +static inline uint32 +popcount64(uint64 u) +{ + uint32 ret = 0; + while (u) { + u = (u & (u - 1)); + ret++; + } + return ret; +} + +static inline WASMGlobalInstance* +get_global(const WASMModuleInstance *module, uint32 global_idx) +{ + if (global_idx >= module->global_count) + return NULL; + + return module->globals + global_idx; +} + +static inline uint8* +get_global_addr(WASMMemoryInstance *memory, WASMGlobalInstance *global) +{ + return memory->global_data + global->data_offset; +} + +static uint64 +read_leb(const uint8 *buf, uint32 *p_offset, uint32 maxbits, bool sign) +{ + uint64 result = 0; + uint32 shift = 0; + uint32 bcnt = 0; + uint64 byte; + + while (true) { + byte = buf[*p_offset]; + *p_offset += 1; + result |= ((byte & 0x7f) << shift); + shift += 7; + if ((byte & 0x80) == 0) { + break; + } + bcnt += 1; + } + if (sign && (shift < maxbits) && (byte & 0x40)) { + /* Sign extend */ + result |= - (1 << shift); + } + return result; +} + +#define PUSH_I32(value) do { \ + *(int32*)frame_sp++ = (int32)(value); \ + } while (0) + +#define PUSH_F32(value) do { \ + *(float32*)frame_sp++ = (float32)(value); \ + } while (0) + +#define PUSH_I64(value) do { \ + PUT_I64_TO_ADDR(frame_sp, value); \ + frame_sp += 2; \ + } while (0) + +#define PUSH_F64(value) do { \ + PUT_F64_TO_ADDR(frame_sp, value); \ + frame_sp += 2; \ + } while (0) + +#define PUSH_CSP(type, ret_type, start, else_, end) do {\ + wasm_assert(frame_csp < frame->csp_boundary); \ + frame_csp->block_type = type; \ + frame_csp->return_type = ret_type; \ + frame_csp->start_addr = start; \ + frame_csp->else_addr = else_; \ + frame_csp->end_addr = end; \ + frame_csp->frame_sp = frame_sp; \ + frame_csp++; \ + } while (0) + +#define POP_I32() (--frame_sp, *(int32*)frame_sp) + +#define POP_F32() (--frame_sp, *(float32*)frame_sp) + +#define POP_I64() (frame_sp -= 2, GET_I64_FROM_ADDR(frame_sp)) + +#define POP_F64() (frame_sp -= 2, GET_F64_FROM_ADDR(frame_sp)) + +#define POP_CSP_CHECK_OVERFLOW(n) do { \ + wasm_assert(frame_csp - n >= frame->csp_bottom); \ + } while (0) + +#define POP_CSP() do { \ + POP_CSP_CHECK_OVERFLOW(1); \ + --frame_csp; \ + } while (0) + +#define POP_CSP_N(n) do { \ + uint32 *frame_sp_old = frame_sp; \ + POP_CSP_CHECK_OVERFLOW(n + 1); \ + frame_csp -= n; \ + if ((frame_csp - 1)->block_type != BLOCK_TYPE_LOOP) \ + /* block block/if/function, jump to end of block */ \ + frame_ip = (frame_csp - 1)->end_addr; \ + else /* loop block, jump to start of block */ \ + frame_ip = (frame_csp - 1)->start_addr; \ + /* copy return value of block */ \ + frame_sp = (frame_csp - 1)->frame_sp; \ + switch ((frame_csp - 1)->return_type) { \ + case VALUE_TYPE_I32: \ + PUSH_I32(*(frame_sp_old - 1)); \ + break; \ + case VALUE_TYPE_I64: \ + PUSH_I64(GET_I64_FROM_ADDR(frame_sp_old - 2)); \ + break; \ + case VALUE_TYPE_F32: \ + PUSH_F32(*(float32*)(frame_sp_old - 1)); \ + break; \ + case VALUE_TYPE_F64: \ + PUSH_F64(GET_F64_FROM_ADDR(frame_sp_old - 2)); \ + break; \ + } \ + } while (0) + +#define local_off(n) (frame_lp + cur_func->local_offsets[n]) + +#define LOCAL_I32(n) (*(int32*)(local_off(n))) + +#define SET_LOCAL_I32(N, val) do { \ + int n = (N); \ + *(int32*)(local_off(n)) = (int32)(val); \ + } while (0) + +#define LOCAL_F32(n) (*(float32*)(local_off(n))) + +#define SET_LOCAL_F32(N, val) do { \ + int n = (N); \ + *(float32*)(local_off(n)) = (float32)(val); \ + } while (0) + +#define LOCAL_I64(n) (GET_I64_FROM_ADDR(local_off(n))) + +#define SET_LOCAL_I64(N, val) do { \ + int n = (N); \ + PUT_I64_TO_ADDR(local_off(n), val); \ + } while (0) + +#define LOCAL_F64(n) (GET_F64_FROM_ADDR(local_off(n))) + +#define SET_LOCAL_F64(N, val) do { \ + int n = (N); \ + PUT_F64_TO_ADDR(local_off(n), val); \ + } while (0) + +/* Pop the given number of elements from the given frame's stack. */ +#define POP(N) do { \ + int n = (N); \ + frame_sp -= n; \ + } while (0) + +#define SYNC_ALL_TO_FRAME() do { \ + frame->sp = frame_sp; \ + frame->ip = frame_ip; \ + frame->csp = frame_csp; \ + } while (0) + +#define UPDATE_ALL_FROM_FRAME() do { \ + frame_sp = frame->sp; \ + frame_ip = frame->ip; \ + frame_csp = frame->csp; \ + } while (0) + +#define read_leb_uint64(p, p_end, res) do { \ + uint32 _off = 0; \ + res = read_leb(p, &_off, 64, false); \ + p += _off; \ +} while (0) + +#define read_leb_int64(p, p_end, res) do { \ + uint32 _off = 0; \ + res = (int64)read_leb(p, &_off, 64, true); \ + p += _off; \ +} while (0) + +#define read_leb_uint32(p, p_end, res) do { \ + uint32 _off = 0; \ + res = (uint32)read_leb(p, &_off, 32, false); \ + p += _off; \ +} while (0) + +#define read_leb_int32(p, p_end, res) do { \ + uint32 _off = 0; \ + res = (int32)read_leb(p, &_off, 32, true); \ + p += _off; \ +} while (0) + +#define read_leb_uint8(p, p_end, res) do { \ + uint32 _off = 0; \ + res = (uint8)read_leb(p, &_off, 7, false); \ + p += _off; \ +} while (0) + +#define RECOVER_CONTEXT(new_frame) do { \ + frame = (new_frame); \ + cur_func = frame->function; \ + prev_frame = frame->prev_frame; \ + frame_ip = frame->ip; \ + frame_ip_end = wasm_runtime_get_func_code_end(cur_func); \ + frame_lp = frame->lp; \ + frame_sp = frame->sp; \ + frame_csp = frame->csp; \ + } while (0) + +#if WASM_ENABLE_LABELS_AS_VALUES != 0 +#define GET_OPCODE() opcode = *(frame_ip - 1); +#else +#define GET_OPCODE() (void)0 +#endif + +#define DEF_OP_LOAD(operation) do { \ + uint32 offset, flags, addr; \ + GET_OPCODE(); \ + read_leb_uint32(frame_ip, frame_ip_end, flags); \ + read_leb_uint32(frame_ip, frame_ip_end, offset); \ + addr = POP_I32(); \ + CHECK_MEMORY_OVERFLOW(); \ + operation; \ + (void)flags; \ + } while (0) + +#define DEF_OP_STORE(sval_type, sval_op_type, operation) do { \ + uint32 offset, flags, addr; \ + sval_type sval; \ + GET_OPCODE(); \ + read_leb_uint32(frame_ip, frame_ip_end, flags); \ + read_leb_uint32(frame_ip, frame_ip_end, offset); \ + sval = POP_##sval_op_type(); \ + addr = POP_I32(); \ + CHECK_MEMORY_OVERFLOW(); \ + operation; \ + (void)flags; \ + } while (0) + +#define DEF_OP_I_CONST(ctype, src_op_type) do { \ + ctype cval; \ + read_leb_##ctype(frame_ip, frame_ip_end, cval); \ + PUSH_##src_op_type(cval); \ + } while (0) + +#define DEF_OP_EQZ(src_op_type) do { \ + uint32 val; \ + val = POP_##src_op_type() == 0; \ + PUSH_I32(val); \ + } while (0) + +#define DEF_OP_CMP(src_type, src_op_type, cond) do { \ + uint32 res; \ + src_type val1, val2; \ + val2 = POP_##src_op_type(); \ + val1 = POP_##src_op_type(); \ + res = val1 cond val2; \ + PUSH_I32(res); \ + } while (0) + +#define DEF_OP_BIT_COUNT(src_type, src_op_type, operation) do { \ + src_type val1, val2; \ + val1 = POP_##src_op_type(); \ + val2 = operation(val1); \ + PUSH_##src_op_type(val2); \ + } while (0) + +#define DEF_OP_NUMERIC(src_type1, src_type2, src_op_type, operation) do { \ + frame_sp -= sizeof(src_type2)/sizeof(uint32); \ + *(src_type1*)(frame_sp - sizeof(src_type1)/sizeof(uint32)) operation##= \ + *(src_type2*)(frame_sp); \ + } while (0) + +#define DEF_OP_MATH(src_type, src_op_type, method) do { \ + src_type val; \ + val = POP_##src_op_type(); \ + PUSH_##src_op_type(method(val)); \ + } while (0) + +#define DEF_OP_TRUNC(dst_type, dst_op_type, src_type, src_op_type, \ + min_cond, max_cond) do { \ + src_type value = POP_##src_op_type(); \ + if (isnan(value)) { \ + wasm_runtime_set_exception(module, \ + "invalid conversion to integer"); \ + goto got_exception; \ + } \ + else if (value min_cond || value max_cond) { \ + wasm_runtime_set_exception(module, "integer overflow"); \ + goto got_exception; \ + } \ + PUSH_##dst_op_type(((dst_type)value)); \ + } while (0) + +#define DEF_OP_CONVERT(dst_type, dst_op_type, \ + src_type, src_op_type) do { \ + dst_type value = (dst_type)(src_type)POP_##src_op_type(); \ + PUSH_##dst_op_type(value); \ + } while (0) + +#define GET_LOCAL_INDEX_AND_TYPE() do { \ + param_count = cur_func->u.func->func_type->param_count; \ + local_count = cur_func->u.func->local_count; \ + read_leb_uint32(frame_ip, frame_ip_end, local_idx); \ + wasm_assert(local_idx < param_count + local_count); \ + if (local_idx < param_count) \ + local_type = cur_func->u.func->func_type->types[local_idx]; \ + else \ + local_type = \ + cur_func->u.func->local_types[local_idx - param_count]; \ + } while (0) + +static inline int32 +sign_ext_8_32(int8 val) +{ + if (val & 0x80) + return val | 0xffffff00; + return val; +} + +static inline int32 +sign_ext_16_32(int16 val) +{ + if (val & 0x8000) + return val | 0xffff0000; + return val; +} + +static inline int64 +sign_ext_8_64(int8 val) +{ + if (val & 0x80) + return val | 0xffffffffffffff00; + return val; +} + +static inline int64 +sign_ext_16_64(int16 val) +{ + if (val & 0x8000) + return val | 0xffffffffffff0000; + return val; +} + +static inline int64 +sign_ext_32_64(int32 val) +{ + if (val & 0x80000000) + return val | 0xffffffff00000000; + return val; +} + +static inline void +word_copy(uint32 *dest, uint32 *src, unsigned num) +{ + for (; num > 0; num--) + *dest++ = *src++; +} + +static inline WASMInterpFrame* +ALLOC_FRAME(WASMThread *self, uint32 size, WASMInterpFrame *prev_frame) +{ + WASMInterpFrame *frame = wasm_thread_alloc_wasm_frame(self, size); + + if (frame) + frame->prev_frame = prev_frame; + else { + wasm_runtime_set_exception(self->module_inst, + "WASM interp failed, alloc frame failed."); + } + + return frame; +} + +static inline void +FREE_FRAME(WASMThread *self, WASMInterpFrame *frame) +{ + wasm_thread_free_wasm_frame(self, frame); +} + +typedef void (*GenericFunctionPointer)(); +int64 invokeNative(uint32 *args, uint32 sz, GenericFunctionPointer f); + +typedef float64 (*Float64FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef float32 (*Float32FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef int64 (*Int64FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef int32 (*Int32FuncPtr)(uint32*, uint32, GenericFunctionPointer); +typedef void (*VoidFuncPtr)(uint32*, uint32, GenericFunctionPointer); + +static Int64FuncPtr invokeNative_Int64 = (Int64FuncPtr)invokeNative; +static Int32FuncPtr invokeNative_Int32 = (Int32FuncPtr)invokeNative; +static Float64FuncPtr invokeNative_Float64 = (Float64FuncPtr)invokeNative; +static Float32FuncPtr invokeNative_Float32 = (Float32FuncPtr)invokeNative; +static VoidFuncPtr invokeNative_Void = (VoidFuncPtr)invokeNative; + +static void +wasm_interp_call_func_native(WASMThread *self, + WASMFunctionInstance *cur_func, + WASMInterpFrame *prev_frame) +{ + unsigned local_cell_num = 2; + WASMInterpFrame *frame; + typedef void (*F)(WASMThread*, uint32 *argv); + union { F f; void *v; } u; + uint32 argv_buf[32], *argv, argc = cur_func->param_cell_num; + + if (!(frame = ALLOC_FRAME + (self, wasm_interp_interp_frame_size(local_cell_num), prev_frame))) + return; + + frame->function = cur_func; + frame->ip = NULL; + frame->sp = frame->lp + local_cell_num; + + wasm_thread_set_cur_frame (self, frame); + + if (argc <= 32) + argv = argv_buf; + else { + if (!(argv = wasm_malloc(sizeof(uint32) * argc))) { + wasm_runtime_set_exception(self->module_inst, + "WASM call native failed: alloc memory for argv failed."); + return; + } + } + + word_copy(argv, frame->lp, argc); + + u.v = cur_func->u.func_import->func_ptr_linked; + { + WASMType *func_type = cur_func->u.func_import->func_type; + uint8 ret_type = func_type->result_count + ? func_type->types[func_type->param_count] + : VALUE_TYPE_VOID; + GenericFunctionPointer f = (GenericFunctionPointer)(uintptr_t)u.v; + + if (func_type->result_count == 0) { + invokeNative_Void(argv, argc, f); + } + else { + switch (ret_type) { + case VALUE_TYPE_I32: + argv[0] = invokeNative_Int32(argv, argc, f); + break; + case VALUE_TYPE_I64: + PUT_I64_TO_ADDR(argv, invokeNative_Int64(argv, argc, f)); + break; + case VALUE_TYPE_F32: + *(float32*)argv = invokeNative_Float32(argv, argc, f); + break; + case VALUE_TYPE_F64: + PUT_F64_TO_ADDR(argv, invokeNative_Float64(argv, argc, f)); + break; + } + } + } + + if (cur_func->ret_cell_num == 1) { + prev_frame->sp[0] = argv[0]; + prev_frame->sp++; + } + else if (cur_func->ret_cell_num == 2) { + prev_frame->sp[0] = argv[0]; + prev_frame->sp[1] = argv[1]; + prev_frame->sp += 2; + } + + if (argc > 32) + wasm_free(argv); + + FREE_FRAME(self, frame); + wasm_thread_set_cur_frame(self, prev_frame); +} + +#if WASM_ENABLE_LABELS_AS_VALUES != 0 + +#define HANDLE_OP(opcode) HANDLE_##opcode +#define FETCH_OPCODE_AND_DISPATCH() goto *handle_table[*frame_ip++] +#define HANDLE_OP_END() FETCH_OPCODE_AND_DISPATCH() + +#else /* else of WASM_ENABLE_LABELS_AS_VALUES */ + +#define HANDLE_OP(opcode) case opcode +#define HANDLE_OP_END() continue + +#endif /* end of WASM_ENABLE_LABELS_AS_VALUES */ + +static void +wasm_interp_call_func_bytecode(WASMThread *self, + WASMFunctionInstance *cur_func, + WASMInterpFrame *prev_frame) +{ + WASMModuleInstance *module = self->module_inst; + WASMMemoryInstance *memory = module->default_memory; + WASMTableInstance *table = module->default_table; + uint8 opcode_IMPDEP2 = WASM_OP_IMPDEP2; + WASMInterpFrame *frame = NULL; + /* Points to this special opcode so as to jump to the + call_method_from_entry. */ + register uint8 *frame_ip = &opcode_IMPDEP2; /* cache of frame->ip */ + register uint32 *frame_lp = NULL; /* cache of frame->lp */ + register uint32 *frame_sp = NULL; /* cache of frame->sp */ + WASMBranchBlock *frame_csp = NULL; + uint8 *frame_ip_end = frame_ip + 1; + uint8 opcode, block_ret_type; + uint32 *depths = NULL; + uint32 depth_buf[BR_TABLE_TMP_BUF_LEN]; + uint32 i, depth, cond, count, fidx, tidx, frame_size = 0, all_cell_num = 0; + int32 didx, val; + uint8 *else_addr, *end_addr; + uint8 *maddr; + +#if WASM_ENABLE_LABELS_AS_VALUES != 0 + #define HANDLE_OPCODE(op) &&HANDLE_##op + DEFINE_GOTO_TABLE (handle_table); + #undef HANDLE_OPCODE +#endif + + /* Size of memory load. + This starts with the first memory load operator at opcode 0x28 */ + uint32 LOAD_SIZE[] = { + 4, 8, 4, 8, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, /* loads */ + 4, 8, 4, 8, 1, 2, 1, 2, 4 }; /* stores */ + +#if WASM_ENABLE_LABELS_AS_VALUES == 0 + while (frame_ip < frame_ip_end) { + opcode = *frame_ip++; + switch (opcode) { +#else + FETCH_OPCODE_AND_DISPATCH (); +#endif + /* control instructions */ + HANDLE_OP (WASM_OP_UNREACHABLE): + wasm_runtime_set_exception(module, "unreachable"); + goto got_exception; + + HANDLE_OP (WASM_OP_NOP): + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_BLOCK): + read_leb_uint32(frame_ip, frame_ip_end, block_ret_type); + + if (!wasm_loader_find_block_addr(module->branch_set, frame_ip, + frame_ip_end, BLOCK_TYPE_BLOCK, + &else_addr, &end_addr, + NULL, 0)) { + wasm_runtime_set_exception(module, "wasm loader find block addr failed"); + goto got_exception; + } + + PUSH_CSP(BLOCK_TYPE_BLOCK, block_ret_type, frame_ip, NULL, end_addr); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_LOOP): + read_leb_uint32(frame_ip, frame_ip_end, block_ret_type); + + if (!wasm_loader_find_block_addr(module->branch_set, frame_ip, + frame_ip_end, BLOCK_TYPE_LOOP, + &else_addr, &end_addr, + NULL, 0)) { + wasm_runtime_set_exception(module, "wasm loader find block addr failed"); + goto got_exception; + } + + PUSH_CSP(BLOCK_TYPE_LOOP, block_ret_type, frame_ip, NULL, end_addr); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_IF): + read_leb_uint32(frame_ip, frame_ip_end, block_ret_type); + + if (!wasm_loader_find_block_addr(module->branch_set, frame_ip, + frame_ip_end, BLOCK_TYPE_IF, + &else_addr, &end_addr, + NULL, 0)) { + wasm_runtime_set_exception(module, "wasm loader find block addr failed"); + goto got_exception; + } + + cond = POP_I32(); + + PUSH_CSP(BLOCK_TYPE_IF, block_ret_type, frame_ip, else_addr, end_addr); + + /* condition of the if branch is false, else condition is met */ + if (cond == 0) { + /* if there is no else branch, go to the end addr */ + if (else_addr == NULL) { + POP_CSP(); + frame_ip = end_addr + 1; + } + /* if there is an else branch, go to the else addr */ + else + frame_ip = else_addr + 1; + } + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_ELSE): + /* comes from the if branch in WASM_OP_IF */ + frame_ip = (frame_csp - 1)->end_addr; + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_END): + if (frame_csp > frame->csp_bottom + 1) { + POP_CSP(); + } + else { /* end of function, treat as WASM_OP_RETURN */ + frame_sp -= cur_func->ret_cell_num; + for (i = 0; i < cur_func->ret_cell_num; i++) { + *prev_frame->sp++ = frame_sp[i]; + } + goto return_func; + } + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_BR): + read_leb_uint32(frame_ip, frame_ip_end, depth); + POP_CSP_N(depth); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_BR_IF): + read_leb_uint32(frame_ip, frame_ip_end, depth); + cond = POP_I32(); + if (cond) + POP_CSP_N(depth); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_BR_TABLE): + read_leb_uint32(frame_ip, frame_ip_end, count); + if (count <= BR_TABLE_TMP_BUF_LEN) + depths = depth_buf; + else { + if (!(depths = wasm_malloc(sizeof(uint32) * count))) { + wasm_runtime_set_exception(module, "WASM interp failed, " + "alloc block memory for br_table failed."); + goto got_exception; + } + } + for (i = 0; i < count; i++) { + read_leb_uint32(frame_ip, frame_ip_end, depths[i]); + } + read_leb_uint32(frame_ip, frame_ip_end, depth); + didx = POP_I32(); + if (didx >= 0 && (uint32)didx < count) { + depth = depths[didx]; + } + if (depths != depth_buf) { + wasm_free(depths); + depths = NULL; + } + POP_CSP_N(depth); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_RETURN): + frame_sp -= cur_func->ret_cell_num; + for (i = 0; i < cur_func->ret_cell_num; i++) { + *prev_frame->sp++ = frame_sp[i]; + } + goto return_func; + + HANDLE_OP (WASM_OP_CALL): + read_leb_uint32(frame_ip, frame_ip_end, fidx); + wasm_assert(fidx < module->function_count); + cur_func = module->functions + fidx; + goto call_func_from_interp; + + HANDLE_OP (WASM_OP_CALL_INDIRECT): + { + WASMType *cur_type, *cur_func_type; + /* TODO: test */ + read_leb_uint32(frame_ip, frame_ip_end, tidx); + if (tidx >= module->module->type_count) { + wasm_runtime_set_exception(module, "type index is overflow"); + goto got_exception; + } + cur_type = module->module->types[tidx]; + + /* to skip 0x00 here */ + frame_ip++; + val = POP_I32(); + + if (val < 0 || val >= (int32)table->cur_size) { + wasm_runtime_set_exception(module, "undefined element"); + goto got_exception; + } + + fidx = ((uint32*)table->base_addr)[val]; + if (fidx >= module->function_count) { + wasm_runtime_set_exception(module, "function index is overflow"); + goto got_exception; + } + + cur_func = module->functions + fidx; + + if (cur_func->is_import_func) + cur_func_type = cur_func->u.func_import->func_type; + else + cur_func_type = cur_func->u.func->func_type; + if (!wasm_type_equal(cur_type, cur_func_type)) { + wasm_runtime_set_exception(module, "indirect call type mismatch"); + goto got_exception; + } + goto call_func_from_interp; + } + + /* parametric instructions */ + HANDLE_OP (WASM_OP_DROP): + { + wasm_runtime_set_exception(module, + "wasm interp failed: unsupported opcode"); + goto got_exception; + } + + HANDLE_OP (WASM_OP_DROP_32): + { + frame_sp--; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_DROP_64): + { + frame_sp -= 2; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_SELECT): + { + wasm_runtime_set_exception(module, + "wasm interp failed: unsupported opcode"); + goto got_exception; + } + + HANDLE_OP (WASM_OP_SELECT_32): + { + cond = POP_I32(); + frame_sp--; + if (!cond) + *(frame_sp - 1) = *frame_sp; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_SELECT_64): + { + cond = POP_I32(); + frame_sp -= 2; + if (!cond) { + *(frame_sp - 2) = *frame_sp; + *(frame_sp - 1) = *(frame_sp + 1); + } + HANDLE_OP_END (); + } + + /* variable instructions */ + HANDLE_OP (WASM_OP_GET_LOCAL): + { + uint32 local_idx, param_count, local_count; + uint8 local_type; + + GET_LOCAL_INDEX_AND_TYPE(); + + switch (local_type) { + case VALUE_TYPE_I32: + PUSH_I32(LOCAL_I32(local_idx)); + break; + case VALUE_TYPE_F32: + PUSH_F32(LOCAL_F32(local_idx)); + break; + case VALUE_TYPE_I64: + PUSH_I64(LOCAL_I64(local_idx)); + break; + case VALUE_TYPE_F64: + PUSH_F64(LOCAL_F64(local_idx)); + break; + default: + wasm_runtime_set_exception(module, + "get local type is invalid"); + goto got_exception; + } + (void)local_count; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_SET_LOCAL): + { + uint32 local_idx, param_count, local_count; + uint8 local_type; + + GET_LOCAL_INDEX_AND_TYPE(); + + switch (local_type) { + case VALUE_TYPE_I32: + SET_LOCAL_I32(local_idx, POP_I32()); + break; + case VALUE_TYPE_F32: + SET_LOCAL_F32(local_idx, POP_F32()); + break; + case VALUE_TYPE_I64: + SET_LOCAL_I64(local_idx, POP_I64()); + break; + case VALUE_TYPE_F64: + SET_LOCAL_F64(local_idx, POP_F64()); + break; + default: + wasm_runtime_set_exception(module, + "set local type is invalid"); + goto got_exception; + } + (void)local_count; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_TEE_LOCAL): + { + uint32 local_idx, param_count, local_count; + uint8 local_type; + + GET_LOCAL_INDEX_AND_TYPE(); + + switch (local_type) { + case VALUE_TYPE_I32: + SET_LOCAL_I32(local_idx, *(frame_sp - 1)); + break; + case VALUE_TYPE_F32: + SET_LOCAL_F32(local_idx, *(float32*)(frame_sp - 1)); + break; + case VALUE_TYPE_I64: + SET_LOCAL_I64(local_idx, GET_I64_FROM_ADDR(frame_sp - 2)); + break; + case VALUE_TYPE_F64: + SET_LOCAL_F64(local_idx, GET_F64_FROM_ADDR(frame_sp - 2)); + break; + default: + wasm_runtime_set_exception(module, "tee local type is invalid"); + goto got_exception; + } + (void)local_count; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_GET_GLOBAL): + { + WASMGlobalInstance *global; + uint32 global_idx; + + read_leb_uint32(frame_ip, frame_ip_end, global_idx); + + global = get_global(module, global_idx); + wasm_assert(global && global_idx < module->global_count); + + switch (global->type) { + case VALUE_TYPE_I32: + PUSH_I32(*(uint32*)get_global_addr(memory, global)); + break; + case VALUE_TYPE_F32: + PUSH_F32(*(float32*)get_global_addr(memory, global)); + break; + case VALUE_TYPE_I64: + PUSH_I64(*(uint64*)get_global_addr(memory, global)); + break; + case VALUE_TYPE_F64: + PUSH_F64(*(float64*)get_global_addr(memory, global)); + break; + default: + wasm_runtime_set_exception(module, "get global type is invalid"); + goto got_exception; + } + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_SET_GLOBAL): + { + WASMGlobalInstance *global; + uint32 global_idx; + uint8 *global_addr; + + read_leb_uint32(frame_ip, frame_ip_end, global_idx); + + global = get_global(module, global_idx); + wasm_assert(global && global_idx < module->global_count); + + global_addr = get_global_addr(memory, global); + switch (global->type) { + case VALUE_TYPE_I32: + *(uint32*)global_addr = POP_I32(); + break; + case VALUE_TYPE_F32: + *(float32*)global_addr = POP_F32(); + break; + case VALUE_TYPE_I64: + PUT_I64_TO_ADDR((uint32*)global_addr, POP_I64()); + break; + case VALUE_TYPE_F64: + PUT_F64_TO_ADDR((uint32*)global_addr, POP_F64()); + break; + default: + wasm_runtime_set_exception(module, "set global index is overflow"); + goto got_exception; + } + HANDLE_OP_END (); + } + + /* memory load instructions */ + HANDLE_OP (WASM_OP_I32_LOAD): + DEF_OP_LOAD(PUSH_I32(*(int32*)maddr)); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD): + DEF_OP_LOAD(PUSH_I64(GET_I64_FROM_ADDR((uint32*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_LOAD): + DEF_OP_LOAD(PUSH_F32(*(float32*)maddr)); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_LOAD): + DEF_OP_LOAD(PUSH_F64(GET_F64_FROM_ADDR((uint32*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LOAD8_S): + DEF_OP_LOAD(PUSH_I32(sign_ext_8_32(*(int8*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LOAD8_U): + DEF_OP_LOAD(PUSH_I32((uint32)(*(uint8*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LOAD16_S): + DEF_OP_LOAD(PUSH_I32(sign_ext_16_32(*(int16*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LOAD16_U): + DEF_OP_LOAD(PUSH_I32((uint32)(*(uint16*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD8_S): + DEF_OP_LOAD(PUSH_I64(sign_ext_8_64(*(int8*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD8_U): + DEF_OP_LOAD(PUSH_I64((uint64)(*(uint8*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD16_S): + DEF_OP_LOAD(PUSH_I64(sign_ext_16_64(*(int16*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD16_U): + DEF_OP_LOAD(PUSH_I64((uint64)(*(uint16*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD32_S): + DEF_OP_LOAD(PUSH_I64(sign_ext_32_64(*(int32*)maddr))); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LOAD32_U): + DEF_OP_LOAD(PUSH_I64((uint64)(*(uint32*)maddr))); + HANDLE_OP_END (); + + /* memory store instructions */ + HANDLE_OP (WASM_OP_I32_STORE): + DEF_OP_STORE(uint32, I32, *(int32*)maddr = sval); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_STORE): + DEF_OP_STORE(uint64, I64, PUT_I64_TO_ADDR((uint32*)maddr, sval)); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_STORE): + { + uint32 offset, flags, addr; + GET_OPCODE(); + read_leb_uint32(frame_ip, frame_ip_end, flags); + read_leb_uint32(frame_ip, frame_ip_end, offset); + frame_sp--; + addr = POP_I32(); + CHECK_MEMORY_OVERFLOW(); + *(uint32*)maddr = frame_sp[1]; + (void)flags; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_F64_STORE): + { + uint32 offset, flags, addr; + GET_OPCODE(); + read_leb_uint32(frame_ip, frame_ip_end, flags); + read_leb_uint32(frame_ip, frame_ip_end, offset); + frame_sp -= 2; + addr = POP_I32(); + CHECK_MEMORY_OVERFLOW(); + *(uint32*)maddr = frame_sp[1]; + *((uint32*)maddr + 1) = frame_sp[2]; + (void)flags; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_STORE8): + DEF_OP_STORE(uint32, I32, *(uint8*)maddr = (uint8)sval); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_STORE16): + DEF_OP_STORE(uint32, I32, *(uint16*)maddr = (uint16)sval); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_STORE8): + DEF_OP_STORE(uint64, I64, *(uint8*)maddr = (uint8)sval); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_STORE16): + DEF_OP_STORE(uint64, I64, *(uint16*)maddr = (uint16)sval); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_STORE32): + DEF_OP_STORE(uint64, I64, *(uint32*)maddr = (uint32)sval); + HANDLE_OP_END (); + + /* memory size and memory grow instructions */ + HANDLE_OP (WASM_OP_MEMORY_SIZE): + { + uint32 reserved; + read_leb_uint32(frame_ip, frame_ip_end, reserved); + PUSH_I32(memory->cur_page_count); + (void)reserved; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_MEMORY_GROW): + { + uint32 reserved, prev_page_count, delta, tmp; + + read_leb_uint32(frame_ip, frame_ip_end, reserved); + prev_page_count = memory->cur_page_count; + delta = POP_I32(); + PUSH_I32(prev_page_count); + if (delta == 0) + HANDLE_OP_END (); + else if (delta + prev_page_count > memory->max_page_count || + delta + prev_page_count < prev_page_count) { + tmp = POP_I32(); + PUSH_I32(-1); + (void)tmp; + HANDLE_OP_END (); + } + + if (!wasm_runtime_enlarge_memory(module, delta)) + goto got_exception; + + memory = module->default_memory; + + (void)reserved; + HANDLE_OP_END (); + } + + /* constant instructions */ + HANDLE_OP (WASM_OP_I32_CONST): + DEF_OP_I_CONST(int32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_CONST): + DEF_OP_I_CONST(int64, I64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_CONST): + { + uint8 *p_float = (uint8*)frame_sp++; + for (i = 0; i < sizeof(float32); i++) + *p_float++ = *frame_ip++; + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_F64_CONST): + { + uint8 *p_float = (uint8*)frame_sp++; + frame_sp++; + for (i = 0; i < sizeof(float64); i++) + *p_float++ = *frame_ip++; + HANDLE_OP_END (); + } + + /* comparison instructions of i32 */ + HANDLE_OP (WASM_OP_I32_EQZ): + DEF_OP_EQZ(I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_EQ): + DEF_OP_CMP(uint32, I32, ==); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_NE): + DEF_OP_CMP(uint32, I32, !=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LT_S): + DEF_OP_CMP(int32, I32, <); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LT_U): + DEF_OP_CMP(uint32, I32, <); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_GT_S): + DEF_OP_CMP(int32, I32, >); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_GT_U): + DEF_OP_CMP(uint32, I32, >); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LE_S): + DEF_OP_CMP(int32, I32, <=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_LE_U): + DEF_OP_CMP(uint32, I32, <=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_GE_S): + DEF_OP_CMP(int32, I32, >=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_GE_U): + DEF_OP_CMP(uint32, I32, >=); + HANDLE_OP_END (); + + /* comparison instructions of i64 */ + HANDLE_OP (WASM_OP_I64_EQZ): + DEF_OP_EQZ(I64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_EQ): + DEF_OP_CMP(uint64, I64, ==); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_NE): + DEF_OP_CMP(uint64, I64, !=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LT_S): + DEF_OP_CMP(int64, I64, <); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LT_U): + DEF_OP_CMP(uint64, I64, <); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_GT_S): + DEF_OP_CMP(int64, I64, >); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_GT_U): + DEF_OP_CMP(uint64, I64, >); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LE_S): + DEF_OP_CMP(int64, I64, <=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_LE_U): + DEF_OP_CMP(uint64, I64, <=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_GE_S): + DEF_OP_CMP(int64, I64, >=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_GE_U): + DEF_OP_CMP(uint64, I64, >=); + HANDLE_OP_END (); + + /* comparison instructions of f32 */ + HANDLE_OP (WASM_OP_F32_EQ): + DEF_OP_CMP(float32, F32, ==); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_NE): + DEF_OP_CMP(float32, F32, !=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_LT): + DEF_OP_CMP(float32, F32, <); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_GT): + DEF_OP_CMP(float32, F32, >); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_LE): + DEF_OP_CMP(float32, F32, <=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_GE): + DEF_OP_CMP(float32, F32, >=); + HANDLE_OP_END (); + + /* comparison instructions of f64 */ + HANDLE_OP (WASM_OP_F64_EQ): + DEF_OP_CMP(float64, F64, ==); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_NE): + DEF_OP_CMP(float64, F64, !=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_LT): + DEF_OP_CMP(float64, F64, <); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_GT): + DEF_OP_CMP(float64, F64, >); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_LE): + DEF_OP_CMP(float64, F64, <=); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_GE): + DEF_OP_CMP(float64, F64, >=); + HANDLE_OP_END (); + + /* numberic instructions of i32 */ + HANDLE_OP (WASM_OP_I32_CLZ): + DEF_OP_BIT_COUNT(uint32, I32, clz32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_CTZ): + DEF_OP_BIT_COUNT(uint32, I32, ctz32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_POPCNT): + DEF_OP_BIT_COUNT(uint32, I32, popcount32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_ADD): + DEF_OP_NUMERIC(uint32, uint32, I32, +); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_SUB): + DEF_OP_NUMERIC(uint32, uint32, I32, -); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_MUL): + DEF_OP_NUMERIC(uint32, uint32, I32, *); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_DIV_S): + { + int32 a, b; + + b = POP_I32(); + a = POP_I32(); + if (a == (int32)0x80000000 && b == -1) { + wasm_runtime_set_exception(module, "integer overflow"); + goto got_exception; + } + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I32(a / b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_DIV_U): + { + uint32 a, b; + + b = POP_I32(); + a = POP_I32(); + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I32(a / b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_REM_S): + { + int32 a, b; + + b = POP_I32(); + a = POP_I32(); + if (a == (int32)0x80000000 && b == -1) { + PUSH_I32(0); + HANDLE_OP_END (); + } + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I32(a % b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_REM_U): + { + uint32 a, b; + + b = POP_I32(); + a = POP_I32(); + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I32(a % b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_AND): + DEF_OP_NUMERIC(uint32, uint32, I32, &); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_OR): + DEF_OP_NUMERIC(uint32, uint32, I32, |); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_XOR): + DEF_OP_NUMERIC(uint32, uint32, I32, ^); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_SHL): + DEF_OP_NUMERIC(uint32, uint32, I32, <<); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_SHR_S): + DEF_OP_NUMERIC(int32, uint32, I32, >>); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_SHR_U): + DEF_OP_NUMERIC(uint32, uint32, I32, >>); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_ROTL): + { + uint32 a, b; + + b = POP_I32(); + a = POP_I32(); + PUSH_I32(rotl32(a, b)); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_ROTR): + { + uint32 a, b; + + b = POP_I32(); + a = POP_I32(); + PUSH_I32(rotr32(a, b)); + HANDLE_OP_END (); + } + + /* numberic instructions of i64 */ + HANDLE_OP (WASM_OP_I64_CLZ): + DEF_OP_BIT_COUNT(uint64, I64, clz64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_CTZ): + DEF_OP_BIT_COUNT(uint64, I64, ctz64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_POPCNT): + DEF_OP_BIT_COUNT(uint64, I64, popcount64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_ADD): + DEF_OP_NUMERIC(uint64, uint64, I64, +); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_SUB): + DEF_OP_NUMERIC(uint64, uint64, I64, -); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_MUL): + DEF_OP_NUMERIC(uint64, uint64, I64, *); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_DIV_S): + { + int64 a, b; + + b = POP_I64(); + a = POP_I64(); + if (a == (int64)0x8000000000000000LL && b == -1) { + wasm_runtime_set_exception(module, "integer overflow"); + goto got_exception; + } + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I64(a / b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I64_DIV_U): + { + uint64 a, b; + + b = POP_I64(); + a = POP_I64(); + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I64(a / b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I64_REM_S): + { + int64 a, b; + + b = POP_I64(); + a = POP_I64(); + if (a == (int64)0x8000000000000000LL && b == -1) { + PUSH_I64(0); + HANDLE_OP_END (); + } + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I64(a % b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I64_REM_U): + { + uint64 a, b; + + b = POP_I64(); + a = POP_I64(); + if (b == 0) { + wasm_runtime_set_exception(module, "integer divide by zero"); + goto got_exception; + } + PUSH_I64(a % b); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I64_AND): + DEF_OP_NUMERIC(uint64, uint64, I64, &); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_OR): + DEF_OP_NUMERIC(uint64, uint64, I64, |); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_XOR): + DEF_OP_NUMERIC(uint64, uint64, I64, ^); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_SHL): + DEF_OP_NUMERIC(uint64, uint64, I64, <<); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_SHR_S): + DEF_OP_NUMERIC(int64, uint64, I64, >>); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_SHR_U): + DEF_OP_NUMERIC(uint64, uint64, I64, >>); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_ROTL): + { + uint64 a, b; + + b = POP_I64(); + a = POP_I64(); + PUSH_I64(rotl64(a, b)); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I64_ROTR): + { + uint64 a, b; + + b = POP_I64(); + a = POP_I64(); + PUSH_I64(rotr64(a, b)); + HANDLE_OP_END (); + } + + /* numberic instructions of f32 */ + HANDLE_OP (WASM_OP_F32_ABS): + DEF_OP_MATH(float32, F32, fabs); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_NEG): + DEF_OP_MATH(float32, F32, -); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_CEIL): + DEF_OP_MATH(float32, F32, ceil); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_FLOOR): + DEF_OP_MATH(float32, F32, floor); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_TRUNC): + DEF_OP_MATH(float32, F32, trunc); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_NEAREST): + DEF_OP_MATH(float32, F32, rint); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_SQRT): + DEF_OP_MATH(float32, F32, sqrt); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_ADD): + DEF_OP_NUMERIC(float32, float32, F32, +); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_SUB): + DEF_OP_NUMERIC(float32, float32, F32, -); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_MUL): + DEF_OP_NUMERIC(float32, float32, F32, *); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_DIV): + DEF_OP_NUMERIC(float32, float32, F32, /); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_MIN): + { + float32 a, b; + + b = POP_F32(); + a = POP_F32(); + PUSH_F32(wa_fmin(a, b)); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_F32_MAX): + { + float32 a, b; + + b = POP_F32(); + a = POP_F32(); + PUSH_F32(wa_fmax(a, b)); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_F32_COPYSIGN): + { + float32 a, b; + + b = POP_F32(); + a = POP_F32(); + PUSH_F32(signbit(b) ? -fabs(a) : fabs(a)); + HANDLE_OP_END (); + } + + /* numberic instructions of f64 */ + HANDLE_OP (WASM_OP_F64_ABS): + DEF_OP_MATH(float64, F64, fabs); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_NEG): + DEF_OP_MATH(float64, F64, -); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_CEIL): + DEF_OP_MATH(float64, F64, ceil); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_FLOOR): + DEF_OP_MATH(float64, F64, floor); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_TRUNC): + DEF_OP_MATH(float64, F64, trunc); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_NEAREST): + DEF_OP_MATH(float64, F64, rint); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_SQRT): + DEF_OP_MATH(float64, F64, sqrt); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_ADD): + DEF_OP_NUMERIC(float64, float64, F64, +); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_SUB): + DEF_OP_NUMERIC(float64, float64, F64, -); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_MUL): + DEF_OP_NUMERIC(float64, float64, F64, *); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_DIV): + DEF_OP_NUMERIC(float64, float64, F64, /); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_MIN): + { + float64 a, b; + + b = POP_F64(); + a = POP_F64(); + PUSH_F64(wa_fmin(a, b)); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_F64_MAX): + { + float64 a, b; + + b = POP_F64(); + a = POP_F64(); + PUSH_F64(wa_fmax(a, b)); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_F64_COPYSIGN): + { + float64 a, b; + + b = POP_F64(); + a = POP_F64(); + PUSH_F64(signbit(b) ? -fabs(a) : fabs(a)); + HANDLE_OP_END (); + } + + /* conversions of i32 */ + HANDLE_OP (WASM_OP_I32_WRAP_I64): + { + int32 value = (int32)(POP_I64() & 0xFFFFFFFFLL); + PUSH_I32(value); + HANDLE_OP_END (); + } + + HANDLE_OP (WASM_OP_I32_TRUNC_S_F32): + /* Copy the float32/float64 values from WAVM, need to test more. + We don't use INT32_MIN/INT32_MAX/UINT32_MIN/UINT32_MAX, + since float/double values of ieee754 cannot precisely represent + all int32/uint32/int64/uint64 values, e.g.: + UINT32_MAX is 4294967295, but (float32)4294967295 is 4294967296.0f, + but not 4294967295.0f. */ + DEF_OP_TRUNC(int32, I32, float32, F32, <= -2147483904.0f, + >= 2147483648.0f); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_TRUNC_U_F32): + DEF_OP_TRUNC(uint32, I32, float32, F32, <= -1.0f, + >= 4294967296.0f); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_TRUNC_S_F64): + DEF_OP_TRUNC(int32, I32, float64, F64, <= -2147483649.0, + >= 2147483648.0); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I32_TRUNC_U_F64): + DEF_OP_TRUNC(uint32, I32, float64, F64, <= -1.0 , + >= 4294967296.0); + HANDLE_OP_END (); + + /* conversions of i64 */ + HANDLE_OP (WASM_OP_I64_EXTEND_S_I32): + DEF_OP_CONVERT(int64, I64, int32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_EXTEND_U_I32): + DEF_OP_CONVERT(int64, I64, uint32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_TRUNC_S_F32): + DEF_OP_TRUNC(int64, I64, float32, F32, <= -9223373136366403584.0f, + >= 9223372036854775808.0f); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_TRUNC_U_F32): + DEF_OP_TRUNC(uint64, I64, float32, F32, <= -1.0f, + >= 18446744073709551616.0f); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_TRUNC_S_F64): + DEF_OP_TRUNC(int64, I64, float64, F64, <= -9223372036854777856.0, + >= 9223372036854775808.0); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_I64_TRUNC_U_F64): + DEF_OP_TRUNC(uint64, I64, float64, F64, <= -1.0, + >= 18446744073709551616.0); + HANDLE_OP_END (); + + /* conversions of f32 */ + HANDLE_OP (WASM_OP_F32_CONVERT_S_I32): + DEF_OP_CONVERT(float32, F32, int32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_CONVERT_U_I32): + DEF_OP_CONVERT(float32, F32, uint32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_CONVERT_S_I64): + DEF_OP_CONVERT(float32, F32, int64, I64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_CONVERT_U_I64): + DEF_OP_CONVERT(float32, F32, uint64, I64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F32_DEMOTE_F64): + DEF_OP_CONVERT(float32, F32, float64, F64); + HANDLE_OP_END (); + + /* conversions of f64 */ + HANDLE_OP (WASM_OP_F64_CONVERT_S_I32): + DEF_OP_CONVERT(float64, F64, int32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_CONVERT_U_I32): + DEF_OP_CONVERT(float64, F64, uint32, I32); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_CONVERT_S_I64): + DEF_OP_CONVERT(float64, F64, int64, I64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_CONVERT_U_I64): + DEF_OP_CONVERT(float64, F64, uint64, I64); + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_F64_PROMOTE_F32): + DEF_OP_CONVERT(float64, F64, float32, F32); + HANDLE_OP_END (); + + /* reinterpretations */ + HANDLE_OP (WASM_OP_I32_REINTERPRET_F32): + HANDLE_OP (WASM_OP_I64_REINTERPRET_F64): + HANDLE_OP (WASM_OP_F32_REINTERPRET_I32): + HANDLE_OP (WASM_OP_F64_REINTERPRET_I64): + HANDLE_OP_END (); + + HANDLE_OP (WASM_OP_IMPDEP2): + frame = prev_frame; + frame_ip = frame->ip; + frame_sp = frame->sp; + frame_csp = frame->csp; + goto call_func_from_entry; + +#if WASM_ENABLE_LABELS_AS_VALUES == 0 + default: + wasm_runtime_set_exception(module, "wasm interp failed: unsupported opcode"); + goto got_exception; + } +#endif + +#if WASM_ENABLE_LABELS_AS_VALUES != 0 + HANDLE_OP (WASM_OP_IMPDEP1): + HANDLE_OP (WASM_OP_UNUSED_0x06): + HANDLE_OP (WASM_OP_UNUSED_0x07): + HANDLE_OP (WASM_OP_UNUSED_0x08): + HANDLE_OP (WASM_OP_UNUSED_0x09): + HANDLE_OP (WASM_OP_UNUSED_0x0a): + HANDLE_OP (WASM_OP_UNUSED_0x12): + HANDLE_OP (WASM_OP_UNUSED_0x13): + HANDLE_OP (WASM_OP_UNUSED_0x14): + HANDLE_OP (WASM_OP_UNUSED_0x15): + HANDLE_OP (WASM_OP_UNUSED_0x16): + HANDLE_OP (WASM_OP_UNUSED_0x17): + HANDLE_OP (WASM_OP_UNUSED_0x18): + HANDLE_OP (WASM_OP_UNUSED_0x19): + HANDLE_OP (WASM_OP_UNUSED_0x1c): + HANDLE_OP (WASM_OP_UNUSED_0x1d): + HANDLE_OP (WASM_OP_UNUSED_0x1e): + HANDLE_OP (WASM_OP_UNUSED_0x1f): + HANDLE_OP (WASM_OP_UNUSED_0x25): + HANDLE_OP (WASM_OP_UNUSED_0x26): + HANDLE_OP (WASM_OP_UNUSED_0x27): + { + wasm_runtime_set_exception(module, "wasm interp failed: unsupported opcode"); + goto got_exception; + } +#endif + +#if WASM_ENABLE_LABELS_AS_VALUES == 0 + continue; +#else + FETCH_OPCODE_AND_DISPATCH (); +#endif + + call_func_from_interp: + /* Only do the copy when it's called from interpreter. */ + { + WASMInterpFrame *outs_area = wasm_thread_wasm_stack_top(self); + POP(cur_func->param_cell_num); + SYNC_ALL_TO_FRAME(); + word_copy(outs_area->lp, frame_sp, cur_func->param_cell_num); + prev_frame = frame; + } + + call_func_from_entry: + { + if (cur_func->is_import_func) { + wasm_interp_call_func_native(self, cur_func, prev_frame); + prev_frame = frame->prev_frame; + cur_func = frame->function; + UPDATE_ALL_FROM_FRAME(); + + memory = module->default_memory; + if (wasm_runtime_get_exception(module)) + goto got_exception; + } + else { + WASMType *func_type; + uint8 ret_type; + + all_cell_num = cur_func->param_cell_num + cur_func->local_cell_num + + cur_func->u.func->max_stack_cell_num + + cur_func->u.func->max_block_num * sizeof(WASMBranchBlock) / 4; + frame_size = wasm_interp_interp_frame_size(all_cell_num); + + if (!(frame = ALLOC_FRAME(self, frame_size, prev_frame))) { + frame = prev_frame; + goto got_exception; + } + + /* Initialize the interpreter context. */ + frame->function = cur_func; + frame_ip = wasm_runtime_get_func_code(cur_func); + frame_ip_end = wasm_runtime_get_func_code_end(cur_func); + frame_lp = frame->lp; + + frame_sp = frame->sp_bottom = frame_lp + cur_func->param_cell_num + + cur_func->local_cell_num; + frame->sp_boundary = frame->sp_bottom + cur_func->u.func->max_stack_cell_num; + + frame_csp = frame->csp_bottom = (WASMBranchBlock*)frame->sp_boundary; + frame->csp_boundary = frame->csp_bottom + cur_func->u.func->max_block_num; + + /* Initialize the local varialbes */ + memset(frame_lp + cur_func->param_cell_num, 0, + cur_func->local_cell_num * 4); + + /* Push function block as first block */ + func_type = cur_func->u.func->func_type; + ret_type = func_type->result_count + ? func_type->types[func_type->param_count] + : VALUE_TYPE_VOID; + PUSH_CSP(BLOCK_TYPE_FUNCTION, ret_type, + frame_ip, NULL, frame_ip_end - 1); + + wasm_thread_set_cur_frame(self, (WASMRuntimeFrame*)frame); + } + HANDLE_OP_END (); + } + + return_func: + { + FREE_FRAME(self, frame); + wasm_thread_set_cur_frame(self, (WASMRuntimeFrame*)prev_frame); + + if (!prev_frame->ip) + /* Called from native. */ + return; + + RECOVER_CONTEXT(prev_frame); + HANDLE_OP_END (); + } + + got_exception: + if (depths && depths != depth_buf) { + wasm_free(depths); + depths = NULL; + } + return; + +#if WASM_ENABLE_LABELS_AS_VALUES == 0 + } +#else + FETCH_OPCODE_AND_DISPATCH (); +#endif + +} + +void +wasm_interp_call_wasm(WASMFunctionInstance *function, + uint32 argc, uint32 argv[]) +{ + WASMThread *self = wasm_runtime_get_self(); + WASMRuntimeFrame *prev_frame = wasm_thread_get_cur_frame(self); + WASMInterpFrame *frame, *outs_area; + + /* Allocate sufficient cells for all kinds of return values. */ + unsigned all_cell_num = 2, i; + /* This frame won't be used by JITed code, so only allocate interp + frame here. */ + unsigned frame_size = wasm_interp_interp_frame_size(all_cell_num); + + if (argc != function->param_cell_num) { + char buf[128]; + snprintf(buf, sizeof(buf), + "invalid argument count %d, expected %d", + argc, function->param_cell_num); + wasm_runtime_set_exception(self->module_inst, buf); + return; + } + + /* TODO: check stack overflow. */ + + if (!(frame = ALLOC_FRAME(self, frame_size, (WASMInterpFrame*)prev_frame))) + return; + + outs_area = wasm_thread_wasm_stack_top(self); + frame->function = NULL; + frame->ip = NULL; + /* There is no local variable. */ + frame->sp = frame->lp + 0; + + if (argc > 0) + word_copy(outs_area->lp, argv, argc); + + wasm_thread_set_cur_frame(self, frame); + + if (function->is_import_func) + wasm_interp_call_func_native(self, function, frame); + else + wasm_interp_call_func_bytecode(self, function, frame); + + /* Output the return value to the caller */ + if (!wasm_runtime_get_exception(self->module_inst)) { + for (i = 0; i < function->ret_cell_num; i++) + argv[i] = *(frame->sp + i - function->ret_cell_num); + } + + wasm_thread_set_cur_frame(self, prev_frame); + FREE_FRAME(self, frame); +} diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-interp.h b/core/iwasm/runtime/vmcore_wasm/wasm-interp.h new file mode 100644 index 000000000..84f409800 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-interp.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_INTERP_H +#define _WASM_INTERP_H + +#include "wasm.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct WASMFunctionInstance; + +typedef struct WASMInterpFrame { + /* The frame of the caller that are calling the current function. */ + struct WASMInterpFrame *prev_frame; + + /* The current WASM function. */ + struct WASMFunctionInstance *function; + + /* Instruction pointer of the bytecode array. */ + uint8 *ip; + + /* Operand stack top pointer of the current frame. The bottom of + the stack is the next cell after the last local variable. */ + uint32 *sp_bottom; + uint32 *sp_boundary; + uint32 *sp; + + WASMBranchBlock *csp_bottom; + WASMBranchBlock *csp_boundary; + WASMBranchBlock *csp; + + /* Frame data, the layout is: + lp: param_cell_count + local_cell_count + sp_bottom to sp_boundary: stack of data + csp_bottom to csp_boundary: stack of block + ref to frame end: data types of local vairables and stack data + */ + uint32 lp[1]; +} WASMInterpFrame; + +/** + * Calculate the size of interpreter area of frame of a function. + * + * @param all_cell_num number of all cells including local variables + * and the working stack slots + * + * @return the size of interpreter area of the frame + */ +static inline unsigned +wasm_interp_interp_frame_size(unsigned all_cell_num) +{ + return align_uint(offsetof(WASMInterpFrame, lp) + all_cell_num * 5, 4); +} + +void +wasm_interp_call_wasm(struct WASMFunctionInstance *function, + uint32 argc, uint32 argv[]); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_INTERP_H */ diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-loader.c b/core/iwasm/runtime/vmcore_wasm/wasm-loader.c new file mode 100644 index 000000000..c5dba2950 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-loader.c @@ -0,0 +1,2874 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-loader.h" +#include "wasm.h" +#include "wasm-native.h" +#include "wasm-opcode.h" +#include "wasm-runtime.h" +#include "wasm_log.h" +#include "wasm_memory.h" + +/* Read a value of given type from the address pointed to by the given + pointer and increase the pointer to the position just after the + value being read. */ +#define TEMPLATE_READ_VALUE(Type, p) \ + (p += sizeof(Type), *(Type *)(p - sizeof(Type))) + +static void +set_error_buf(char *error_buf, uint32 error_buf_size, const char *string) +{ + if (error_buf != NULL) + snprintf(error_buf, error_buf_size, "%s", string); +} + +#define CHECK_BUF(buf, buf_end, length) do { \ + if (buf + length > buf_end) { \ + set_error_buf(error_buf, error_buf_size, "unexpected end"); \ + return false; \ + } \ +} while (0) + +static bool +read_leb(const uint8 *buf, const uint8 *buf_end, + uint32 *p_offset, uint32 maxbits, + bool sign, uint64 *p_result, + char* error_buf, uint32 error_buf_size) +{ + uint64 result = 0; + uint32 shift = 0; + uint32 bcnt = 0; + uint64 byte; + + while (true) { + CHECK_BUF(buf, buf_end, 1); + byte = buf[*p_offset]; + *p_offset += 1; + result |= ((byte & 0x7f) << shift); + shift += 7; + if ((byte & 0x80) == 0) { + break; + } + bcnt += 1; + } + if (bcnt > (maxbits + 7 - 1) / 7) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: unsigned LEB overflow."); + return false; + } + if (sign && (shift < maxbits) && (byte & 0x40)) { + /* Sign extend */ + result |= - (1 << shift); + } + *p_result = result; + return true; +} + +#define read_uint8(p) TEMPLATE_READ_VALUE(uint8, p) +#define read_uint32(p) TEMPLATE_READ_VALUE(uint32, p) +#define read_bool(p) TEMPLATE_READ_VALUE(bool, p) + +#define read_leb_uint64(p, p_end, res) do { \ + uint32 off = 0; \ + uint64 res64; \ + if (!read_leb(p, p_end, &off, 64, false, &res64, \ + error_buf, error_buf_size)) \ + return false; \ + p += off; \ + res = (uint64)res64; \ +} while (0) + +#define read_leb_int64(p, p_end, res) do { \ + uint32 off = 0; \ + uint64 res64; \ + if (!read_leb(p, p_end, &off, 64, true, &res64, \ + error_buf, error_buf_size)) \ + return false; \ + p += off; \ + res = (int64)res64; \ +} while (0) + +#define read_leb_uint32(p, p_end, res) do { \ + uint32 off = 0; \ + uint64 res64; \ + if (!read_leb(p, p_end, &off, 32, false, &res64, \ + error_buf, error_buf_size)) \ + return false; \ + p += off; \ + res = (uint32)res64; \ +} while (0) + +#define read_leb_int32(p, p_end, res) do { \ + uint32 off = 0; \ + uint64 res64; \ + if (!read_leb(p, p_end, &off, 32, true, &res64, \ + error_buf, error_buf_size)) \ + return false; \ + p += off; \ + res = (uint32)res64; \ +} while (0) + +#define read_leb_uint8(p, p_end, res) do { \ + uint32 off = 0; \ + uint64 res64; \ + if (!read_leb(p, p_end, &off, 7, false, &res64, \ + error_buf, error_buf_size)) \ + return false; \ + p += off; \ + res = (uint32)res64; \ +} while (0) + +static char* +const_str_set_insert(const uint8 *str, int32 len, WASMModule *module, + char* error_buf, uint32 error_buf_size) +{ + HashMap *set = module->const_str_set; + char *c_str = wasm_malloc(len + 1), *value; + + if (!c_str) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: alloc memory failed."); + return NULL; + } + + memcpy(c_str, str, len); + c_str[len] = '\0'; + + if ((value = wasm_hash_map_find(set, c_str))) { + wasm_free(c_str); + return value; + } + + if (!wasm_hash_map_insert(set, c_str, c_str)) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: " + "insert string to hash map failed."); + wasm_free(c_str); + return NULL; + } + + return c_str; +} + +static bool +load_init_expr(const uint8 **p_buf, const uint8 *buf_end, + InitializerExpression *init_expr, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = *p_buf, *p_end = buf_end; + uint8 flag, end_byte, *p_float; + uint32 i; + + CHECK_BUF(p, p_end, 1); + init_expr->init_expr_type = read_uint8(p); + flag = init_expr->init_expr_type; + + switch (flag) { + /* i32.const */ + case INIT_EXPR_TYPE_I32_CONST: + read_leb_int32(p, p_end, init_expr->u.i32); + break; + /* i64.const */ + case INIT_EXPR_TYPE_I64_CONST: + read_leb_int64(p, p_end, init_expr->u.i64); + break; + /* f32.const */ + case INIT_EXPR_TYPE_F32_CONST: + CHECK_BUF(p, p_end, 4); + p_float = (uint8*)&init_expr->u.f32; + for (i = 0; i < sizeof(float32); i++) + *p_float++ = *p++; + break; + /* f64.const */ + case INIT_EXPR_TYPE_F64_CONST: + CHECK_BUF(p, p_end, 8); + p_float = (uint8*)&init_expr->u.f64; + for (i = 0; i < sizeof(float64); i++) + *p_float++ = *p++; + break; + /* get_global */ + case INIT_EXPR_TYPE_GET_GLOBAL: + read_leb_uint32(p, p_end, init_expr->u.global_index); + break; + default: + set_error_buf(error_buf, error_buf_size, "type mismatch"); + return false; + } + CHECK_BUF(p, p_end, 1); + end_byte = read_uint8(p); + if (end_byte != 0x0b) { + set_error_buf(error_buf, error_buf_size, "unexpected end"); + return false; + } + *p_buf = p; + + return true; +} + +static bool +load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end, *p_org; + uint32 type_count, param_count, result_count, i, j; + uint8 flag; + WASMType *type; + + read_leb_uint32(p, p_end, type_count); + + if (type_count) { + module->type_count = type_count; + if (!(module->types = wasm_malloc(sizeof(WASMType*) * type_count))) { + set_error_buf(error_buf, error_buf_size, + "Load type section failed: alloc memory failed."); + return false; + } + + memset(module->types, 0, sizeof(WASMType*) * type_count); + + for (i = 0; i < type_count; i++) { + CHECK_BUF(p, p_end, 1); + flag = read_uint8(p); + if (flag != 0x60) { + set_error_buf(error_buf, error_buf_size, + "Load type section failed: invalid type flag."); + return false; + } + + read_leb_uint32(p, p_end, param_count); + + /* Resolve param count and result count firstly */ + p_org = p; + CHECK_BUF(p, p_end, param_count); + p += param_count; + read_leb_uint32(p, p_end, result_count); + wasm_assert(result_count <= 1); + CHECK_BUF(p, p_end, result_count); + p = p_org; + + if (!(type = module->types[i] = wasm_malloc(offsetof(WASMType, types) + + sizeof(uint8) * (param_count + result_count)))) + return false; + + /* Resolve param types and result types */ + type->param_count = param_count; + type->result_count = result_count; + for (j = 0; j < param_count; j++) { + CHECK_BUF(p, p_end, 1); + type->types[j] = read_uint8(p); + } + read_leb_uint32(p, p_end, result_count); + for (j = 0; j < result_count; j++) { + CHECK_BUF(p, p_end, 1); + type->types[param_count + j] = read_uint8(p); + } + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load type section failed: invalid section size."); + return false; + } + + LOG_VERBOSE("Load type section success.\n"); + return true; +} + +static bool +load_table_import(const uint8 **p_buf, const uint8 *buf_end, + WASMTableImport *table, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = *p_buf, *p_end = buf_end; + + read_leb_uint8(p, p_end, table->elem_type); + wasm_assert(table->elem_type == TABLE_ELEM_TYPE_ANY_FUNC); + read_leb_uint32(p, p_end, table->flags); + read_leb_uint32(p, p_end, table->init_size); + if (table->flags & 1) + read_leb_uint32(p, p_end, table->max_size); + else + table->max_size = 0x10000; + + *p_buf = p; + return true; +} + +static bool +load_memory_import(const uint8 **p_buf, const uint8 *buf_end, + WASMMemoryImport *memory, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = *p_buf, *p_end = buf_end; + + read_leb_uint32(p, p_end, memory->flags); + read_leb_uint32(p, p_end, memory->init_page_count); + if (memory->flags & 1) + read_leb_uint32(p, p_end, memory->max_page_count); + else + /* Limit the maximum memory size to 4GB */ + memory->max_page_count = 0x10000; + + *p_buf = p; + return true; +} + +static bool +load_table(const uint8 **p_buf, const uint8 *buf_end, WASMTable *table, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = *p_buf, *p_end = buf_end; + + read_leb_uint8(p, p_end, table->elem_type); + wasm_assert(table->elem_type == TABLE_ELEM_TYPE_ANY_FUNC); + read_leb_uint32(p, p_end, table->flags); + read_leb_uint32(p, p_end, table->init_size); + if (table->flags & 1) + read_leb_uint32(p, p_end, table->max_size); + else + table->max_size = 0x10000; + + *p_buf = p; + return true; +} + +static bool +load_memory(const uint8 **p_buf, const uint8 *buf_end, WASMMemory *memory, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = *p_buf, *p_end = buf_end; + + read_leb_uint32(p, p_end, memory->flags); + read_leb_uint32(p, p_end, memory->init_page_count); + if (memory->flags & 1) + read_leb_uint32(p, p_end, memory->max_page_count); + else + /* Limit the maximum memory size to 4GB */ + memory->max_page_count = 0x10000; + + *p_buf = p; + return true; +} + +static void* +resolve_sym(const char *module_name, const char *field_name) +{ + void *sym; + + if (strcmp(module_name, "env") != 0) + return NULL; + + if (field_name[0] == '_' + && (sym = wasm_dlsym(NULL, field_name + 1))) + return sym; + + return NULL; +} + +static bool +load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end, *p_old; + uint32 import_count, name_len, type_index, i, u32, flags; + WASMImport *import; + WASMImport *import_functions = NULL, *import_tables = NULL; + WASMImport *import_memories = NULL, *import_globals = NULL; + char *module_name, *field_name; + uint8 mutable, u8, kind; + + read_leb_uint32(p, p_end, import_count); + + if (import_count) { + module->import_count = import_count; + if (!(module->imports = wasm_malloc(sizeof(WASMImport) * import_count))) { + set_error_buf(error_buf, error_buf_size, + "Load import section failed: alloc memory failed."); + return false; + } + + memset(module->imports, 0, sizeof(WASMImport) * import_count); + + p_old = p; + + /* Scan firstly to get import count of each type */ + for (i = 0; i < import_count; i++) { + /* module name */ + read_leb_uint32(p, p_end, name_len); + CHECK_BUF(p, p_end, name_len); + p += name_len; + + /* field name */ + read_leb_uint32(p, p_end, name_len); + CHECK_BUF(p, p_end, name_len); + p += name_len; + + read_leb_uint8(p, p_end, kind); + + switch (kind) { + case IMPORT_KIND_FUNC: /* import function */ + read_leb_uint32(p, p_end, type_index); + module->import_function_count++; + break; + + case IMPORT_KIND_TABLE: /* import table */ + read_leb_uint8(p, p_end, u8); + read_leb_uint32(p, p_end, flags); + read_leb_uint32(p, p_end, u32); + if (flags & 1) + read_leb_uint32(p, p_end, u32); + module->import_table_count++; + if (module->import_table_count > 1) { + set_error_buf(error_buf, error_buf_size, "multiple tables"); + return false; + } + break; + + case IMPORT_KIND_MEMORY: /* import memory */ + read_leb_uint32(p, p_end, flags); + read_leb_uint32(p, p_end, u32); + if (flags & 1) + read_leb_uint32(p, p_end, u32); + module->import_memory_count++; + if (module->import_memory_count > 1) { + set_error_buf(error_buf, error_buf_size, "multiple memories"); + return false; + } + break; + + case IMPORT_KIND_GLOBAL: /* import global */ + read_leb_uint8(p, p_end, u8); + read_leb_uint8(p, p_end, u8); + module->import_global_count++; + break; + + default: + set_error_buf(error_buf, error_buf_size, + "Load import section failed: invalid import type."); + return false; + } + } + + if (module->import_function_count) + import_functions = module->import_functions = module->imports; + if (module->import_table_count) + import_tables = module->import_tables = + module->imports + module->import_function_count; + if (module->import_memory_count) + import_memories = module->import_memories = + module->imports + module->import_function_count + module->import_table_count; + if (module->import_global_count) + import_globals = module->import_globals = + module->imports + module->import_function_count + module->import_table_count + + module->import_memory_count; + + p = p_old; + + /* Scan again to read the data */ + for (i = 0; i < import_count; i++) { + /* load module name */ + read_leb_uint32(p, p_end, name_len); + CHECK_BUF(p, p_end, name_len); + if (!(module_name = const_str_set_insert + (p, name_len, module, error_buf, error_buf_size))) { + return false; + } + p += name_len; + + /* load field name */ + read_leb_uint32(p, p_end, name_len); + CHECK_BUF(p, p_end, name_len); + if (!(field_name = const_str_set_insert + (p, name_len, module, error_buf, error_buf_size))) { + return false; + } + p += name_len; + + read_leb_uint8(p, p_end, kind); + switch (kind) { + case IMPORT_KIND_FUNC: /* import function */ + import = import_functions++; + read_leb_uint32(p, p_end, type_index); + if (type_index >= module->type_count) { + set_error_buf(error_buf, error_buf_size, + "Load import section failed: " + "invalid function type index."); + return false; + } + import->u.function.func_type = module->types[type_index]; + + if (!(import->u.function.func_ptr_linked = wasm_native_func_lookup + (module_name, field_name))) { + if (!(import->u.function.func_ptr_linked = + resolve_sym(module_name, field_name))) { + if (error_buf != NULL) + snprintf(error_buf, error_buf_size, + "Load import section failed: " + "resolve import function (%s, %s) failed.", + module_name, field_name); + return false; + + } + import->u.function.call_type = CALL_TYPE_C_INTRINSIC; + break; + } + import->u.function.call_type = CALL_TYPE_WRAPPER; + break; + + case IMPORT_KIND_TABLE: /* import table */ + import = import_tables++; + if (!load_table_import(&p, p_end, &import->u.table, + error_buf, error_buf_size)) + return false; + if (module->import_table_count > 1) { + set_error_buf(error_buf, error_buf_size, "multiple tables"); + return false; + } + break; + + case IMPORT_KIND_MEMORY: /* import memory */ + import = import_memories++; + if (!load_memory_import(&p, p_end, &import->u.memory, + error_buf, error_buf_size)) + return false; + if (module->import_table_count > 1) { + set_error_buf(error_buf, error_buf_size, "multiple memories"); + return false; + } + break; + + case IMPORT_KIND_GLOBAL: /* import global */ + import = import_globals++; + read_leb_uint8(p, p_end, import->u.global.type); + read_leb_uint8(p, p_end, mutable); + import->u.global.is_mutable = mutable & 1 ? true : false; + if (!(wasm_native_global_lookup(module_name, field_name, + &import->u.global))) { + if (error_buf != NULL) + snprintf(error_buf, error_buf_size, + "Load import section failed: " + "resolve import global (%s, %s) failed.", + module_name, field_name); + return false; + } + break; + + default: + set_error_buf(error_buf, error_buf_size, + "Load import section failed: " + "invalid import type."); + return false; + } + import->kind = kind; + import->u.names.module_name = module_name; + import->u.names.field_name = field_name; + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load import section failed: " + "invalid section size."); + return false; + } + + LOG_VERBOSE("Load import section success.\n"); + (void)u8; + (void)u32; + return true; +} + +static bool +load_function_section(const uint8 *buf, const uint8 *buf_end, + const uint8 *buf_code, const uint8 *buf_code_end, + WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + const uint8 *p_code = buf_code, *p_code_end, *p_code_save; + uint32 func_count, total_size; + uint32 code_count, code_size, type_index, i, j, k, local_type_index; + uint32 local_count, local_set_count, sub_local_count; + uint8 type; + WASMFunction *func; + + read_leb_uint32(p, p_end, func_count); + + read_leb_uint32(p_code, buf_code_end, code_count); + if (func_count != code_count) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: invalid function count."); + return false; + } + + if (func_count) { + module->function_count = func_count; + if (!(module->functions = wasm_malloc(sizeof(WASMFunction*) * func_count))) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: alloc memory failed."); + return false; + } + + memset(module->functions, 0, sizeof(WASMFunction*) * func_count); + + for (i = 0; i < func_count; i++) { + /* Resolve function type */ + read_leb_uint32(p, p_end, type_index); + if (type_index >= module->type_count) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: " + "invalid function type index."); + return false; + } + + read_leb_uint32(p_code, buf_code_end, code_size); + if (code_size == 0) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: " + "invalid function code size."); + return false; + } + + /* Resolve local set count */ + p_code_end = p_code + code_size; + local_count = 0; + read_leb_uint32(p_code, buf_code_end, local_set_count); + p_code_save = p_code; + + /* Calculate total local count */ + for (j = 0; j < local_set_count; j++) { + read_leb_uint32(p_code, buf_code_end, sub_local_count); + read_leb_uint8(p_code, buf_code_end, type); + local_count += sub_local_count; + } + + /* Alloc memory, layout: function structure + local types */ + code_size = p_code_end - p_code; + total_size = sizeof(WASMFunction) + local_count; + + if (!(func = module->functions[i] = wasm_malloc(total_size))) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: alloc memory failed."); + return false; + } + + /* Set function type, local count, code size and code body */ + memset(func, 0, total_size); + func->func_type = module->types[type_index]; + func->local_count = local_count; + if (local_count > 0) + func->local_types = (uint8*)func + sizeof(WASMFunction); + func->code_size = code_size; + func->code = (uint8*)p_code; + + /* Load each local type */ + p_code = p_code_save; + local_type_index = 0; + for (j = 0; j < local_set_count; j++) { + read_leb_uint32(p_code, buf_code_end, sub_local_count); + read_leb_uint8(p_code, buf_code_end, type); + for (k = 0; k < sub_local_count; k++) { + func->local_types[local_type_index++] = type; + } + } + p_code = p_code_end; + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load function section failed: " + "invalid section size."); + return false; + } + + LOG_VERBOSE("Load function section success.\n"); + return true; +} + +static bool +load_table_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 table_count, i; + WASMTable *table; + + read_leb_uint32(p, p_end, table_count); + wasm_assert(table_count == 1); + + if (table_count) { + if (table_count > 1) { + set_error_buf(error_buf, error_buf_size, "multiple memories"); + return false; + } + module->table_count = table_count; + if (!(module->tables = wasm_malloc(sizeof(WASMTable) * table_count))) { + set_error_buf(error_buf, error_buf_size, + "Load table section failed: alloc memory failed."); + return false; + } + + memset(module->tables, 0, sizeof(WASMTable) * table_count); + + /* load each table */ + table = module->tables; + for (i = 0; i < table_count; i++, table++) + if (!load_table(&p, p_end, table, error_buf, error_buf_size)) + return false; + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load table section failed: invalid section size."); + return false; + } + + LOG_VERBOSE("Load table section success.\n"); + return true; +} + +static bool +load_memory_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 memory_count, i; + WASMMemory *memory; + + read_leb_uint32(p, p_end, memory_count); + wasm_assert(memory_count == 1); + + if (memory_count) { + if (memory_count > 1) { + set_error_buf(error_buf, error_buf_size, "multiple memories"); + return false; + } + module->memory_count = memory_count; + if (!(module->memories = wasm_malloc(sizeof(WASMMemory) * memory_count))) { + set_error_buf(error_buf, error_buf_size, + "Load memory section failed: alloc memory failed."); + return false; + } + + memset(module->memories, 0, sizeof(WASMMemory) * memory_count); + + /* load each memory */ + memory = module->memories; + for (i = 0; i < memory_count; i++, memory++) + if (!load_memory(&p, p_end, memory, error_buf, error_buf_size)) + return false; + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load memory section failed: invalid section size."); + return false; + } + + LOG_VERBOSE("Load memory section success.\n"); + return true; +} + +static bool +load_global_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 global_count, i; + WASMGlobal *global; + + read_leb_uint32(p, p_end, global_count); + + if (global_count) { + module->global_count = global_count; + if (!(module->globals = wasm_malloc(sizeof(WASMGlobal) * global_count))) { + set_error_buf(error_buf, error_buf_size, + "Load global section failed: alloc memory failed."); + return false; + } + + memset(module->globals, 0, sizeof(WASMGlobal) * global_count); + + global = module->globals; + + for(i = 0; i < global_count; i++, global++) { + CHECK_BUF(p, p_end, 1); + global->type = read_uint8(p); + CHECK_BUF(p, p_end, 1); + global->is_mutable = read_bool(p); + + /* initialize expression */ + if (!load_init_expr(&p, p_end, &(global->init_expr), error_buf, error_buf_size)) + return false; + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load global section failed: invalid section size."); + return false; + } + + LOG_VERBOSE("Load global section success.\n"); + return true; +} + +static bool +load_export_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 export_count, i, index; + uint8 str_len; + WASMExport *export; + + read_leb_uint32(p, p_end, export_count); + + if (export_count) { + module->export_count = export_count; + if (!(module->exports = wasm_malloc(sizeof(WASMExport) * export_count))) { + set_error_buf(error_buf, error_buf_size, + "Load export section failed: alloc memory failed."); + return false; + } + + memset(module->exports, 0, sizeof(WASMExport) * export_count); + + export = module->exports; + for (i = 0; i < export_count; i++, export++) { + read_leb_uint32(p, p_end, str_len); + CHECK_BUF(p, p_end, str_len); + if (!(export->name = const_str_set_insert(p, str_len, module, + error_buf, error_buf_size))) { + return false; + } + p += str_len; + CHECK_BUF(p, p_end, 1); + export->kind = read_uint8(p); + read_leb_uint32(p, p_end, index); + export->index = index; + + switch(export->kind) { + /*function index*/ + case EXPORT_KIND_FUNC: + if (index >= module->function_count + module->import_function_count) { + set_error_buf(error_buf, error_buf_size, + "Load export section failed: " + "function index is out of range."); + return false; + } + break; + /*table index*/ + case EXPORT_KIND_TABLE: + if (index >= module->table_count + module->import_table_count) { + set_error_buf(error_buf, error_buf_size, + "Load export section failed: " + "table index is out of range."); + return false; + } + break; + /*memory index*/ + case EXPORT_KIND_MEMORY: + if (index >= module->memory_count + module->import_memory_count) { + set_error_buf(error_buf, error_buf_size, + "Load export section failed: " + "memory index is out of range."); + return false; + } + break; + /*global index*/ + case EXPORT_KIND_GLOBAL: + if (index >= module->global_count + module->import_global_count) { + set_error_buf(error_buf, error_buf_size, + "Load export section failed: " + "global index is out of range."); + return false; + } + break; + default: + set_error_buf(error_buf, error_buf_size, + "Load export section failed: " + "kind flag is unexpected."); + return false; + } + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load export section failed: " + "invalid section size."); + return false; + } + + LOG_VERBOSE("Load export section success.\n"); + return true; +} + +static bool +load_table_segment_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 table_segment_count, i, j, table_index, function_count, function_index; + WASMTableSeg *table_segment; + + read_leb_uint32(p, p_end, table_segment_count); + + if (table_segment_count) { + module->table_seg_count = table_segment_count; + if (!(module->table_segments = wasm_malloc + (sizeof(WASMTableSeg) * table_segment_count))) { + set_error_buf(error_buf, error_buf_size, + "Load table segment section failed: " + "alloc memory failed."); + return false; + } + + memset(module->table_segments, 0, sizeof(WASMTableSeg) * table_segment_count); + + table_segment = module->table_segments; + for (i = 0; i < table_segment_count; i++, table_segment++) { + read_leb_uint32(p, p_end, table_index); + table_segment->table_index = table_index; + + /* initialize expression */ + if (!load_init_expr(&p, p_end, &(table_segment->base_offset), + error_buf, error_buf_size)) + return false; + + read_leb_uint32(p, p_end, function_count); + table_segment->function_count = function_count; + if (!(table_segment->func_indexes = (uint32 *) + wasm_malloc(sizeof(uint32) * function_count))) { + set_error_buf(error_buf, error_buf_size, + "Load table segment section failed: " + "alloc memory failed."); + return false; + } + for (j = 0; j < function_count; j++) { + read_leb_uint32(p, p_end, function_index); + table_segment->func_indexes[j] = function_index; + } + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load table segment section failed, " + "invalid section size."); + return false; + } + + LOG_VERBOSE("Load table segment section success.\n"); + return true; +} + +static bool +load_data_segment_section(const uint8 *buf, const uint8 *buf_end, + WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 data_seg_count, i, mem_index, data_seg_len; + WASMDataSeg *dataseg; + InitializerExpression init_expr; + + read_leb_uint32(p, p_end, data_seg_count); + + if (data_seg_count) { + module->data_seg_count = data_seg_count; + if (!(module->data_segments = + wasm_malloc(sizeof(WASMDataSeg*) * data_seg_count))) { + set_error_buf(error_buf, error_buf_size, + "Load data segment section failed, " + "alloc memory failed."); + return false; + } + + memset(module->data_segments, 0, sizeof(WASMDataSeg*) * data_seg_count); + + for (i = 0; i < data_seg_count; i++) { + read_leb_uint32(p, p_end, mem_index); + + if (!load_init_expr(&p, p_end, &init_expr, error_buf, error_buf_size)) + return false; + + read_leb_uint32(p, p_end, data_seg_len); + + if (!(dataseg = module->data_segments[i] = + wasm_malloc(sizeof(WASMDataSeg)))) { + set_error_buf(error_buf, error_buf_size, + "Load data segment section failed: " + "alloc memory failed."); + return false; + } + + memcpy(&dataseg->base_offset, &init_expr, sizeof(init_expr)); + + dataseg->memory_index = mem_index; + dataseg->data_length = data_seg_len; + CHECK_BUF(p, p_end, data_seg_len); + dataseg->data = (uint8*)p; + p += data_seg_len; + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load data segment section failed, " + "invalid section size."); + return false; + } + + LOG_VERBOSE("Load data segment section success.\n"); + return true; +} + +static bool +load_code_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + /* code has been loaded in function section, so pass it here */ + /* TODO: should check if there really have section_size code bytes */ + LOG_VERBOSE("Load code segment section success.\n"); + return true; +} + +static bool +load_start_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *p = buf, *p_end = buf_end; + uint32 start_function; + + read_leb_uint32(p, p_end, start_function); + + if (start_function) { + if (start_function >= module->function_count + module->import_function_count) { + set_error_buf(error_buf, error_buf_size, + "Load start section failed: " + "function index is out of range."); + return false; + } + module->start_function = start_function; + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, + "Load start section failed: " + "invalid section size."); + return false; + } + + LOG_VERBOSE("Load start section success.\n"); + return true; +} + +static bool +wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, + char *error_buf, uint32 error_buf_size); + +static bool +load_from_sections(WASMModule *module, WASMSection *sections, + char *error_buf, uint32 error_buf_size) +{ + WASMSection *section = sections; + const uint8 *buf, *buf_end, *buf_code = NULL, *buf_code_end = NULL; + uint32 i; + + while (section) { + if (section->section_type == SECTION_TYPE_CODE) { + buf_code = section->section_body; + buf_code_end = buf_code + section->section_body_size; + break; + } + section = section->next; + } + + if (!buf_code) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: find code section failed."); + return false; + } + + section = sections; + while (section) { + buf = section->section_body; + buf_end = buf + section->section_body_size; + switch (section->section_type) { + case SECTION_TYPE_USER: + /* unsupported user section, ignore it. */ + break; + case SECTION_TYPE_TYPE: + if (!load_type_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_IMPORT: + if (!load_import_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_FUNC: + if (!load_function_section(buf, buf_end, buf_code, buf_code_end, + module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_TABLE: + if (!load_table_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_MEMORY: + if (!load_memory_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_GLOBAL: + if (!load_global_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_EXPORT: + if (!load_export_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_START: + if (!load_start_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_ELEM: + if (!load_table_segment_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_CODE: + if (!load_code_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + case SECTION_TYPE_DATA: + if (!load_data_segment_section(buf, buf_end, module, error_buf, error_buf_size)) + return false; + break; + default: + set_error_buf(error_buf, error_buf_size, "invalid section id"); + return false; + } + + section = section->next; + } + + for (i = 0; i < module->function_count; i++) { + WASMFunction *func = module->functions[i]; + if (!wasm_loader_prepare_bytecode(module, func, error_buf, error_buf_size)) + return false; + } + + return true; +} + +static uint32 +branch_set_hash(const void *key) +{ + return ((uintptr_t)key >> 4) ^ ((uintptr_t)key >> 14); +} + +static bool +branch_set_key_equal(void *start_addr1, void *start_addr2) +{ + return start_addr1 == start_addr2 ? true : false; +} + +static void +branch_set_value_destroy(void *value) +{ + wasm_free(value); +} + +static WASMModule* +create_module(char *error_buf, uint32 error_buf_size) +{ + WASMModule *module = wasm_malloc(sizeof(WASMModule)); + + if (!module) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: alloc memory failed."); + return NULL; + } + + memset(module, 0, sizeof(WASMModule)); + + /* Set start_function to -1, means no start function */ + module->start_function = (uint32)-1; + + if (!(module->const_str_set = wasm_hash_map_create(32, false, + (HashFunc)wasm_string_hash, + (KeyEqualFunc)wasm_string_equal, + NULL, + wasm_free))) + goto fail; + + if (!(module->branch_set = wasm_hash_map_create(64, true, + branch_set_hash, + branch_set_key_equal, + NULL, + branch_set_value_destroy))) + goto fail; + + return module; + +fail: + wasm_loader_unload(module); + return NULL; +} + +WASMModule * +wasm_loader_load_from_sections(WASMSection *section_list, + char *error_buf, uint32 error_buf_size) +{ + WASMModule *module = create_module(error_buf, error_buf_size); + if (!module) + return NULL; + + if (!load_from_sections(module, section_list, error_buf, error_buf_size)) { + wasm_loader_unload(module); + return NULL; + } + + LOG_VERBOSE("Load module from sections success.\n"); + return module; +} + +static void +destroy_sections(WASMSection *section_list) +{ + WASMSection *section = section_list, *next; + while (section) { + next = section->next; + wasm_free(section); + section = next; + } +} + +static bool +create_sections(const uint8 *buf, uint32 size, + WASMSection **p_section_list, + char *error_buf, uint32 error_buf_size) +{ + WASMSection *section_list_end = NULL, *section; + const uint8 *p = buf, *p_end = buf + size/*, *section_body*/; + uint8 section_type; + uint32 section_size; + + p += 8; + while (p < p_end) { + CHECK_BUF(p, p_end, 1); + section_type = read_uint8(p); + if (section_type <= SECTION_TYPE_DATA) { + read_leb_uint32(p, p_end, section_size); + CHECK_BUF(p, p_end, section_size); + + if (!(section = wasm_malloc(sizeof(WASMSection)))) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: alloc memory failed."); + return false; + } + + memset(section, 0, sizeof(WASMSection)); + section->section_type = section_type; + section->section_body = p; + section->section_body_size = section_size; + + if (!*p_section_list) + *p_section_list = section_list_end = section; + else { + section_list_end->next = section; + section_list_end = section; + } + + p += section_size; + } + else { + set_error_buf(error_buf, error_buf_size, "invalid section type"); + return false; + } + } + + return true; +} + +static bool +load(const uint8 *buf, uint32 size, WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + const uint8 *buf_end = buf + size; + const uint8 *p = buf, *p_end = buf_end; + uint32 magic_number, version; + WASMSection *section_list = NULL; + + CHECK_BUF(p, p_end, sizeof(uint32)); + if ((magic_number = read_uint32(p)) != WASM_MAGIC_NUMBER) { + set_error_buf(error_buf, error_buf_size, "magic header not detected"); + return false; + } + + CHECK_BUF(p, p_end, sizeof(uint32)); + if ((version = read_uint32(p)) != WASM_CURRENT_VERSION) { + set_error_buf(error_buf, error_buf_size, "unknown binary version"); + return false; + } + + if (!create_sections(buf, size, §ion_list, error_buf, error_buf_size) + || !load_from_sections(module, section_list, error_buf, error_buf_size)) { + destroy_sections(section_list); + return false; + } + + destroy_sections(section_list); + return true; +} + +WASMModule* +wasm_loader_load(const uint8 *buf, uint32 size, char *error_buf, uint32 error_buf_size) +{ + WASMModule *module = wasm_malloc(sizeof(WASMModule)); + + if (!module) { + set_error_buf(error_buf, error_buf_size, + "WASM module load failed: alloc memory failed."); + return NULL; + } + + memset(module, 0, sizeof(WASMModule)); + + /* Set start_function to -1, means no start function */ + module->start_function = (uint32)-1; + + if (!(module->const_str_set = wasm_hash_map_create(32, false, + (HashFunc)wasm_string_hash, + (KeyEqualFunc)wasm_string_equal, + NULL, + wasm_free))) + goto fail; + + if (!(module->branch_set = wasm_hash_map_create(64, true, + branch_set_hash, + branch_set_key_equal, + NULL, + branch_set_value_destroy))) + goto fail; + + if (!load(buf, size, module, error_buf, error_buf_size)) + goto fail; + + LOG_VERBOSE("Load module success.\n"); + return module; + +fail: + wasm_loader_unload(module); + return NULL; +} + +void +wasm_loader_unload(WASMModule *module) +{ + uint32 i; + + if (!module) + return; + + if (module->types) { + for (i = 0; i < module->type_count; i++) { + if (module->types[i]) + wasm_free(module->types[i]); + } + wasm_free(module->types); + } + + if (module->imports) + wasm_free(module->imports); + + if (module->functions) { + for (i = 0; i < module->function_count; i++) { + if (module->functions[i]) + wasm_free(module->functions[i]); + } + wasm_free(module->functions); + } + + if (module->tables) + wasm_free(module->tables); + + if (module->memories) + wasm_free(module->memories); + + if (module->globals) + wasm_free(module->globals); + + if (module->exports) + wasm_free(module->exports); + + if (module->table_segments) { + for (i = 0; i < module->table_seg_count; i++) { + if (module->table_segments[i].func_indexes) + wasm_free(module->table_segments[i].func_indexes); + } + wasm_free(module->table_segments); + } + + if (module->data_segments) { + for (i = 0; i < module->data_seg_count; i++) { + if (module->data_segments[i]) + wasm_free(module->data_segments[i]); + } + wasm_free(module->data_segments); + } + + if (module->const_str_set) + wasm_hash_map_destroy(module->const_str_set); + + if (module->branch_set) + wasm_hash_map_destroy(module->branch_set); + + wasm_free(module); +} + +typedef struct block_addr { + uint8 block_type; + uint8 *else_addr; + uint8 *end_addr; +} block_addr; + +bool +wasm_loader_find_block_addr(HashMap *branch_set, + const uint8 *start_addr, + const uint8 *code_end_addr, + uint8 block_type, + uint8 **p_else_addr, + uint8 **p_end_addr, + char *error_buf, + uint32 error_buf_size) +{ + const uint8 *p = start_addr, *p_end = code_end_addr; + uint8 *else_addr = NULL; + uint32 block_nested_depth = 1, count, i, u32, u64; + uint8 opcode, u8; + block_addr *block; + + if ((block = wasm_hash_map_find(branch_set, (void*)start_addr))) { + if (block->block_type != block_type) + return false; + if (block_type == BLOCK_TYPE_IF) /* if block */ + *p_else_addr = block->else_addr; + *p_end_addr = block->end_addr; + return true; + } + + while (p < code_end_addr) { + opcode = *p++; + + switch (opcode) { + case WASM_OP_UNREACHABLE: + case WASM_OP_NOP: + break; + + case WASM_OP_BLOCK: + case WASM_OP_LOOP: + case WASM_OP_IF: + read_leb_uint32(p, p_end, u32); /* blocktype */ + block_nested_depth++; + break; + + case WASM_OP_ELSE: + if (block_type == BLOCK_TYPE_IF && block_nested_depth == 1) + else_addr = (uint8*)(p - 1); + break; + + case WASM_OP_END: + if (block_nested_depth == 1) { + if (block_type == BLOCK_TYPE_IF) + *p_else_addr = else_addr; + *p_end_addr = (uint8*)(p - 1); + + if ((block = wasm_malloc(sizeof(block_addr)))) { + block->block_type = block_type; + if (block_type == BLOCK_TYPE_IF) + block->else_addr = else_addr; + block->end_addr = (uint8*)(p - 1); + + if (!wasm_hash_map_insert(branch_set, (void*)start_addr, block)) + wasm_free(block); + } + + return true; + } + else + block_nested_depth--; + break; + + case WASM_OP_BR: + case WASM_OP_BR_IF: + read_leb_uint32(p, p_end, u32); /* labelidx */ + break; + + case WASM_OP_BR_TABLE: + read_leb_uint32(p, p_end, count); /* lable num */ + for (i = 0; i <= count; i++) /* lableidxs */ + read_leb_uint32(p, p_end, u32); + break; + + case WASM_OP_RETURN: + break; + + case WASM_OP_CALL: + read_leb_uint32(p, p_end, u32); /* funcidx */ + break; + + case WASM_OP_CALL_INDIRECT: + read_leb_uint32(p, p_end, u32); /* typeidx */ + read_leb_uint8(p, p_end, u8); /* 0x00 */ + break; + + case WASM_OP_DROP: + case WASM_OP_SELECT: + case WASM_OP_DROP_32: + case WASM_OP_DROP_64: + case WASM_OP_SELECT_32: + case WASM_OP_SELECT_64: + break; + + case WASM_OP_GET_LOCAL: + case WASM_OP_SET_LOCAL: + case WASM_OP_TEE_LOCAL: + case WASM_OP_GET_GLOBAL: + case WASM_OP_SET_GLOBAL: + read_leb_uint32(p, p_end, u32); /* localidx */ + break; + + case WASM_OP_I32_LOAD: + case WASM_OP_I64_LOAD: + case WASM_OP_F32_LOAD: + case WASM_OP_F64_LOAD: + case WASM_OP_I32_LOAD8_S: + case WASM_OP_I32_LOAD8_U: + case WASM_OP_I32_LOAD16_S: + case WASM_OP_I32_LOAD16_U: + case WASM_OP_I64_LOAD8_S: + case WASM_OP_I64_LOAD8_U: + case WASM_OP_I64_LOAD16_S: + case WASM_OP_I64_LOAD16_U: + case WASM_OP_I64_LOAD32_S: + case WASM_OP_I64_LOAD32_U: + case WASM_OP_I32_STORE: + case WASM_OP_I64_STORE: + case WASM_OP_F32_STORE: + case WASM_OP_F64_STORE: + case WASM_OP_I32_STORE8: + case WASM_OP_I32_STORE16: + case WASM_OP_I64_STORE8: + case WASM_OP_I64_STORE16: + case WASM_OP_I64_STORE32: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + break; + + case WASM_OP_MEMORY_SIZE: + case WASM_OP_MEMORY_GROW: + read_leb_uint32(p, p_end, u32); /* 0x00 */ + break; + + case WASM_OP_I32_CONST: + read_leb_uint32(p, p_end, u32); + break; + case WASM_OP_I64_CONST: + read_leb_uint64(p, p_end, u64); + break; + case WASM_OP_F32_CONST: + p += sizeof(float32); + break; + case WASM_OP_F64_CONST: + p += sizeof(float64); + break; + + case WASM_OP_I32_EQZ: + case WASM_OP_I32_EQ: + case WASM_OP_I32_NE: + case WASM_OP_I32_LT_S: + case WASM_OP_I32_LT_U: + case WASM_OP_I32_GT_S: + case WASM_OP_I32_GT_U: + case WASM_OP_I32_LE_S: + case WASM_OP_I32_LE_U: + case WASM_OP_I32_GE_S: + case WASM_OP_I32_GE_U: + case WASM_OP_I64_EQZ: + case WASM_OP_I64_EQ: + case WASM_OP_I64_NE: + case WASM_OP_I64_LT_S: + case WASM_OP_I64_LT_U: + case WASM_OP_I64_GT_S: + case WASM_OP_I64_GT_U: + case WASM_OP_I64_LE_S: + case WASM_OP_I64_LE_U: + case WASM_OP_I64_GE_S: + case WASM_OP_I64_GE_U: + case WASM_OP_F32_EQ: + case WASM_OP_F32_NE: + case WASM_OP_F32_LT: + case WASM_OP_F32_GT: + case WASM_OP_F32_LE: + case WASM_OP_F32_GE: + case WASM_OP_F64_EQ: + case WASM_OP_F64_NE: + case WASM_OP_F64_LT: + case WASM_OP_F64_GT: + case WASM_OP_F64_LE: + case WASM_OP_F64_GE: + case WASM_OP_I32_CLZ: + case WASM_OP_I32_CTZ: + case WASM_OP_I32_POPCNT: + case WASM_OP_I32_ADD: + case WASM_OP_I32_SUB: + case WASM_OP_I32_MUL: + case WASM_OP_I32_DIV_S: + case WASM_OP_I32_DIV_U: + case WASM_OP_I32_REM_S: + case WASM_OP_I32_REM_U: + case WASM_OP_I32_AND: + case WASM_OP_I32_OR: + case WASM_OP_I32_XOR: + case WASM_OP_I32_SHL: + case WASM_OP_I32_SHR_S: + case WASM_OP_I32_SHR_U: + case WASM_OP_I32_ROTL: + case WASM_OP_I32_ROTR: + case WASM_OP_I64_CLZ: + case WASM_OP_I64_CTZ: + case WASM_OP_I64_POPCNT: + case WASM_OP_I64_ADD: + case WASM_OP_I64_SUB: + case WASM_OP_I64_MUL: + case WASM_OP_I64_DIV_S: + case WASM_OP_I64_DIV_U: + case WASM_OP_I64_REM_S: + case WASM_OP_I64_REM_U: + case WASM_OP_I64_AND: + case WASM_OP_I64_OR: + case WASM_OP_I64_XOR: + case WASM_OP_I64_SHL: + case WASM_OP_I64_SHR_S: + case WASM_OP_I64_SHR_U: + case WASM_OP_I64_ROTL: + case WASM_OP_I64_ROTR: + case WASM_OP_F32_ABS: + case WASM_OP_F32_NEG: + case WASM_OP_F32_CEIL: + case WASM_OP_F32_FLOOR: + case WASM_OP_F32_TRUNC: + case WASM_OP_F32_NEAREST: + case WASM_OP_F32_SQRT: + case WASM_OP_F32_ADD: + case WASM_OP_F32_SUB: + case WASM_OP_F32_MUL: + case WASM_OP_F32_DIV: + case WASM_OP_F32_MIN: + case WASM_OP_F32_MAX: + case WASM_OP_F32_COPYSIGN: + case WASM_OP_F64_ABS: + case WASM_OP_F64_NEG: + case WASM_OP_F64_CEIL: + case WASM_OP_F64_FLOOR: + case WASM_OP_F64_TRUNC: + case WASM_OP_F64_NEAREST: + case WASM_OP_F64_SQRT: + case WASM_OP_F64_ADD: + case WASM_OP_F64_SUB: + case WASM_OP_F64_MUL: + case WASM_OP_F64_DIV: + case WASM_OP_F64_MIN: + case WASM_OP_F64_MAX: + case WASM_OP_F64_COPYSIGN: + case WASM_OP_I32_WRAP_I64: + case WASM_OP_I32_TRUNC_S_F32: + case WASM_OP_I32_TRUNC_U_F32: + case WASM_OP_I32_TRUNC_S_F64: + case WASM_OP_I32_TRUNC_U_F64: + case WASM_OP_I64_EXTEND_S_I32: + case WASM_OP_I64_EXTEND_U_I32: + case WASM_OP_I64_TRUNC_S_F32: + case WASM_OP_I64_TRUNC_U_F32: + case WASM_OP_I64_TRUNC_S_F64: + case WASM_OP_I64_TRUNC_U_F64: + case WASM_OP_F32_CONVERT_S_I32: + case WASM_OP_F32_CONVERT_U_I32: + case WASM_OP_F32_CONVERT_S_I64: + case WASM_OP_F32_CONVERT_U_I64: + case WASM_OP_F32_DEMOTE_F64: + case WASM_OP_F64_CONVERT_S_I32: + case WASM_OP_F64_CONVERT_U_I32: + case WASM_OP_F64_CONVERT_S_I64: + case WASM_OP_F64_CONVERT_U_I64: + case WASM_OP_F64_PROMOTE_F32: + case WASM_OP_I32_REINTERPRET_F32: + case WASM_OP_I64_REINTERPRET_F64: + case WASM_OP_F32_REINTERPRET_I32: + case WASM_OP_F64_REINTERPRET_I64: + break; + + default: + LOG_ERROR("WASM loader find block addr failed: invalid opcode %02x.\n", + opcode); + break; + } + } + + (void)u32; + (void)u64; + (void)u8; + return false; +} + +#define REF_I32 VALUE_TYPE_I32 +#define REF_F32 VALUE_TYPE_F32 +#define REF_I64_1 VALUE_TYPE_I64 +#define REF_I64_2 VALUE_TYPE_I64 +#define REF_F64_1 VALUE_TYPE_F64 +#define REF_F64_2 VALUE_TYPE_F64 + +typedef struct BranchBlock { + uint8 block_type; + uint8 return_type; + bool jumped_by_br; + uint8 *start_addr; + uint8 *else_addr; + uint8 *end_addr; + uint32 stack_cell_num; +} BranchBlock; + +static void* +memory_realloc(void *mem_old, uint32 size_old, uint32 size_new) +{ + uint8 *mem_new; + wasm_assert(size_new > size_old); + if ((mem_new = wasm_malloc(size_new))) { + memcpy(mem_new, mem_old, size_old); + memset(mem_new + size_old, 0, size_new - size_old); + wasm_free(mem_old); + } + return mem_new; +} + +#define MEM_REALLOC(mem, size_old, size_new) do { \ + void *mem_new = memory_realloc(mem, size_old, size_new);\ + if (!mem_new) { \ + set_error_buf(error_buf, error_buf_size, \ + "WASM loader prepare bytecode failed: " \ + "alloc memory failed"); \ + goto fail; \ + } \ + mem = mem_new; \ + } while (0) + +static bool +check_stack_push(uint8 **p_frame_ref_bottom, uint8 **p_frame_ref_boundary, + uint8 **p_frame_ref, uint32 *p_frame_ref_size, + uint32 stack_cell_num, + char *error_buf, uint32 error_buf_size) +{ + if (*p_frame_ref >= *p_frame_ref_boundary) { + MEM_REALLOC(*p_frame_ref_bottom, *p_frame_ref_size, + *p_frame_ref_size + 16); + *p_frame_ref_size += 16; + *p_frame_ref_boundary = *p_frame_ref_bottom + *p_frame_ref_size; + *p_frame_ref = *p_frame_ref_bottom + stack_cell_num; + } + return true; +fail: + return false; +} + +#define CHECK_STACK_PUSH() do { \ + if (!check_stack_push(&frame_ref_bottom, &frame_ref_boundary,\ + &frame_ref, &frame_ref_size, \ + stack_cell_num, \ + error_buf, error_buf_size)) \ + goto fail; \ + } while (0) + +static bool +check_stack_pop(uint8 type, uint8 *frame_ref, uint32 stack_cell_num, + char *error_buf, uint32 error_buf_size, + const char *type_str) +{ + if (((type == VALUE_TYPE_I32 || type == VALUE_TYPE_F32) + && stack_cell_num < 1) + || ((type == VALUE_TYPE_I64 || type == VALUE_TYPE_F64) + && stack_cell_num < 2)) { + set_error_buf(error_buf, error_buf_size, + "type mismatch: expected data but stack was empty"); + return false; + } + + if ((type == VALUE_TYPE_I32 && *(frame_ref - 1) != REF_I32) + || (type == VALUE_TYPE_F32 && *(frame_ref - 1) != REF_F32) + || (type == VALUE_TYPE_I64 + && (*(frame_ref - 2) != REF_I64_1 || *(frame_ref - 1) != REF_I64_2)) + || (type == VALUE_TYPE_F64 + && (*(frame_ref - 2) != REF_F64_1 || *(frame_ref - 1) != REF_F64_2))) { + if (error_buf != NULL) + snprintf(error_buf, error_buf_size, "%s%s%s", + "type mismatch: expected ", type_str, " but got other"); + return false; + } + return true; +} + +#define CHECK_STACK_POP(TYPE, type) do { \ + if (!check_stack_pop(VALUE_TYPE_##TYPE, \ + frame_ref, stack_cell_num, \ + error_buf, error_buf_size, #type)) \ + goto fail; \ + } while (0) + +#define PUSH_I32() do { \ + CHECK_STACK_PUSH(); \ + *frame_ref++ = REF_I32; \ + stack_cell_num++; \ + if (stack_cell_num > max_stack_cell_num) \ + max_stack_cell_num = stack_cell_num; \ + } while (0) + +#define PUSH_F32() do { \ + CHECK_STACK_PUSH(); \ + *frame_ref++ = REF_F32; \ + stack_cell_num++; \ + if (stack_cell_num > max_stack_cell_num) \ + max_stack_cell_num = stack_cell_num; \ + } while (0) + +#define PUSH_I64() do { \ + CHECK_STACK_PUSH(); \ + *frame_ref++ = REF_I64_1; \ + stack_cell_num++; \ + CHECK_STACK_PUSH(); \ + *frame_ref++ = REF_I64_2; \ + stack_cell_num++; \ + if (stack_cell_num > max_stack_cell_num) \ + max_stack_cell_num = stack_cell_num; \ + } while (0) + +#define PUSH_F64() do { \ + CHECK_STACK_PUSH(); \ + *frame_ref++ = REF_F64_1; \ + stack_cell_num++; \ + CHECK_STACK_PUSH(); \ + *frame_ref++ = REF_F64_2; \ + stack_cell_num++; \ + if (stack_cell_num > max_stack_cell_num) \ + max_stack_cell_num = stack_cell_num; \ + } while (0) + +#define POP_I32() do { \ + CHECK_STACK_POP(I32, i32); \ + stack_cell_num--; \ + frame_ref--; \ + } while (0) + +#define POP_I64() do { \ + CHECK_STACK_POP(I64, i64); \ + stack_cell_num -= 2; \ + frame_ref -= 2; \ + } while (0) + +#define POP_F32() do { \ + CHECK_STACK_POP(F32, f32); \ + stack_cell_num--; \ + frame_ref--; \ + } while (0) + +#define POP_F64() do { \ + CHECK_STACK_POP(F64, f64); \ + stack_cell_num -= 2; \ + frame_ref -= 2; \ + } while (0) + +static bool +push_type(uint8 type, uint8 **p_frame_ref_bottom, + uint8 **p_frame_ref_boundary, + uint8 **p_frame_ref, uint32 *p_frame_ref_size, + uint32 *p_stack_cell_num, uint32 *p_max_stack_cell_num, + char *error_buf, uint32 error_buf_size) +{ + uint8 *frame_ref = *p_frame_ref; + uint32 frame_ref_size = *p_frame_ref_size; + uint32 max_stack_cell_num = *p_max_stack_cell_num; + uint32 stack_cell_num = *p_stack_cell_num; + + switch (type) { + case VALUE_TYPE_I64: + case VALUE_TYPE_F64: + if (!check_stack_push(p_frame_ref_bottom, p_frame_ref_boundary, + &frame_ref, &frame_ref_size, + stack_cell_num, + error_buf, error_buf_size)) + goto fail; + *frame_ref++ = type; + stack_cell_num++; + if (stack_cell_num > max_stack_cell_num) + max_stack_cell_num = stack_cell_num; + case VALUE_TYPE_I32: + case VALUE_TYPE_F32: + if (!check_stack_push(p_frame_ref_bottom, p_frame_ref_boundary, + &frame_ref, &frame_ref_size, + stack_cell_num, + error_buf, error_buf_size)) + goto fail; + *frame_ref++ = type; + stack_cell_num++; + if (stack_cell_num > max_stack_cell_num) + max_stack_cell_num = stack_cell_num; + break; + } + + *p_frame_ref = frame_ref; + *p_frame_ref_size = frame_ref_size; + *p_max_stack_cell_num = max_stack_cell_num; + *p_stack_cell_num = stack_cell_num; + return true; +fail: + return false; +} + +#define PUSH_TYPE(type) do { \ + if (!push_type(type, &frame_ref_bottom, \ + &frame_ref_boundary, \ + &frame_ref, &frame_ref_size, \ + &stack_cell_num, &max_stack_cell_num, \ + error_buf, error_buf_size)) \ + goto fail; \ + } while (0) + +static bool +pop_type(uint8 type, uint8 **p_frame_ref, uint32 *p_stack_cell_num, + char *error_buf, uint32 error_buf_size) +{ + char *type_str[] = { "f64", "f32", "i64", "i32" }; + switch (type) { + case VALUE_TYPE_I64: + case VALUE_TYPE_F64: + if (!check_stack_pop(type, *p_frame_ref, *p_stack_cell_num, + error_buf, error_buf_size, + type_str[type - VALUE_TYPE_F64])) + return false; + *p_frame_ref -= 2; + *p_stack_cell_num -= 2; + break; + case VALUE_TYPE_I32: + case VALUE_TYPE_F32: + if (!check_stack_pop(type, *p_frame_ref, *p_stack_cell_num, + error_buf, error_buf_size, + type_str[type - VALUE_TYPE_F64])) + return false; + *p_frame_ref -= 1; + *p_stack_cell_num -= 1; + break; + } + return true; +} + +#define POP_TYPE(type) do { \ + if (!pop_type(type, &frame_ref, &stack_cell_num,\ + error_buf, error_buf_size)) \ + goto fail; \ + } while (0) + +#define CHECK_CSP_PUSH() do { \ + if (frame_csp >= frame_csp_boundary) { \ + MEM_REALLOC(frame_csp_bottom, frame_csp_size, \ + frame_csp_size + 8 * sizeof(BranchBlock));\ + frame_csp_size += 8 * sizeof(BranchBlock); \ + frame_csp_boundary = frame_csp_bottom + \ + frame_csp_size / sizeof(BranchBlock); \ + frame_csp = frame_csp_bottom + csp_num; \ + } \ + } while (0) + +#define CHECK_CSP_POP() do { \ + if (csp_num < 1) { \ + set_error_buf(error_buf, error_buf_size, \ + "type mismatch: expected data but block stack was empty");\ + goto fail; \ + } \ + } while (0) + +#define PUSH_CSP(type, ret_type, _start_addr) do { \ + CHECK_CSP_PUSH(); \ + frame_csp->block_type = type; \ + frame_csp->jumped_by_br = false; \ + frame_csp->return_type = ret_type; \ + frame_csp->start_addr = _start_addr; \ + frame_csp->else_addr = NULL; \ + frame_csp->end_addr = NULL; \ + frame_csp->stack_cell_num = stack_cell_num; \ + frame_csp++; \ + csp_num++; \ + if (csp_num > max_csp_num) \ + max_csp_num = csp_num; \ + } while (0) + +#define POP_CSP() do { \ + CHECK_CSP_POP(); \ + frame_csp--; \ + csp_num--; \ + } while (0) + +#define GET_LOCAL_INDEX_AND_TYPE() do { \ + read_leb_uint32(p, p_end, local_idx); \ + if (local_idx >= param_count + local_count) { \ + set_error_buf(error_buf, error_buf_size, \ + "invalid index: local index out of range"); \ + goto fail; \ + } \ + local_type = local_idx < param_count \ + ? param_types[local_idx] \ + : local_types[local_idx - param_count]; \ + } while (0) + +#define CHECK_BR(depth) do { \ + if (csp_num < depth + 1) { \ + set_error_buf(error_buf, error_buf_size, "type mismatch: " \ + "expected data but block stack was empty"); \ + goto fail; \ + } \ + if ((frame_csp - (depth + 1))->block_type != BLOCK_TYPE_LOOP) { \ + uint8 tmp_ret_type = (frame_csp - (depth + 1))->return_type; \ + if ((tmp_ret_type == VALUE_TYPE_I32 \ + && (stack_cell_num < 1 || *(frame_ref - 1) != REF_I32)) \ + || (tmp_ret_type == VALUE_TYPE_F32 \ + && (stack_cell_num < 1 || *(frame_ref - 1) != REF_F32))\ + || (tmp_ret_type == VALUE_TYPE_I64 \ + && (stack_cell_num < 2 \ + || *(frame_ref - 2) != REF_I64_1 \ + || *(frame_ref - 1) != REF_I64_2)) \ + || (tmp_ret_type == VALUE_TYPE_F64 \ + && (stack_cell_num < 2 \ + || *(frame_ref - 2) != REF_F64_1 \ + || *(frame_ref - 1) != REF_F64_2))) { \ + set_error_buf(error_buf, error_buf_size, "type mismatch: " \ + "expected data but stack was empty or other type"); \ + goto fail; \ + } \ + (frame_csp - (depth + 1))->jumped_by_br = true; \ + } \ + } while (0) + +static bool +wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, + char *error_buf, uint32 error_buf_size) +{ + HashMap *branch_set = module->branch_set; + block_addr *block; + uint8 *p = func->code, *p_end = func->code + func->code_size; + uint8 *frame_lp_ref_bottom = NULL; + uint8 *frame_ref_bottom = NULL, *frame_ref_boundary, *frame_ref; + BranchBlock *frame_csp_bottom = NULL, *frame_csp_boundary, *frame_csp; + uint32 param_count, local_count, global_count; + uint32 param_cell_num, local_cell_num; + uint32 max_stack_cell_num = 0, max_csp_num = 0; + uint32 stack_cell_num = 0, csp_num = 0; + uint32 frame_ref_size, frame_csp_size; + uint8 *param_types, ret_type, *local_types, local_type, global_type; + uint32 count, i, local_idx, global_idx, block_return_type, depth, u32; + int32 i32, i32_const = 0; + int64 i64; + uint8 opcode, u8; + bool return_value = false, is_i32_const = false; + + global_count = module->import_global_count + module->global_count; + + param_count = func->func_type->param_count; + param_types = func->func_type->types; + ret_type = func->func_type->result_count + ? param_types[param_count] : VALUE_TYPE_VOID; + + local_count = func->local_count; + local_types = func->local_types; + + param_cell_num = wasm_get_cell_num(param_types, param_count); + local_cell_num = wasm_get_cell_num(local_types, local_count); + + if (!(frame_lp_ref_bottom = wasm_malloc(param_cell_num + local_cell_num))) { + set_error_buf(error_buf, error_buf_size, + "WASM loader prepare bytecode failed: alloc memory failed"); + goto fail; + } + memset(frame_lp_ref_bottom, 0, param_cell_num + local_cell_num); + + frame_ref_size = 32; + if (!(frame_ref_bottom = frame_ref = wasm_malloc(frame_ref_size))) { + set_error_buf(error_buf, error_buf_size, + "WASM loader prepare bytecode failed: alloc memory failed"); + goto fail; + } + memset(frame_ref_bottom, 0, frame_ref_size); + frame_ref_boundary = frame_ref_bottom + frame_ref_size; + + frame_csp_size = sizeof(BranchBlock) * 8; + if (!(frame_csp_bottom = frame_csp = wasm_malloc(frame_csp_size))) { + set_error_buf(error_buf, error_buf_size, + "WASM loader prepare bytecode failed: alloc memory failed"); + goto fail; + } + + memset(frame_csp_bottom, 0, frame_csp_size); + frame_csp_boundary = frame_csp_bottom + 8; + + PUSH_CSP(BLOCK_TYPE_FUNCTION, ret_type, p); + (frame_csp - 1)->jumped_by_br = true; + + while (p < p_end) { + opcode = *p++; + + switch (opcode) { + case WASM_OP_UNREACHABLE: + goto handle_op_br; + + case WASM_OP_NOP: + break; + + case WASM_OP_BLOCK: + read_leb_uint32(p, p_end, block_return_type); + PUSH_CSP(BLOCK_TYPE_BLOCK, block_return_type, p); + break; + + case WASM_OP_LOOP: + read_leb_uint32(p, p_end, block_return_type); + PUSH_CSP(BLOCK_TYPE_LOOP, block_return_type, p); + break; + + case WASM_OP_IF: + POP_I32(); + read_leb_uint32(p, p_end, block_return_type); + PUSH_CSP(BLOCK_TYPE_IF, block_return_type, p); + if (!is_i32_const) + (frame_csp - 1)->jumped_by_br = true; + else { + if (!i32_const) { + if(!wasm_loader_find_block_addr(branch_set, + (frame_csp - 1)->start_addr, + p_end, + (frame_csp - 1)->block_type, + &(frame_csp - 1)->else_addr, + &(frame_csp - 1)->end_addr, + error_buf, error_buf_size)) + goto fail; + + if ((frame_csp - 1)->else_addr) + p = (frame_csp - 1)->else_addr; + else + p = (frame_csp - 1)->end_addr; + } + } + break; + + case WASM_OP_ELSE: + if (csp_num < 2) { + set_error_buf(error_buf, error_buf_size, "invalid else"); + goto fail; + } + + if ((frame_csp - 1)->block_type != BLOCK_TYPE_IF) { + set_error_buf(error_buf, error_buf_size, "invalid else"); + goto fail; + } + + (frame_csp - 1)->else_addr = p - 1; + stack_cell_num = (frame_csp - 1)->stack_cell_num; + frame_ref = frame_ref_bottom + stack_cell_num; + break; + + case WASM_OP_END: + { + POP_CSP(); + + POP_TYPE(frame_csp->return_type); + PUSH_TYPE(frame_csp->return_type); + + if (csp_num > 0) { + frame_csp->end_addr = p - 1; + + if (wasm_hash_map_find(branch_set, (void*)frame_csp->start_addr)) + break; + + if (!(block = wasm_malloc(sizeof(block_addr)))) { + set_error_buf(error_buf, error_buf_size, + "WASM loader prepare bytecode failed: " + "alloc memory failed"); + goto fail; + } + + block->block_type = frame_csp->block_type; + block->else_addr = (void*)frame_csp->else_addr; + block->end_addr = (void*)frame_csp->end_addr; + + if (!wasm_hash_map_insert(branch_set, (void*)frame_csp->start_addr, + block)) { + set_error_buf(error_buf, error_buf_size, + "WASM loader prepare bytecode failed: " + "alloc memory failed"); + wasm_free(block); + goto fail; + } + } + break; + } + + case WASM_OP_BR: + { + read_leb_uint32(p, p_end, depth); + CHECK_BR(depth); + +handle_op_br: + for (i = 1; i <= csp_num; i++) + if ((frame_csp - i)->jumped_by_br) + break; + + block_return_type = (frame_csp - i)->return_type; + + if(!wasm_loader_find_block_addr(branch_set, + (frame_csp - i)->start_addr, + p_end, + (frame_csp - i)->block_type, + &(frame_csp - i)->else_addr, + &(frame_csp - i)->end_addr, + error_buf, error_buf_size)) + goto fail; + + stack_cell_num = (frame_csp - i)->stack_cell_num; + frame_ref = frame_ref_bottom + stack_cell_num; + csp_num -= i - 1; + frame_csp -= i - 1; + + if ((frame_csp - 1)->block_type == BLOCK_TYPE_IF + && (frame_csp - 1)->else_addr != NULL + && p <= (frame_csp - 1)->else_addr) + p = (frame_csp - 1)->else_addr; + else { + p = (frame_csp - 1)->end_addr; + PUSH_TYPE(block_return_type); + } + + break; + } + + case WASM_OP_BR_IF: + read_leb_uint32(p, p_end, depth); + POP_I32(); + CHECK_BR(depth); + if (!is_i32_const) + (frame_csp - (depth + 1))->jumped_by_br = true; + else { + if (i32_const) + goto handle_op_br; + } + break; + + case WASM_OP_BR_TABLE: + { + read_leb_uint32(p, p_end, count); + POP_I32(); + + /* TODO: check the const */ + for (i = 0; i <= count; i++) { + read_leb_uint32(p, p_end, depth); + CHECK_BR(depth); + } + goto handle_op_br; + } + + case WASM_OP_RETURN: + { + POP_TYPE(ret_type); + PUSH_TYPE(ret_type); + + if(!wasm_loader_find_block_addr(branch_set, + (frame_csp - 1)->start_addr, + p_end, + (frame_csp - 1)->block_type, + &(frame_csp - 1)->else_addr, + &(frame_csp - 1)->end_addr, + error_buf, error_buf_size)) + goto fail; + + stack_cell_num = (frame_csp - 1)->stack_cell_num; + frame_ref = frame_ref_bottom + stack_cell_num; + if ((frame_csp - 1)->block_type == BLOCK_TYPE_IF + && p <= (frame_csp - 1)->else_addr) { + p = (frame_csp - 1)->else_addr; + } + else { + p = (frame_csp - 1)->end_addr; + PUSH_TYPE((frame_csp - 1)->return_type); + } + break; + } + + case WASM_OP_CALL: + { + WASMType *func_type; + uint32 func_idx; + int32 idx; + + read_leb_uint32(p, p_end, func_idx); + + if (func_idx >= module->import_function_count + module->function_count) { + set_error_buf(error_buf, error_buf_size, "function index is overflow"); + goto fail; + } + + if (func_idx < module->import_function_count) + func_type = module->import_functions[func_idx].u.function.func_type; + else + func_type = + module->functions[func_idx - module->import_function_count]->func_type; + + for (idx = func_type->param_count - 1; idx >= 0; idx--) + POP_TYPE(func_type->types[idx]); + + if (func_type->result_count) + PUSH_TYPE(func_type->types[func_type->param_count]); + break; + } + + case WASM_OP_CALL_INDIRECT: + { + int32 idx; + WASMType *func_type; + uint32 type_idx; + + read_leb_uint32(p, p_end, type_idx); + read_leb_uint8(p, p_end, u8); /* 0x00 */ + POP_I32(); + + if (type_idx >= module->type_count) { + set_error_buf(error_buf, error_buf_size, "function index is overflow"); + goto fail; + } + + func_type = module->types[type_idx]; + + for (idx = func_type->param_count - 1; idx >= 0; idx--) + POP_TYPE(func_type->types[idx]); + + PUSH_TYPE(func_type->types[func_type->param_count]); + break; + } + + case WASM_OP_DROP: + { + if (stack_cell_num <= 0) { + set_error_buf(error_buf, error_buf_size, + "invalid drop: stack was empty"); + goto fail; + } + + if (*(frame_ref - 1) == REF_I32 + || *(frame_ref - 1) == REF_F32) { + frame_ref--; + stack_cell_num--; + *(p - 1) = WASM_OP_DROP_32; + } + else { + if (stack_cell_num <= 1) { + set_error_buf(error_buf, error_buf_size, + "invalid drop: stack was empty"); + goto fail; + } + frame_ref -= 2; + stack_cell_num -= 2; + *(p - 1) = WASM_OP_DROP_64; + } + break; + } + + case WASM_OP_SELECT: + { + uint8 ref_type; + + POP_I32(); + + if (stack_cell_num <= 0) { + set_error_buf(error_buf, error_buf_size, + "invalid drop: stack was empty"); + goto fail; + } + + switch (*(frame_ref - 1)) { + case REF_I32: + case REF_F32: + *(p - 1) = WASM_OP_SELECT_32; + break; + case REF_I64_2: + case REF_F64_2: + *(p - 1) = WASM_OP_SELECT_64; + break; + } + + ref_type = *(frame_ref - 1); + POP_TYPE(ref_type); + POP_TYPE(ref_type); + PUSH_TYPE(ref_type); + break; + } + + case WASM_OP_GET_LOCAL: + { + GET_LOCAL_INDEX_AND_TYPE(); + PUSH_TYPE(local_type); + break; + } + + case WASM_OP_SET_LOCAL: + { + GET_LOCAL_INDEX_AND_TYPE(); + POP_TYPE(local_type); + break; + } + + case WASM_OP_TEE_LOCAL: + { + GET_LOCAL_INDEX_AND_TYPE(); + POP_TYPE(local_type); + PUSH_TYPE(local_type); + break; + } + + case WASM_OP_GET_GLOBAL: + { + read_leb_uint32(p, p_end, global_idx); + if (global_idx >= global_count) { + set_error_buf(error_buf, error_buf_size, + "invalid index: global index out of range"); + goto fail; + } + + global_type = global_idx < module->import_global_count + ? module->import_globals[global_idx].u.global.type + :module->globals[global_idx - module->import_global_count].type; + + PUSH_TYPE(global_type); + break; + } + + case WASM_OP_SET_GLOBAL: + { + read_leb_uint32(p, p_end, global_idx); + if (global_idx >= global_count) { + set_error_buf(error_buf, error_buf_size, + "invalid index: global index out of range"); + goto fail; + } + + global_type = global_idx < module->import_global_count + ? module->import_globals[global_idx].u.global.type + : module->globals[global_idx - module->import_global_count].type; + + POP_TYPE(global_type); + break; + } + + case WASM_OP_I32_LOAD: + case WASM_OP_I32_LOAD8_S: + case WASM_OP_I32_LOAD8_U: + case WASM_OP_I32_LOAD16_S: + case WASM_OP_I32_LOAD16_U: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_I32(); + PUSH_I32(); + break; + + case WASM_OP_I64_LOAD: + case WASM_OP_I64_LOAD8_S: + case WASM_OP_I64_LOAD8_U: + case WASM_OP_I64_LOAD16_S: + case WASM_OP_I64_LOAD16_U: + case WASM_OP_I64_LOAD32_S: + case WASM_OP_I64_LOAD32_U: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_I32(); + PUSH_I64(); + break; + + case WASM_OP_F32_LOAD: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_I32(); + PUSH_F32(); + break; + + case WASM_OP_F64_LOAD: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_I32(); + PUSH_F64(); + break; + + case WASM_OP_I32_STORE: + case WASM_OP_I32_STORE8: + case WASM_OP_I32_STORE16: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_I32(); + POP_I32(); + break; + + case WASM_OP_I64_STORE: + case WASM_OP_I64_STORE8: + case WASM_OP_I64_STORE16: + case WASM_OP_I64_STORE32: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_I64(); + POP_I32(); + break; + + case WASM_OP_F32_STORE: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_F32(); + POP_I32(); + break; + + case WASM_OP_F64_STORE: + read_leb_uint32(p, p_end, u32); /* align */ + read_leb_uint32(p, p_end, u32); /* offset */ + POP_F64(); + POP_I32(); + break; + + case WASM_OP_MEMORY_SIZE: + read_leb_uint32(p, p_end, u32); /* 0x00 */ + PUSH_I32(); + break; + + case WASM_OP_MEMORY_GROW: + read_leb_uint32(p, p_end, u32); /* 0x00 */ + POP_I32(); + PUSH_I32(); + break; + + case WASM_OP_I32_CONST: + read_leb_int32(p, p_end, i32_const); + /* Currently we only track simple I32_CONST opcode. */ + is_i32_const = true; + PUSH_I32(); + break; + + case WASM_OP_I64_CONST: + read_leb_int64(p, p_end, i64); + PUSH_I64(); + break; + + case WASM_OP_F32_CONST: + p += sizeof(float32); + PUSH_F32(); + break; + + case WASM_OP_F64_CONST: + p += sizeof(float64); + PUSH_F64(); + break; + + case WASM_OP_I32_EQZ: + POP_I32(); + PUSH_I32(); + break; + + case WASM_OP_I32_EQ: + case WASM_OP_I32_NE: + case WASM_OP_I32_LT_S: + case WASM_OP_I32_LT_U: + case WASM_OP_I32_GT_S: + case WASM_OP_I32_GT_U: + case WASM_OP_I32_LE_S: + case WASM_OP_I32_LE_U: + case WASM_OP_I32_GE_S: + case WASM_OP_I32_GE_U: + POP_I32(); + POP_I32(); + PUSH_I32(); + break; + + case WASM_OP_I64_EQZ: + POP_I64(); + PUSH_I32(); + break; + + case WASM_OP_I64_EQ: + case WASM_OP_I64_NE: + case WASM_OP_I64_LT_S: + case WASM_OP_I64_LT_U: + case WASM_OP_I64_GT_S: + case WASM_OP_I64_GT_U: + case WASM_OP_I64_LE_S: + case WASM_OP_I64_LE_U: + case WASM_OP_I64_GE_S: + case WASM_OP_I64_GE_U: + POP_I64(); + POP_I64(); + PUSH_I32(); + break; + + case WASM_OP_F32_EQ: + case WASM_OP_F32_NE: + case WASM_OP_F32_LT: + case WASM_OP_F32_GT: + case WASM_OP_F32_LE: + case WASM_OP_F32_GE: + POP_F32(); + POP_F32(); + PUSH_I32(); + break; + + case WASM_OP_F64_EQ: + case WASM_OP_F64_NE: + case WASM_OP_F64_LT: + case WASM_OP_F64_GT: + case WASM_OP_F64_LE: + case WASM_OP_F64_GE: + POP_F64(); + POP_F64(); + PUSH_I32(); + break; + + break; + + case WASM_OP_I32_CLZ: + case WASM_OP_I32_CTZ: + case WASM_OP_I32_POPCNT: + POP_I32(); + PUSH_I32(); + break; + + case WASM_OP_I32_ADD: + case WASM_OP_I32_SUB: + case WASM_OP_I32_MUL: + case WASM_OP_I32_DIV_S: + case WASM_OP_I32_DIV_U: + case WASM_OP_I32_REM_S: + case WASM_OP_I32_REM_U: + case WASM_OP_I32_AND: + case WASM_OP_I32_OR: + case WASM_OP_I32_XOR: + case WASM_OP_I32_SHL: + case WASM_OP_I32_SHR_S: + case WASM_OP_I32_SHR_U: + case WASM_OP_I32_ROTL: + case WASM_OP_I32_ROTR: + POP_I32(); + POP_I32(); + PUSH_I32(); + break; + + case WASM_OP_I64_CLZ: + case WASM_OP_I64_CTZ: + case WASM_OP_I64_POPCNT: + POP_I64(); + PUSH_I64(); + break; + + case WASM_OP_I64_ADD: + case WASM_OP_I64_SUB: + case WASM_OP_I64_MUL: + case WASM_OP_I64_DIV_S: + case WASM_OP_I64_DIV_U: + case WASM_OP_I64_REM_S: + case WASM_OP_I64_REM_U: + case WASM_OP_I64_AND: + case WASM_OP_I64_OR: + case WASM_OP_I64_XOR: + case WASM_OP_I64_SHL: + case WASM_OP_I64_SHR_S: + case WASM_OP_I64_SHR_U: + case WASM_OP_I64_ROTL: + case WASM_OP_I64_ROTR: + POP_I64(); + POP_I64(); + PUSH_I64(); + break; + + case WASM_OP_F32_ABS: + case WASM_OP_F32_NEG: + case WASM_OP_F32_CEIL: + case WASM_OP_F32_FLOOR: + case WASM_OP_F32_TRUNC: + case WASM_OP_F32_NEAREST: + case WASM_OP_F32_SQRT: + POP_F32(); + PUSH_F32(); + break; + + case WASM_OP_F32_ADD: + case WASM_OP_F32_SUB: + case WASM_OP_F32_MUL: + case WASM_OP_F32_DIV: + case WASM_OP_F32_MIN: + case WASM_OP_F32_MAX: + case WASM_OP_F32_COPYSIGN: + POP_F32(); + POP_F32(); + PUSH_F32(); + break; + + case WASM_OP_F64_ABS: + case WASM_OP_F64_NEG: + case WASM_OP_F64_CEIL: + case WASM_OP_F64_FLOOR: + case WASM_OP_F64_TRUNC: + case WASM_OP_F64_NEAREST: + case WASM_OP_F64_SQRT: + POP_F64(); + PUSH_F64(); + break; + + case WASM_OP_F64_ADD: + case WASM_OP_F64_SUB: + case WASM_OP_F64_MUL: + case WASM_OP_F64_DIV: + case WASM_OP_F64_MIN: + case WASM_OP_F64_MAX: + case WASM_OP_F64_COPYSIGN: + POP_F64(); + POP_F64(); + PUSH_F64(); + break; + + case WASM_OP_I32_WRAP_I64: + POP_I64(); + PUSH_I32(); + break; + + case WASM_OP_I32_TRUNC_S_F32: + case WASM_OP_I32_TRUNC_U_F32: + POP_F32(); + PUSH_I32(); + break; + + case WASM_OP_I32_TRUNC_S_F64: + case WASM_OP_I32_TRUNC_U_F64: + POP_F64(); + PUSH_I32(); + break; + + case WASM_OP_I64_EXTEND_S_I32: + case WASM_OP_I64_EXTEND_U_I32: + POP_I32(); + PUSH_I64(); + break; + + case WASM_OP_I64_TRUNC_S_F32: + case WASM_OP_I64_TRUNC_U_F32: + POP_F32(); + PUSH_I64(); + break; + + case WASM_OP_I64_TRUNC_S_F64: + case WASM_OP_I64_TRUNC_U_F64: + POP_F64(); + PUSH_I64(); + break; + + case WASM_OP_F32_CONVERT_S_I32: + case WASM_OP_F32_CONVERT_U_I32: + POP_I32(); + PUSH_F32(); + break; + + case WASM_OP_F32_CONVERT_S_I64: + case WASM_OP_F32_CONVERT_U_I64: + POP_I64(); + PUSH_F32(); + break; + + case WASM_OP_F32_DEMOTE_F64: + POP_F64(); + PUSH_F32(); + break; + + case WASM_OP_F64_CONVERT_S_I32: + case WASM_OP_F64_CONVERT_U_I32: + POP_I32(); + PUSH_F64(); + break; + + case WASM_OP_F64_CONVERT_S_I64: + case WASM_OP_F64_CONVERT_U_I64: + POP_I64(); + PUSH_F64(); + break; + + case WASM_OP_F64_PROMOTE_F32: + POP_F32(); + PUSH_F64(); + break; + + case WASM_OP_I32_REINTERPRET_F32: + POP_F32(); + PUSH_I32(); + break; + + case WASM_OP_I64_REINTERPRET_F64: + POP_F64(); + PUSH_I64(); + break; + + case WASM_OP_F32_REINTERPRET_I32: + POP_I32(); + PUSH_F32(); + break; + + case WASM_OP_F64_REINTERPRET_I64: + POP_I64(); + PUSH_F64(); + break; + + default: + LOG_ERROR("WASM loader find block addr failed: invalid opcode %02x.\n", + opcode); + break; + } + + if (opcode != WASM_OP_I32_CONST) + is_i32_const = false; + } + + func->max_stack_cell_num = max_stack_cell_num; + func->max_block_num = max_csp_num; + return_value = true; + +fail: + if (frame_lp_ref_bottom) + wasm_free(frame_lp_ref_bottom); + if (frame_ref_bottom) + wasm_free(frame_ref_bottom); + if (frame_csp_bottom) + wasm_free(frame_csp_bottom); + + (void)u8; + (void)u32; + (void)i32; + (void)i64; + return return_value; +} diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-loader.h b/core/iwasm/runtime/vmcore_wasm/wasm-loader.h new file mode 100644 index 000000000..04b17b6ee --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-loader.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef _WASM_LOADER_H +#define _WASM_LOADER_H + +#include "wasm.h" +#include "wasm_hashmap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Load a WASM module from a specified byte buffer. + * + * @param buf the byte buffer which contains the WASM binary data + * @param size the size of the buffer + * @param error_buf output of the exception info + * @param error_buf_size the size of the exception string + * + * @return return module loaded, NULL if failed + */ +WASMModule* +wasm_loader_load(const uint8 *buf, uint32 size, char *error_buf, uint32 error_buf_size); + +/** + * Load a WASM module from a specified WASM section list. + * + * @param section_list the section list which contains each section data + * @param error_buf output of the exception info + * @param error_buf_size the size of the exception string + * + * @return return WASM module loaded, NULL if failed + */ +WASMModule* +wasm_loader_load_from_sections(WASMSection *section_list, + char *error_buf, uint32_t error_buf_size); + +/** + * Unload a WASM module. + * + * @param module the module to be unloaded + */ +void +wasm_loader_unload(WASMModule *module); + +/** + * Find address of related else opcode and end opcode of opcode block/loop/if + * according to the start address of opcode. + * + * @param branch_set the hashtable to store the else/end adress info of + * block/loop/if opcode. The function will lookup the hashtable firstly, + * if not found, it will then search the code from start_addr, and if success, + * stores the result to the hashtable. + * @param start_addr the next address of opcode block/loop/if + * @param code_end_addr the end address of function code block + * @param block_type the type of block, 0/1/2 denotes block/loop/if + * @param p_else_addr returns the else addr if found + * @param p_end_addr returns the end addr if found + * @param error_buf returns the error log for this function + * @param error_buf_size returns the error log string length + * + * @return true if success, false otherwise + */ +bool +wasm_loader_find_block_addr(HashMap *map, + const uint8 *start_addr, + const uint8 *code_end_addr, + uint8 block_type, + uint8 **p_else_addr, + uint8 **p_end_addr, + char *error_buf, + uint32 error_buf_size); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_LOADER_H */ diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-native.h b/core/iwasm/runtime/vmcore_wasm/wasm-native.h new file mode 100644 index 000000000..74b0fb054 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-native.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_NATIVE_H +#define _WASM_NATIVE_H + +#include "wasm.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Initialize the native module, e.g. sort the function defs + * and the global defs. + * + * @return true if success, false otherwise + */ +bool +wasm_native_init(); + +/** + * Lookup native function implementation of a given import function. + * + * @param module_name the module name of the import function + * @param func_name the function name of the import function + * + * @return return the native function pointer if success, NULL otherwise + */ +void* +wasm_native_func_lookup(const char *module_name, const char *func_name); + +/** + * Lookup global variable of a given import global + * + * @param module_name the module name of the import global + * @param global_name the global name of the import global + * @param global return the global data + * + * @param return true if success, false otherwise + */ +bool +wasm_native_global_lookup(const char *module_name, const char *global_name, + WASMGlobalImport *global); + +void* wasm_platform_native_func_lookup(const char *module_name, + const char *func_name); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_NATIVE_H */ diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h b/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h new file mode 100644 index 000000000..2917bf429 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-opcode.h @@ -0,0 +1,472 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_OPCODE_H +#define _WASM_OPCODE_H + +#include "wasm.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum WASMOpcode { + /* control instructions */ + WASM_OP_UNREACHABLE = 0x00, /* unreachable */ + WASM_OP_NOP = 0x01, /* nop */ + WASM_OP_BLOCK = 0x02, /* block */ + WASM_OP_LOOP = 0x03, /* loop */ + WASM_OP_IF = 0x04, /* if */ + WASM_OP_ELSE = 0x05, /* else */ + + WASM_OP_UNUSED_0x06 = 0x06, + WASM_OP_UNUSED_0x07 = 0x07, + WASM_OP_UNUSED_0x08 = 0x08, + WASM_OP_UNUSED_0x09 = 0x09, + WASM_OP_UNUSED_0x0a = 0x0a, + + WASM_OP_END = 0x0b, /* end */ + WASM_OP_BR = 0x0c, /* br */ + WASM_OP_BR_IF = 0x0d, /* br if */ + WASM_OP_BR_TABLE = 0x0e, /* br table */ + WASM_OP_RETURN = 0x0f, /* return */ + WASM_OP_CALL = 0x10, /* call */ + WASM_OP_CALL_INDIRECT = 0x11, /* call_indirect */ + + WASM_OP_UNUSED_0x12 = 0x12, + WASM_OP_UNUSED_0x13 = 0x13, + WASM_OP_UNUSED_0x14 = 0x14, + WASM_OP_UNUSED_0x15 = 0x15, + WASM_OP_UNUSED_0x16 = 0x16, + WASM_OP_UNUSED_0x17 = 0x17, + WASM_OP_UNUSED_0x18 = 0x18, + WASM_OP_UNUSED_0x19 = 0x19, + + /* parametric instructions */ + WASM_OP_DROP = 0x1a, /* drop */ + WASM_OP_SELECT = 0x1b, /* select */ + + WASM_OP_UNUSED_0x1c = 0x1c, + WASM_OP_UNUSED_0x1d = 0x1d, + WASM_OP_UNUSED_0x1e = 0x1e, + WASM_OP_UNUSED_0x1f = 0x1f, + + /* variable instructions */ + WASM_OP_GET_LOCAL = 0x20, /* get_local */ + WASM_OP_SET_LOCAL = 0x21, /* set_local */ + WASM_OP_TEE_LOCAL = 0x22, /* tee_local */ + WASM_OP_GET_GLOBAL = 0x23, /* get_global */ + WASM_OP_SET_GLOBAL = 0x24, /* set_global */ + + WASM_OP_UNUSED_0x25 = 0x25, + WASM_OP_UNUSED_0x26 = 0x26, + WASM_OP_UNUSED_0x27 = 0x27, + + /* memory instructions */ + WASM_OP_I32_LOAD = 0x28, /* i32.load */ + WASM_OP_I64_LOAD = 0x29, /* i64.load */ + WASM_OP_F32_LOAD = 0x2a, /* f32.load */ + WASM_OP_F64_LOAD = 0x2b, /* f64.load */ + WASM_OP_I32_LOAD8_S = 0x2c, /* i32.load8_s */ + WASM_OP_I32_LOAD8_U = 0x2d, /* i32.load8_u */ + WASM_OP_I32_LOAD16_S = 0x2e, /* i32.load16_s */ + WASM_OP_I32_LOAD16_U = 0x2f, /* i32.load16_u */ + WASM_OP_I64_LOAD8_S = 0x30, /* i64.load8_s */ + WASM_OP_I64_LOAD8_U = 0x31, /* i64.load8_u */ + WASM_OP_I64_LOAD16_S = 0x32, /* i64.load16_s */ + WASM_OP_I64_LOAD16_U = 0x33, /* i64.load16_u */ + WASM_OP_I64_LOAD32_S = 0x34, /* i32.load32_s */ + WASM_OP_I64_LOAD32_U = 0x35, /* i32.load32_u */ + WASM_OP_I32_STORE = 0x36, /* i32.store */ + WASM_OP_I64_STORE = 0x37, /* i64.store */ + WASM_OP_F32_STORE = 0x38, /* f32.store */ + WASM_OP_F64_STORE = 0x39, /* f64.store */ + WASM_OP_I32_STORE8 = 0x3a, /* i32.store8 */ + WASM_OP_I32_STORE16 = 0x3b, /* i32.store16 */ + WASM_OP_I64_STORE8 = 0x3c, /* i64.store8 */ + WASM_OP_I64_STORE16 = 0x3d, /* i64.sotre16 */ + WASM_OP_I64_STORE32 = 0x3e, /* i64.store32 */ + WASM_OP_MEMORY_SIZE = 0x3f, /* memory.size */ + WASM_OP_MEMORY_GROW = 0x40, /* memory.grow */ + + /* constant instructions */ + WASM_OP_I32_CONST = 0x41, /* i32.const */ + WASM_OP_I64_CONST = 0x42, /* i64.const */ + WASM_OP_F32_CONST = 0x43, /* f32.const */ + WASM_OP_F64_CONST = 0x44, /* f64.const */ + + /* comparison instructions */ + WASM_OP_I32_EQZ = 0x45, /* i32.eqz */ + WASM_OP_I32_EQ = 0x46, /* i32.eq */ + WASM_OP_I32_NE = 0x47, /* i32.ne */ + WASM_OP_I32_LT_S = 0x48, /* i32.lt_s */ + WASM_OP_I32_LT_U = 0x49, /* i32.lt_u */ + WASM_OP_I32_GT_S = 0x4a, /* i32.gt_s */ + WASM_OP_I32_GT_U = 0x4b, /* i32.gt_u */ + WASM_OP_I32_LE_S = 0x4c, /* i32.le_s */ + WASM_OP_I32_LE_U = 0x4d, /* i32.le_u */ + WASM_OP_I32_GE_S = 0x4e, /* i32.ge_s */ + WASM_OP_I32_GE_U = 0x4f, /* i32.ge_u */ + + WASM_OP_I64_EQZ = 0x50, /* i64.eqz */ + WASM_OP_I64_EQ = 0x51, /* i64.eq */ + WASM_OP_I64_NE = 0x52, /* i64.ne */ + WASM_OP_I64_LT_S = 0x53, /* i64.lt_s */ + WASM_OP_I64_LT_U = 0x54, /* i64.lt_u */ + WASM_OP_I64_GT_S = 0x55, /* i64.gt_s */ + WASM_OP_I64_GT_U = 0x56, /* i64.gt_u */ + WASM_OP_I64_LE_S = 0x57, /* i64.le_s */ + WASM_OP_I64_LE_U = 0x58, /* i64.le_u */ + WASM_OP_I64_GE_S = 0x59, /* i64.ge_s */ + WASM_OP_I64_GE_U = 0x5a, /* i64.ge_u */ + + WASM_OP_F32_EQ = 0x5b, /* f32.eq */ + WASM_OP_F32_NE = 0x5c, /* f32.ne */ + WASM_OP_F32_LT = 0x5d, /* f32.lt */ + WASM_OP_F32_GT = 0x5e, /* f32.gt */ + WASM_OP_F32_LE = 0x5f, /* f32.le */ + WASM_OP_F32_GE = 0x60, /* f32.ge */ + + WASM_OP_F64_EQ = 0x61, /* f64.eq */ + WASM_OP_F64_NE = 0x62, /* f64.ne */ + WASM_OP_F64_LT = 0x63, /* f64.lt */ + WASM_OP_F64_GT = 0x64, /* f64.gt */ + WASM_OP_F64_LE = 0x65, /* f64.le */ + WASM_OP_F64_GE = 0x66, /* f64.ge */ + + /* numeric operators */ + WASM_OP_I32_CLZ = 0x67, /* i32.clz */ + WASM_OP_I32_CTZ = 0x68, /* i32.ctz */ + WASM_OP_I32_POPCNT = 0x69, /* i32.popcnt */ + WASM_OP_I32_ADD = 0x6a, /* i32.add */ + WASM_OP_I32_SUB = 0x6b, /* i32.sub */ + WASM_OP_I32_MUL = 0x6c, /* i32.mul */ + WASM_OP_I32_DIV_S = 0x6d, /* i32.div_s */ + WASM_OP_I32_DIV_U = 0x6e, /* i32.div_u */ + WASM_OP_I32_REM_S = 0x6f, /* i32.rem_s */ + WASM_OP_I32_REM_U = 0x70, /* i32.rem_u */ + WASM_OP_I32_AND = 0x71, /* i32.and */ + WASM_OP_I32_OR = 0x72, /* i32.or */ + WASM_OP_I32_XOR = 0x73, /* i32.xor */ + WASM_OP_I32_SHL = 0x74, /* i32.shl */ + WASM_OP_I32_SHR_S = 0x75, /* i32.shr_s */ + WASM_OP_I32_SHR_U = 0x76, /* i32.shr_u */ + WASM_OP_I32_ROTL = 0x77, /* i32.rotl */ + WASM_OP_I32_ROTR = 0x78, /* i32.rotr */ + + WASM_OP_I64_CLZ = 0x79, /* i64.clz */ + WASM_OP_I64_CTZ = 0x7a, /* i64.ctz */ + WASM_OP_I64_POPCNT = 0x7b, /* i64.popcnt */ + WASM_OP_I64_ADD = 0x7c, /* i64.add */ + WASM_OP_I64_SUB = 0x7d, /* i64.sub */ + WASM_OP_I64_MUL = 0x7e, /* i64.mul */ + WASM_OP_I64_DIV_S = 0x7f, /* i64.div_s */ + WASM_OP_I64_DIV_U = 0x80, /* i64.div_u */ + WASM_OP_I64_REM_S = 0x81, /* i64.rem_s */ + WASM_OP_I64_REM_U = 0x82, /* i64.rem_u */ + WASM_OP_I64_AND = 0x83, /* i64.and */ + WASM_OP_I64_OR = 0x84, /* i64.or */ + WASM_OP_I64_XOR = 0x85, /* i64.xor */ + WASM_OP_I64_SHL = 0x86, /* i64.shl */ + WASM_OP_I64_SHR_S = 0x87, /* i64.shr_s */ + WASM_OP_I64_SHR_U = 0x88, /* i64.shr_u */ + WASM_OP_I64_ROTL = 0x89, /* i64.rotl */ + WASM_OP_I64_ROTR = 0x8a, /* i64.rotr */ + + WASM_OP_F32_ABS = 0x8b, /* f32.abs */ + WASM_OP_F32_NEG = 0x8c, /* f32.neg */ + WASM_OP_F32_CEIL = 0x8d, /* f32.ceil */ + WASM_OP_F32_FLOOR = 0x8e, /* f32.floor */ + WASM_OP_F32_TRUNC = 0x8f, /* f32.trunc */ + WASM_OP_F32_NEAREST = 0x90, /* f32.nearest */ + WASM_OP_F32_SQRT = 0x91, /* f32.sqrt */ + WASM_OP_F32_ADD = 0x92, /* f32.add */ + WASM_OP_F32_SUB = 0x93, /* f32.sub */ + WASM_OP_F32_MUL = 0x94, /* f32.mul */ + WASM_OP_F32_DIV = 0x95, /* f32.div */ + WASM_OP_F32_MIN = 0x96, /* f32.min */ + WASM_OP_F32_MAX = 0x97, /* f32.max */ + WASM_OP_F32_COPYSIGN = 0x98, /* f32.copysign */ + + WASM_OP_F64_ABS = 0x99, /* f64.abs */ + WASM_OP_F64_NEG = 0x9a, /* f64.neg */ + WASM_OP_F64_CEIL = 0x9b, /* f64.ceil */ + WASM_OP_F64_FLOOR = 0x9c, /* f64.floor */ + WASM_OP_F64_TRUNC = 0x9d, /* f64.trunc */ + WASM_OP_F64_NEAREST = 0x9e, /* f64.nearest */ + WASM_OP_F64_SQRT = 0x9f, /* f64.sqrt */ + WASM_OP_F64_ADD = 0xa0, /* f64.add */ + WASM_OP_F64_SUB = 0xa1, /* f64.sub */ + WASM_OP_F64_MUL = 0xa2, /* f64.mul */ + WASM_OP_F64_DIV = 0xa3, /* f64.div */ + WASM_OP_F64_MIN = 0xa4, /* f64.min */ + WASM_OP_F64_MAX = 0xa5, /* f64.max */ + WASM_OP_F64_COPYSIGN = 0xa6, /* f64.copysign */ + + /* conversions */ + WASM_OP_I32_WRAP_I64 = 0xa7, /* i32.wrap/i64 */ + WASM_OP_I32_TRUNC_S_F32 = 0xa8, /* i32.trunc_s/f32 */ + WASM_OP_I32_TRUNC_U_F32 = 0xa9, /* i32.trunc_u/f32 */ + WASM_OP_I32_TRUNC_S_F64 = 0xaa, /* i32.trunc_s/f64 */ + WASM_OP_I32_TRUNC_U_F64 = 0xab, /* i32.trunc_u/f64 */ + + WASM_OP_I64_EXTEND_S_I32 = 0xac, /* i64.extend_s/i32 */ + WASM_OP_I64_EXTEND_U_I32 = 0xad, /* i64.extend_u/i32 */ + WASM_OP_I64_TRUNC_S_F32 = 0xae, /* i64.trunc_s/f32 */ + WASM_OP_I64_TRUNC_U_F32 = 0xaf, /* i64.trunc_u/f32 */ + WASM_OP_I64_TRUNC_S_F64 = 0xb0, /* i64.trunc_s/f64 */ + WASM_OP_I64_TRUNC_U_F64 = 0xb1, /* i64.trunc_u/f64 */ + + WASM_OP_F32_CONVERT_S_I32 = 0xb2, /* f32.convert_s/i32 */ + WASM_OP_F32_CONVERT_U_I32 = 0xb3, /* f32.convert_u/i32 */ + WASM_OP_F32_CONVERT_S_I64 = 0xb4, /* f32.convert_s/i64 */ + WASM_OP_F32_CONVERT_U_I64 = 0xb5, /* f32.convert_u/i64 */ + WASM_OP_F32_DEMOTE_F64 = 0xb6, /* f32.demote/f64 */ + + WASM_OP_F64_CONVERT_S_I32 = 0xb7, /* f64.convert_s/i32 */ + WASM_OP_F64_CONVERT_U_I32 = 0xb8, /* f64.convert_u/i32 */ + WASM_OP_F64_CONVERT_S_I64 = 0xb9, /* f64.convert_s/i64 */ + WASM_OP_F64_CONVERT_U_I64 = 0xba, /* f64.convert_u/i64 */ + WASM_OP_F64_PROMOTE_F32 = 0xbb, /* f64.promote/f32 */ + + /* reinterpretations */ + WASM_OP_I32_REINTERPRET_F32 = 0xbc, /* i32.reinterpret/f32 */ + WASM_OP_I64_REINTERPRET_F64 = 0xbd, /* i64.reinterpret/f64 */ + WASM_OP_F32_REINTERPRET_I32 = 0xbe, /* f32.reinterpret/i32 */ + WASM_OP_F64_REINTERPRET_I64 = 0xbf, /* f64.reinterpret/i64 */ + + /* drop/select specified types*/ + WASM_OP_DROP_32 = 0xc0, + WASM_OP_DROP_64 = 0xc1, + WASM_OP_SELECT_32 = 0xc2, + WASM_OP_SELECT_64 = 0xc3, + + WASM_OP_IMPDEP1 = WASM_OP_SELECT_64 + 1, + WASM_OP_IMPDEP2 = WASM_OP_IMPDEP1 + 1 +} WASMOpcode; + +#ifdef __cplusplus +} +#endif + +/* + * Macro used to generate computed goto tables for the C interpreter. + */ +#define WASM_INSTRUCTION_NUM 256 + +#define DEFINE_GOTO_TABLE(_name) \ +static const void *_name[WASM_INSTRUCTION_NUM] = { \ + HANDLE_OPCODE (WASM_OP_UNREACHABLE), /* 0x00 */ \ + HANDLE_OPCODE (WASM_OP_NOP), /* 0x01 */ \ + HANDLE_OPCODE (WASM_OP_BLOCK), /* 0x02 */ \ + HANDLE_OPCODE (WASM_OP_LOOP), /* 0x03 */ \ + HANDLE_OPCODE (WASM_OP_IF), /* 0x04 */ \ + HANDLE_OPCODE (WASM_OP_ELSE), /* 0x05 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x06), /* 0x06 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x07), /* 0x07 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x08), /* 0x08 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x09), /* 0x09 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x0a), /* 0x0a */ \ + HANDLE_OPCODE (WASM_OP_END), /* 0x0b */ \ + HANDLE_OPCODE (WASM_OP_BR), /* 0x0c */ \ + HANDLE_OPCODE (WASM_OP_BR_IF), /* 0x0d */ \ + HANDLE_OPCODE (WASM_OP_BR_TABLE), /* 0x0e */ \ + HANDLE_OPCODE (WASM_OP_RETURN), /* 0x0f */ \ + HANDLE_OPCODE (WASM_OP_CALL), /* 0x10 */ \ + HANDLE_OPCODE (WASM_OP_CALL_INDIRECT), /* 0x11 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x12), /* 0x12 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x13), /* 0x13 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x14), /* 0x14 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x15), /* 0x15 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x16), /* 0x16 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x17), /* 0x17 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x18), /* 0x18 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x19), /* 0x19 */ \ + HANDLE_OPCODE (WASM_OP_DROP), /* 0x1a */ \ + HANDLE_OPCODE (WASM_OP_SELECT), /* 0x1b */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x1c), /* 0x1c */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x1d), /* 0x1d */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x1e), /* 0x1e */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x1f), /* 0x1f */ \ + HANDLE_OPCODE (WASM_OP_GET_LOCAL), /* 0x20 */ \ + HANDLE_OPCODE (WASM_OP_SET_LOCAL), /* 0x21 */ \ + HANDLE_OPCODE (WASM_OP_TEE_LOCAL), /* 0x22 */ \ + HANDLE_OPCODE (WASM_OP_GET_GLOBAL), /* 0x23 */ \ + HANDLE_OPCODE (WASM_OP_SET_GLOBAL), /* 0x24 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x25), /* 0x25 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x26), /* 0x26 */ \ + HANDLE_OPCODE (WASM_OP_UNUSED_0x27), /* 0x27 */ \ + HANDLE_OPCODE (WASM_OP_I32_LOAD), /* 0x28 */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD), /* 0x29 */ \ + HANDLE_OPCODE (WASM_OP_F32_LOAD), /* 0x2a */ \ + HANDLE_OPCODE (WASM_OP_F64_LOAD), /* 0x2b */ \ + HANDLE_OPCODE (WASM_OP_I32_LOAD8_S), /* 0x2c */ \ + HANDLE_OPCODE (WASM_OP_I32_LOAD8_U), /* 0x2d */ \ + HANDLE_OPCODE (WASM_OP_I32_LOAD16_S), /* 0x2e */ \ + HANDLE_OPCODE (WASM_OP_I32_LOAD16_U), /* 0x2f */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD8_S), /* 0x30 */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD8_U), /* 0x31 */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD16_S), /* 0x32 */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD16_U), /* 0x33 */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD32_S), /* 0x34 */ \ + HANDLE_OPCODE (WASM_OP_I64_LOAD32_U), /* 0x35 */ \ + HANDLE_OPCODE (WASM_OP_I32_STORE), /* 0x36 */ \ + HANDLE_OPCODE (WASM_OP_I64_STORE), /* 0x37 */ \ + HANDLE_OPCODE (WASM_OP_F32_STORE), /* 0x38 */ \ + HANDLE_OPCODE (WASM_OP_F64_STORE), /* 0x39 */ \ + HANDLE_OPCODE (WASM_OP_I32_STORE8), /* 0x3a */ \ + HANDLE_OPCODE (WASM_OP_I32_STORE16), /* 0x3b */ \ + HANDLE_OPCODE (WASM_OP_I64_STORE8), /* 0x3c */ \ + HANDLE_OPCODE (WASM_OP_I64_STORE16), /* 0x3d */ \ + HANDLE_OPCODE (WASM_OP_I64_STORE32), /* 0x3e */ \ + HANDLE_OPCODE (WASM_OP_MEMORY_SIZE), /* 0x3f */ \ + HANDLE_OPCODE (WASM_OP_MEMORY_GROW), /* 0x40 */ \ + HANDLE_OPCODE (WASM_OP_I32_CONST), /* 0x41 */ \ + HANDLE_OPCODE (WASM_OP_I64_CONST), /* 0x42 */ \ + HANDLE_OPCODE (WASM_OP_F32_CONST), /* 0x43 */ \ + HANDLE_OPCODE (WASM_OP_F64_CONST), /* 0x44 */ \ + HANDLE_OPCODE (WASM_OP_I32_EQZ), /* 0x45 */ \ + HANDLE_OPCODE (WASM_OP_I32_EQ), /* 0x46 */ \ + HANDLE_OPCODE (WASM_OP_I32_NE), /* 0x47 */ \ + HANDLE_OPCODE (WASM_OP_I32_LT_S), /* 0x48 */ \ + HANDLE_OPCODE (WASM_OP_I32_LT_U), /* 0x49 */ \ + HANDLE_OPCODE (WASM_OP_I32_GT_S), /* 0x4a */ \ + HANDLE_OPCODE (WASM_OP_I32_GT_U), /* 0x4b */ \ + HANDLE_OPCODE (WASM_OP_I32_LE_S), /* 0x4c */ \ + HANDLE_OPCODE (WASM_OP_I32_LE_U), /* 0x4d */ \ + HANDLE_OPCODE (WASM_OP_I32_GE_S), /* 0x4e */ \ + HANDLE_OPCODE (WASM_OP_I32_GE_U), /* 0x4f */ \ + HANDLE_OPCODE (WASM_OP_I64_EQZ), /* 0x50 */ \ + HANDLE_OPCODE (WASM_OP_I64_EQ), /* 0x51 */ \ + HANDLE_OPCODE (WASM_OP_I64_NE), /* 0x52 */ \ + HANDLE_OPCODE (WASM_OP_I64_LT_S), /* 0x53 */ \ + HANDLE_OPCODE (WASM_OP_I64_LT_U), /* 0x54 */ \ + HANDLE_OPCODE (WASM_OP_I64_GT_S), /* 0x55 */ \ + HANDLE_OPCODE (WASM_OP_I64_GT_U), /* 0x56 */ \ + HANDLE_OPCODE (WASM_OP_I64_LE_S), /* 0x57 */ \ + HANDLE_OPCODE (WASM_OP_I64_LE_U), /* 0x58 */ \ + HANDLE_OPCODE (WASM_OP_I64_GE_S), /* 0x59 */ \ + HANDLE_OPCODE (WASM_OP_I64_GE_U), /* 0x5a */ \ + HANDLE_OPCODE (WASM_OP_F32_EQ), /* 0x5b */ \ + HANDLE_OPCODE (WASM_OP_F32_NE), /* 0x5c */ \ + HANDLE_OPCODE (WASM_OP_F32_LT), /* 0x5d */ \ + HANDLE_OPCODE (WASM_OP_F32_GT), /* 0x5e */ \ + HANDLE_OPCODE (WASM_OP_F32_LE), /* 0x5f */ \ + HANDLE_OPCODE (WASM_OP_F32_GE), /* 0x60 */ \ + HANDLE_OPCODE (WASM_OP_F64_EQ), /* 0x61 */ \ + HANDLE_OPCODE (WASM_OP_F64_NE), /* 0x62 */ \ + HANDLE_OPCODE (WASM_OP_F64_LT), /* 0x63 */ \ + HANDLE_OPCODE (WASM_OP_F64_GT), /* 0x64 */ \ + HANDLE_OPCODE (WASM_OP_F64_LE), /* 0x65 */ \ + HANDLE_OPCODE (WASM_OP_F64_GE), /* 0x66 */ \ + HANDLE_OPCODE (WASM_OP_I32_CLZ), /* 0x67 */ \ + HANDLE_OPCODE (WASM_OP_I32_CTZ), /* 0x68 */ \ + HANDLE_OPCODE (WASM_OP_I32_POPCNT), /* 0x69 */ \ + HANDLE_OPCODE (WASM_OP_I32_ADD), /* 0x6a */ \ + HANDLE_OPCODE (WASM_OP_I32_SUB), /* 0x6b */ \ + HANDLE_OPCODE (WASM_OP_I32_MUL), /* 0x6c */ \ + HANDLE_OPCODE (WASM_OP_I32_DIV_S), /* 0x6d */ \ + HANDLE_OPCODE (WASM_OP_I32_DIV_U), /* 0x6e */ \ + HANDLE_OPCODE (WASM_OP_I32_REM_S), /* 0x6f */ \ + HANDLE_OPCODE (WASM_OP_I32_REM_U), /* 0x70 */ \ + HANDLE_OPCODE (WASM_OP_I32_AND), /* 0x71 */ \ + HANDLE_OPCODE (WASM_OP_I32_OR), /* 0x72 */ \ + HANDLE_OPCODE (WASM_OP_I32_XOR), /* 0x73 */ \ + HANDLE_OPCODE (WASM_OP_I32_SHL), /* 0x74 */ \ + HANDLE_OPCODE (WASM_OP_I32_SHR_S), /* 0x75 */ \ + HANDLE_OPCODE (WASM_OP_I32_SHR_U), /* 0x76 */ \ + HANDLE_OPCODE (WASM_OP_I32_ROTL), /* 0x77 */ \ + HANDLE_OPCODE (WASM_OP_I32_ROTR), /* 0x78 */ \ + HANDLE_OPCODE (WASM_OP_I64_CLZ), /* 0x79 */ \ + HANDLE_OPCODE (WASM_OP_I64_CTZ), /* 0x7a */ \ + HANDLE_OPCODE (WASM_OP_I64_POPCNT), /* 0x7b */ \ + HANDLE_OPCODE (WASM_OP_I64_ADD), /* 0x7c */ \ + HANDLE_OPCODE (WASM_OP_I64_SUB), /* 0x7d */ \ + HANDLE_OPCODE (WASM_OP_I64_MUL), /* 0x7e */ \ + HANDLE_OPCODE (WASM_OP_I64_DIV_S), /* 0x7f */ \ + HANDLE_OPCODE (WASM_OP_I64_DIV_U), /* 0x80 */ \ + HANDLE_OPCODE (WASM_OP_I64_REM_S), /* 0x81 */ \ + HANDLE_OPCODE (WASM_OP_I64_REM_U), /* 0x82 */ \ + HANDLE_OPCODE (WASM_OP_I64_AND), /* 0x83 */ \ + HANDLE_OPCODE (WASM_OP_I64_OR), /* 0x84 */ \ + HANDLE_OPCODE (WASM_OP_I64_XOR), /* 0x85 */ \ + HANDLE_OPCODE (WASM_OP_I64_SHL), /* 0x86 */ \ + HANDLE_OPCODE (WASM_OP_I64_SHR_S), /* 0x87 */ \ + HANDLE_OPCODE (WASM_OP_I64_SHR_U), /* 0x88 */ \ + HANDLE_OPCODE (WASM_OP_I64_ROTL), /* 0x89 */ \ + HANDLE_OPCODE (WASM_OP_I64_ROTR), /* 0x8a */ \ + HANDLE_OPCODE (WASM_OP_F32_ABS), /* 0x8b */ \ + HANDLE_OPCODE (WASM_OP_F32_NEG), /* 0x8c */ \ + HANDLE_OPCODE (WASM_OP_F32_CEIL), /* 0x8d */ \ + HANDLE_OPCODE (WASM_OP_F32_FLOOR), /* 0x8e */ \ + HANDLE_OPCODE (WASM_OP_F32_TRUNC), /* 0x8f */ \ + HANDLE_OPCODE (WASM_OP_F32_NEAREST), /* 0x90 */ \ + HANDLE_OPCODE (WASM_OP_F32_SQRT), /* 0x91 */ \ + HANDLE_OPCODE (WASM_OP_F32_ADD), /* 0x92 */ \ + HANDLE_OPCODE (WASM_OP_F32_SUB), /* 0x93 */ \ + HANDLE_OPCODE (WASM_OP_F32_MUL), /* 0x94 */ \ + HANDLE_OPCODE (WASM_OP_F32_DIV), /* 0x95 */ \ + HANDLE_OPCODE (WASM_OP_F32_MIN), /* 0x96 */ \ + HANDLE_OPCODE (WASM_OP_F32_MAX), /* 0x97 */ \ + HANDLE_OPCODE (WASM_OP_F32_COPYSIGN), /* 0x98 */ \ + HANDLE_OPCODE (WASM_OP_F64_ABS), /* 0x99 */ \ + HANDLE_OPCODE (WASM_OP_F64_NEG), /* 0x9a */ \ + HANDLE_OPCODE (WASM_OP_F64_CEIL), /* 0x9b */ \ + HANDLE_OPCODE (WASM_OP_F64_FLOOR), /* 0x9c */ \ + HANDLE_OPCODE (WASM_OP_F64_TRUNC), /* 0x9d */ \ + HANDLE_OPCODE (WASM_OP_F64_NEAREST), /* 0x9e */ \ + HANDLE_OPCODE (WASM_OP_F64_SQRT), /* 0x9f */ \ + HANDLE_OPCODE (WASM_OP_F64_ADD), /* 0xa0 */ \ + HANDLE_OPCODE (WASM_OP_F64_SUB), /* 0xa1 */ \ + HANDLE_OPCODE (WASM_OP_F64_MUL), /* 0xa2 */ \ + HANDLE_OPCODE (WASM_OP_F64_DIV), /* 0xa3 */ \ + HANDLE_OPCODE (WASM_OP_F64_MIN), /* 0xa4 */ \ + HANDLE_OPCODE (WASM_OP_F64_MAX), /* 0xa5 */ \ + HANDLE_OPCODE (WASM_OP_F64_COPYSIGN), /* 0xa6 */ \ + HANDLE_OPCODE (WASM_OP_I32_WRAP_I64), /* 0xa7 */ \ + HANDLE_OPCODE (WASM_OP_I32_TRUNC_S_F32), /* 0xa8 */ \ + HANDLE_OPCODE (WASM_OP_I32_TRUNC_U_F32), /* 0xa9 */ \ + HANDLE_OPCODE (WASM_OP_I32_TRUNC_S_F64), /* 0xaa */ \ + HANDLE_OPCODE (WASM_OP_I32_TRUNC_U_F64), /* 0xab */ \ + HANDLE_OPCODE (WASM_OP_I64_EXTEND_S_I32), /* 0xac */ \ + HANDLE_OPCODE (WASM_OP_I64_EXTEND_U_I32), /* 0xad */ \ + HANDLE_OPCODE (WASM_OP_I64_TRUNC_S_F32), /* 0xae */ \ + HANDLE_OPCODE (WASM_OP_I64_TRUNC_U_F32), /* 0xaf */ \ + HANDLE_OPCODE (WASM_OP_I64_TRUNC_S_F64), /* 0xb0 */ \ + HANDLE_OPCODE (WASM_OP_I64_TRUNC_U_F64), /* 0xb1 */ \ + HANDLE_OPCODE (WASM_OP_F32_CONVERT_S_I32), /* 0xb2 */ \ + HANDLE_OPCODE (WASM_OP_F32_CONVERT_U_I32), /* 0xb3 */ \ + HANDLE_OPCODE (WASM_OP_F32_CONVERT_S_I64), /* 0xb4 */ \ + HANDLE_OPCODE (WASM_OP_F32_CONVERT_U_I64), /* 0xb5 */ \ + HANDLE_OPCODE (WASM_OP_F32_DEMOTE_F64), /* 0xb6 */ \ + HANDLE_OPCODE (WASM_OP_F64_CONVERT_S_I32), /* 0xb7 */ \ + HANDLE_OPCODE (WASM_OP_F64_CONVERT_U_I32), /* 0xb8 */ \ + HANDLE_OPCODE (WASM_OP_F64_CONVERT_S_I64), /* 0xb9 */ \ + HANDLE_OPCODE (WASM_OP_F64_CONVERT_U_I64), /* 0xba */ \ + HANDLE_OPCODE (WASM_OP_F64_PROMOTE_F32), /* 0xbb */ \ + HANDLE_OPCODE (WASM_OP_I32_REINTERPRET_F32), /* 0xbc */ \ + HANDLE_OPCODE (WASM_OP_I64_REINTERPRET_F64), /* 0xbd */ \ + HANDLE_OPCODE (WASM_OP_F32_REINTERPRET_I32), /* 0xbe */ \ + HANDLE_OPCODE (WASM_OP_F64_REINTERPRET_I64), /* 0xbf */ \ + HANDLE_OPCODE (WASM_OP_DROP_32), /* 0xc0 */ \ + HANDLE_OPCODE (WASM_OP_DROP_64), /* 0xc1 */ \ + HANDLE_OPCODE (WASM_OP_SELECT_32), /* 0xc2 */ \ + HANDLE_OPCODE (WASM_OP_SELECT_64), /* 0xc3 */ \ + HANDLE_OPCODE (WASM_OP_IMPDEP1), /* 0xc4 */ \ + HANDLE_OPCODE (WASM_OP_IMPDEP2), /* 0xc5 */ \ +} + +#endif /* end of _WASM_OPCODE_H */ diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c b/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c new file mode 100644 index 000000000..5df6d07f2 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c @@ -0,0 +1,1220 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wasm-runtime.h" +#include "wasm-thread.h" +#include "wasm-loader.h" +#include "wasm-native.h" +#include "wasm-interp.h" +#include "wasm_log.h" +#include "wasm_platform_log.h" +#include "wasm_memory.h" +#include "mem_alloc.h" + + +static void +set_error_buf(char *error_buf, uint32 error_buf_size, const char *string) +{ + if (error_buf != NULL) + snprintf(error_buf, error_buf_size, "%s", string); +} + +bool +wasm_runtime_init() +{ + if (wasm_platform_init() != 0) + return false; + + if (wasm_log_init() != 0) + return false; + + if (ws_thread_sys_init() != 0) + return false; + + wasm_runtime_set_tlr(NULL); + + wasm_native_init(); + return true; +} + +void +wasm_runtime_destroy() +{ + wasm_runtime_set_tlr(NULL); + ws_thread_sys_destroy(); +} + +static void +init_wasm_stack(WASMStack *wasm_stack, uint8 *stack, uint32 stack_size) +{ + wasm_stack->top = wasm_stack->bottom = stack; + wasm_stack->top_boundary = stack + stack_size; +} + +bool +wasm_runtime_call_wasm(WASMModuleInstance *module_inst, + WASMExecEnv *exec_env, + WASMFunctionInstance *function, + unsigned argc, uint32 argv[]) +{ + if (!exec_env) { + if (!module_inst->wasm_stack) { + if (!(module_inst->wasm_stack = + wasm_malloc(module_inst->wasm_stack_size))) { + wasm_runtime_set_exception(module_inst, "allocate memory failed."); + return false; + } + } + + init_wasm_stack(&module_inst->main_tlr.wasm_stack, + module_inst->wasm_stack, module_inst->wasm_stack_size); + } + else { + uintptr_t stack = (uintptr_t)exec_env->stack; + uint32 stack_size; + + /* Set to 8 bytes align */ + stack = (stack + 7) & ~7; + stack_size = exec_env->stack_size - (stack - (uintptr_t)exec_env->stack); + + if (!exec_env->stack || exec_env->stack_size <= 0 + || exec_env->stack_size < stack - (uintptr_t)exec_env->stack) { + wasm_runtime_set_exception(module_inst, "Invalid execution stack info."); + return false; + } + + init_wasm_stack(&module_inst->main_tlr.wasm_stack, (uint8*)stack, stack_size); + } + + wasm_interp_call_wasm(function, argc, argv); + return !wasm_runtime_get_exception(module_inst) ? true : false; +} + +void +wasm_runtime_set_exception(WASMModuleInstance *module_inst, + const char *exception) +{ + if (exception) + snprintf(module_inst->cur_exception, + sizeof(module_inst->cur_exception), + "Exception: %s", exception); + else + module_inst->cur_exception[0] = '\0'; +} + +const char* +wasm_runtime_get_exception(WASMModuleInstance *module_inst) +{ + if (module_inst->cur_exception[0] == '\0') + return NULL; + else + return module_inst->cur_exception; +} + +void +wasm_runtime_clear_exception(WASMModuleInstance *module_inst) +{ + wasm_runtime_set_exception(module_inst, NULL); +} + +WASMModule* +wasm_runtime_load(const uint8 *buf, uint32 size, + char *error_buf, uint32 error_buf_size) +{ + return wasm_loader_load(buf, size, error_buf, error_buf_size); +} + +WASMModule* +wasm_runtime_load_from_sections(WASMSection *section_list, + char *error_buf, uint32_t error_buf_size) +{ + return wasm_loader_load_from_sections(section_list, + error_buf, error_buf_size); +} + +void +wasm_runtime_unload(WASMModule *module) +{ + wasm_loader_unload(module); +} + +/** + * Destroy memory instances. + */ +static void +memories_deinstantiate(WASMMemoryInstance **memories, uint32 count) +{ + uint32 i; + if (memories) { + for (i = 0; i < count; i++) + if (memories[i]) { + if (memories[i]->heap_handle) + mem_allocator_destroy(memories[i]->heap_handle); + wasm_free(memories[i]); + } + wasm_free(memories); + } +} + +static WASMMemoryInstance* +memory_instantiate(uint32 init_page_count, uint32 max_page_count, + uint32 addr_data_size, uint32 global_data_size, + uint32 heap_size, + char *error_buf, uint32 error_buf_size) +{ + WASMMemoryInstance *memory; + uint32 total_size = offsetof(WASMMemoryInstance, base_addr) + + NumBytesPerPage * init_page_count + + addr_data_size + global_data_size + + heap_size; + + if (!(memory = wasm_malloc(total_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate memory failed: allocate memory failed."); + return NULL; + } + + memset(memory, 0, total_size); + memory->cur_page_count = init_page_count; + memory->max_page_count = max_page_count; + memory->addr_data = memory->base_addr; + memory->addr_data_size = addr_data_size; + + memory->memory_data = memory->addr_data + addr_data_size; + + memory->heap_data = memory->memory_data + + NumBytesPerPage * memory->cur_page_count;; + memory->heap_data_size = heap_size; + + memory->global_data = memory->heap_data + memory->heap_data_size; + memory->global_data_size = global_data_size; + + memory->end_addr = memory->global_data + global_data_size; + + /* Initialize heap */ + if (!(memory->heap_handle = mem_allocator_create + (memory->heap_data, memory->heap_data_size))) { + wasm_free(memory); + return NULL; + } + + return memory; +} + +/** + * Instantiate memories in a module. + */ +static WASMMemoryInstance** +memories_instantiate(const WASMModule *module, uint32 addr_data_size, + uint32 global_data_size, uint32 heap_size, + char *error_buf, uint32 error_buf_size) +{ + WASMImport *import; + uint32 mem_index = 0, i, memory_count = + module->import_memory_count + module->memory_count; + uint32 total_size; + WASMMemoryInstance **memories, *memory; + + if (memory_count == 0 && global_data_size > 0) + memory_count = 1; + + total_size = sizeof(WASMMemoryInstance*) * memory_count; + memories = wasm_malloc(total_size); + + if (!memories) { + set_error_buf(error_buf, error_buf_size, + "Instantiate memory failed: " + "allocate memory failed."); + return NULL; + } + + memset(memories, 0, total_size); + + /* instantiate memories from import section */ + import = module->import_memories; + for (i = 0; i < module->import_memory_count; i++, import++) { + if (!(memory = memories[mem_index++] = + memory_instantiate(import->u.memory.init_page_count, + import->u.memory. max_page_count, + addr_data_size, global_data_size, + heap_size, error_buf, error_buf_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate memory failed: " + "allocate memory failed."); + memories_deinstantiate(memories, memory_count); + return NULL; + } + } + + /* instantiate memories from memory section */ + for (i = 0; i < module->memory_count; i++) { + if (!(memory = memories[mem_index++] = + memory_instantiate(module->memories[i].init_page_count, + module->memories[i].max_page_count, + addr_data_size, global_data_size, + heap_size, error_buf, error_buf_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate memory failed: " + "allocate memory failed."); + memories_deinstantiate(memories, memory_count); + return NULL; + } + } + + if (mem_index == 0) { + /* no import memory and define memory, but has global variables */ + if (!(memory = memories[mem_index++] = + memory_instantiate(0, 0, addr_data_size, global_data_size, + heap_size, error_buf, error_buf_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate memory failed: " + "allocate memory failed.\n"); + memories_deinstantiate(memories, memory_count); + return NULL; + } + } + + wasm_assert(mem_index == memory_count); + return memories; +} + +/** + * Destroy table instances. + */ +static void +tables_deinstantiate(WASMTableInstance **tables, uint32 count) +{ + uint32 i; + if (tables) { + for (i = 0; i < count; i++) + if (tables[i]) + wasm_free(tables[i]); + wasm_free(tables); + } +} + +/** + * Instantiate tables in a module. + */ +static WASMTableInstance** +tables_instantiate(const WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + WASMImport *import; + uint32 table_index = 0, i, table_count = + module->import_table_count + module->table_count; + uint32 total_size = sizeof(WASMTableInstance*) * table_count; + WASMTableInstance **tables = wasm_malloc(total_size), *table; + + if (!tables) { + set_error_buf(error_buf, error_buf_size, + "Instantiate table failed: " + "allocate memory failed."); + return NULL; + } + + memset(tables, 0, total_size); + + /* instantiate tables from import section */ + import = module->import_tables; + for (i = 0; i < module->import_table_count; i++, import++) { + total_size = offsetof(WASMTableInstance, base_addr) + + sizeof(uint32) * import->u.table.init_size; + if (!(table = tables[table_index++] = wasm_malloc(total_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate table failed: " + "allocate memory failed."); + tables_deinstantiate(tables, table_count); + return NULL; + } + + memset(table, 0, total_size); + table->cur_size = import->u.table.init_size; + table->max_size = import->u.table.max_size; + } + + /* instantiate tables from table section */ + for (i = 0; i < module->table_count; i++) { + total_size = offsetof(WASMTableInstance, base_addr) + + sizeof(uint32) * module->tables[i].init_size; + if (!(table = tables[table_index++] = wasm_malloc(total_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate table failed: " + "allocate memory failed."); + tables_deinstantiate(tables, table_count); + return NULL; + } + + memset(table, 0, total_size); + table->cur_size = module->tables[i].init_size; + table->max_size = module->tables[i].max_size; + } + + wasm_assert(table_index == table_count); + return tables; +} + +/** + * Destroy function instances. + */ +static void +functions_deinstantiate(WASMFunctionInstance *functions, uint32 count) +{ + if (functions) { + uint32 i; + + for (i = 0; i < count; i++) + if (functions[i].local_offsets) + wasm_free(functions[i].local_offsets); + wasm_free(functions); + } +} + +static bool +function_init_local_offsets(WASMFunctionInstance *func) +{ + uint16 local_offset = 0; + WASMType *param_type = func->u.func->func_type; + uint32 param_count = param_type->param_count; + uint8 *param_types = param_type->types; + uint32 local_count = func->u.func->local_count; + uint8 *local_types = func->u.func->local_types; + uint32 i, total_size = (param_count + local_count) * sizeof(uint16); + + if (!(func->local_offsets = wasm_malloc(total_size))) + return false; + + for (i = 0; i < param_count; i++) { + func->local_offsets[i] = local_offset; + local_offset += wasm_value_type_cell_num(param_types[i]); + } + + for (i = 0; i < local_count; i++) { + func->local_offsets[param_count + i] = local_offset; + local_offset += wasm_value_type_cell_num(local_types[i]); + } + + wasm_assert(local_offset == func->param_cell_num + func->local_cell_num); + return true; +} + +/** + * Instantiate functions in a module. + */ +static WASMFunctionInstance* +functions_instantiate(const WASMModule *module, + char *error_buf, uint32 error_buf_size) +{ + WASMImport *import; + uint32 i, function_count = + module->import_function_count + module->function_count; + uint32 total_size = sizeof(WASMFunctionInstance) * function_count; + WASMFunctionInstance *functions = wasm_malloc(total_size), *function; + + if (!functions) { + set_error_buf(error_buf, error_buf_size, + "Instantiate function failed: " + "allocate memory failed."); + return NULL; + } + + memset(functions, 0, total_size); + + /* instantiate functions from import section */ + function = functions; + import = module->import_functions; + for (i = 0; i < module->import_function_count; i++, import++) { + function->is_import_func = true; + function->u.func_import = &import->u.function; + + function->param_cell_num = + wasm_type_param_cell_num(import->u.function.func_type); + function->ret_cell_num = + wasm_type_return_cell_num(import->u.function.func_type); + function->local_cell_num = 0; + + function++; + } + + /* instantiate functions from function section */ + for (i = 0; i < module->function_count; i++) { + function->is_import_func = false; + function->u.func = module->functions[i]; + + function->param_cell_num = + wasm_type_param_cell_num(function->u.func->func_type); + function->ret_cell_num = + wasm_type_return_cell_num(function->u.func->func_type); + function->local_cell_num = + wasm_get_cell_num(function->u.func->local_types, + function->u.func->local_count); + + if (!function_init_local_offsets(function)) { + functions_deinstantiate(functions, function_count); + return NULL; + } + + function++; + } + + wasm_assert((uint32)(function - functions) == function_count); + return functions; +} + +/** + * Destroy global instances. + */ +static void +globals_deinstantiate(WASMGlobalInstance *globals) +{ + if (globals) + wasm_free(globals); +} + +/** + * Instantiate globals in a module. + */ +static WASMGlobalInstance* +globals_instantiate(const WASMModule *module, + uint32 *p_addr_data_size, + uint32 *p_global_data_size, + char *error_buf, uint32 error_buf_size) +{ + WASMImport *import; + uint32 addr_data_offset = 0, global_data_offset = 0; + uint32 i, global_count = + module->import_global_count + module->global_count; + uint32 total_size = sizeof(WASMGlobalInstance) * global_count; + WASMGlobalInstance *globals = wasm_malloc(total_size), *global; + + if (!globals) { + set_error_buf(error_buf, error_buf_size, + "Instantiate global failed: " + "allocate memory failed."); + return NULL; + } + + memset(globals, 0, total_size); + + /* instantiate globals from import section */ + global = globals; + import = module->import_globals; + for (i = 0; i < module->import_global_count; i++, import++) { + WASMGlobalImport *global_import = &import->u.global; + global->type = global_import->type; + global->is_mutable = global_import->is_mutable; + global->is_addr = global_import->is_addr; + global->initial_value = global_import->global_data_linked; + global->data_offset = global_data_offset; + global_data_offset += wasm_value_type_size(global->type); + + if (global->is_addr) + addr_data_offset += sizeof(uint32); + + global++; + } + + /* instantiate globals from global section */ + for (i = 0; i < module->global_count; i++) { + global->type = module->globals[i].type; + global->is_mutable = module->globals[i].is_mutable; + global->is_addr = module->globals[i].is_addr; + + global->data_offset = global_data_offset; + global_data_offset += wasm_value_type_size(global->type); + + if (global->is_addr) + addr_data_offset += sizeof(uint32); + + global++; + } + + wasm_assert((uint32)(global - globals) == global_count); + *p_addr_data_size = addr_data_offset; + *p_global_data_size = global_data_offset; + return globals; +} + +static void +globals_instantiate_fix(WASMGlobalInstance *globals, + const WASMModule *module, + WASMModuleInstance *module_inst) +{ + WASMGlobalInstance *global = globals; + WASMImport *import = module->import_globals; + uint32 i; + + /* Fix globals from import section */ + for (i = 0; i < module->import_global_count; i++, import++, global++) { + if (!strcmp(import->u.names.module_name, "env")) { + if (!strcmp(import->u.names.field_name, "memoryBase") + || !strcmp(import->u.names.field_name, "__memory_base")) { + global->initial_value.addr = 0; + } + else if (!strcmp(import->u.names.field_name, "tableBase") + || !strcmp(import->u.names.field_name, "__table_base")) { + global->initial_value.addr = 0; + } + else if (!strcmp(import->u.names.field_name, "DYNAMICTOP_PTR")) { + global->initial_value.i32 = + NumBytesPerPage * module_inst->default_memory->cur_page_count; + module_inst->DYNAMICTOP_PTR_offset = global->data_offset; + } + else if (!strcmp(import->u.names.field_name, "STACKTOP")) { + global->initial_value.i32 = 0; + } + else if (!strcmp(import->u.names.field_name, "STACK_MAX")) { + /* Unused in emcc wasm bin actually. */ + global->initial_value.i32 = 0; + } + } + } + + for (i = 0; i < module->global_count; i++) { + InitializerExpression *init_expr = &module->globals[i].init_expr; + + if (init_expr->init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL) { + wasm_assert(init_expr->u.global_index < module->import_global_count); + global->initial_value = globals[init_expr->u.global_index].initial_value; + } + else { + memcpy(&global->initial_value, &init_expr->u, sizeof(int64)); + } + global++; + } +} + +/** + * Return export function count in module export section. + */ +static uint32 +get_export_function_count(const WASMModule *module) +{ + WASMExport *export = module->exports; + uint32 count = 0, i; + + for (i = 0; i < module->export_count; i++, export++) + if (export->kind == EXPORT_KIND_FUNC) + count++; + + return count; +} + +/** + * Destroy export function instances. + */ +static void +export_functions_deinstantiate(WASMExportFuncInstance *functions) +{ + if (functions) + wasm_free(functions); +} + +/** + * Instantiate export functions in a module. + */ +static WASMExportFuncInstance* +export_functions_instantiate(const WASMModule *module, + WASMModuleInstance *module_inst, + uint32 export_func_count, + char *error_buf, uint32 error_buf_size) +{ + WASMExportFuncInstance *export_funcs, *export_func; + WASMExport *export = module->exports; + uint32 i, total_size = sizeof(WASMExportFuncInstance) * export_func_count; + + if (!(export_func = export_funcs = wasm_malloc(total_size))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate export function failed: " + "allocate memory failed."); + return NULL; + } + + memset(export_funcs, 0, total_size); + + for (i = 0; i < module->export_count; i++, export++) + if (export->kind == EXPORT_KIND_FUNC) { + wasm_assert(export->index >= module->import_function_count + && export->index < module->import_function_count + + module->function_count); + export_func->name = export->name; + export_func->function = &module_inst->functions[export->index]; + export_func++; + } + + wasm_assert((uint32)(export_func - export_funcs) == export_func_count); + return export_funcs; +} + +void +wasm_runtime_deinstantiate(WASMModuleInstance *module_inst); + +static bool +execute_post_inst_function(WASMModuleInstance *module_inst) +{ + WASMFunctionInstance *post_inst_func = NULL; + WASMType *post_inst_func_type; + uint32 i; + + for (i = 0; i < module_inst->export_func_count; i++) + if (!strcmp(module_inst->export_functions[i].name, "__post_instantiate")) { + post_inst_func = module_inst->export_functions[i].function; + break; + } + + if (!post_inst_func) + /* Not found */ + return true; + + post_inst_func_type = post_inst_func->u.func->func_type; + if (post_inst_func_type->param_count != 0 + || post_inst_func_type->result_count != 0) + /* Not a valid function type, ignore it */ + return true; + + return wasm_runtime_call_wasm(module_inst, NULL, post_inst_func, 0, NULL); +} + +static bool +execute_start_function(WASMModuleInstance *module_inst) +{ + WASMFunctionInstance *func = module_inst->start_function; + + if (!func) + return true; + + wasm_assert(!func->is_import_func && func->param_cell_num == 0 + && func->ret_cell_num == 0); + + return wasm_runtime_call_wasm(module_inst, NULL, func, 0, NULL); +} + +/** + * Instantiate module + */ +WASMModuleInstance* +wasm_runtime_instantiate(const WASMModule *module, + uint32 stack_size, uint32 heap_size, + char *error_buf, uint32 error_buf_size) +{ + WASMModuleInstance *module_inst; + WASMTableSeg *table_seg; + WASMDataSeg *data_seg; + WASMGlobalInstance *globals = NULL, *global; + uint32 global_count, addr_data_size = 0, global_data_size = 0, i; + uint32 base_offset, length, memory_size; + uint8 *global_data, *global_data_end, *addr_data, *addr_data_end; + uint8 *memory_data; + uint32 *table_data; + + if (!module) + return NULL; + + /* Check heap size */ + heap_size = align_uint(heap_size, 8); + if (heap_size == 0) + heap_size = DEFAULT_WASM_HEAP_SIZE; + if (heap_size < MIN_WASM_HEAP_SIZE) + heap_size = MIN_WASM_HEAP_SIZE; + + /* Instantiate global firstly to get the mutable data size */ + global_count = module->import_global_count + module->global_count; + if (global_count && + !(globals = globals_instantiate(module, &addr_data_size, + &global_data_size, + error_buf, error_buf_size))) + return NULL; + + /* Allocate the memory */ + if (!(module_inst = wasm_malloc(sizeof(WASMModuleInstance)))) { + set_error_buf(error_buf, error_buf_size, + "Instantiate module failed: allocate memory failed."); + globals_deinstantiate(globals); + return NULL; + } + + memset(module_inst, 0, sizeof(WASMModuleInstance)); + module_inst->global_count = global_count; + module_inst->globals = globals; + + module_inst->memory_count = + module->import_memory_count + module->memory_count; + module_inst->table_count = + module->import_table_count + module->table_count; + module_inst->function_count = + module->import_function_count + module->function_count; + module_inst->export_func_count = get_export_function_count(module); + + /* Instantiate memories/tables/functions */ + if (((module_inst->memory_count > 0 || global_count > 0) + && !(module_inst->memories = + memories_instantiate(module, addr_data_size, global_data_size, + heap_size, error_buf, error_buf_size))) + || (module_inst->table_count > 0 + && !(module_inst->tables = tables_instantiate(module, + error_buf, + error_buf_size))) + || (module_inst->function_count > 0 + && !(module_inst->functions = functions_instantiate(module, + error_buf, + error_buf_size))) + || (module_inst->export_func_count > 0 + && !(module_inst->export_functions = export_functions_instantiate( + module, module_inst, module_inst->export_func_count, + error_buf, error_buf_size)))) { + wasm_runtime_deinstantiate(module_inst); + return NULL; + } + + if (module_inst->memory_count || global_count > 0) { + WASMMemoryInstance *memory; + + memory = module_inst->default_memory = module_inst->memories[0]; + memory_data = module_inst->default_memory->memory_data; + + /* fix import memoryBase */ + globals_instantiate_fix(globals, module, module_inst); + + /* Initialize the global data */ + addr_data = memory->addr_data; + addr_data_end = addr_data + addr_data_size; + global_data = memory->global_data; + global_data_end = global_data + global_data_size; + global = globals; + for (i = 0; i < global_count; i++, global++) { + switch (global->type) { + case VALUE_TYPE_I32: + case VALUE_TYPE_F32: + if (!global->is_addr) + *(int32*)global_data = global->initial_value.i32; + else { + *(int32*)addr_data = global->initial_value.i32; + /* Store the offset to memory data for global of addr */ + *(int32*)global_data = addr_data - memory_data; + addr_data += sizeof(int32); + } + global_data += sizeof(int32); + break; + case VALUE_TYPE_I64: + case VALUE_TYPE_F64: + wasm_assert(!global->is_addr); + memcpy(global_data, &global->initial_value.i64, sizeof(int64)); + global_data += sizeof(int64); + break; + default: + wasm_assert(0); + } + } + wasm_assert(addr_data == addr_data_end); + wasm_assert(global_data == global_data_end); + + global = globals + module->import_global_count; + for (i = 0; i < module->global_count; i++, global++) { + InitializerExpression *init_expr = &module->globals[i].init_expr; + + if (init_expr->init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL + && globals[init_expr->u.global_index].is_addr) { + uint8 *global_data_dst = memory->global_data + global->data_offset; + uint8 *global_data_src = + memory->global_data + globals[init_expr->u.global_index].data_offset; + *(uintptr_t*)global_data_dst = *(uintptr_t*)global_data_src; + } + } + + /* Initialize the memory data with data segment section */ + if (module_inst->default_memory->cur_page_count > 0) { + for (i = 0; i < module->data_seg_count; i++) { + data_seg = module->data_segments[i]; + wasm_assert(data_seg->memory_index == 0); + wasm_assert(data_seg->base_offset.init_expr_type == + INIT_EXPR_TYPE_I32_CONST + || data_seg->base_offset.init_expr_type == + INIT_EXPR_TYPE_GET_GLOBAL); + + if (data_seg->base_offset.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL) { + wasm_assert(data_seg->base_offset.u.global_index < global_count + && globals[data_seg->base_offset.u.global_index].type == + VALUE_TYPE_I32); + data_seg->base_offset.u.i32 = + globals[data_seg->base_offset.u.global_index].initial_value.i32; + } + + base_offset = (uint32)data_seg->base_offset.u.i32; + length = data_seg->data_length; + memory_size = NumBytesPerPage * module_inst->default_memory->cur_page_count; + + if (base_offset >= memory_size + || base_offset + length > memory_size) { + set_error_buf(error_buf, error_buf_size, + "Instantiate module failed: data segment out of range."); + wasm_runtime_deinstantiate(module_inst); + return NULL; + } + + memcpy(memory_data + base_offset, data_seg->data, length); + } + } + } + + if (module_inst->table_count) { + module_inst->default_table = module_inst->tables[0]; + + /* Initialize the table data with table segment section */ + table_data = (uint32*)module_inst->default_table->base_addr; + table_seg = module->table_segments; + for (i = 0; i < module->table_seg_count; i++, table_seg++) { + wasm_assert(table_seg->table_index == 0); + wasm_assert(table_seg->base_offset.init_expr_type == + INIT_EXPR_TYPE_I32_CONST + || table_seg->base_offset.init_expr_type == + INIT_EXPR_TYPE_GET_GLOBAL); + + if (table_seg->base_offset.init_expr_type == + INIT_EXPR_TYPE_GET_GLOBAL) { + wasm_assert(table_seg->base_offset.u.global_index < global_count + && globals[table_seg->base_offset.u.global_index].type == + VALUE_TYPE_I32); + table_seg->base_offset.u.i32 = + globals[table_seg->base_offset.u.global_index].initial_value.i32; + } + if ((uint32)table_seg->base_offset.u.i32 < + module_inst->default_table->cur_size) { + length = table_seg->function_count; + if (table_seg->base_offset.u.i32 + length > + module_inst->default_table->cur_size) + length = module_inst->default_table->cur_size + - table_seg->base_offset.u.i32; + memcpy(table_data + table_seg->base_offset.u.i32, + table_seg->func_indexes, length * sizeof(uint32)); + } + } + } + + if (module->start_function != (uint32)-1) { + wasm_assert(module->start_function >= module->import_function_count); + module_inst->start_function = + &module_inst->functions[module->start_function]; + } + + module_inst->branch_set = module->branch_set; + module_inst->module = module; + + /* module instance type */ + module_inst->module_type = Wasm_Module_Bytecode; + + /* Initialize the thread related data */ + if (stack_size == 0) + stack_size = DEFAULT_WASM_STACK_SIZE; + module_inst->wasm_stack_size = stack_size; + module_inst->main_tlr.module_inst = module_inst; + + /* Bind thread data with current native thread: + set thread local root to current thread. */ + wasm_runtime_set_tlr(&module_inst->main_tlr); + module_inst->main_tlr.handle = ws_self_thread(); + + /* Execute __post_instantiate function */ + if (!execute_post_inst_function(module_inst)) { + const char *exception = wasm_runtime_get_exception(module_inst); + wasm_printf("%s\n", exception); + wasm_runtime_deinstantiate(module_inst); + return NULL; + } + + /* Execute start function */ + if (!execute_start_function(module_inst)) { + const char *exception = wasm_runtime_get_exception(module_inst); + wasm_printf("%s\n", exception); + wasm_runtime_deinstantiate(module_inst); + return NULL; + } + + (void)addr_data_end; + (void)global_data_end; + return module_inst; +} + +void +wasm_runtime_deinstantiate(WASMModuleInstance *module_inst) +{ + if (!module_inst) + return; + + if (module_inst->memory_count > 0) + memories_deinstantiate(module_inst->memories, module_inst->memory_count); + else if (module_inst->memories != NULL && module_inst->global_count > 0) + /* No imported memory and defined memory, the memory is created when + global count > 0. */ + memories_deinstantiate(module_inst->memories, 1); + + tables_deinstantiate(module_inst->tables, module_inst->table_count); + functions_deinstantiate(module_inst->functions, module_inst->function_count); + globals_deinstantiate(module_inst->globals); + export_functions_deinstantiate(module_inst->export_functions); + + if (module_inst->wasm_stack) + wasm_free(module_inst->wasm_stack); + + wasm_free(module_inst); +} + +bool +wasm_runtime_enlarge_memory(WASMModuleInstance *module, int inc_page_count) +{ +#if 1 + wasm_runtime_set_exception(module, "unsupported operation: enlarge memory."); + return false; +#else + WASMMemoryInstance *memory = module->default_memory; + WASMMemoryInstance *new_memory; + uint32 total_page_count = inc_page_count + memory->cur_page_count; + uint32 total_size = offsetof(WASMMemoryInstance, base_addr) + + memory->addr_data_size + + NumBytesPerPage * total_page_count + + memory->global_data_size + + memory->thunk_argv_data_size + + sizeof(uint32) * memory->thunk_argc; + + if (!(new_memory = wasm_malloc(total_size))) { + wasm_runtime_set_exception(module, "alloc memory for enlarge memory failed."); + return false; + } + + new_memory->cur_page_count = total_page_count; + new_memory->max_page_count = memory->max_page_count > total_page_count + ? memory->max_page_count : total_page_count; + new_memory->addr_data = new_memory->base_addr; + new_memory->addr_data_size = memory->addr_data_size; + + new_memory->thunk_argv_data = new_memory->addr_data + memory->addr_data_size; + new_memory->thunk_argv_data_size = memory->thunk_argv_data_size; + new_memory->thunk_argc = memory->thunk_argc; + new_memory->thunk_argv_offsets = new_memory->thunk_argv_data + + memory->thunk_argv_data_size; + + new_memory->memory_data = new_memory->thunk_argv_offsets + + sizeof(uint32) * memory->thunk_argc; + new_memory->global_data = new_memory->memory_data + + NumBytesPerPage * new_memory->cur_page_count; + new_memory->global_data_size = memory->global_data_size; + + new_memory->end_addr = new_memory->global_data + memory->global_data_size; + + /* Copy addr data, thunk argv data, thunk argv offsets and memory data */ + memcpy(new_memory->addr_data, memory->addr_data, + memory->global_data - memory->addr_data); + /* Copy global data */ + memcpy(new_memory->global_data, memory->global_data, + memory->end_addr - memory->global_data); + /* Init free space of new memory */ + memset(new_memory->memory_data + NumBytesPerPage * memory->cur_page_count, + 0, NumBytesPerPage * (total_page_count - memory->cur_page_count)); + + wasm_free(memory); + module->memories[0] = module->default_memory = new_memory; + return true; +#endif +} + +PackageType +get_package_type(const uint8 *buf, uint32 size) +{ + if (buf && size > 4) { + if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 's' && buf[3] == 'm') + return Wasm_Module_Bytecode; + if (buf[0] == '\0' && buf[1] == 'a' && buf[2] == 'o' && buf[3] == 't') + return Wasm_Module_AoT; + } + return Package_Type_Unknown; +} + +WASMExecEnv* +wasm_runtime_create_exec_env(uint32 stack_size) +{ + WASMExecEnv *exec_env = wasm_malloc(sizeof(WASMExecEnv)); + if (exec_env) { + if (!(exec_env->stack = wasm_malloc(stack_size))) { + wasm_free(exec_env); + return NULL; + } + exec_env->stack_size = stack_size; + } + return exec_env; +} + +void +wasm_runtime_destory_exec_env(WASMExecEnv *env) +{ + if (env) { + wasm_free(env->stack); + wasm_free(env); + } +} + +bool +wasm_runtime_attach_current_thread(WASMModuleInstance *module_inst, + void *thread_data) +{ + wasm_runtime_set_tlr(&module_inst->main_tlr); + module_inst->main_tlr.handle = ws_self_thread(); + module_inst->thread_data = thread_data; + return true; +} + +void +wasm_runtime_detach_current_thread(WASMModuleInstance *module_inst) +{ + module_inst->thread_data = NULL; +} + +void* +wasm_runtime_get_current_thread_data() +{ + WASMThread *tlr = wasm_runtime_get_self(); + return (tlr && tlr->module_inst) ? tlr->module_inst->thread_data : NULL; +} + +WASMModuleInstance * +wasm_runtime_get_current_module_inst() +{ + WASMThread *tlr = wasm_runtime_get_self(); + return tlr ? tlr->module_inst : NULL; +} + +int32 +wasm_runtime_module_malloc(WASMModuleInstance *module_inst, uint32 size) +{ + uint8 *memory_base = module_inst->default_memory->memory_data; + void *heap = module_inst->default_memory->heap_handle; + uint8 *addr = mem_allocator_malloc(heap, size); + if (!addr) + wasm_runtime_set_exception(module_inst, "out of memory"); + return addr ? addr - memory_base : 0; +} + +void +wasm_runtime_module_free(WASMModuleInstance *module_inst, int32 ptr) +{ + uint8 *memory_base = module_inst->default_memory->memory_data; + uint8 *heap_base = module_inst->default_memory->heap_data; + uint32 heap_size = module_inst->default_memory->heap_data_size; + void *heap = module_inst->default_memory->heap_handle; + uint8 *addr = ptr ? memory_base + ptr : NULL; + if (addr && (heap_base < addr && addr < heap_base + heap_size)) + mem_allocator_free(heap, addr); +} + + int32 +wasm_runtime_module_dup_data(WASMModuleInstance *module_inst, + const char *src, uint32 size) +{ + int32 buffer_offset = wasm_runtime_module_malloc(module_inst, size); + if (buffer_offset != 0) { + char *buffer; + buffer = wasm_runtime_addr_app_to_native(module_inst, buffer_offset); + memcpy(buffer, src, size); + } + return buffer_offset; +} + +bool +wasm_runtime_validate_app_addr(WASMModuleInstance *module_inst, + int32 app_offset, uint32 size) +{ + /* integer overflow check */ + if(app_offset < 0 || + app_offset + size < size) { + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return false; + } + + uint8 *memory_base = module_inst->default_memory->memory_data; + uint8 *addr = memory_base + app_offset; + uint8 *base_addr = module_inst->default_memory->base_addr; + uint8 *end_addr = module_inst->default_memory->end_addr; + bool ret = (base_addr <= addr + && addr + size <= end_addr); + if (!ret) + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return ret; +} + +bool +wasm_runtime_validate_native_addr(WASMModuleInstance *module_inst, + void *native_ptr, uint32 size) +{ + uint8 *addr = native_ptr; + uint8 *base_addr = module_inst->default_memory->base_addr; + uint8 *end_addr = module_inst->default_memory->end_addr; + bool ret = (base_addr <= addr && addr + size <= end_addr); + if (!ret || (addr + size < addr)/* integer overflow */) + wasm_runtime_set_exception(module_inst, "out of bounds memory access"); + return ret; +} + +void * +wasm_runtime_addr_app_to_native(WASMModuleInstance *module_inst, + int32 app_offset) +{ + return module_inst->default_memory->memory_data + app_offset; +} + +int32 +wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst, + void *native_ptr) +{ + return (uint8*)native_ptr - module_inst->default_memory->memory_data; +} + +uint32 +wasm_runtime_get_temp_ret(WASMModuleInstance *module_inst) +{ + return module_inst->temp_ret; +} + +void +wasm_runtime_set_temp_ret(WASMModuleInstance *module_inst, + uint32 temp_ret) +{ + module_inst->temp_ret = temp_ret; +} + +uint32 +wasm_runtime_get_llvm_stack(WASMModuleInstance *module_inst) +{ + return module_inst->llvm_stack; +} + +void +wasm_runtime_set_llvm_stack(WASMModuleInstance *module_inst, + uint32 llvm_stack) +{ + module_inst->llvm_stack = llvm_stack; +} + +WASMModuleInstance* +wasm_runtime_load_aot(uint8 *aot_file, uint32 aot_file_size, + uint32 heap_size, + char *error_buf, uint32 error_buf_size) +{ + (void)aot_file; + (void)aot_file_size; + (void)heap_size; + (void)error_buf; + (void)error_buf_size; + return NULL; +} + diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h b/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h new file mode 100644 index 000000000..c47558470 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-runtime.h @@ -0,0 +1,328 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_RUNTIME_H +#define _WASM_RUNTIME_H + +#include "wasm.h" +#include "wasm-thread.h" +#include "wasm_hashmap.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define DEFAULT_WASM_STACK_SIZE (8 * 1024) +#define DEFAULT_WASM_HEAP_SIZE (8 * 1024) +#define MIN_WASM_HEAP_SIZE (1 * 1024) + +typedef struct WASMMemoryInstance { + /* Current page count */ + uint32 cur_page_count; + /* Maximum page count */ + uint32 max_page_count; + /* Data of import globals with address info, like _stdin/_stdout/_stderr, + stdin/stdout/stderr is stored here, but the actual addr info, or offset + to memory_data is stored in global_data section */ + uint8 *addr_data; + /* Size of addr_data */ + uint32 addr_data_size; + + /* Thunk data of argument strings */ + uint8 *thunk_argv_data; + uint32 thunk_argv_data_size; + /* Thunk argument count */ + uint32 thunk_argc; + /* Thunk argument offsets */ + uint8 *thunk_argv_offsets; + + /* Heap data */ + uint8 *heap_data; + /* Heap size */ + uint32 heap_data_size; + /* The heap created */ + void *heap_handle; + + /* Memory data */ + uint8 *memory_data; + /* Global data of global instances */ + uint8 *global_data; + uint32 global_data_size; + + /* End address of memory */ + uint8 *end_addr; + + /* Base address, the layout is: + addr_data + thunk_argv data + thunk arg offsets + + heap data + memory data + global data + memory data init size is: NumBytesPerPage * cur_page_count + addr data size and global data size is calculated in module instantiating + Note: when memory is re-allocated, the addr data, thunk argv data, thunk + argv offsets and memory data must be copied to new memory also. + */ + uint8 base_addr[1]; +} WASMMemoryInstance; + +typedef struct WASMTableInstance { + /* The element type, TABLE_ELEM_TYPE_ANY_FUNC currently */ + uint8 elem_type; + /* Current size */ + uint32 cur_size; + /* Maximum size */ + uint32 max_size; + /* Base address */ + uint8 base_addr[1]; +} WASMTableInstance; + +typedef struct WASMGlobalInstance { + /* value type, VALUE_TYPE_I32/I64/F32/F64 */ + uint8 type; + /* mutable or constant */ + bool is_mutable; + bool is_addr; + /* data offset to base_addr of WASMMemoryInstance */ + uint32 data_offset; + /* initial value */ + WASMValue initial_value; +} WASMGlobalInstance; + +typedef struct WASMFunctionInstance { + /* whether it is import function or WASM function */ + bool is_import_func; + /* cell num of parameters */ + uint16 param_cell_num; + /* cell num of return type */ + uint16 ret_cell_num; + /* cell num of local variables, 0 for import function */ + uint16 local_cell_num; + uint16 *local_offsets; + union { + WASMFunctionImport *func_import; + WASMFunction *func; + } u; +} WASMFunctionInstance; + +typedef struct WASMExportFuncInstance { + char *name; + WASMFunctionInstance *function; +} WASMExportFuncInstance; + +/* Package Type */ +typedef enum { + Wasm_Module_Bytecode = 0, + Wasm_Module_AoT, + Package_Type_Unknown = 0xFFFF +} PackageType; + +typedef struct WASMModuleInstance { + /* Module instance type, for module instance loaded from + WASM bytecode binary, this field is Wasm_Module_Bytecode; + for module instance loaded from AOT package, this field is + Wasm_Module_AoT, and this structure should be treated as + WASMAOTContext structure. */ + uint32 module_type; + + uint32 memory_count; + uint32 table_count; + uint32 global_count; + uint32 function_count; + uint32 export_func_count; + + WASMMemoryInstance **memories; + WASMTableInstance **tables; + WASMGlobalInstance *globals; + WASMFunctionInstance *functions; + WASMExportFuncInstance *export_functions; + + WASMMemoryInstance *default_memory; + WASMTableInstance *default_table; + + WASMFunctionInstance *start_function; + + HashMap *branch_set; + const WASMModule *module; + + uint32 DYNAMICTOP_PTR_offset; + uint32 temp_ret; + uint32 llvm_stack; + + /* Default WASM stack size of threads of this Module instance. */ + uint32 wasm_stack_size; + + /* Default WASM stack */ + uint8 *wasm_stack; + + /* The exception buffer of wasm interpreter for current thread. */ + char cur_exception[128]; + + /* The thread data of the attaching thread */ + void *thread_data; + + /* Main Thread */ + WASMThread main_tlr; +} WASMModuleInstance; + +/* Execution environment, e.g. stack info */ +typedef struct WASMExecEnv { + uint8_t *stack; + uint32_t stack_size; +} WASMExecEnv; + +struct WASMInterpFrame; +typedef struct WASMInterpFrame WASMRuntimeFrame; + +/** + * Return the current thread. + * + * @return the current thread + */ +static inline WASMThread* +wasm_runtime_get_self() +{ + return (WASMThread*)ws_tls_get(); +} + +/** + * Set self as the current thread. + * + * @param self the thread to be set as current thread + */ +static inline void +wasm_runtime_set_tlr(WASMThread *self) +{ + ws_tls_put(self); +} + +/** + * Return the code block of a function. + * + * @param func the WASM function instance + * + * @return the code block of the function + */ +static inline uint8* +wasm_runtime_get_func_code(WASMFunctionInstance *func) +{ + return func->is_import_func ? NULL : func->u.func->code; +} + +/** + * Return the code block end of a function. + * + * @param func the WASM function instance + * + * @return the code block end of the function + */ +static inline uint8* +wasm_runtime_get_func_code_end(WASMFunctionInstance *func) +{ + return func->is_import_func + ? NULL : func->u.func->code + func->u.func->code_size; +} + +/** + * Call the given WASM function of a WASM module instance with arguments (bytecode and AoT). + * + * @param module_inst the WASM module instance which the function belongs to + * @param exec_env the execution environment to call the function. If the module instance + * is created by AoT mode, it is ignored and just set it to NULL. If the module instance + * is created by bytecode mode and it is NULL, a temporary env object will be created + * @param function the function to be called + * @param argc the number of arguments + * @param argv the arguments. If the function method has return value, + * the first (or first two in case 64-bit return value) element of + * argv stores the return value of the called WASM function after this + * function returns. + * + * @return true if success, false otherwise and exception will be thrown, + * the caller can call wasm_runtime_get_exception to get exception info. + */ +bool +wasm_runtime_call_wasm(WASMModuleInstance *module, + WASMExecEnv *exec_env, + WASMFunctionInstance *function, + unsigned argc, uint32 argv[]); + +/** + * Set current exception string to global exception string. + * + * @param module the wasm module instance + * + * @param exception current exception string + */ +void +wasm_runtime_set_exception(WASMModuleInstance *module, + const char *exception); + +/** + * Get current exception string. + * + * @param module the wasm module instance + * + * @return return exception string if exception is thrown, NULL otherwise + */ +const char* +wasm_runtime_get_exception(WASMModuleInstance *module); + +/** + * Enlarge wasm memory data space. + * + * @param module the wasm module instance + * @param inc_page_count denote the page number to increase + * @return return true if enlarge successfully, false otherwise + */ +bool +wasm_runtime_enlarge_memory(WASMModuleInstance *module, int inc_page_count); + +/* See wasm-export.h for description */ +WASMModuleInstance * +wasm_runtime_get_current_module_inst(); + +/* See wasm-export.h for description */ +int32_t +wasm_runtime_module_malloc(WASMModuleInstance *module_inst, uint32_t size); + +/* See wasm-export.h for description */ +void +wasm_runtime_module_free(WASMModuleInstance *module_inst, int32_t ptr); + +/* See wasm-export.h for description */ +bool +wasm_runtime_validate_app_addr(WASMModuleInstance *module_inst, + int32_t app_offset, uint32_t size); + +/* See wasm-export.h for description */ +bool +wasm_runtime_validate_native_addr(WASMModuleInstance *module_inst, + void *native_ptr, uint32_t size); + +/* See wasm-export.h for description */ +void * +wasm_runtime_addr_app_to_native(WASMModuleInstance *module_inst, + int32_t app_offset); + +/* See wasm-export.h for description */ +int32_t +wasm_runtime_addr_native_to_app(WASMModuleInstance *module_inst, + void *native_ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_RUNTIME_H */ + diff --git a/core/iwasm/runtime/vmcore_wasm/wasm-thread.h b/core/iwasm/runtime/vmcore_wasm/wasm-thread.h new file mode 100644 index 000000000..6a03489d2 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm-thread.h @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_RUNTIME_THREAD_H +#define _WASM_RUNTIME_THREAD_H + +#include "wasm_assert.h" +#include "wasm_thread.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct WASMModuleInstance; +struct WASMInterpFrame; + +typedef struct WASMStack { + /* The bottom of the stack, must be 8-bytes align. */ + uint8 *bottom; + /* Top cell index which is free. */ + uint8 *top; + /* The top boundary of the stack. */ + uint8 *top_boundary; +} WASMStack; + +typedef struct WASMThread { + /* Previous thread's tlr of an instance. */ + struct WASMThread *prev; + + /* Next thread's tlr of an instance. */ + struct WASMThread *next; + + /* The WASM module instance of current thread */ + struct WASMModuleInstance *module_inst; + + /* Current frame of current thread. */ + struct WASMInterpFrame *cur_frame; + + /* The boundary of native stack. When interpreter detects that native + frame may overrun this boundary, it will throw a stack overflow + exception. */ + void *native_stack_boundary; + + /* The WASM stack of current thread. */ + WASMStack wasm_stack; + + /* The native thread handle of current thread. */ + korp_tid handle; + + /* Current suspend count of this thread. */ + uint32 suspend_count; +} WASMThread; + +/** + * Allocate a WASM frame from the WASM stack. + * + * @param tlr the current thread + * @param size size of the WASM frame, it must be a multiple of 4 + * + * @return the WASM frame if there is enough space in the stack area + * with a protection area, NULL otherwise + */ +static inline void* +wasm_thread_alloc_wasm_frame(WASMThread *tlr, unsigned size) +{ + uint8 *addr = tlr->wasm_stack.top; + + wasm_assert(!(size & 3)); + + /* The outs area size cannot be larger than the frame size, so + multiplying by 2 is enough. */ + if (addr + size * 2 > tlr->wasm_stack.top_boundary) { + /* WASM stack overflow. */ + /* When throwing SOE, the preserved space must be enough. */ + /*wasm_assert(!tlr->throwing_soe);*/ + return NULL; + } + + tlr->wasm_stack.top += size; + + return addr; +} + +static inline void +wasm_thread_free_wasm_frame(WASMThread *tlr, void *prev_top) +{ + wasm_assert((uint8 *)prev_top >= tlr->wasm_stack.bottom); + tlr->wasm_stack.top = (uint8 *)prev_top; +} + +/** + * Get the current WASM stack top pointer. + * + * @param tlr the current thread + * + * @return the current WASM stack top pointer + */ +static inline void* +wasm_thread_wasm_stack_top(WASMThread *tlr) +{ + return tlr->wasm_stack.top; +} + +/** + * Set the current frame pointer. + * + * @param tlr the current thread + * @param frame the WASM frame to be set for the current thread + */ +static inline void +wasm_thread_set_cur_frame(WASMThread *tlr, struct WASMInterpFrame *frame) +{ + tlr->cur_frame = frame; +} + +/** + * Get the current frame pointer. + * + * @param tlr the current thread + * + * @return the current frame pointer + */ +static inline struct WASMInterpFrame* +wasm_thread_get_cur_frame(WASMThread *tlr) +{ + return tlr->cur_frame; +} + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WASM_RUNTIME_THREAD_H */ diff --git a/core/iwasm/runtime/vmcore_wasm/wasm.h b/core/iwasm/runtime/vmcore_wasm/wasm.h new file mode 100644 index 000000000..6917183b1 --- /dev/null +++ b/core/iwasm/runtime/vmcore_wasm/wasm.h @@ -0,0 +1,392 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _WASM_H_ +#define _WASM_H_ + +#include "wasm_platform.h" +#include "wasm_hashmap.h" +#include "wasm_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Value Type */ +#define VALUE_TYPE_I32 0x7F +#define VALUE_TYPE_I64 0X7E +#define VALUE_TYPE_F32 0x7D +#define VALUE_TYPE_F64 0x7C +#define VALUE_TYPE_VOID 0x00 + +/* Table Element Type */ +#define TABLE_ELEM_TYPE_ANY_FUNC 0x70 + +#define MaxMemoryPages 65536 +#define MaxTableElems UINT32_MAX +#define NumBytesPerPage 65536 +#define NumBytesPerPageLog2 16 +#define MaxReturnValues 16 + +#define INIT_EXPR_TYPE_I32_CONST 0x41 +#define INIT_EXPR_TYPE_I64_CONST 0x42 +#define INIT_EXPR_TYPE_F32_CONST 0x43 +#define INIT_EXPR_TYPE_F64_CONST 0x44 +#define INIT_EXPR_TYPE_GET_GLOBAL 0x23 +#define INIT_EXPR_TYPE_ERROR 0xff + +#define WASM_MAGIC_NUMBER 0x6d736100 +#define WASM_CURRENT_VERSION 1 + +#define SECTION_TYPE_USER 0 +#define SECTION_TYPE_TYPE 1 +#define SECTION_TYPE_IMPORT 2 +#define SECTION_TYPE_FUNC 3 +#define SECTION_TYPE_TABLE 4 +#define SECTION_TYPE_MEMORY 5 +#define SECTION_TYPE_GLOBAL 6 +#define SECTION_TYPE_EXPORT 7 +#define SECTION_TYPE_START 8 +#define SECTION_TYPE_ELEM 9 +#define SECTION_TYPE_CODE 10 +#define SECTION_TYPE_DATA 11 + +#define IMPORT_KIND_FUNC 0 +#define IMPORT_KIND_TABLE 1 +#define IMPORT_KIND_MEMORY 2 +#define IMPORT_KIND_GLOBAL 3 + +#define EXPORT_KIND_FUNC 0 +#define EXPORT_KIND_TABLE 1 +#define EXPORT_KIND_MEMORY 2 +#define EXPORT_KIND_GLOBAL 3 + +#define BLOCK_TYPE_BLOCK 0 +#define BLOCK_TYPE_LOOP 1 +#define BLOCK_TYPE_IF 2 +#define BLOCK_TYPE_FUNCTION 3 + +#define CALL_TYPE_WRAPPER 0 +#define CALL_TYPE_C_INTRINSIC 1 + +typedef union WASMValue { + int32 i32; + uint32 u32; + int64 i64; + uint64 u64; + float32 f32; + float64 f64; + uintptr_t addr; +} WASMValue; + +typedef struct InitializerExpression { + /* type of INIT_EXPR_TYPE_XXX */ + uint8 init_expr_type; + union { + int32 i32; + int64 i64; + float32 f32; + float64 f64; + uint32 global_index; + } u; +} InitializerExpression; + +typedef struct WASMType { + uint32 param_count; + /* only one result is supported currently */ + uint32 result_count; + /* types of params and results */ + uint8 types[1]; +} WASMType; + +typedef struct WASMTable { + uint8 elem_type; + uint32 flags; + uint32 init_size; + /* specified if (flags & 1), else it is 0x10000 */ + uint32 max_size; +} WASMTable; + +typedef struct WASMMemory { + uint32 flags; + /* 64 kbytes one page by default */ + uint32 init_page_count; + uint32 max_page_count; +} WASMMemory; + +typedef struct WASMTableImport { + char *module_name; + char *field_name; + uint8 elem_type; + uint32 flags; + uint32 init_size; + /* specified if (flags & 1), else it is 0x10000 */ + uint32 max_size; +} WASMTableImport; + +typedef struct WASMMemoryImport { + char *module_name; + char *field_name; + uint32 flags; + /* 64 kbytes one page by default */ + uint32 init_page_count; + uint32 max_page_count; +} WASMMemoryImport; + +typedef struct WASMFunctionImport { + char *module_name; + char *field_name; + /* function type */ + WASMType *func_type; + /* c intrinsic function or wrapper function */ + uint32 call_type; + /* function pointer after linked */ + void *func_ptr_linked; +} WASMFunctionImport; + +typedef struct WASMGlobalImport { + char *module_name; + char *field_name; + uint8 type; + bool is_mutable; + bool is_addr; + /* global data after linked */ + WASMValue global_data_linked; +} WASMGlobalImport; + +typedef struct WASMImport { + uint8 kind; + union { + WASMFunctionImport function; + WASMTableImport table; + WASMMemoryImport memory; + WASMGlobalImport global; + struct { + char *module_name; + char *field_name; + } names; + } u; +} WASMImport; + +typedef struct WASMFunction { + /* the type of function */ + WASMType *func_type; + uint32 local_count; + uint8 *local_types; + uint32 max_stack_cell_num; + uint32 max_block_num; + uint32 code_size; + uint8 *code; +} WASMFunction; + +typedef struct WASMGlobal { + uint8 type; + bool is_mutable; + bool is_addr; + InitializerExpression init_expr; +} WASMGlobal; + +typedef struct WASMExport { + char *name; + uint8 kind; + uint32 index; +} WASMExport; + +typedef struct WASMTableSeg { + uint32 table_index; + InitializerExpression base_offset; + uint32 function_count; + uint32 *func_indexes; +} WASMTableSeg; + +typedef struct WASMDataSeg { + uint32 memory_index; + InitializerExpression base_offset; + uint32 data_length; + uint8 *data; +} WASMDataSeg; + +typedef struct WASMModule { + uint32 type_count; + uint32 import_count; + uint32 function_count; + uint32 table_count; + uint32 memory_count; + uint32 global_count; + uint32 export_count; + uint32 table_seg_count; + uint32 data_seg_count; + + uint32 import_function_count; + uint32 import_table_count; + uint32 import_memory_count; + uint32 import_global_count; + + WASMImport *import_functions; + WASMImport *import_tables; + WASMImport *import_memories; + WASMImport *import_globals; + + WASMType **types; + WASMImport *imports; + WASMFunction **functions; + WASMTable *tables; + WASMMemory *memories; + WASMGlobal *globals; + WASMExport *exports; + WASMTableSeg *table_segments; + WASMDataSeg **data_segments; + uint32 start_function; + + HashMap *const_str_set; + HashMap *branch_set; +} WASMModule; + +typedef struct WASMBranchBlock { + uint8 block_type; + uint8 return_type; + uint8 *start_addr; + uint8 *else_addr; + uint8 *end_addr; + uint32 *frame_sp; + uint8 *frame_ref; +} WASMBranchBlock; + +typedef struct WASMSection { + struct WASMSection *next; + /* section type */ + int section_type; + /* section body, not include type and size */ + const uint8_t *section_body; + /* section body size */ + uint32_t section_body_size; +} WASMSection; + +/* Execution environment, e.g. stack info */ +/** + * Align an unsigned value on a alignment boundary. + * + * @param v the value to be aligned + * @param b the alignment boundary (2, 4, 8, ...) + * + * @return the aligned value + */ +inline static unsigned +align_uint (unsigned v, unsigned b) +{ + unsigned m = b - 1; + return (v + m) & ~m; +} + +/** + * Return the hash value of c string. + */ +inline static uint32 +wasm_string_hash(const char *str) +{ + unsigned h = strlen(str); + const uint8 *p = (uint8*)str; + const uint8 *end = p + h; + + while (p != end) + h = ((h << 5) - h) + *p++; + return h; +} + +/** + * Whether two c strings are equal. + */ +inline static bool +wasm_string_equal(const char *s1, const char *s2) +{ + return strcmp(s1, s2) == 0 ? true : false; +} + +/** + * Return the byte size of value type. + * + */ +inline static uint32 +wasm_value_type_size(uint8 value_type) +{ + switch (value_type) { + case VALUE_TYPE_I32: + case VALUE_TYPE_F32: + return sizeof(int32); + case VALUE_TYPE_I64: + case VALUE_TYPE_F64: + return sizeof(int64); + default: + wasm_assert(0); + } + return 0; +} + +inline static uint16 +wasm_value_type_cell_num(uint8 value_type) +{ + switch (value_type) { + case VALUE_TYPE_I32: + case VALUE_TYPE_F32: + return 1; + case VALUE_TYPE_I64: + case VALUE_TYPE_F64: + return 2; + default: + wasm_assert(0); + } + return 0; +} + +inline static uint16 +wasm_get_cell_num(const uint8 *types, uint32 type_count) +{ + uint16 cell_num = 0; + uint32 i; + for (i = 0; i < type_count; i++) + cell_num += wasm_value_type_cell_num(types[i]); + return cell_num; +} + +inline static uint16 +wasm_type_param_cell_num(const WASMType *type) +{ + return wasm_get_cell_num(type->types, type->param_count); +} + +inline static uint16 +wasm_type_return_cell_num(const WASMType *type) +{ + return wasm_get_cell_num(type->types + type->param_count, + type->result_count); +} + +inline static bool +wasm_type_equal(const WASMType *type1, const WASMType *type2) +{ + return (type1->param_count == type2->param_count + && type1->result_count == type2->result_count + && memcmp(type1->types, type2->types, + type1->param_count + type1->result_count) == 0) + ? true : false; +} + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* end of _WASM_H_ */ + diff --git a/core/shared-lib/include/bh_common.h b/core/shared-lib/include/bh_common.h new file mode 100755 index 000000000..9a3366ce1 --- /dev/null +++ b/core/shared-lib/include/bh_common.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_COMMON_H +#define _BH_COMMON_H + +#include "bh_assert.h" +#include "bh_definition.h" +#include "bh_platform.h" +#include "bh_log.h" +#include "bh_list.h" + +#define bh_memcpy_s(dest, dlen, src, slen) do { \ + int _ret = slen == 0 ? 0 : b_memcpy_s (dest, dlen, src, slen); \ + (void)_ret; \ + bh_assert (_ret == 0); \ + } while (0) + +#define bh_strcat_s(dest, dlen, src) do { \ + int _ret = b_strcat_s (dest, dlen, src); \ + (void)_ret; \ + bh_assert (_ret == 0); \ + } while (0) + +#define bh_strcpy_s(dest, dlen, src) do { \ + int _ret = b_strcpy_s (dest, dlen, src); \ + (void)_ret; \ + bh_assert (_ret == 0); \ + } while (0) + +#endif diff --git a/core/shared-lib/include/bh_list.h b/core/shared-lib/include/bh_list.h new file mode 100644 index 000000000..01644dc04 --- /dev/null +++ b/core/shared-lib/include/bh_list.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_LIST_H +#define _BH_LIST_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "korp_types.h" /*For bool type*/ +#include "bh_platform.h" + +/* List user should embedded bh_list_link into list elem data structure + * definition. And bh_list_link data field should be the first field. + * For example, if we would like to use bh_list for our own data type A, + * A must be defined as a structure like below: + * struct A { + * bh_list_link l; + * ... + * }; + * + * bh_list_link is defined as a structure (not typedef void*). + * It will make extend list into bi-direction easy. + */ +typedef struct _bh_list_link { + struct _bh_list_link *next; +} bh_list_link; + +typedef struct _bh_list { + bh_list_link head; + uint32 len; +} bh_list; + +/* Beihai list operation return value */ +typedef enum _bh_list_status { + BH_LIST_SUCCESS = 0, BH_LIST_ERROR = -1 +} bh_list_status; + +/** + * Initialize a list. + * + * @param list pointer to list. + * @return BH_LIST_ERROR if OK; + * BH_LIST_ERROR if list pointer is NULL. + */ +bh_list_status bh_list_init(bh_list *list); + +/** + * Insert an elem pointer into list. The list node memory is maintained by list while + * elem memory is the responsibility of list user. + * + * @param list pointer to list. + * @param elem pointer to elem that will be inserted into list. + * @return BH_LIST_ERROR if OK; + * BH_LIST_ERROR if input is invalid or no memory available. + */ +extern bh_list_status _bh_list_insert(bh_list *list, void *elem); + +#ifdef _INSTRUMENT_TEST_ENABLED +extern bh_list_status bh_list_insert_instr(bh_list *list, void *elem, const char*func_name); +#define bh_list_insert(list, elem) bh_list_insert_instr(list, elem, __FUNCTION__) +#else +#define bh_list_insert _bh_list_insert +#endif + +/** + * Remove an elem pointer from list. The list node memory is maintained by list while + * elem memory is the responsibility of list user. + * + * @param list pointer to list. + * @param elem pointer to elem that will be inserted into list. + * @return BH_LIST_ERROR if OK; + * BH_LIST_ERROR if element does not exist in given list. + */ +bh_list_status bh_list_remove(bh_list *list, void *elem); + +/** + * Get the list length. + * + * @param list pointer to list. + * @return the length of the list. + */ +uint32 bh_list_length(bh_list *list); + +/** + * Get the first elem in the list. + * + * @param list pointer to list. + * @return pointer to the first node. + */ +void* bh_list_first_elem(bh_list *list); + +/** + * Get the next elem of given list input elem. + * + * @param node pointer to list node. + * @return pointer to next list node. + */ +void* bh_list_elem_next(void *node); + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef _BH_LIST_H */ + diff --git a/core/shared-lib/include/bh_log.h b/core/shared-lib/include/bh_log.h new file mode 100644 index 000000000..c2e45fe06 --- /dev/null +++ b/core/shared-lib/include/bh_log.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @file bh_log.h + * @date Tue Nov 8 18:19:10 2011 + * + * @brief This log system supports wrapping multiple outputs into one + * log message. This is useful for outputting variable-length logs + * without additional memory overhead (the buffer for concatenating + * the message), e.g. exception stack trace, which cannot be printed + * by a single log calling without the help of an additional buffer. + * Avoiding additional memory buffer is useful for resource-constraint + * systems. It can minimize the impact of log system on applications + * and logs can be printed even when no enough memory is available. + * Functions with prefix "_" are private functions. Only macros that + * are not start with "_" are exposed and can be used. + */ + +#ifndef _BH_LOG_H +#define _BH_LOG_H + +#include + +#include "korp_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The following functions are the primitive operations of this log + * system. A normal usage of the log system is to call bh_log_printf + * or bh_log_vprintf one or multiple times and then call bh_log_commit + * to wrap (mark) the previous outputs into one log message. The + * bh_log and macros LOG_ERROR etc. can be used to output log messages + * that can be wrapped into one log calling. + */ +int _bh_log_init(void); +void _bh_log_set_verbose_level(int level); +void _bh_log_printf(const char *fmt, ...); +void _bh_log_vprintf(const char *fmt, va_list ap); +void _bh_log_commit(void); + +#if BEIHAI_ENABLE_LOG != 0 +# define bh_log_init() _bh_log_init () +# define bh_log_set_verbose_level(l) _bh_log_set_verbose_level (l) +# define bh_log_printf(...) _bh_log_printf (__VA_ARGS__) +# define bh_log_vprintf(...) _bh_log_vprintf (__VA_ARGS__) +# define bh_log_commit() _bh_log_commit () +#else /* BEIHAI_ENABLE_LOG != 0 */ +# define bh_log_init() 0 +# define bh_log_set_verbose_level(l) (void)0 +# define bh_log_printf(...) (void)0 +# define bh_log_vprintf(...) (void)0 +# define bh_log_commit() (void)0 +#endif /* BEIHAI_ENABLE_LOG != 0 */ + +void _bh_log(const char *tag, const char *file, int line, const char *fmt, ...); + +/* Always print fatal message */ +# define LOG_FATAL(...) _bh_log ("V0.", NULL, 0, __VA_ARGS__) + +#if BEIHAI_ENABLE_LOG != 0 +# define LOG_ERROR(...) _bh_log ("V1.", NULL, 0, __VA_ARGS__) +# define LOG_WARNING(...) _bh_log ("V2.", NULL, 0, __VA_ARGS__) +# define LOG_INFO_RELEASE(...) _bh_log ("V3.", NULL, 0, __VA_ARGS__) +# define LOG_INFO_APP_DEV(...) _bh_log ("V4.", NULL, 0, __VA_ARGS__) +# define LOG_VERBOSE(...) _bh_log ("V5.", NULL, 0, __VA_ARGS__) +# if BEIHAI_ENABLE_MEMORY_PROFILING != 0 +# define LOG_PROFILE(...) _bh_log ("V3.", NULL, 0, __VA_ARGS__) +# else +# define LOG_PROFILE(...) (void)0 +#endif +# if BEIHAI_ENABLE_QUEUE_PROFILING != 0 +# define LOG_QUEUE_PROFILE(...) _bh_log ("V3.", NULL, 0, __VA_ARGS__) +# else +# define LOG_QUEUE_PROFILE(...) (void)0 +#endif +# if BEIHAI_ENABLE_GC_STAT_PROFILING != 0 +# define LOG_GC_STAT_PROFILE(...) _bh_log ("V3.", NULL, 0, __VA_ARGS__) +# else +# define LOG_GC_STAT_PROFILE(...) (void)0 +#endif +#else /* BEIHAI_ENABLE_LOG != 0 */ +# define LOG_ERROR(...) (void)0 +# define LOG_WARNING(...) (void)0 +# define LOG_INFO_APP_DEV(...) (void)0 +# define LOG_INFO_RELEASE(...) (void)0 +# define LOG_VERBOSE(...) (void)0 +# define LOG_PROFILE(...) (void)0 +# define LOG_QUEUE_PROFILE(...) (void)0 +# define LOG_GC_STAT_PROFILE(...) (void)0 +#endif /* BEIHAI_ENABLE_LOG != 0 */ + +#define LOG_PROFILE_INSTANCE_HEAP_CREATED(heap) \ + LOG_PROFILE ("PROF.INSTANCE.HEAP_CREATED: HEAP=%08X", heap) +#define LOG_PROFILE_INSTANCE_THREAD_STARTED(heap) \ + LOG_PROFILE ("PROF.INSTANCE.THREAD_STARTED: HEAP=%08X", heap) +#define LOG_PROFILE_HEAP_ALLOC(heap, size) \ + LOG_PROFILE ("PROF.HEAP.ALLOC: HEAP=%08X SIZE=%d", heap, size) +#define LOG_PROFILE_HEAP_FREE(heap, size) \ + LOG_PROFILE ("PROF.HEAP.FREE: HEAP=%08X SIZE=%d", heap, size) +#define LOG_PROFILE_HEAP_NEW(heap, size) \ + LOG_PROFILE ("PROF.HEAP.NEW: HEAP=%08X SIZE=%d", heap, size) +#define LOG_PROFILE_HEAP_GC(heap, size) \ + LOG_PROFILE ("PROF.HEAP.GC: HEAP=%08X SIZE=%d", heap, size) +#define LOG_PROFILE_STACK_PUSH(used) \ + LOG_PROFILE ("PROF.STACK.PUSH: USED=%d", used) +#define LOG_PROFILE_STACK_POP() \ + LOG_PROFILE ("PROF.STACK.POP") + +/* Please add your component ahead of LOG_COM_MAX */ +enum { + LOG_COM_APP_MANAGER = 0, + LOG_COM_GC, + LOG_COM_HMC, + LOG_COM_UTILS, + LOG_COM_VERIFIER_JEFF, + LOG_COM_VMCORE_JEFF, + LOG_COM_MAX +}; + +#if defined(BH_DEBUG) +void log_parse_coms(const char *coms); +int bh_log_dcom_is_enabled(int component); + +#define LOG_DEBUG(component, ...) do { \ + if (bh_log_dcom_is_enabled (component)) \ + _bh_log ("V6: ", __FILE__, __LINE__, __VA_ARGS__); \ + } while (0) + +#else /* defined(BH_DEBUG) */ + +#define LOG_DEBUG(component, ...) (void)0 + +#endif /* defined(BH_DEBUG) */ + +#ifdef __cplusplus +} +#endif + +#endif /* _BH_LOG_H */ diff --git a/core/shared-lib/include/bh_memory.h b/core/shared-lib/include/bh_memory.h new file mode 100644 index 000000000..c24b132a7 --- /dev/null +++ b/core/shared-lib/include/bh_memory.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_MEMORY_H +#define _BH_MEMORY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BH_KB (1024) +#define BH_MB ((BH_KB)*1024) +#define BH_GB ((BH_MB)*1024) + +/** + * Initialize memory allocator with a pool, the bh_malloc/bh_free function + * will malloc/free memory from the pool + * + * @param mem the pool buffer + * @param bytes the size bytes of the buffer + * + * @return 0 if success, -1 otherwise + */ +int bh_memory_init_with_pool(void *mem, unsigned int bytes); + +/** + * Initialize memory allocator with memory allocator, the bh_malloc/bh_free + * function will malloc/free memory with the allocator passed + * + * @param malloc_func the malloc function + * @param free_func the free function + * + * @return 0 if success, -1 otherwise + */ +int bh_memory_init_with_allocator(void *malloc_func, void *free_func); + +/** + * Destroy memory + */ +void bh_memory_destroy(); + +/** + * This function allocates a memory chunk from system + * + * @param size bytes need allocate + * + * @return the pointer to memory allocated + */ +void* bh_malloc(unsigned int size); + +/** + * This function frees memory chunk + * + * @param ptr the pointer to memory need free + */ +void bh_free(void *ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef _BH_MEMORY_H */ + diff --git a/core/shared-lib/include/bh_queue.h b/core/shared-lib/include/bh_queue.h new file mode 100644 index 000000000..a30c11266 --- /dev/null +++ b/core/shared-lib/include/bh_queue.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_QUEUE_H +#define _BH_QUEUE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "korp_types.h" /*For bool type*/ +#include "bh_platform.h" + +struct _bh_queue_node; +typedef struct _bh_queue_node * bh_message_t; +struct bh_queue; +typedef struct bh_queue bh_queue; + +typedef void (*bh_queue_handle_msg_callback)(void *message); + +#define bh_queue_malloc bh_malloc +#define bh_queue_free bh_free + +#define bh_queue_mutex korp_mutex +#define bh_queue_sem korp_sem +#define bh_queue_cond korp_cond + +#define bh_queue_mutex_init vm_mutex_init +#define bh_queue_mutex_destroy vm_mutex_destroy +#define bh_queue_mutex_lock vm_mutex_lock +#define bh_queue_mutex_unlock vm_mutex_unlock + +#define bh_queue_sem_init vm_sem_init +#define bh_queue_sem_destroy vm_sem_destroy +#define bh_queue_sem_wait vm_sem_wait +#define bh_queue_sem_reltimedwait vm_sem_reltimedwait +#define bh_queue_sem_post vm_sem_post + +#define bh_queue_cond_init vm_cond_init +#define bh_queue_cond_destroy vm_cond_destroy +#define bh_queue_cond_wait vm_cond_wait +#define bh_queue_cond_timedwait vm_cond_reltimedwait +#define bh_queue_cond_signal vm_cond_signal +#define bh_queue_cond_broadcast vm_cond_broadcast + +typedef void (*bh_msg_cleaner)(void *msg); + +bh_queue * +bh_queue_create(); + +void +bh_queue_destroy(bh_queue *queue); + +char * bh_message_payload(bh_message_t message); +int bh_message_payload_len(bh_message_t message); +int bh_message_type(bh_message_t message); + +bh_message_t bh_new_msg(unsigned short tag, void *body, unsigned int len, + void * handler); +void bh_free_msg(bh_message_t msg); +bool bh_post_msg(bh_queue *queue, unsigned short tag, void *body, + unsigned int len); +bool bh_post_msg2(bh_queue *queue, bh_message_t msg); + +bh_message_t bh_get_msg(bh_queue *queue, int timeout); + +unsigned +bh_queue_get_message_count(bh_queue *queue); + +void +bh_queue_enter_loop_run(bh_queue *queue, + bh_queue_handle_msg_callback handle_cb); + +void +bh_queue_enter_loop_run1(bh_queue *queue, + bh_queue_handle_msg_callback handle_cb); + +void +bh_queue_exit_loop_run(bh_queue *queue); + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef _BH_QUEUE_H */ + diff --git a/core/shared-lib/include/config.h b/core/shared-lib/include/config.h new file mode 100644 index 000000000..8ca0e01e2 --- /dev/null +++ b/core/shared-lib/include/config.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _CONFIG_H_ + +/* Memory allocator ems */ +#define MEM_ALLOCATOR_EMS 0 + +/* Memory allocator tlsf */ +#define MEM_ALLOCATOR_TLSF 1 + +/* Default memory allocator */ +#define DEFAULT_MEM_ALLOCATOR MEM_ALLOCATOR_EMS + +/* Beihai log system */ +#define BEIHAI_ENABLE_LOG 1 + +/* Beihai debugger support */ +#define BEIHAI_ENABLE_TOOL_AGENT 1 + +/* Beihai debug monitoring server, must define + BEIHAI_ENABLE_TOOL_AGENT firstly */ +#define BEIHAI_ENABLE_TOOL_AGENT_BDMS 1 + +/* enable no signature on sdv since verify doesn't work as lacking public key */ +#ifdef CONFIG_SDV +#define BEIHAI_ENABLE_NO_SIGNATURE 1 +#else +#define BEIHAI_ENABLE_NO_SIGNATURE 0 +#endif + +/* WASM VM log system */ +#define WASM_ENABLE_LOG 1 + +/* WASM Interpreter labels-as-values feature */ +#define WASM_ENABLE_LABELS_AS_VALUES 1 + +/* Heap and stack profiling */ +#define BEIHAI_ENABLE_MEMORY_PROFILING 0 + +/* Max app number of all modules */ +#define MAX_APP_INSTALLATIONS 3 + +/* Default timer number in one app */ +#define DEFAULT_TIMERS_PER_APP 20 + +/* Max timer number in one app */ +#define MAX_TIMERS_PER_APP 30 + +/* Max resource registration number in one app */ +#define RESOURCE_REGISTRATION_NUM_MAX 16 + +/* Max length of resource/event url */ +#define RESOUCE_EVENT_URL_LEN_MAX 256 + +/* Default length of queue */ +#define DEFAULT_QUEUE_LENGTH 50 + +/* Default watchdog interval in ms */ +#define DEFAULT_WATCHDOG_INTERVAL (3 * 60 * 1000) + +/* Workflow heap size */ +/* +#define WORKING_FLOW_HEAP_SIZE 0 +*/ + +/* Default/min/max heap size of each app */ +#define APP_HEAP_SIZE_DEFAULT (48 * 1024) +#define APP_HEAP_SIZE_MIN (2 * 1024) +#define APP_HEAP_SIZE_MAX (1024 * 1024) + +/* Default/min/max stack size of each app thread */ +#define APP_THREAD_STACK_SIZE_DEFAULT (20 * 1024) +#define APP_THREAD_STACK_SIZE_MIN (16 * 1024) +#define APP_THREAD_STACK_SIZE_MAX (256 * 1024) + +#endif diff --git a/core/shared-lib/include/errcode.h b/core/shared-lib/include/errcode.h new file mode 100755 index 000000000..5fc81cb8d --- /dev/null +++ b/core/shared-lib/include/errcode.h @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @file errcode.h + * @date Wed Feb 29 18:58:30 2012 + * + * @brief Host-visible error code definition + */ + +#ifndef BEIHAI_ERRCODE_H +#define BEIHAI_ERRCODE_H + +/** + * Responses to all remote requests from host to Beihai runtime has a + * return error code, which is used to indicate the processing result: + * successful or any error occurs. The following definitions include + * all those error codes that may be returned to host. + */ +enum { + BHE_SUCCESS = 0x000, /* Successful */ + + /* General errors: 0x100 */ + BHE_OUT_OF_MEMORY = 0x101, /* Out of memory */ + BHE_BAD_PARAMETER = 0x102, /* Bad parameters to native */ + BHE_INSUFFICIENT_BUFFER = 0x103, + BHE_MUTEX_INIT_FAIL = 0x104, + BHE_COND_INIT_FAIL = 0x105, /* Cond init fail is not return to + * host now, it may be used later. + */ + BHE_WD_TIMEOUT = 0x106, /* Watchdog time out */ + + /* Communication: 0x200 */ + BHE_MAILBOX_NOT_FOUND = 0x201, /* Mailbox not found */ + BHE_MSG_QUEUE_IS_FULL = 0x202, /* Message queue is full */ + BHE_MAILBOX_DENIED = 0x203, /* Mailbox is denied by firewall */ + + /* Applet manager: 0x300 */ + BHE_LOAD_JEFF_FAIL = 0x303, /* JEFF file load fail, OOM or file + * format error not distinct by + * current JEFF loading + * process (bool jeff_loader_load). + */ + BHE_PACKAGE_NOT_FOUND = 0x304, /* Request operation on a package, + * but it does not exist. + */ + BHE_EXIST_LIVE_SESSION = 0x305, /* Uninstall package fail because of + * live session exist. + */ + BHE_VM_INSTANCE_INIT_FAIL = 0x306, /* VM instance init fail when create + * session. + */ + BHE_QUERY_PROP_NOT_SUPPORT = 0x307, /* Query applet property that Beihai + * does not support. + */ + BHE_INVALID_BPK_FILE = 0x308, /* Incorrect Beihai package format */ + + BHE_VM_INSTNACE_NOT_FOUND = 0x312, /* VM instance not found */ + BHE_STARTING_JDWP_FAIL = 0x313, /* JDWP agent starting fail */ + BHE_GROUP_CHECK_FAIL = 0x314, /* Group access checking fail*/ + + /* Applet instance: 0x400 */ + BHE_UNCAUGHT_EXCEPTION = 0x401, /* uncaught exception */ + BHE_APPLET_BAD_PARAMETER = 0x402, /* Bad parameters to applet */ + BHE_APPLET_SMALL_BUFFER = 0x403, /* Small response buffer */ + + /*TODO: Should be removed these UI error code when integrate with ME 9 */ + /* UI: 0x500 */ + BHE_UI_EXCEPTION = 0x501, + BHE_UI_ILLEGAL_USE = 0x502, + BHE_UI_ILLEGAL_PARAMETER = 0x503, + BHE_UI_NOT_INITIALIZED = 0x504, + BHE_UI_NOT_SUPPORTED = 0x505, + BHE_UI_OUT_OF_RESOURCES = 0x506 +}; + +#endif diff --git a/core/shared-lib/include/korp_types.h b/core/shared-lib/include/korp_types.h new file mode 100755 index 000000000..daf6d6f4d --- /dev/null +++ b/core/shared-lib/include/korp_types.h @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _KORP_TYPES_H +#define _KORP_TYPES_H + +#include "bh_platform.h" +/* all types used in kORP should be explicit sized */ +typedef struct _korp_object korp_object; + +typedef unsigned int obj_info; +typedef korp_object* ref; + +#define BYTES_OF_OBJ_INFO 4 +#define BYTES_OF_REF 4 + +/* don't change the number, it's hardcoded in kORP */ +enum _korp_array_type { + ARRAY_UINT8 = 0, /* bytes_of_uint8 = 1 << ARRAY_UINT8 */ + ARRAY_UINT16 = 1, /* bytes_of_uint16 = 1 << ARRAY_UINT16 */ + ARRAY_UINT32 = 2, /* bytes_of_uint32 = 1 << ARRAY_UINT32 */ + ARRAY_UINT64 = 3, /* bytes_of_uint64 = 1 << ARRAY_UINT64 */ + ARRAY_BOOLEAN = 4, + ARRAY_CHAR = 5, + ARRAY_FLOAT = 6, + ARRAY_DOUBLE = 7, + ARRAY_BYTE = 8, + ARRAY_SHORT = 9, + ARRAY_INT = 10, + ARRAY_LONG = 11, + ARRAY_REF = 12 /* for calculation */ +}; + +enum _korp_java_type { + JAVA_TYPE_WRONG = 0, + JAVA_TYPE_BYTE = 'B', + JAVA_TYPE_CHAR = 'C', + JAVA_TYPE_DOUBLE = 'D', + JAVA_TYPE_FLOAT = 'F', + JAVA_TYPE_INT = 'I', + JAVA_TYPE_LONG = 'J', + JAVA_TYPE_SHORT = 'S', + JAVA_TYPE_BOOLEAN = 'Z', + JAVA_TYPE_CLASS = 'L', + JAVA_TYPE_ARRAY = '[', + JAVA_TYPE_VOID = 'V', + JAVA_TYPE_STRING = '$' /* for TAG_String const value */ +}; + +enum korp_modifier_type { + MOD_PUBLIC = 0x0001, /* Class Field Method */ + MOD_PRIVATE = 0x0002, /* Field Method */ + MOD_PROTECTED = 0x0004, /* Field Method */ + MOD_STATIC = 0x0008, /* Field Method */ + MOD_FINAL = 0x0010, /* Class Field Method */ + MOD_SUPER = 0x0020, /* Class */ + MOD_SYNCHRONIZED = 0x0020, /* Method */ + MOD_VOLATILE = 0x0040, /* Field */ + MOD_TRANSIENT = 0x0080, /* Field */ + MOD_NATIVE = 0x0100, /* Method */ + MOD_INTERFACE = 0x0200, /* Class */ + MOD_ABSTRACT = 0x0400, /* Class Method */ + MOD_STRICT = 0x0800 /* Method */ +}; + +/* object header, used to access object info */ +struct _korp_object { + obj_info header; /* object header (I) */ +}; + +#define HASH_TABLE_SIZE 359 + +#ifndef NULL +#define NULL (void*)0 +#endif + +#define KORP_ERROR (-1) + +#ifndef __cplusplus +#define true 1 +#define false 0 +#define inline __inline +#endif + +/* forwarded declarations */ +typedef struct _korp_string_pool korp_string_pool; +typedef struct _korp_class_table korp_class_table; + +typedef enum _korp_loader_exception { + LD_OK = 0, + LD_NoClassDefFoundError, + LD_ClassFormatError, + LD_ClassCircularityError, + LD_IncompatibleClassChangeError, + LD_AbstractMethodError, /* occurs during preparation */ + LD_IllegalAccessError, + LD_InstantiationError, + LD_NoSuchFieldError, + LD_NoSuchMethodError, + LD_UnsatisfiedLinkError, + LD_VerifyError +} korp_loader_exception; + +typedef enum _korp_java_type korp_java_type; +typedef enum _korp_array_type korp_array_type; + +/* typedef struct _korp_thread korp_thread; */ +typedef struct _korp_method korp_method; +typedef struct _korp_field korp_field; +typedef struct _korp_class korp_class; +typedef struct _korp_string korp_string; +typedef struct _korp_package korp_package; +typedef struct _korp_class_loader korp_class_loader; +typedef struct _korp_ref_array korp_ref_array; + +typedef struct _korp_entry korp_entry; +typedef struct _korp_preloaded korp_preloaded; +typedef struct _korp_env korp_env; + +typedef struct _korp_java_array korp_java_array; +typedef struct _korp_uint8_array korp_uint8_array; + +typedef struct _korp_vm_thread_list korp_vm_thread_list; + +#define korp_uint8 korp_uint32 +#define korp_uint16 korp_uint32 +#define korp_boolean korp_uint32 +#define korp_char korp_uint32 +#define korp_short korp_uint32 +#define korp_int korp_uint32 +#define korp_float korp_uint32 + +#define korp_long korp_uint64 +#define korp_double korp_uint64 + +#define korp_boolean_array korp_uint8_array +#define korp_char_array korp_uint8_array +#define korp_short_array korp_uint16_array +#define korp_int_array korp_uint32_array +#define korp_float_array korp_uint32_array +#define korp_double_array korp_uint64_array +#define korp_long_array korp_uint64_array + +#define korp_code korp_uint8_array + +#endif /* #ifndef _KORP_TYPES_H */ + diff --git a/core/shared-lib/include/mem_alloc.h b/core/shared-lib/include/mem_alloc.h new file mode 100644 index 000000000..acda4a911 --- /dev/null +++ b/core/shared-lib/include/mem_alloc.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MEM_ALLOC_H +#define __MEM_ALLOC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *mem_allocator_t; + +mem_allocator_t +mem_allocator_create(void *mem, uint32_t size); + +void +mem_allocator_destroy(mem_allocator_t allocator); + +void * +mem_allocator_malloc(mem_allocator_t allocator, uint32_t size); + +void +mem_allocator_free(mem_allocator_t allocator, void *ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef __MEM_ALLOC_H */ + diff --git a/core/shared-lib/mem-alloc/bh_memory.c b/core/shared-lib/mem-alloc/bh_memory.c new file mode 100644 index 000000000..46dd1fd8d --- /dev/null +++ b/core/shared-lib/mem-alloc/bh_memory.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_memory.h" +#include "mem_alloc.h" +#include +#include + +#ifndef MALLOC_MEMORY_FROM_SYSTEM + +typedef enum Memory_Mode { + MEMORY_MODE_UNKNOWN = 0, MEMORY_MODE_POOL, MEMORY_MODE_ALLOCATOR +} Memory_Mode; + +static Memory_Mode memory_mode = MEMORY_MODE_UNKNOWN; + +static mem_allocator_t pool_allocator = NULL; + +static void *(*malloc_func)(unsigned int size) = NULL; +static void (*free_func)(void *ptr) = NULL; + +int bh_memory_init_with_pool(void *mem, unsigned int bytes) +{ + mem_allocator_t _allocator = mem_allocator_create(mem, bytes); + + if (_allocator) { + memory_mode = MEMORY_MODE_POOL; + pool_allocator = _allocator; + return 0; + } + printf("Init memory with pool (%p, %u) failed.\n", mem, bytes); + return -1; +} + +int bh_memory_init_with_allocator(void *_malloc_func, void *_free_func) +{ + if (_malloc_func && _free_func && _malloc_func != _free_func) { + memory_mode = MEMORY_MODE_ALLOCATOR; + malloc_func = _malloc_func; + free_func = _free_func; + return 0; + } + printf("Init memory with allocator (%p, %p) failed.\n", _malloc_func, + _free_func); + return -1; +} + +void bh_memory_destroy() +{ + if (memory_mode == MEMORY_MODE_POOL) + mem_allocator_destroy(pool_allocator); + memory_mode = MEMORY_MODE_UNKNOWN; +} + +void* bh_malloc(unsigned int size) +{ + if (memory_mode == MEMORY_MODE_UNKNOWN) { + printf("bh_malloc failed: memory hasn't been initialize.\n"); + return NULL; + } else if (memory_mode == MEMORY_MODE_POOL) { + return mem_allocator_malloc(pool_allocator, size); + } else { + return malloc_func(size); + } +} + +void bh_free(void *ptr) +{ + if (memory_mode == MEMORY_MODE_UNKNOWN) { + printf("bh_free failed: memory hasn't been initialize.\n"); + } else if (memory_mode == MEMORY_MODE_POOL) { + mem_allocator_free(pool_allocator, ptr); + } else { + free_func(ptr); + } +} + +#else /* else of MALLOC_MEMORY_FROM_SYSTEM */ + +void* bh_malloc(unsigned int size) +{ + return malloc(size); +} + +void bh_free(void *ptr) +{ + if (ptr) + free(ptr); +} + +#endif /* end of MALLOC_MEMORY_FROM_SYSTEM*/ + diff --git a/core/shared-lib/mem-alloc/ems/ems_alloc.c b/core/shared-lib/mem-alloc/ems/ems_alloc.c new file mode 100644 index 000000000..d8682b6c7 --- /dev/null +++ b/core/shared-lib/mem-alloc/ems/ems_alloc.c @@ -0,0 +1,590 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ems_gc_internal.h" + +#if !defined(NVALGRIND) +#include +#endif + +static int hmu_is_in_heap(gc_heap_t* heap, hmu_t* hmu) +{ + return heap && hmu && (gc_uint8*) hmu >= heap->base_addr + && (gc_uint8*) hmu < heap->base_addr + heap->current_size; +} + +/* Remove a node from the tree it belongs to*/ + +/* @p can not be NULL*/ +/* @p can not be the ROOT node*/ + +/* Node @p will be removed from the tree and left,right,parent pointers of node @p will be*/ +/* set to be NULL. Other fields will not be touched.*/ +/* The tree will be re-organized so that the order conditions are still satisified.*/ +BH_STATIC void remove_tree_node(hmu_tree_node_t *p) +{ + hmu_tree_node_t *q = NULL, **slot = NULL; + + bh_assert(p); + bh_assert(p->parent); /* @p can not be the ROOT node*/ + + /* get the slot which holds pointer to node p*/ + if (p == p->parent->right) { + slot = &p->parent->right; + } else { + bh_assert(p == p->parent->left); /* @p should be a child of its parent*/ + slot = &p->parent->left; + } + + /* algorithms used to remove node p*/ + /* case 1: if p has no left child, replace p with its right child*/ + /* case 2: if p has no right child, replace p with its left child*/ + /* case 3: otherwise, find p's predecessor, remove it from the tree and replace p with it.*/ + /* use predecessor can keep the left <= root < right condition.*/ + + if (!p->left) { + /* move right child up*/ + *slot = p->right; + if (p->right) + p->right->parent = p->parent; + + p->left = p->right = p->parent = NULL; + return; + } + + if (!p->right) { + /* move left child up*/ + *slot = p->left; + p->left->parent = p->parent; /* p->left can never be NULL.*/ + + p->left = p->right = p->parent = NULL; + return; + } + + /* both left & right exist, find p's predecessor at first*/ + q = p->left; + while (q->right) + q = q->right; + remove_tree_node(q); /* remove from the tree*/ + + *slot = q; + q->parent = p->parent; + q->left = p->left; + q->right = p->right; + if (q->left) + q->left->parent = q; + if (q->right) + q->right->parent = q; + + p->left = p->right = p->parent = NULL; +} + +static void unlink_hmu(gc_heap_t *heap, hmu_t *hmu) +{ + gc_size_t size; + + bh_assert(gci_is_heap_valid(heap)); + bh_assert( + hmu && (gc_uint8*) hmu >= heap->base_addr + && (gc_uint8*) hmu < heap->base_addr + heap->current_size); + bh_assert(hmu_get_ut(hmu) == HMU_FC); + + size = hmu_get_size(hmu); + + if (HMU_IS_FC_NORMAL(size)) { + int node_idx = size >> 3; + hmu_normal_node_t* node = heap->kfc_normal_list[node_idx].next; + hmu_normal_node_t** p = &(heap->kfc_normal_list[node_idx].next); + while (node) { + if ((hmu_t*) node == hmu) { + *p = node->next; + break; + } + p = &(node->next); + node = node->next; + } + + if (!node) { + printf("[GC_ERROR]couldn't find the node in the normal list"); + } + } else { + remove_tree_node((hmu_tree_node_t *) hmu); + } +} + +static void hmu_set_free_size(hmu_t *hmu) +{ + gc_size_t size; + bh_assert(hmu && hmu_get_ut(hmu) == HMU_FC); + + size = hmu_get_size(hmu); + *((int*) ((char*) hmu + size) - 1) = size; +} + +/* Add free chunk back to KFC*/ + +/* @heap should not be NULL and it should be a valid heap*/ +/* @hmu should not be NULL and it should be a HMU of length @size inside @heap*/ +/* @hmu should be aligned to 8*/ +/* @size should be positive and multiple of 8*/ + +/* @hmu with size @size will be added into KFC as a new FC.*/ +void gci_add_fc(gc_heap_t *heap, hmu_t *hmu, gc_size_t size) +{ + hmu_normal_node_t *np = NULL; + hmu_tree_node_t *root = NULL, *tp = NULL, *node = NULL; + int node_idx; + + bh_assert(gci_is_heap_valid(heap)); + bh_assert( + hmu && (gc_uint8*) hmu >= heap->base_addr + && (gc_uint8*) hmu < heap->base_addr + heap->current_size); + bh_assert(((gc_uint32) hmu_to_obj(hmu) & 7) == 0); + bh_assert( + size > 0 + && ((gc_uint8*) hmu) + size + <= heap->base_addr + heap->current_size); + bh_assert(!(size & 7)); + + hmu_set_ut(hmu, HMU_FC); + hmu_set_size(hmu, size); + hmu_set_free_size(hmu); + + if (HMU_IS_FC_NORMAL(size)) { + np = (hmu_normal_node_t*) hmu; + + node_idx = size >> 3; + np->next = heap->kfc_normal_list[node_idx].next; + heap->kfc_normal_list[node_idx].next = np; + return; + } + + /* big block*/ + node = (hmu_tree_node_t*) hmu; + node->size = size; + node->left = node->right = node->parent = NULL; + + /* find proper node to link this new node to*/ + root = &heap->kfc_tree_root; + tp = root; + bh_assert(tp->size < size); + while (1) { + if (tp->size < size) { + if (!tp->right) { + tp->right = node; + node->parent = tp; + break; + } + tp = tp->right; + } else /* tp->size >= size*/ + { + if (!tp->left) { + tp->left = node; + node->parent = tp; + break; + } + tp = tp->left; + } + } +} + +/* Find a proper hmu for required memory size*/ + +/* @heap should not be NULL and it should be a valid heap*/ +/* @size should cover the header and it should be 8 bytes aligned*/ + +/* GC will not be performed here.*/ +/* Heap extension will not be performed here.*/ + +/* A proper HMU will be returned. This HMU can include the header and given size. The returned HMU will be aligned to 8 bytes.*/ +/* NULL will be returned if there are no proper HMU.*/ +BH_STATIC hmu_t *alloc_hmu(gc_heap_t *heap, gc_size_t size) +{ + hmu_normal_node_t *node = NULL, *p = NULL; + int node_idx = 0, init_node_idx = 0; + hmu_tree_node_t *root = NULL, *tp = NULL, *last_tp = NULL; + hmu_t *next, *rest; + + bh_assert(gci_is_heap_valid(heap)); + bh_assert(size > 0 && !(size & 7)); + + if (size < GC_SMALLEST_SIZE) + size = GC_SMALLEST_SIZE; + + /* check normal list at first*/ + if (HMU_IS_FC_NORMAL(size)) { + /* find a non-empty slot in normal_node_list with good size*/ + init_node_idx = (int) (size >> 3); + for (node_idx = init_node_idx; node_idx < HMU_NORMAL_NODE_CNT; + node_idx++) { + node = heap->kfc_normal_list + node_idx; + if (node->next) + break; + node = NULL; + } + + /* not found in normal list*/ + if (node) { + bh_assert(node_idx >= init_node_idx); + + p = node->next; + node->next = p->next; + bh_assert(((gc_int32) hmu_to_obj(p) & 7) == 0); + + if ((gc_size_t) node_idx + != init_node_idx&& ((gc_size_t)node_idx << 3) >= size + GC_SMALLEST_SIZE) { /* with bigger size*/ + rest = (hmu_t*) (((char *) p) + size); + gci_add_fc(heap, rest, (node_idx << 3) - size); + hmu_mark_pinuse(rest); + } else { + size = node_idx << 3; + next = (hmu_t*) ((char*) p + size); + if (hmu_is_in_heap(heap, next)) + hmu_mark_pinuse(next); + } + +#if GC_STAT_DATA != 0 + heap->total_free_size -= size; + if ((heap->current_size - heap->total_free_size) + > heap->highmark_size) + heap->highmark_size = heap->current_size + - heap->total_free_size; +#endif + + hmu_set_size((hmu_t* ) p, size); + return (hmu_t*) p; + } + } + + /* need to find a node in tree*/ + root = &heap->kfc_tree_root; + + /* find the best node*/ + bh_assert(root); + tp = root->right; + while (tp) { + if (tp->size < size) { + tp = tp->right; + continue; + } + + /* record the last node with size equal to or bigger than given size*/ + last_tp = tp; + tp = tp->left; + } + + if (last_tp) { + bh_assert(last_tp->size >= size); + + /* alloc in last_p*/ + + /* remove node last_p from tree*/ + remove_tree_node(last_tp); + + if (last_tp->size >= size + GC_SMALLEST_SIZE) { + rest = (hmu_t*) ((char*) last_tp + size); + gci_add_fc(heap, rest, last_tp->size - size); + hmu_mark_pinuse(rest); + } else { + size = last_tp->size; + next = (hmu_t*) ((char*) last_tp + size); + if (hmu_is_in_heap(heap, next)) + hmu_mark_pinuse(next); + } + +#if GC_STAT_DATA != 0 + heap->total_free_size -= size; + if ((heap->current_size - heap->total_free_size) > heap->highmark_size) + heap->highmark_size = heap->current_size - heap->total_free_size; +#endif + hmu_set_size((hmu_t* ) last_tp, size); + return (hmu_t*) last_tp; + } + + return NULL; +} + +/* Find a proper HMU for given size*/ + +/* @heap should not be NULL and it should be a valid heap*/ +/* @size should cover the header and it should be 8 bytes aligned*/ + +/* This function will try several ways to satisfy the allocation request.*/ +/* 1. Find a proper on available HMUs.*/ +/* 2. GC will be triggered if 1 failed.*/ +/* 3. Find a proper on available HMUS.*/ +/* 4. Return NULL if 3 failed*/ + +/* A proper HMU will be returned. This HMU can include the header and given size. The returned HMU will be aligned to 8 bytes.*/ +/* NULL will be returned if there are no proper HMU.*/ +BH_STATIC hmu_t* alloc_hmu_ex(gc_heap_t *heap, gc_size_t size) +{ + hmu_t *ret = NULL; + + bh_assert(gci_is_heap_valid(heap)); + bh_assert(size > 0 && !(size & 7)); + +#ifdef GC_IN_EVERY_ALLOCATION + gci_gc_heap(heap); + ret = alloc_hmu(heap, size); +#else + +# if GC_STAT_DATA != 0 + if (heap->gc_threshold < heap->total_free_size) + ret = alloc_hmu(heap, size); +# else + ret = alloc_hmu(heap, size); +# endif + + if (ret) + return ret; + + /*gci_gc_heap(heap);*//* disable gc claim currently */ + ret = alloc_hmu(heap, size); +#endif + return ret; +} + +unsigned long g_total_malloc = 0; +unsigned long g_total_free = 0; + +gc_object_t _gc_alloc_vo_i_heap(void *vheap, + gc_size_t size ALLOC_EXTRA_PARAMETERS) +{ + gc_heap_t* heap = (gc_heap_t*) vheap; + hmu_t *hmu = NULL; + gc_object_t ret = (gc_object_t) NULL; + gc_size_t tot_size = 0; + + /* align size*/ + tot_size = GC_ALIGN_8(size + HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE); /* hmu header, prefix, suffix*/ + if (tot_size < size) + return NULL; + + gct_vm_mutex_lock(&heap->lock); + + hmu = alloc_hmu_ex(heap, tot_size); + if (!hmu) + goto FINISH; + + g_total_malloc += tot_size; + + hmu_set_ut(hmu, HMU_VO); + hmu_unfree_vo(hmu); + +#if defined(GC_VERIFY) + hmu_init_prefix_and_suffix(hmu, tot_size, file_name, line_number); +#endif + + ret = hmu_to_obj(hmu); + +#if BH_ENABLE_MEMORY_PROFILING != 0 + printf("HEAP.ALLOC: heap: %p, size: %u", heap, size); +#endif + + FINISH: + gct_vm_mutex_unlock(&heap->lock); + + return ret; +} + +/* see ems_gc.h for description*/ +gc_object_t _gc_alloc_jo_i_heap(void *vheap, + gc_size_t size ALLOC_EXTRA_PARAMETERS) +{ + gc_heap_t* heap = (gc_heap_t*) vheap; + gc_object_t ret = (gc_object_t) NULL; + hmu_t *hmu = NULL; + gc_size_t tot_size = 0; + + bh_assert(gci_is_heap_valid(heap)); + + /* align size*/ + tot_size = GC_ALIGN_8(size + HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE); /* hmu header, prefix, suffix*/ + if (tot_size < size) + return NULL; + + hmu = alloc_hmu_ex(heap, tot_size); + if (!hmu) + goto FINISH; + + /* reset all fields*/ + memset((char*) hmu + sizeof(*hmu), 0, tot_size - sizeof(*hmu)); + + /* hmu->header = 0; */ + hmu_set_ut(hmu, HMU_JO); + hmu_unmark_jo(hmu); + +#if defined(GC_VERIFY) + hmu_init_prefix_and_suffix(hmu, tot_size, file_name, line_number); +#endif + ret = hmu_to_obj(hmu); + +#if BH_ENABLE_MEMORY_PROFILING != 0 + printf("HEAP.ALLOC: heap: %p, size: %u", heap, size); +#endif + + FINISH: + + return ret; +} + +/* Do some checking to see if given pointer is a possible valid heap*/ + +/* Return GC_TRUE if all checking passed*/ +/* Return GC_FALSE otherwise*/ +int gci_is_heap_valid(gc_heap_t *heap) +{ + if (!heap) + return GC_FALSE; + if (heap->heap_id != (gc_handle_t) heap) + return GC_FALSE; + + return GC_TRUE; +} + +int gc_free_i_heap(void *vheap, gc_object_t obj ALLOC_EXTRA_PARAMETERS) +{ + gc_heap_t* heap = (gc_heap_t*) vheap; + hmu_t *hmu = NULL; + hmu_t *prev = NULL; + hmu_t *next = NULL; + gc_size_t size = 0; + hmu_type_t ut; + int ret = GC_SUCCESS; + + if (!obj) { + return GC_SUCCESS; + } + + hmu = obj_to_hmu(obj); + + gct_vm_mutex_lock(&heap->lock); + + if ((gc_uint8 *) hmu >= heap->base_addr + && (gc_uint8 *) hmu < heap->base_addr + heap->current_size) { +#ifdef GC_VERIFY + hmu_verify(hmu); +#endif + ut = hmu_get_ut(hmu); + if (ut == HMU_VO) { + if (hmu_is_vo_freed(hmu)) { + bh_assert(0); + ret = GC_ERROR; + goto out; + } + + size = hmu_get_size(hmu); + + g_total_free += size; + +#if GC_STAT_DATA != 0 + heap->total_free_size += size; +#endif +#if BH_ENABLE_MEMORY_PROFILING != 0 + printf("HEAP.FREE, heap: %p, size: %u\n",heap, size); +#endif + + if (!hmu_get_pinuse(hmu)) { + prev = (hmu_t*) ((char*) hmu - *((int*) hmu - 1)); + + if (hmu_is_in_heap(heap, prev) && hmu_get_ut(prev) == HMU_FC) { + size += hmu_get_size(prev); + hmu = prev; + unlink_hmu(heap, prev); + } + } + + next = (hmu_t*) ((char*) hmu + size); + if (hmu_is_in_heap(heap, next)) { + if (hmu_get_ut(next) == HMU_FC) { + size += hmu_get_size(next); + unlink_hmu(heap, next); + next = (hmu_t*) ((char*) hmu + size); + } + } + + gci_add_fc(heap, hmu, size); + + if (hmu_is_in_heap(heap, next)) { + hmu_unmark_pinuse(next); + } + + } else { + ret = GC_ERROR; + goto out; + } + ret = GC_SUCCESS; + goto out; + } + + out: + gct_vm_mutex_unlock(&heap->lock); + return ret; +} + +void gc_dump_heap_stats(gc_heap_t *heap) +{ + printf("heap: %p, heap start: %p\n", heap, heap->base_addr); + printf( + "total malloc: totalfree: %u, current: %u, highmark: %u, gc cnt: %u\n", + heap->total_free_size, heap->current_size, heap->highmark_size, + heap->total_gc_count); + printf("g_total_malloc=%lu, g_total_free=%lu, occupied=%lu\n", + g_total_malloc, g_total_free, g_total_malloc - g_total_free); +} + +#ifdef GC_TEST + +void gci_dump(char* buf, gc_heap_t *heap) +{ + hmu_t *cur = NULL, *end = NULL; + hmu_type_t ut; + gc_size_t size; + int i = 0; + int p; + char inuse; + int mark; + + cur = (hmu_t*)heap->base_addr; + end = (hmu_t*)((char*)heap->base_addr + heap->current_size); + + while(cur < end) + { + ut = hmu_get_ut(cur); + size = hmu_get_size(cur); + p = hmu_get_pinuse(cur); + mark = hmu_is_jo_marked (cur); + + if(ut == HMU_VO) + inuse = 'V'; + else if(ut == HMU_JO) + inuse = hmu_is_jo_marked(cur) ? 'J' : 'j'; + else if(ut == HMU_FC) + inuse = 'F'; + + bh_assert(size > 0); + + buf += sprintf(buf, "#%d %08x %x %x %d %c %d\n", i, (char*) cur - (char*) heap->base_addr, ut, p, mark, inuse, hmu_obj_size(size)); + + cur = (hmu_t*)((char *)cur + size); + i++; + } + + bh_assert(cur == end); +} + +#endif diff --git a/core/shared-lib/mem-alloc/ems/ems_gc.h b/core/shared-lib/mem-alloc/ems/ems_gc.h new file mode 100644 index 000000000..d18fb2abf --- /dev/null +++ b/core/shared-lib/mem-alloc/ems/ems_gc.h @@ -0,0 +1,341 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file ems_gc.h + * @date Wed Aug 3 10:46:38 2011 + * + * @brief This file defines GC modules types and interfaces. + * + * + */ + +#ifndef _EMS_GC_H +#define _EMS_GC_H + +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*Pre-compile configuration can be done here or on Makefiles*/ +/*#define GC_EMBEDDED or GC_STANDALONE*/ +/*#define GC_DEBUG*/ +/*#define GC_TEST // TEST mode is a sub-mode of STANDALONE*/ +/* #define GC_ALLOC_TRACE */ +/* #define GC_STAT */ +#ifndef GC_STAT_DATA +#define GC_STAT_DATA 1 +#endif + +#define GC_HEAD_PADDING 4 + +/* Standalone GC is used for testing.*/ +#ifndef GC_EMBEDDED +# ifndef GC_STANDALONE +# define GC_STANDALONE +# endif +#endif + +#if defined(GC_EMBEDDED) && defined(GC_STANDALONE) +# error "Can not define GC_EMBEDDED and GC_STANDALONE at the same time" +#endif + +#ifdef BH_TEST +# ifndef GC_TEST +# define GC_TEST +# endif +#endif + +#ifdef BH_DEBUG +/*instrument mode ignore GC_DEBUG feature, for instrument testing gc_alloc_vo_i_heap only has func_name parameter*/ +#if !defined INSTRUMENT_TEST_ENABLED && !defined GC_DEBUG +# define GC_DEBUG +#endif +#endif + +#if defined(GC_EMBEDDED) && defined(GC_TEST) +# error "Can not defined GC_EMBEDDED and GC_TEST at the same time" +#endif + +typedef void *gc_handle_t; +typedef void *gc_object_t; + +#define NULL_REF ((gc_object_t)NULL) + +#define GC_SUCCESS (0) +#define GC_ERROR (-1) + +#define GC_TRUE (1) +#define GC_FALSE (0) + +#define GC_MAX_HEAP_SIZE (256 * BH_KB) + +typedef int64 gc_int64; + +typedef unsigned int gc_uint32; +typedef signed int gc_int32; +typedef unsigned short gc_uint16; +typedef signed short gc_int16; +typedef unsigned char gc_uint8; +typedef signed char gc_int8; +typedef gc_uint32 gc_size_t; + +typedef enum { + MMT_SHARED = 0, + MMT_INSTANCE = 1, + MMT_APPMANAGER = MMT_SHARED, + MMT_VERIFIER = MMT_SHARED, + MMT_JHI = MMT_SHARED, + MMT_LOADER = MMT_SHARED, + MMT_APPLET = MMT_INSTANCE, + MMT_INTERPRETER = MMT_INSTANCE +} gc_mm_t; + +#ifdef GC_STAT +#define GC_HEAP_STAT_SIZE (128 / 4) + +typedef struct { + int usage; + int usage_block; + int vo_usage; + int jo_usage; + int free; + int free_block; + int vo_free; + int jo_free; + int usage_sizes[GC_HEAP_STAT_SIZE]; + int free_sizes[GC_HEAP_STAT_SIZE]; +}gc_stat_t; + +extern void gc_heap_stat(void* heap, gc_stat_t* gc_stat); +extern void __gc_print_stat(void *heap, int verbose); + +#define gc_print_stat __gc_print_stat + +#else + +#define gc_print_stat(heap, verbose) + +#endif + +#if GC_STAT_DATA != 0 + +typedef enum { + GC_STAT_TOTAL = 0, + GC_STAT_FREE, + GC_STAT_HIGHMARK, + GC_STAT_COUNT, + GC_STAT_TIME, + GC_STAT_MAX_1, + GC_STAT_MAX_2, + GC_STAT_MAX_3, + GC_STAT_MAX +} GC_STAT_INDEX; + +#endif + +/*////////////// Exported APIs*/ + +/** + * GC initialization from a buffer + * + * @param buf the buffer to be initialized to a heap + * @param buf_size the size of buffer + * + * @return gc handle if success, NULL otherwise + */ +extern gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size); + +/** + * Destroy heap which is initilized from a buffer + * + * @param handle handle to heap needed destory + * + * @return GC_SUCCESS if success + * GC_ERROR for bad parameters or failed system resource freeing. + */ +extern int gc_destroy_with_pool(gc_handle_t handle); + +#if GC_STAT_DATA != 0 + +/** + * Get Heap Stats + * + * @param stats [out] integer array to save heap stats + * @param size [in] the size of stats + * @param mmt [in] type of heap, MMT_SHARED or MMT_INSTANCE + */ +extern void* gc_heap_stats(void *heap, int* stats, int size, gc_mm_t mmt); + +/** + * Set GC threshold factor + * + * @param heap [in] the heap to set + * @param factor [in] the threshold size is free_size * factor / 1000 + * + * @return GC_SUCCESS if success. + */ +extern int gc_set_threshold_factor(void *heap, unsigned int factor); + +#endif + +/*////// Allocate heap object*/ + +/* There are two versions of allocate functions. The functions with _i suffix should be only used*/ +/* internally. Functions without _i suffix are just wrappers with the corresponded functions with*/ +/* _i suffix. Allocation operation code position are record under DEBUG model for debugging.*/ +#ifdef GC_DEBUG +# define ALLOC_EXTRA_PARAMETERS ,const char*file_name,int line_number +# define ALLOC_EXTRA_ARGUMENTS , __FILE__, __LINE__ +# define ALLOC_PASSDOWN_EXTRA_ARGUMENTS , file_name, line_number +# define gc_alloc_vo_h(heap, size) gc_alloc_vo_i_heap(heap, size, __FILE__, __LINE__) +# define gc_free_h(heap, obj) gc_free_i_heap(heap, obj, __FILE__, __LINE__) +#else +# define ALLOC_EXTRA_PARAMETERS +# define ALLOC_EXTRA_ARGUMENTS +# define ALLOC_PASSDOWN_EXTRA_ARGUMENTS +# define gc_alloc_vo_h gc_alloc_vo_i_heap +# define gc_free_h gc_free_i_heap +#endif + +/** + * Invoke a GC + * + * @param heap + * + * @return GC_SUCCESS if success + */ +extern int gci_gc_heap(void *heap); + +/** + * Allocate VM Object in specific heap. + * + * @param heap heap to allocate. + * @param size bytes to allocate. + * + * @return pointer to VM object allocated + * NULL if failed. + */ +extern gc_object_t _gc_alloc_vo_i_heap(void *heap, + gc_size_t size ALLOC_EXTRA_PARAMETERS); +extern gc_object_t _gc_alloc_jo_i_heap(void *heap, + gc_size_t size ALLOC_EXTRA_PARAMETERS); +#ifdef INSTRUMENT_TEST_ENABLED +extern gc_object_t gc_alloc_vo_i_heap_instr(void *heap, gc_size_t size, const char* func_name ); +extern gc_object_t gc_alloc_jo_i_heap_instr(void *heap, gc_size_t size, const char* func_name); +# define gc_alloc_vo_i_heap(heap, size) gc_alloc_vo_i_heap_instr(heap, size, __FUNCTION__) +# define gc_alloc_jo_i_heap(heap, size) gc_alloc_jo_i_heap_instr(heap, size, __FUNCTION__) +#else +# define gc_alloc_vo_i_heap _gc_alloc_vo_i_heap +# define gc_alloc_jo_i_heap _gc_alloc_jo_i_heap +#endif + +/** + * Allocate Java object in specific heap. + * + * @param heap heap to allocate. + * @param size bytes to allocate. + * + * @return pointer to Java object allocated + * NULL if failed. + */ +extern gc_object_t _gc_alloc_jo_i_heap(void *heap, + gc_size_t size ALLOC_EXTRA_PARAMETERS); + +/** + * Free VM object + * + * @param heap heap to free. + * @param obj pointer to object need free. + * + * @return GC_SUCCESS if success + */ +extern int gc_free_i_heap(void *heap, gc_object_t obj ALLOC_EXTRA_PARAMETERS); + +/** + * Add ref to rootset of gc for current instance. + * + * @param obj pointer to real load of a valid Java object managed by gc for current instance. + * + * @return GC_SUCCESS if success. + * GC_ERROR for invalid parameters. + */ +extern int gc_add_root(void* heap, gc_object_t obj); + +/*////////////// Imported APIs which should be implemented in other components*/ + +/*////// Java object layout related APIs*/ + +/** + * Get Java object size from corresponding VM module + * + * @param obj pointer to the real load of a Java object. + * + * @return size of java object. + */ +extern gc_size_t vm_get_java_object_size(gc_object_t obj); + +/** + * Get reference list of this object + * + * @param obj [in] pointer to java object. + * @param is_compact_mode [in] indicate the java object mode. GC_TRUE or GC_FALSE. + * @param ref_num [out] the size of ref_list. + * @param ref_list [out] if is_compact_mode is GC_FALSE, this parameter will be set to a list of offset. + * @param ref_start_offset [out] If is_compact_mode is GC_TRUE, this parameter will be set to the start offset of the references in this object. + * + * @return GC_SUCCESS if success. + * GC_ERROR when error occurs. + */ +extern int vm_get_java_object_ref_list(gc_object_t obj, int *is_compact_mode, + gc_size_t *ref_num, gc_uint16 **ref_list, gc_uint32 *ref_start_offset); + +/** + * Get gc handle for current instance + * + * + * @return instance heap handle. + */ +extern gc_handle_t app_manager_get_cur_applet_heap(void); + +/** + * Begin current instance heap rootset enumeration + * + * + * @return GC_SUCCESS if success. + * GC_ERROR when error occurs. + */ +extern int vm_begin_rootset_enumeration(void *heap); + +#ifdef _INSTRUMENT_TEST_ENABLED +extern int vm_begin_rootset_enumeration_instr(void *heap, const char*func_name); +#define vm_begin_rootset_enumeration(heap) vm_begin_rootset_enumeration_instr(heap, __FUNCTION__) +#else +#define vm_begin_rootset_enumeration _vm_begin_rootset_enumeration +#endif /* INSTUMENT_TEST_ENABLED*/ + +#ifndef offsetof +#define offsetof(Type, field) ((size_t)(&((Type *)0)->field)) +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/core/shared-lib/mem-alloc/ems/ems_gc_internal.h b/core/shared-lib/mem-alloc/ems/ems_gc_internal.h new file mode 100644 index 000000000..42eff8ac0 --- /dev/null +++ b/core/shared-lib/mem-alloc/ems/ems_gc_internal.h @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _EMS_GC_INTERNAL_H +#define _EMS_GC_INTERNAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bh_thread.h" +#include "bh_memory.h" +#include "bh_assert.h" +#include "ems_gc.h" + +/* basic block managed by EMS gc is the so-called HMU (heap memory unit)*/ +typedef enum _hmu_type_enum +{ + HMU_TYPE_MIN = 0, + HMU_TYPE_MAX = 3, + HMU_JO = 3, + HMU_VO = 2, + HMU_FC = 1, + HMU_FM = 0 +}hmu_type_t; + +typedef struct _hmu_struct +{ + gc_uint32 header; +}hmu_t; + +#if defined(GC_VERIFY) + +#define GC_OBJECT_PREFIX_PADDING_CNT 3 +#define GC_OBJECT_SUFFIX_PADDING_CNT 4 +#define GC_OBJECT_PADDING_VALUE (0x12345678) + +typedef struct _gc_object_prefix +{ + const char *file_name; + gc_int32 line_no; + gc_int32 size; + gc_uint32 padding[GC_OBJECT_PREFIX_PADDING_CNT]; +}gc_object_prefix_t; + +#define OBJ_PREFIX_SIZE (sizeof(gc_object_prefix_t)) + +typedef struct _gc_object_suffix +{ + gc_uint32 padding[GC_OBJECT_SUFFIX_PADDING_CNT]; +}gc_object_suffix_t; + +#define OBJ_SUFFIX_SIZE (sizeof(gc_object_suffix_t)) + +extern void hmu_init_prefix_and_suffix(hmu_t *hmu, gc_size_t tot_size, const char *file_name, int line_no); +extern void hmu_verify(hmu_t *hmu); + +#define SKIP_OBJ_PREFIX(p) ((void*)((gc_uint8*)(p) + OBJ_PREFIX_SIZE)) +#define SKIP_OBJ_SUFFIX(p) ((void*)((gc_uint8*)(p) + OBJ_SUFFIX_SIZE)) + +#define OBJ_EXTRA_SIZE (HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE) + +#else + +#define OBJ_PREFIX_SIZE 0 +#define OBJ_SUFFIX_SIZE 0 + +#define SKIP_OBJ_PREFIX(p) ((void*)((gc_uint8*)(p) + OBJ_PREFIX_SIZE)) +#define SKIP_OBJ_SUFFIX(p) ((void*)((gc_uint8*)(p) + OBJ_SUFFIX_SIZE)) + +#define OBJ_EXTRA_SIZE (HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE) + +#endif /* GC_DEBUG*/ + +#define hmu_obj_size(s) ((s)-OBJ_EXTRA_SIZE) + +#define GC_ALIGN_8(s) (((int)(s) + 7) & ~7) + +#define GC_SMALLEST_SIZE GC_ALIGN_8(HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE + 8) +#define GC_GET_REAL_SIZE(x) GC_ALIGN_8(HMU_SIZE + OBJ_PREFIX_SIZE + OBJ_SUFFIX_SIZE + (((x) > 8) ? (x): 8)) + +/*////// functions for bit operation*/ + +#define SETBIT(v, offset) (v) |= (1 << (offset)) +#define GETBIT(v, offset) ((v) & (1 << (offset)) ? 1 : 0) +#define CLRBIT(v, offset) (v) &= ~(1 << (offset)) + +#define SETBITS(v, offset, size, value) do { \ + (v) &= ~(((1 << size) - 1) << offset); \ + (v) |= value << offset; \ + } while(0) +#define CLRBITS(v, offset, size) (v) &= ~(((1 << size) - 1) << offset) +#define GETBITS(v, offset, size) (((v) & (((1 << size) - 1) << offset)) >> offset) + +/*////// gc object layout definition*/ + +#define HMU_SIZE (sizeof(hmu_t)) + +#define hmu_to_obj(hmu) (gc_object_t)(SKIP_OBJ_PREFIX((hmu_t*) (hmu) + 1)) +#define obj_to_hmu(obj) ((hmu_t *)((gc_uint8*)(obj) - OBJ_PREFIX_SIZE) - 1) + +#define HMU_UT_SIZE 2 +#define HMU_UT_OFFSET 30 + +#define hmu_get_ut(hmu) GETBITS ((hmu)->header, HMU_UT_OFFSET, HMU_UT_SIZE) +#define hmu_set_ut(hmu, type) SETBITS ((hmu)->header, HMU_UT_OFFSET, HMU_UT_SIZE, type) +#define hmu_is_ut_valid(tp) (tp >= HMU_TYPE_MIN && tp <= HMU_TYPE_MAX) + +/* P in use bit means the previous chunk is in use */ +#define HMU_P_OFFSET 29 + +#define hmu_mark_pinuse(hmu) SETBIT ((hmu)->header, HMU_P_OFFSET) +#define hmu_unmark_pinuse(hmu) CLRBIT ((hmu)->header, HMU_P_OFFSET) +#define hmu_get_pinuse(hmu) GETBIT ((hmu)->header, HMU_P_OFFSET) + +#define HMU_JO_VT_SIZE 27 +#define HMU_JO_VT_OFFSET 0 +#define HMU_JO_MB_OFFSET 28 + +#define hmu_mark_jo(hmu) SETBIT ((hmu)->header, HMU_JO_MB_OFFSET) +#define hmu_unmark_jo(hmu) CLRBIT ((hmu)->header, HMU_JO_MB_OFFSET) +#define hmu_is_jo_marked(hmu) GETBIT ((hmu)->header, HMU_JO_MB_OFFSET) + +#define HMU_SIZE_SIZE 27 +#define HMU_SIZE_OFFSET 0 + +#define HMU_VO_FB_OFFSET 28 + +#define hmu_is_vo_freed(hmu) GETBIT ((hmu)->header, HMU_VO_FB_OFFSET) +#define hmu_unfree_vo(hmu) CLRBIT ((hmu)->header, HMU_VO_FB_OFFSET) + +#define hmu_get_size(hmu) GETBITS ((hmu)->header, HMU_SIZE_OFFSET, HMU_SIZE_SIZE) +#define hmu_set_size(hmu, size) SETBITS ((hmu)->header, HMU_SIZE_OFFSET, HMU_SIZE_SIZE, size) + +/*////// HMU free chunk management*/ + +#define HMU_NORMAL_NODE_CNT 32 +#define HMU_FC_NORMAL_MAX_SIZE ((HMU_NORMAL_NODE_CNT - 1) << 3) +#define HMU_IS_FC_NORMAL(size) ((size) < HMU_FC_NORMAL_MAX_SIZE) +#if HMU_FC_NORMAL_MAX_SIZE >= GC_MAX_HEAP_SIZE +# error "Too small GC_MAX_HEAP_SIZE" +#endif + +typedef struct _hmu_normal_node +{ + hmu_t hmu_header; + struct _hmu_normal_node *next; +}hmu_normal_node_t; + +typedef struct _hmu_tree_node +{ + hmu_t hmu_header; + gc_size_t size; + struct _hmu_tree_node *left; + struct _hmu_tree_node *right; + struct _hmu_tree_node *parent; +}hmu_tree_node_t; + +typedef struct _gc_heap_struct +{ + gc_handle_t heap_id; /* for double checking*/ + + gc_uint8 *base_addr; + gc_size_t current_size; + gc_size_t max_size; + + korp_mutex lock; + + hmu_normal_node_t kfc_normal_list[HMU_NORMAL_NODE_CNT]; + + /* order in kfc_tree is: size[left] <= size[cur] < size[right]*/ + hmu_tree_node_t kfc_tree_root; + + /* for rootset enumeration of private heap*/ + void *root_set; + + /* whether the fast mode of marking process that requires + additional memory fails. When the fast mode fails, the + marking process can still be done in the slow mode, which + doesn't need additional memory (by walking through all + blocks and marking sucessors of marked nodes until no new + node is marked). TODO: slow mode is not implemented. */ + unsigned is_fast_marking_failed : 1; + +#if GC_STAT_DATA != 0 + gc_size_t highmark_size; + gc_size_t init_size; + gc_size_t total_gc_count; + gc_size_t total_free_size; + gc_size_t gc_threshold; + gc_size_t gc_threshold_factor; + gc_int64 total_gc_time; +#endif +}gc_heap_t; + +/*////// MISC internal used APIs*/ + +extern void gci_add_fc(gc_heap_t *heap, hmu_t *hmu, gc_size_t size); +extern int gci_is_heap_valid(gc_heap_t *heap); + +#ifdef GC_DEBUG +extern void gci_verify_heap(gc_heap_t *heap); +extern void gci_dump(char* buf, gc_heap_t *heap); +#endif + +#if GC_STAT_DATA != 0 + +/* the default GC threshold size is free_size * GC_DEFAULT_THRESHOLD_FACTOR / 1000 */ +#define GC_DEFAULT_THRESHOLD_FACTOR 400 + +static inline void gc_update_threshold(gc_heap_t *heap) +{ + heap->gc_threshold = heap->total_free_size * heap->gc_threshold_factor / 1000; +} +#endif + +/*////// MISC data structures*/ + +#define MARK_NODE_OBJ_CNT 256 + +/* mark node is used for gc marker*/ +typedef struct _mark_node_struct +{ + /* number of to-expand objects can be saved in this node*/ + gc_size_t cnt; + + /* the first unused index*/ + int idx; + + /* next node on the node list*/ + struct _mark_node_struct *next; + + /* the actual to-expand objects list*/ + gc_object_t set[MARK_NODE_OBJ_CNT]; +}mark_node_t; + +/*////// Imported APIs wrappers under TEST mode*/ + +#ifdef GC_TEST +extern int (*gct_vm_get_java_object_ref_list)( + gc_object_t obj, + int *is_compact_mode, /* can be set to GC_TRUE, or GC_FALSE */ + gc_size_t *ref_num, + gc_uint16 **ref_list, + gc_uint32 *ref_start_offset); +extern int (*gct_vm_mutex_init)(korp_mutex *mutex); +extern int (*gct_vm_mutex_destroy)(korp_mutex *mutex); +extern int (*gct_vm_mutex_lock)(korp_mutex *mutex); +extern int (*gct_vm_mutex_unlock)(korp_mutex *mutex); +extern gc_handle_t (*gct_vm_get_gc_handle_for_current_instance)(void); +extern int (*gct_vm_begin_rootset_enumeration)(void* heap); +extern int (*gct_vm_gc_finished)(void); +#else +#define gct_vm_get_java_object_ref_list bh_get_java_object_ref_list +#define gct_vm_mutex_init vm_mutex_init +#define gct_vm_mutex_destroy vm_mutex_destroy +#define gct_vm_mutex_lock vm_mutex_lock +#define gct_vm_mutex_unlock vm_mutex_unlock +#define gct_vm_get_gc_handle_for_current_instance app_manager_get_cur_applet_heap +#define gct_vm_begin_rootset_enumeration vm_begin_rootset_enumeration +#define gct_vm_gc_finished jeff_runtime_gc_finished +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/core/shared-lib/mem-alloc/ems/ems_hmu.c b/core/shared-lib/mem-alloc/ems/ems_hmu.c new file mode 100644 index 000000000..6b612d8fa --- /dev/null +++ b/core/shared-lib/mem-alloc/ems/ems_hmu.c @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ems_gc_internal.h" + +#if defined(GC_VERIFY) +/* Set default value to prefix and suffix*/ + +/* @hmu should not be NULL and it should have been correctly initilized (except for prefix and suffix part)*/ +/* @tot_size is offered here because hmu_get_size can not be used till now. @tot_size should not be smaller than OBJ_EXTRA_SIZE.*/ +/* For VO, @tot_size should be equal to object total size.*/ +void hmu_init_prefix_and_suffix(hmu_t *hmu, gc_size_t tot_size, const char *file_name, int line_no) +{ + gc_object_prefix_t *prefix = NULL; + gc_object_suffix_t *suffix = NULL; + gc_uint32 i = 0; + + bh_assert(hmu); + bh_assert(hmu_get_ut(hmu) == HMU_JO || hmu_get_ut(hmu) == HMU_VO); + bh_assert(tot_size >= OBJ_EXTRA_SIZE); + bh_assert(!(tot_size & 7)); + bh_assert(hmu_get_ut(hmu) != HMU_VO || hmu_get_size(hmu) >= tot_size); + + prefix = (gc_object_prefix_t *)(hmu + 1); + suffix = (gc_object_suffix_t *)((gc_uint8*)hmu + tot_size - OBJ_SUFFIX_SIZE); + prefix->file_name = file_name; + prefix->line_no = line_no; + prefix->size = tot_size; + for(i = 0;i < GC_OBJECT_PREFIX_PADDING_CNT;i++) + { + prefix->padding[i] = GC_OBJECT_PADDING_VALUE; + } + for(i = 0;i < GC_OBJECT_SUFFIX_PADDING_CNT;i++) + { + suffix->padding[i] = GC_OBJECT_PADDING_VALUE; + } +} + +void hmu_verify(hmu_t *hmu) +{ + gc_object_prefix_t *prefix = NULL; + gc_object_suffix_t *suffix = NULL; + gc_uint32 i = 0; + hmu_type_t ut; + gc_size_t size = 0; + int is_padding_ok = 1; + + bh_assert(hmu); + ut = hmu_get_ut(hmu); + bh_assert(hmu_is_ut_valid(ut)); + + prefix = (gc_object_prefix_t *)(hmu + 1); + size = prefix->size; + suffix = (gc_object_suffix_t *)((gc_uint8*)hmu + size - OBJ_SUFFIX_SIZE); + + if(ut == HMU_VO || ut == HMU_JO) + { + /* check padding*/ + for(i = 0;i < GC_OBJECT_PREFIX_PADDING_CNT;i++) + { + if(prefix->padding[i] != GC_OBJECT_PADDING_VALUE) + { + is_padding_ok = 0; + break; + } + } + for(i = 0;i < GC_OBJECT_SUFFIX_PADDING_CNT;i++) + { + if(suffix->padding[i] != GC_OBJECT_PADDING_VALUE) + { + is_padding_ok = 0; + break; + } + } + + if(!is_padding_ok) + { + printf("Invalid padding for object created at %s:%d", + (prefix->file_name ? prefix->file_name : ""), prefix->line_no); + } + bh_assert(is_padding_ok); + } +} +#endif + diff --git a/core/shared-lib/mem-alloc/ems/ems_kfc.c b/core/shared-lib/mem-alloc/ems/ems_kfc.c new file mode 100644 index 000000000..10fe090ad --- /dev/null +++ b/core/shared-lib/mem-alloc/ems/ems_kfc.c @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ems_gc_internal.h" + +#if !defined(NVALGRIND) +#include +#endif + +#define HEAP_INC_FACTOR 1 + +/* Check if current platform is compatible with current GC design*/ + +/* Return GC_ERROR if not;*/ +/* Return GC_SUCCESS otherwise.*/ +int gci_check_platform() +{ +#define CHECK(x, y) do { \ + if((x) != (y)) { \ + printf("Platform checking failed on LINE %d at FILE %s.", \ + __LINE__, __FILE__); \ + return GC_ERROR; \ + } \ +} while(0) + + CHECK(8, sizeof(gc_int64)); + CHECK(4, sizeof(gc_uint32)); + CHECK(4, sizeof(gc_int32)); + CHECK(2, sizeof(gc_uint16)); + CHECK(2, sizeof(gc_int16)); + CHECK(1, sizeof(gc_int8)); + CHECK(1, sizeof(gc_uint8)); + CHECK(4, sizeof(gc_size_t)); + CHECK(4, sizeof(void *)); + + return GC_SUCCESS; +} + +gc_handle_t gc_init_with_pool(char *buf, gc_size_t buf_size) +{ + char *buf_end = buf + buf_size; + char *buf_aligned = (char*) (((uintptr_t) buf + 7) & ~7); + char *base_addr = buf_aligned + sizeof(gc_heap_t); + gc_heap_t *heap = (gc_heap_t*) buf_aligned; + gc_size_t heap_max_size; + hmu_normal_node_t *p = NULL; + hmu_tree_node_t *root = NULL, *q = NULL; + int i = 0, ret; + + /* check system compatibility*/ + if (gci_check_platform() == GC_ERROR) { + printf("Check platform compatibility failed"); + return NULL; + } + + if (buf_size < 1024) { + printf("[GC_ERROR]heap_init_size(%d) < 1024", buf_size); + return NULL; + } + + base_addr = (char*) (((uintptr_t) base_addr + 7) & ~7) + GC_HEAD_PADDING; + heap_max_size = (buf_end - base_addr) & ~7; + + memset(heap, 0, sizeof *heap); + memset(base_addr, 0, heap_max_size); + + ret = gct_vm_mutex_init(&heap->lock); + if (ret != BHT_OK) { + printf("[GC_ERROR]failed to init lock "); + return NULL; + } + +#ifdef BH_FOOTPRINT + printf("\nINIT HEAP 0x%08x %d\n", base_addr, heap_max_size); +#endif + + /* init all data structures*/ + heap->max_size = heap_max_size; + heap->current_size = heap_max_size; + heap->base_addr = (gc_uint8*) base_addr; + heap->heap_id = (gc_handle_t) heap; + +#if GC_STAT_DATA != 0 + heap->total_free_size = heap->current_size; + heap->highmark_size = 0; + heap->total_gc_count = 0; + heap->total_gc_time = 0; + heap->gc_threshold_factor = GC_DEFAULT_THRESHOLD_FACTOR; + gc_update_threshold(heap); +#endif + + for (i = 0; i < HMU_NORMAL_NODE_CNT; i++) { + /* make normal node look like a FC*/ + p = &heap->kfc_normal_list[i]; + memset(p, 0, sizeof *p); + hmu_set_ut(&p->hmu_header, HMU_FC); + hmu_set_size(&p->hmu_header, sizeof *p); + } + + root = &heap->kfc_tree_root; + memset(root, 0, sizeof *root); + root->size = sizeof *root; + hmu_set_ut(&root->hmu_header, HMU_FC); + hmu_set_size(&root->hmu_header, sizeof *root); + + q = (hmu_tree_node_t *) heap->base_addr; + memset(q, 0, sizeof *q); + hmu_set_ut(&q->hmu_header, HMU_FC); + hmu_set_size(&q->hmu_header, heap->current_size); + + hmu_mark_pinuse(&q->hmu_header); + root->right = q; + q->parent = root; + q->size = heap->current_size; + + bh_assert( + root->size <= HMU_FC_NORMAL_MAX_SIZE + && HMU_FC_NORMAL_MAX_SIZE < q->size); /*@NOTIFY*/ + +#if BH_ENABLE_MEMORY_PROFILING != 0 + printf("heap is successfully initialized with max_size=%u.", + heap_max_size); +#endif + return heap; +} + +int gc_destroy_with_pool(gc_handle_t handle) +{ + gc_heap_t *heap = (gc_heap_t *) handle; + gct_vm_mutex_destroy(&heap->lock); + memset(heap->base_addr, 0, heap->max_size); + memset(heap, 0, sizeof(gc_heap_t)); + return GC_SUCCESS; +} + +#if defined(GC_VERIFY) +/* Verify heap integrity*/ +/* @heap should not be NULL and it should be a valid heap*/ +void gci_verify_heap(gc_heap_t *heap) +{ + hmu_t *cur = NULL, *end = NULL; + + bh_assert(heap && gci_is_heap_valid(heap)); + cur = (hmu_t *)heap->base_addr; + end = (hmu_t *)(heap->base_addr + heap->current_size); + while(cur < end) + { + hmu_verify(cur); + cur = (hmu_t *)((gc_uint8*)cur + hmu_get_size(cur)); + } + bh_assert(cur == end); +} +#endif + +void* gc_heap_stats(void *heap_arg, int* stats, int size, gc_mm_t mmt) +{ + (void) mmt; + int i; + gc_heap_t *heap = (gc_heap_t *) heap_arg; + + for (i = 0; i < size; i++) { + switch (i) { + case GC_STAT_TOTAL: + stats[i] = heap->current_size; + break; + case GC_STAT_FREE: + stats[i] = heap->total_free_size; + break; + case GC_STAT_HIGHMARK: + stats[i] = heap->highmark_size; + break; + case GC_STAT_COUNT: + stats[i] = heap->total_gc_count; + break; + case GC_STAT_TIME: + stats[i] = (int) heap->total_gc_time; + break; + default: + break; + } + } + return heap; +} diff --git a/core/shared-lib/mem-alloc/mem_alloc.c b/core/shared-lib/mem-alloc/mem_alloc.c new file mode 100644 index 000000000..c19d669ed --- /dev/null +++ b/core/shared-lib/mem-alloc/mem_alloc.c @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mem_alloc.h" +#include "config.h" + +#if DEFAULT_MEM_ALLOCATOR == MEM_ALLOCATOR_EMS + +#include "ems/ems_gc.h" + +mem_allocator_t mem_allocator_create(void *mem, uint32_t size) +{ + return gc_init_with_pool((char *) mem, size); +} + +void mem_allocator_destroy(mem_allocator_t allocator) +{ + gc_destroy_with_pool((gc_handle_t) allocator); +} + +void * +mem_allocator_malloc(mem_allocator_t allocator, uint32_t size) +{ + return gc_alloc_vo_h((gc_handle_t) allocator, size); +} + +void mem_allocator_free(mem_allocator_t allocator, void *ptr) +{ + if (ptr) + gc_free_h((gc_handle_t) allocator, ptr); +} + +#else /* else of DEFAULT_MEM_ALLOCATOR */ + +#include "tlsf/tlsf.h" +#include "bh_thread.h" + +typedef struct mem_allocator_tlsf { + tlsf_t tlsf; + korp_mutex lock; +}mem_allocator_tlsf; + +mem_allocator_t +mem_allocator_create(void *mem, uint32_t size) +{ + mem_allocator_tlsf *allocator_tlsf; + tlsf_t tlsf; + char *mem_aligned = (char*)(((uintptr_t)mem + 3) & ~3); + + if (size < 1024) { + printf("Create mem allocator failed: pool size must be " + "at least 1024 bytes.\n"); + return NULL; + } + + size -= mem_aligned - (char*)mem; + mem = (void*)mem_aligned; + + tlsf = tlsf_create_with_pool(mem, size); + if (!tlsf) { + printf("Create mem allocator failed: tlsf_create_with_pool failed.\n"); + return NULL; + } + + allocator_tlsf = tlsf_malloc(tlsf, sizeof(mem_allocator_tlsf)); + if (!allocator_tlsf) { + printf("Create mem allocator failed: tlsf_malloc failed.\n"); + tlsf_destroy(tlsf); + return NULL; + } + + allocator_tlsf->tlsf = tlsf; + + if (vm_mutex_init(&allocator_tlsf->lock)) { + printf("Create mem allocator failed: tlsf_malloc failed.\n"); + tlsf_free(tlsf, allocator_tlsf); + tlsf_destroy(tlsf); + return NULL; + } + + return allocator_tlsf; +} + +void +mem_allocator_destroy(mem_allocator_t allocator) +{ + mem_allocator_tlsf *allocator_tlsf = (mem_allocator_tlsf *)allocator; + tlsf_t tlsf = allocator_tlsf->tlsf; + + vm_mutex_destroy(&allocator_tlsf->lock); + tlsf_free(tlsf, allocator_tlsf); + tlsf_destroy(tlsf); +} + +void * +mem_allocator_malloc(mem_allocator_t allocator, uint32_t size) +{ + void *ret; + mem_allocator_tlsf *allocator_tlsf = (mem_allocator_tlsf *)allocator; + + if (size == 0) + /* tlsf doesn't allow to allocate 0 byte */ + size = 1; + + vm_mutex_lock(&allocator_tlsf->lock); + ret = tlsf_malloc(allocator_tlsf->tlsf, size); + vm_mutex_unlock(&allocator_tlsf->lock); + return ret; +} + +void +mem_allocator_free(mem_allocator_t allocator, void *ptr) +{ + if (ptr) { + mem_allocator_tlsf *allocator_tlsf = (mem_allocator_tlsf *)allocator; + vm_mutex_lock(&allocator_tlsf->lock); + tlsf_free(allocator_tlsf->tlsf, ptr); + vm_mutex_unlock(&allocator_tlsf->lock); + } +} + +#endif /* end of DEFAULT_MEM_ALLOCATOR */ + diff --git a/core/shared-lib/mem-alloc/mem_alloc.cmake b/core/shared-lib/mem-alloc/mem_alloc.cmake new file mode 100644 index 000000000..28372ade5 --- /dev/null +++ b/core/shared-lib/mem-alloc/mem_alloc.cmake @@ -0,0 +1,27 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +set (MEM_ALLOC_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${MEM_ALLOC_DIR}) + +file (GLOB_RECURSE source_all + ${MEM_ALLOC_DIR}/ems/*.c + ${MEM_ALLOC_DIR}/tlsf/*.c + ${MEM_ALLOC_DIR}/mem_alloc.c + ${MEM_ALLOC_DIR}/bh_memory.c) + +set (MEM_ALLOC_SHARED_SOURCE ${source_all}) + diff --git a/core/shared-lib/platform/CMakeLists.txt b/core/shared-lib/platform/CMakeLists.txt new file mode 100755 index 000000000..036ad4e5b --- /dev/null +++ b/core/shared-lib/platform/CMakeLists.txt @@ -0,0 +1,31 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include_directories (./include ../include ./${PLATFORM}) + +add_definitions (-D__POSIX__ -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE) + +file (GLOB_RECURSE source_all ${PLATFORM}/*.c) +add_library (supportlib ${source_all}) + +target_link_libraries (supportlib -pthread -lrt) + +if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + add_library (supportlib_ut ${source_all}) + + set_target_properties (supportlib_ut PROPERTIES COMPILE_DEFINITIONS BH_TEST=1) + + target_link_libraries (supportlib_ut -pthread -lrt) +endif () + diff --git a/core/shared-lib/platform/Makefile b/core/shared-lib/platform/Makefile new file mode 100644 index 000000000..6e8435d47 --- /dev/null +++ b/core/shared-lib/platform/Makefile @@ -0,0 +1,15 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +obj-y += zephyr/ diff --git a/core/shared-lib/platform/android/bh_assert.c b/core/shared-lib/platform/android/bh_assert.c new file mode 100755 index 000000000..b52a9aa5b --- /dev/null +++ b/core/shared-lib/platform/android/bh_assert.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include "bh_assert.h" +#include +#include +#include + +#ifdef BH_TEST +#include +#endif + +#ifdef BH_TEST +/* for exception throwing */ +jmp_buf bh_test_jb; +#endif + +void bh_assert_internal(int v, const char *file_name, int line_number, + const char *expr_string) +{ + if (v) + return; + + if (!file_name) + file_name = "NULL FILENAME"; + if (!expr_string) + expr_string = "NULL EXPR_STRING"; + + printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, + file_name, line_number); + +#ifdef BH_TEST + longjmp(bh_test_jb, 1); +#endif + + abort(); +} + +void bh_debug_internal(const char *file_name, int line_number, const char *fmt, + ...) +{ +#ifndef JEFF_TEST_VERIFIER + va_list args; + + va_start(args, fmt); + bh_assert(file_name); + + printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number); + vprintf(fmt, args); + + va_end(args); + printf("\n"); +#endif +} + diff --git a/core/shared-lib/platform/android/bh_definition.c b/core/shared-lib/platform/android/bh_definition.c new file mode 100755 index 000000000..47ee11ed2 --- /dev/null +++ b/core/shared-lib/platform/android/bh_definition.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_definition.h" +#include "bh_platform.h" + +int bh_return(int ret) +{ + return ret; +} + +#define RSIZE_MAX 0x7FFFFFFF +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n) +{ + char *dest = (char*) s1; + char *src = (char*) s2; + if (n == 0) { + return 0; + } + + if (s1 == NULL || s1max > RSIZE_MAX) { + return -1; + } + if (s2 == NULL || n > s1max) { + memset(dest, 0, s1max); + return -1; + } + memcpy(dest, src, n); + return 0; +} + +int b_strcat_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcat(s1, s2); + + return 0; +} + +int b_strcpy_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcpy(s1, s2); + + return 0; +} + +int fopen_s(FILE ** pFile, const char *filename, const char *mode) +{ + if (NULL == pFile || NULL == filename || NULL == mode) { + return -1; + } + + *pFile = fopen(filename, mode); + + if (NULL == *pFile) + return -1; + + return 0; +} diff --git a/core/shared-lib/platform/android/bh_platform.h b/core/shared-lib/platform/android/bh_platform.h new file mode 100755 index 000000000..eff38612d --- /dev/null +++ b/core/shared-lib/platform/android/bh_platform.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_PLATFORM_H +#define _BH_PLATFORM_H + +#include "bh_config.h" +#include "bh_types.h" + +#include +#include +typedef uint64_t uint64; +typedef int64_t int64; + +extern void DEBUGME(void); + +#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); DEBUGME(void); while(1);}while(0) + +#define BH_PLATFORM "Linux" + +/* NEED qsort */ + +#include +#include +#include +#include +#include +#include + +#define _STACK_SIZE_ADJUSTMENT (32 * 1024) + +/* Stack size of applet manager thread. */ +#define BH_APPLET_MANAGER_THREAD_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of HMC thread. */ +#define BH_HMC_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of watchdog thread. */ +#define BH_WATCHDOG_THREAD_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of applet threads's native part. */ +#define BH_APPLET_PRESERVED_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of remote invoke listen thread. */ +#define BH_REMOTE_INVOKE_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of remote post listen thread. */ +#define BH_REMOTE_POST_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Maximal recursion depth of interpreter. */ +#define BH_MAX_INTERP_RECURSION_DEPTH 8 + +#define BH_ROUTINE_MODIFIER +#define BHT_TIMEDOUT ETIMEDOUT + +#define INVALID_THREAD_ID 0xFFffFFff +#define INVALID_SEM_ID SEM_FAILED + +typedef pthread_t korp_tid; +typedef pthread_mutex_t korp_mutex; +typedef sem_t korp_sem; +typedef pthread_cond_t korp_cond; +typedef void* (*thread_start_routine_t)(void*); + +#include +#include + +/* The following operations declared in string.h may be defined as + macros on Linux, so don't declare them as functions here. */ +/* memset */ +/* memcpy */ +/* memmove */ + +/* #include */ + +/* Unit test framework is based on C++, where the declaration of + snprintf is different. */ +#ifndef __cplusplus +int snprintf(char *buffer, size_t count, const char *format, ...); +#endif + +/* #include */ + +double fmod(double x, double y); +float fmodf(float x, float y); + +/* Definitions for applet debugging */ +#define APPLET_DEBUG_LISTEN_PORT 8000 +#define BH_SOCKET_INVALID_SOCK -1 +#define BH_WAIT_FOREVER 0xFFFFFFFF +typedef int bh_socket_t; + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +extern int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, + unsigned int n); +extern int strcat_s(char * s1, size_t s1max, const char * s2); +extern int strcpy_s(char * s1, size_t s1max, const char * s2); +#include +extern int fopen_s(FILE ** pFile, const char *filename, const char *mode); + +#endif diff --git a/core/shared-lib/platform/android/bh_platform_log.c b/core/shared-lib/platform/android/bh_platform_log.c new file mode 100755 index 000000000..4ff03192a --- /dev/null +++ b/core/shared-lib/platform/android/bh_platform_log.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include + +void bh_log_emit(const char *fmt, va_list ap) +{ + vprintf(fmt, ap); + fflush(stdout); +} + +int bh_fprintf(FILE *stream, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vfprintf(stream ? stream : stdout, fmt, ap); + va_end(ap); + + return ret; +} + +int bh_fflush(void *stream) +{ + return fflush(stream ? stream : stdout); +} diff --git a/core/shared-lib/platform/android/bh_thread.c b/core/shared-lib/platform/android/bh_thread.c new file mode 100755 index 000000000..6e4f4a573 --- /dev/null +++ b/core/shared-lib/platform/android/bh_thread.c @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_thread.h" +#include "bh_assert.h" +#include "bh_log.h" +#include "bh_memory.h" +#include +#include +#include + +static korp_mutex thread_list_lock; +static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM]; + +int _vm_thread_sys_init() +{ + unsigned i; + + for (i = 0; i < BH_MAX_TLS_NUM; i++) + pthread_key_create(&thread_local_storage_key[i], NULL); + + return vm_mutex_init(&thread_list_lock); +} + +korp_tid _vm_self_thread() +{ + return (korp_tid) pthread_self(); +} + +void *_vm_tls_get(unsigned idx) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + return pthread_getspecific(thread_local_storage_key[idx]); +} + +int _vm_tls_put(unsigned idx, void * tls) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + pthread_setspecific(thread_local_storage_key[idx], tls); + return BHT_OK; +} + +int _vm_mutex_init(korp_mutex *mutex) +{ + return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_recursive_mutex_init(korp_mutex *mutex) +{ + int ret; + + pthread_mutexattr_t mattr; + + bh_assert(mutex); + ret = pthread_mutexattr_init(&mattr); + if (ret) + return BHT_ERROR; + + pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE_NP); + ret = pthread_mutex_init(mutex, &mattr); + pthread_mutexattr_destroy(&mattr); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_mutex_destroy(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_destroy(mutex); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EDEADLK) from + locking the mutex indicates some logic error present in + the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_lock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_lock(mutex); + if (0 != ret) { + LOG_FATAL("vm mutex lock failed (ret=%d)!\n", ret); + exit(-1); + } +} + +int vm_mutex_trylock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_trylock(mutex); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EPERM) from + unlocking the mutex indicates some logic error present + in the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_unlock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_unlock(mutex); + if (0 != ret) { + LOG_FATAL("vm mutex unlock failed (ret=%d)!\n", ret); + exit(-1); + } +} + +int _vm_cond_init(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_init(cond, NULL) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_destroy(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_destroy(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + diff --git a/core/shared-lib/platform/android/bh_time.c b/core/shared-lib/platform/android/bh_time.c new file mode 100755 index 000000000..6dad59620 --- /dev/null +++ b/core/shared-lib/platform/android/bh_time.c @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_time.h" + +#include +#include +//#include +#include + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +uint64 _bh_time_get_tick_millisecond() +{ + return sysconf(_SC_CLK_TCK); +} + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +uint64 _bh_time_get_boot_millisecond() +{ + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { + return 0; + } + + return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000); +} + +/* + * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX time. + * @return milliseconds since from 1970.1.1. + */ +uint64 _bh_time_get_millisecond_from_1970() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + uint64 millisecondsSinceEpoch = (uint64_t)(tv.tv_sec) * 1000 + + (uint64_t)(tv.tv_usec) / 1000; + return millisecondsSinceEpoch; +} + +size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time) +{ + time_t time_sec = time / 1000; + struct tm *ltp; + + ltp = localtime(&time_sec); + if (ltp == NULL) { + return 0; + } + return strftime(s, max, format, ltp); +} + diff --git a/core/shared-lib/platform/include/bh_assert.h b/core/shared-lib/platform/include/bh_assert.h new file mode 100644 index 000000000..7e9158c5c --- /dev/null +++ b/core/shared-lib/platform/include/bh_assert.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_ASSERT_H +#define _BH_ASSERT_H + +#include "bh_config.h" +#include "bh_platform.h" + +#ifdef BH_TEST +# ifndef BH_DEBUG +# error "BH_TEST should be defined under BH_DEBUG" +# endif +#endif + +#ifdef BH_TEST +# if defined(WIN32) || defined(__linux__) +# else +# error "Test case can not run on the current platform" +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BH_DEBUG + +extern void bh_assert_internal(int v, const char *file_name, int line_number, const char *expr_string); +#define bh_assert(expr) bh_assert_internal((int)(expr), __FILE__, __LINE__, # expr) +extern void bh_debug_internal(const char *file_name, int line_number, const char *fmt, ...); + +#if defined(WIN32) || defined(EMU) +# define bh_debug(fmt, ...) bh_debug_internal(__FILE__, __LINE__, fmt, __VA_ARGS__) +#elif defined(__linux__) +/*# define bh_debug(...) bh_debug_internal(__FILE__, __LINE__, ## __VA_ARGS__)*/ +# define bh_debug bh_debug_internal(__FILE__, __LINE__, "");printf +#elif defined(PLATFORM_SEC) +# define bh_debug(fmt, ...) bh_debug_internal(__FILE__, __LINE__, fmt, __VA_ARGS__) +#else +# error "Unsupported platform" +#endif + +#else + +#define bh_debug if(0)printf + +#endif + +#define bh_assert_abort(x) do { \ + if (!x) \ + abort(); \ + } while (0) + +#ifdef BH_TEST +# define BH_STATIC +#else +# define BH_STATIC static +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +/* Local Variables: */ +/* mode:c */ +/* c-basic-offset: 4 */ +/* indent-tabs-mode: nil */ +/* End: */ diff --git a/core/shared-lib/platform/include/bh_config.h b/core/shared-lib/platform/include/bh_config.h new file mode 100644 index 000000000..37904311f --- /dev/null +++ b/core/shared-lib/platform/include/bh_config.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file bh_config.h + * @date Tue Sep 13 14:53:17 2011 + * + * @brief Configurations for different platforms and targets. Make + * sure all source files in Beihai project include this header file + * directly or indirectly. + */ + +#ifndef BH_CONFIG + +#include "config.h" + +#endif /* end of BH_CONFIG */ + diff --git a/core/shared-lib/platform/include/bh_definition.h b/core/shared-lib/platform/include/bh_definition.h new file mode 100755 index 000000000..7780f4132 --- /dev/null +++ b/core/shared-lib/platform/include/bh_definition.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_DEFINITION_H +#define _BH_DEFINITION_H + +#include "bh_config.h" + +typedef enum { + BH_FAILED = -100, + BH_UNKOWN = -99, + BH_MAGIC_UNMATCH = -12, + BH_UNIMPLEMENTED = -11, + BH_INTR = -10, + BH_CLOSED = -9, + BH_BUFFER_OVERFLOW = -8, /* TODO: no used error, should remove*/ + BH_NOT_SUPPORTED = -7, + BH_WEAR_OUT_VIOLATION = -6, + BH_NOT_FOUND = -5, + BH_INVALID_PARAMS = -4, + BH_ACCESS_DENIED = -3, + BH_OUT_OF_MEMORY = -2, + BH_INVALID = -1, + BH_SUCCESS = 0, + BH_TIMEOUT = 2 +} bh_status; + +#endif diff --git a/core/shared-lib/platform/include/bh_platform_log.h b/core/shared-lib/platform/include/bh_platform_log.h new file mode 100644 index 000000000..9f2bac2c4 --- /dev/null +++ b/core/shared-lib/platform/include/bh_platform_log.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BH_PLATFORM_LOG +#define BH_PLATFORM_LOG + +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void bh_log_emit(const char *fmt, va_list ap); + +int bh_fprintf(void *stream, const char *fmt, ...); + +int bh_fflush(void *stream); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/shared-lib/platform/include/bh_thread.h b/core/shared-lib/platform/include/bh_thread.h new file mode 100644 index 000000000..68dc59359 --- /dev/null +++ b/core/shared-lib/platform/include/bh_thread.h @@ -0,0 +1,409 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_THREAD_H +#define _BH_THREAD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bh_config.h" +#include "bh_platform.h" + +#define BH_MAX_THREAD 32 +#define BH_MAX_TLS_NUM 2 + +#define BHT_ERROR (-1) +#define BHT_TIMED_OUT (1) +#define BHT_OK (0) + +#define BHT_NO_WAIT 0x00000000 +#define BHT_WAIT_FOREVER 0xFFFFFFFF + +/** + * vm_thread_sys_init + * initiation function for beihai thread system. Invoked at the beginning of beihai intiation. + * + * @return BH_SUCCESS if succuess. + */ +int _vm_thread_sys_init(void); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_thread_sys_init_instr(const char*func_name); +#define vm_thread_sys_init(void) vm_thread_sys_init_instr(__FUNCTION__) +#else +#define vm_thread_sys_init _vm_thread_sys_init +#endif + +void vm_thread_sys_destroy(void); + +/** + * This function creates a thread + * + * @param p_tid [OUTPUT] the pointer of tid + * @param start main routine of the thread + * @param arg argument passed to main routine + * @param stack_size bytes of stack size + * + * @return BH_SUCCESS if success. + */ +int _vm_thread_create(korp_tid *p_tid, thread_start_routine_t start, void *arg, + unsigned int stack_size); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_thread_create_instr(korp_tid *p_tid, thread_start_routine_t start, void *arg, unsigned int stack_size, const char*func_name); +#define vm_thread_create(p_tid, start, arg, stack_size) vm_thread_create_instr(p_tid, start, arg, stack_size, __FUNCTION__) +#else +#define vm_thread_create _vm_thread_create +#endif + +/** + * This function creates a thread + * + * @param p_tid [OUTPUT] the pointer of tid + * @param start main routine of the thread + * @param arg argument passed to main routine + * @param stack_size bytes of stack size + * @param prio the priority + * + * @return BH_SUCCESS if success. + */ +int _vm_thread_create_with_prio(korp_tid *p_tid, thread_start_routine_t start, + void *arg, unsigned int stack_size, int prio); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_thread_create_with_prio_instr(korp_tid *p_tid, thread_start_routine_t start, void *arg, unsigned int stack_size, int prio, const char*func_name); +#define vm_thread_create_with_prio(p_tid, start, arg, stack_size) vm_thread_create_instr(p_tid, start, arg, stack_size, prio, __FUNCTION__) +#else +#define vm_thread_create_with_prio _vm_thread_create_with_prio +#endif + +/** + * This function never returns. + * + * @param code not used + */ +void vm_thread_exit(void *code); + +/** + * This function gets current thread id + * + * @return current thread id + */ +korp_tid _vm_self_thread(void); +#ifdef _INSTRUMENT_TEST_ENABLED +korp_tid vm_self_thread_instr(const char*func_name); +#define vm_self_thread(void) vm_self_thread_instr(__FUNCTION__) +#else +#define vm_self_thread _vm_self_thread +#endif + +/** + * This function saves a pointer in thread local storage. One thread can only save one pointer. + * + * @param idx tls array index + * @param ptr pointer need save as TLS + * + * @return BH_SUCCESS if success + */ +int _vm_tls_put(unsigned idx, void *ptr); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_tls_put_instr(unsigned idx, void *ptr, const char*func_name); +#define vm_tls_put(idx, ptr) vm_tls_put_instr(idx, ptr, __FUNCTION__) +#else +#define vm_tls_put _vm_tls_put +#endif + +/** + * This function gets a pointer saved in TLS. + * + * @param idx tls array index + * + * @return the pointer saved in TLS. + */ +void *_vm_tls_get(unsigned idx); +#ifdef _INSTRUMENT_TEST_ENABLED +void *vm_tls_get_instr(unsigned idx, const char*func_name); +#define vm_tls_get(idx) vm_tls_get_instr(idx, __FUNCTION__) +#else +#define vm_tls_get _vm_tls_get +#endif + +#define vm_thread_testcancel(void) + +/** + * This function creates a non-recursive mutex + * + * @param mutex [OUTPUT] pointer to mutex initialized. + * + * @return BH_SUCCESS if success + */ +int _vm_mutex_init(korp_mutex *mutex); +#ifdef INSTRUMENT_TEST_ENABLED +int vm_mutex_init_instr(korp_mutex *mutex, const char*func_name); +#define vm_mutex_init(mutex) vm_mutex_init_instr(mutex, __FUNCTION__) +#else +#define vm_mutex_init _vm_mutex_init +#endif + +/** + * This function creates a recursive mutex + * + * @param mutex [OUTPUT] pointer to mutex initialized. + * + * @return BH_SUCCESS if success + */ +int _vm_recursive_mutex_init(korp_mutex *mutex); +#ifdef INSTRUMENT_TEST_ENABLED +int vm_recursive_mutex_init_instr(korp_mutex *mutex, const char*func_name); +#define vm_recursive_mutex_init(mutex) vm_recursive_mutex_init_instr(mutex, __FUNCTION__) +#else +#define vm_recursive_mutex_init _vm_recursive_mutex_init +#endif + +/** + * This function destorys a mutex + * + * @param mutex pointer to mutex need destory + * + * @return BH_SUCCESS if success + */ +int _vm_mutex_destroy(korp_mutex *mutex); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_mutex_destroy_instr(korp_mutex *mutex, const char*func_name); +#define vm_mutex_destroy(mutex) vm_mutex_destroy_instr(mutex, __FUNCTION__) +#else +#define vm_mutex_destroy _vm_mutex_destroy +#endif + +/** + * This function locks the mutex + * + * @param mutex pointer to mutex need lock + * + * @return Void + */ +void vm_mutex_lock(korp_mutex *mutex); + +/** + * This function locks the mutex without waiting + * + * @param mutex pointer to mutex need lock + * + * @return BH_SUCCESS if success + */ +int vm_mutex_trylock(korp_mutex *mutex); + +/** + * This function unlocks the mutex + * + * @param mutex pointer to mutex need unlock + * + * @return Void + */ +void vm_mutex_unlock(korp_mutex *mutex); + +/** + * This function creates a semaphone + * + * @param sem [OUTPUT] pointer to semaphone + * @param c counter of semaphone + * + * @return BH_SUCCESS if success + */ +int _vm_sem_init(korp_sem *sem, unsigned int c); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_sem_init_instr(korp_sem *sem, unsigned int c, const char*func_name); +#define vm_sem_init(sem, c) vm_sem_init_instr(sem, c, __FUNCTION__) +#else +#define vm_sem_init _vm_sem_init +#endif + +/** + * This function destroys a semaphone + * + * @param sem pointer to semaphone need destroy + * + * @return BH_SUCCESS if success + */ +int _vm_sem_destroy(korp_sem *sem); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_sem_destroy_instr(korp_sem *sem, const char*func_name); +#define vm_sem_destroy(sem) vm_sem_destroy_instr(sem, __FUNCTION__) +#else +#define vm_sem_destroy _vm_sem_destroy +#endif + +/** + * This function performs wait operation on semaphone + * + * @param sem pointer to semaphone need perform wait operation + * + * @return BH_SUCCESS if success + */ +int _vm_sem_wait(korp_sem *sem); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_sem_wait_instr(korp_sem *sem, const char*func_name); +#define vm_sem_wait(sem) vm_sem_wait_instr(sem, __FUNCTION__) +#else +#define vm_sem_wait _vm_sem_wait +#endif + +/** + * This function performs wait operation on semaphone with a timeout + * + * @param sem pointer to semaphone need perform wait operation + * @param mills wait milliseconds to return + * + * @return BH_SUCCESS if success + * @return BH_TIMEOUT if time out + */ +int _vm_sem_reltimedwait(korp_sem *sem, int mills); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_sem_reltimedwait_instr(korp_sem *sem, int mills, const char*func_name); +#define vm_sem_reltimedwait(sem, mills) vm_sem_reltimedwait_instr(sem, mills, __FUNCTION__) +#else +#define vm_sem_reltimedwait _vm_sem_reltimedwait +#endif + +/** + * This function performs post operation on semaphone + * + * @param sem pointer to semaphone need perform post operation + * + * @return BH_SUCCESS if success + */ +int _vm_sem_post(korp_sem *sem); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_sem_post_instr(korp_sem *sem, const char*func_name); +#define vm_sem_post(sem) vm_sem_post_instr(sem, __FUNCTION__) +#else +#define vm_sem_post _vm_sem_post +#endif + +/** + * This function creates a condition variable + * + * @param cond [OUTPUT] pointer to condition variable + * + * @return BH_SUCCESS if success + */ +int _vm_cond_init(korp_cond *cond); +#ifdef INSTRUMENT_TEST_ENABLED +int vm_cond_init_instr(korp_cond *cond, const char*func_name); +#define vm_cond_init(cond) vm_cond_init_instr(cond, __FUNCTION__) +#else +#define vm_cond_init _vm_cond_init +#endif + +/** + * This function destorys condition variable + * + * @param cond pointer to condition variable + * + * @return BH_SUCCESS if success + */ +int _vm_cond_destroy(korp_cond *cond); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_cond_destroy_instr(korp_cond *cond, const char*func_name); +#define vm_cond_destroy(cond) vm_cond_destroy_instr(cond, __FUNCTION__) +#else +#define vm_cond_destroy _vm_cond_destroy +#endif + +/** + * This function will block on a condition varible. + * + * @param cond pointer to condition variable + * @param mutex pointer to mutex to protect the condition variable + * + * @return BH_SUCCESS if success + */ +int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_cond_wait_instr(korp_cond *cond, korp_mutex *mutex, const char*func_name); +#define vm_cond_wait(cond, mutex) vm_cond_wait_instr(cond, mutex, __FUNCTION__) +#else +#define vm_cond_wait _vm_cond_wait +#endif + +/** + * This function will block on a condition varible or return if time specified passes. + * + * @param cond pointer to condition variable + * @param mutex pointer to mutex to protect the condition variable + * @param mills milliseconds to wait + * + * @return BH_SUCCESS if success + */ +int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_cond_reltimedwait_instr(korp_cond *cond, korp_mutex *mutex, int mills, const char*func_name); +#define vm_cond_reltimedwait(cond, mutex, mills) vm_cond_reltimedwait_instr(cond, mutex, mills, __FUNCTION__) +#else +#define vm_cond_reltimedwait _vm_cond_reltimedwait +#endif + +/** + * This function signals the condition variable + * + * @param cond condition variable + * + * @return BH_SUCCESS if success + */ +int _vm_cond_signal(korp_cond *cond); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_cond_signal_instr(korp_cond *cond, const char*func_name); +#define vm_cond_signal(cond) vm_cond_signal_instr(cond, __FUNCTION__) +#else +#define vm_cond_signal _vm_cond_signal +#endif + +int _vm_cond_broadcast(korp_cond *cond); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_cond_broadcast_instr(korp_cond *cond, const char*func_name); +#define vm_cond_broadcast(cond) vm_cond_broadcast_instr(cond, __FUNCTION__) +#else +#define vm_cond_broadcast _vm_cond_broadcast +#endif + +int _vm_thread_cancel(korp_tid thread); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_thread_cancel_instr(korp_tid thread, const char*func_name); +#define vm_thread_cancel(thread) vm_thread_cancel_instr(thread, __FUNCTION__) +#else +#define vm_thread_cancel _vm_thread_cancel +#endif + +int _vm_thread_join(korp_tid thread, void **value_ptr, int mills); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_thread_join_instr(korp_tid thread, void **value_ptr, int mills, const char*func_name); +#define vm_thread_join(thread, value_ptr, mills) vm_thread_join_instr(thread, value_ptr, mills, __FUNCTION__) +#else +#define vm_thread_join _vm_thread_join +#endif + +int _vm_thread_detach(korp_tid thread); +#ifdef _INSTRUMENT_TEST_ENABLED +int vm_thread_detach_instr(korp_tid thread, const char*func_name); +#define vm_thread_detach(thread) vm_thread_detach_instr(thread, __FUNCTION__) +#else +#define vm_thread_detach _vm_thread_detach +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* #ifndef _BH_THREAD_H */ diff --git a/core/shared-lib/platform/include/bh_time.h b/core/shared-lib/platform/include/bh_time.h new file mode 100644 index 000000000..31e1454a8 --- /dev/null +++ b/core/shared-lib/platform/include/bh_time.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_TIME_H +#define _BH_TIME_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "bh_config.h" +#include "bh_definition.h" +#include "bh_types.h" +#include "bh_platform.h" + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +extern uint64 _bh_time_get_tick_millisecond(void); +#ifdef _INSTRUMENT_TEST_ENABLED +extern uint64 bh_time_get_tick_millisecond_instr(const char*func_name); +#define bh_time_get_tick_millisecond() bh_time_get_tick_millisecond_instr(__FUNCTION__) +#else +#define bh_time_get_tick_millisecond _bh_time_get_tick_millisecond +#endif + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +extern uint64 _bh_time_get_boot_millisecond(void); +#ifdef _INSTRUMENT_TEST_ENABLED +extern uint64 bh_time_get_boot_millisecond_instr(const char*func_name); +#define bh_time_get_boot_millisecond() bh_time_get_boot_millisecond_instr(__FUNCTION__) +#else +#define bh_time_get_boot_millisecond _bh_time_get_boot_millisecond +#endif + +extern uint32 bh_get_tick_sec(); +#define bh_get_tick_ms _bh_time_get_boot_millisecond + +/* + * This function returns GMT milliseconds since from 1970.1.1, AKA UNIX time. + * @return milliseconds since from 1970.1.1. + */ +extern uint64 _bh_time_get_millisecond_from_1970(void); +#ifdef _INSTRUMENT_TEST_ENABLED +extern uint64 bh_time_get_millisecond_from_1970_instr(const char*func_name); +#define bh_time_get_millisecond_from_1970() bh_time_get_millisecond_from_1970_instr(__FUNCTION__) +#else +#define bh_time_get_millisecond_from_1970 _bh_time_get_millisecond_from_1970 +#endif + +/** + * This function sets timezone with specific hours. + * + * @param hours represents the deviation (in hours) of the local time from GMT (can be a positive or a negative number) + * @param half_hour if true, adds half an hour to the local time calculation. For example, if hours=(+5) then the time will be GMT +5:30; if hours=(-5) then the time will be GMT -4:30. + * @param daylight_save if true, applies the daylight saving scheme when calculating the local time (adds one hour to the local time calculation) + */ +extern void bh_set_timezone(int hours, int half_hour, int daylight_save); + +/** + * This functions returns the offset in seconds which needs to be added GMT to get the local time. + * + * + * @return offset in secords which needs to be added GMT to get the local time. + */ +extern int bh_get_timezone_offset(void); + +size_t bh_time_strftime(char *s, size_t max, const char *format, int64 time); + +#ifdef _INSTRUMENT_TEST_ENABLED +size_t bh_time_strftime_instr(char *s, size_t max, const char *format, int64 time, const char*func_name); +#define bh_time_strftime(s, max, format, time) bh_time_strftime_instr(s, max, format, time, __FUNCTION__) +#else +#define bh_time_strftime _bh_time_strftime +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/shared-lib/platform/include/bh_types.h b/core/shared-lib/platform/include/bh_types.h new file mode 100644 index 000000000..ff561b244 --- /dev/null +++ b/core/shared-lib/platform/include/bh_types.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_TYPES_H +#define _BH_TYPES_H + +#include "bh_config.h" + +typedef unsigned char uint8; +typedef char int8; +typedef unsigned short uint16; +typedef short int16; +typedef unsigned int uint32; +typedef int int32; + +#define BYTES_OF_UINT8 1 +#define BYTES_OF_UINT16 2 +#define BYTES_OF_UINT32 4 +#define BYTES_OF_UINT64 8 + +#define BYTES_OF_BOOLEAN 1 +#define BYTES_OF_BYTE 1 +#define BYTES_OF_CHAR 2 +#define BYTES_OF_SHORT 2 +#define BYTES_OF_INT 4 +#define BYTES_OF_FLOAT 4 +#define BYTES_OF_LONG 8 +#define BYTES_OF_DOUBLE 8 + +#include "bh_platform.h" + +#ifndef __cplusplus +#define true 1 +#define false 0 +#endif + +#endif + diff --git a/core/shared-lib/platform/linux/bh_assert.c b/core/shared-lib/platform/linux/bh_assert.c new file mode 100644 index 000000000..b52a9aa5b --- /dev/null +++ b/core/shared-lib/platform/linux/bh_assert.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include "bh_assert.h" +#include +#include +#include + +#ifdef BH_TEST +#include +#endif + +#ifdef BH_TEST +/* for exception throwing */ +jmp_buf bh_test_jb; +#endif + +void bh_assert_internal(int v, const char *file_name, int line_number, + const char *expr_string) +{ + if (v) + return; + + if (!file_name) + file_name = "NULL FILENAME"; + if (!expr_string) + expr_string = "NULL EXPR_STRING"; + + printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, + file_name, line_number); + +#ifdef BH_TEST + longjmp(bh_test_jb, 1); +#endif + + abort(); +} + +void bh_debug_internal(const char *file_name, int line_number, const char *fmt, + ...) +{ +#ifndef JEFF_TEST_VERIFIER + va_list args; + + va_start(args, fmt); + bh_assert(file_name); + + printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number); + vprintf(fmt, args); + + va_end(args); + printf("\n"); +#endif +} + diff --git a/core/shared-lib/platform/linux/bh_definition.c b/core/shared-lib/platform/linux/bh_definition.c new file mode 100644 index 000000000..47ee11ed2 --- /dev/null +++ b/core/shared-lib/platform/linux/bh_definition.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_definition.h" +#include "bh_platform.h" + +int bh_return(int ret) +{ + return ret; +} + +#define RSIZE_MAX 0x7FFFFFFF +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n) +{ + char *dest = (char*) s1; + char *src = (char*) s2; + if (n == 0) { + return 0; + } + + if (s1 == NULL || s1max > RSIZE_MAX) { + return -1; + } + if (s2 == NULL || n > s1max) { + memset(dest, 0, s1max); + return -1; + } + memcpy(dest, src, n); + return 0; +} + +int b_strcat_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcat(s1, s2); + + return 0; +} + +int b_strcpy_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcpy(s1, s2); + + return 0; +} + +int fopen_s(FILE ** pFile, const char *filename, const char *mode) +{ + if (NULL == pFile || NULL == filename || NULL == mode) { + return -1; + } + + *pFile = fopen(filename, mode); + + if (NULL == *pFile) + return -1; + + return 0; +} diff --git a/core/shared-lib/platform/linux/bh_platform.c b/core/shared-lib/platform/linux/bh_platform.c new file mode 100755 index 000000000..fe05e8bd1 --- /dev/null +++ b/core/shared-lib/platform/linux/bh_platform.c @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include +#include + +char *bh_strdup(const char *s) +{ + char *s1 = NULL; + if (s && (s1 = bh_malloc(strlen(s) + 1))) + memcpy(s1, s, strlen(s) + 1); + return s1; +} diff --git a/core/shared-lib/platform/linux/bh_platform.h b/core/shared-lib/platform/linux/bh_platform.h new file mode 100644 index 000000000..00c25b492 --- /dev/null +++ b/core/shared-lib/platform/linux/bh_platform.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_PLATFORM_H +#define _BH_PLATFORM_H + +#include "bh_config.h" +#include "bh_types.h" +#include "bh_memory.h" +#include +#include +#include +#include +#include +#include +#include + +#ifndef __cplusplus +int snprintf(char *buffer, size_t count, const char *format, ...); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint64_t uint64; +typedef int64_t int64; + +extern void DEBUGME(void); + +#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); DEBUGME(void); while(1);}while(0) + +#define BH_PLATFORM "Linux" + +/* NEED qsort */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define _STACK_SIZE_ADJUSTMENT (32 * 1024) + +/* Stack size of applet manager thread. */ +#define BH_APPLET_MANAGER_THREAD_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of HMC thread. */ +#define BH_HMC_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of watchdog thread. */ +#define BH_WATCHDOG_THREAD_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of applet threads's native part. */ +#define BH_APPLET_PRESERVED_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of remote invoke listen thread. */ +#define BH_REMOTE_INVOKE_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of remote post listen thread. */ +#define BH_REMOTE_POST_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Maximal recursion depth of interpreter. */ +#define BH_MAX_INTERP_RECURSION_DEPTH 8 + +/* Default thread priority */ +#define BH_THREAD_DEFAULT_PRIORITY 0 + +#define BH_ROUTINE_MODIFIER +#define BHT_TIMEDOUT ETIMEDOUT + +#define INVALID_THREAD_ID 0xFFffFFff +#define INVALID_SEM_ID SEM_FAILED + +typedef pthread_t korp_tid; +typedef pthread_mutex_t korp_mutex; +typedef sem_t korp_sem; +typedef pthread_cond_t korp_cond; +typedef pthread_t korp_thread; +typedef void* (*thread_start_routine_t)(void*); + +#define wa_malloc bh_malloc +#define wa_free bh_free +#define wa_strdup bh_strdup + +double fmod(double x, double y); +float fmodf(float x, float y); + +/* Definitions for applet debugging */ +#define APPLET_DEBUG_LISTEN_PORT 8000 +#define BH_SOCKET_INVALID_SOCK -1 +#define BH_WAIT_FOREVER 0xFFFFFFFF +typedef int bh_socket_t; + +#ifndef NULL +# define NULL ((void*) 0) +#endif + +#define bh_assert assert + +extern int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, + unsigned int n); +extern int b_strcat_s(char * s1, size_t s1max, const char * s2); +extern int b_strcpy_s(char * s1, size_t s1max, const char * s2); +extern int fopen_s(FILE ** pFile, const char *filename, const char *mode); + +extern char *bh_strdup(const char *s); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/core/shared-lib/platform/linux/bh_platform_log.c b/core/shared-lib/platform/linux/bh_platform_log.c new file mode 100644 index 000000000..4ff03192a --- /dev/null +++ b/core/shared-lib/platform/linux/bh_platform_log.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include + +void bh_log_emit(const char *fmt, va_list ap) +{ + vprintf(fmt, ap); + fflush(stdout); +} + +int bh_fprintf(FILE *stream, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vfprintf(stream ? stream : stdout, fmt, ap); + va_end(ap); + + return ret; +} + +int bh_fflush(void *stream) +{ + return fflush(stream ? stream : stdout); +} diff --git a/core/shared-lib/platform/linux/bh_thread.c b/core/shared-lib/platform/linux/bh_thread.c new file mode 100755 index 000000000..9d45b147f --- /dev/null +++ b/core/shared-lib/platform/linux/bh_thread.c @@ -0,0 +1,404 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_thread.h" +#include "bh_assert.h" +#include "bh_log.h" +#include "bh_memory.h" +#include +#include +#include + +static bool is_thread_sys_inited = false; + +static korp_mutex thread_list_lock; +static pthread_key_t thread_local_storage_key[BH_MAX_TLS_NUM]; + +int _vm_thread_sys_init() +{ + unsigned i, j; + int ret; + + if (is_thread_sys_inited) + return 0; + + for (i = 0; i < BH_MAX_TLS_NUM; i++) { + ret = pthread_key_create(&thread_local_storage_key[i], NULL); + if (ret) + goto fail; + } + + ret = vm_mutex_init(&thread_list_lock); + if (ret) + goto fail; + + is_thread_sys_inited = true; + return 0; + + fail: for (j = 0; j < i; j++) + pthread_key_delete(thread_local_storage_key[j]); + return -1; +} + +void vm_thread_sys_destroy(void) +{ + if (is_thread_sys_inited) { + unsigned i; + for (i = 0; i < BH_MAX_TLS_NUM; i++) + pthread_key_delete(thread_local_storage_key[i]); + vm_mutex_destroy(&thread_list_lock); + is_thread_sys_inited = false; + } +} + +typedef struct { + thread_start_routine_t start; + void* stack; + int stack_size; + void* arg; +} thread_wrapper_arg; + +static void *vm_thread_wrapper(void *arg) +{ + thread_wrapper_arg * targ = arg; + LOG_VERBOSE("THREAD CREATE 0x%08x\n", &targ); + targ->stack = (void *) ((unsigned int) (&arg) & ~0xfff); + _vm_tls_put(1, targ); + targ->start(targ->arg); + bh_free(targ); + _vm_tls_put(1, NULL); + return NULL; +} + +int _vm_thread_create_with_prio(korp_tid *tid, thread_start_routine_t start, + void *arg, unsigned int stack_size, int prio) +{ + pthread_attr_t tattr; + thread_wrapper_arg *targ; + + bh_assert(stack_size > 0); + bh_assert(tid); + bh_assert(start); + + *tid = INVALID_THREAD_ID; + + pthread_attr_init(&tattr); + pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE); + if (pthread_attr_setstacksize(&tattr, stack_size) != 0) { + bh_debug("Invalid thread stack size %u. Min stack size on Linux = %u", + stack_size, PTHREAD_STACK_MIN); + pthread_attr_destroy(&tattr); + return BHT_ERROR; + } + + targ = (thread_wrapper_arg*) bh_malloc(sizeof(*targ)); + if (!targ) { + pthread_attr_destroy(&tattr); + return BHT_ERROR; + } + + targ->start = start; + targ->arg = arg; + targ->stack_size = stack_size; + + if (pthread_create(tid, &tattr, vm_thread_wrapper, targ) != 0) { + pthread_attr_destroy(&tattr); + bh_free(targ); + return BHT_ERROR; + } + + pthread_attr_destroy(&tattr); + return BHT_OK; +} + +int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg, + unsigned int stack_size) +{ + return _vm_thread_create_with_prio(tid, start, arg, stack_size, + BH_THREAD_DEFAULT_PRIORITY); +} + +korp_tid _vm_self_thread() +{ + return (korp_tid) pthread_self(); +} + +void vm_thread_exit(void * code) +{ + bh_free(_vm_tls_get(1)); + _vm_tls_put(1, NULL); + pthread_exit(code); +} + +void *_vm_tls_get(unsigned idx) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + return pthread_getspecific(thread_local_storage_key[idx]); +} + +int _vm_tls_put(unsigned idx, void * tls) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + pthread_setspecific(thread_local_storage_key[idx], tls); + return BHT_OK; +} + +int _vm_mutex_init(korp_mutex *mutex) +{ + return pthread_mutex_init(mutex, NULL) == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_recursive_mutex_init(korp_mutex *mutex) +{ + int ret; + + pthread_mutexattr_t mattr; + + bh_assert(mutex); + ret = pthread_mutexattr_init(&mattr); + if (ret) + return BHT_ERROR; + + pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE_NP); + ret = pthread_mutex_init(mutex, &mattr); + pthread_mutexattr_destroy(&mattr); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_mutex_destroy(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_destroy(mutex); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EDEADLK) from + locking the mutex indicates some logic error present in + the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_lock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_lock(mutex); + if (0 != ret) { + printf("vm mutex lock failed (ret=%d)!\n", ret); + exit(-1); + } +} + +int vm_mutex_trylock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_trylock(mutex); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (EINVAL, EAGAIN and EPERM) from + unlocking the mutex indicates some logic error present + in the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_unlock(korp_mutex *mutex) +{ + int ret; + + bh_assert(mutex); + ret = pthread_mutex_unlock(mutex); + if (0 != ret) { + printf("vm mutex unlock failed (ret=%d)!\n", ret); + exit(-1); + } +} + +int _vm_sem_init(korp_sem* sem, unsigned int c) +{ + int ret; + + bh_assert(sem); + ret = sem_init(sem, 0, c); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_sem_destroy(korp_sem *sem) +{ + int ret; + + bh_assert(sem); + ret = sem_destroy(sem); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_sem_wait(korp_sem *sem) +{ + int ret; + + bh_assert(sem); + + ret = sem_wait(sem); + + return ret == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_sem_reltimedwait(korp_sem *sem, int mills) +{ + int ret = BHT_OK; + + struct timespec timeout; + const int mills_per_sec = 1000; + const int mills_to_nsec = 1E6; + + bh_assert(sem); + + if (mills == BHT_WAIT_FOREVER) { + ret = sem_wait(sem); + } else { + + timeout.tv_sec = mills / mills_per_sec; + timeout.tv_nsec = (mills % mills_per_sec) * mills_to_nsec; + timeout.tv_sec += time(NULL); + + ret = sem_timedwait(sem, &timeout); + } + + if (ret != BHT_OK) { + if (errno == BHT_TIMEDOUT) { + ret = BHT_TIMEDOUT; + errno = 0; + } else { + bh_debug("Faliure happens when timed wait is called"); + bh_assert(0); + } + } + + return ret; +} + +int _vm_sem_post(korp_sem *sem) +{ + bh_assert(sem); + + return sem_post(sem) == 0 ? BHT_OK : BHT_ERROR; +} + +int _vm_cond_init(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_init(cond, NULL) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_destroy(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_destroy(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex) +{ + bh_assert(cond); + bh_assert(mutex); + + if (pthread_cond_wait(cond, mutex) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +static void msec_nsec_to_abstime(struct timespec *ts, int64 msec, int32 nsec) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + + ts->tv_sec = tv.tv_sec + msec / 1000; + ts->tv_nsec = tv.tv_usec * 1000 + (msec % 1000) * 1000000 + nsec; + + if (ts->tv_nsec >= 1000000000L) { + ts->tv_sec++; + ts->tv_nsec -= 1000000000L; + } +} + +int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills) +{ + int ret; + struct timespec abstime; + + if (mills == BHT_WAIT_FOREVER) + ret = pthread_cond_wait(cond, mutex); + else { + msec_nsec_to_abstime(&abstime, mills, 0); + ret = pthread_cond_timedwait(cond, mutex, &abstime); + } + + if (ret != BHT_OK && ret != BHT_TIMEDOUT) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_signal(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_signal(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_broadcast(korp_cond *cond) +{ + bh_assert(cond); + + if (pthread_cond_broadcast(cond) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_thread_cancel(korp_tid thread) +{ + return pthread_cancel(thread); +} + +int _vm_thread_join(korp_tid thread, void **value_ptr, int mills) +{ + return pthread_join(thread, value_ptr); +} + +int _vm_thread_detach(korp_tid thread) +{ + return pthread_detach(thread); +} + diff --git a/core/shared-lib/platform/linux/bh_time.c b/core/shared-lib/platform/linux/bh_time.c new file mode 100755 index 000000000..0627b08d0 --- /dev/null +++ b/core/shared-lib/platform/linux/bh_time.c @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_time.h" + +#include +#include +#include +#include + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +uint64 _bh_time_get_tick_millisecond() +{ + return sysconf(_SC_CLK_TCK); +} + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +uint64 _bh_time_get_boot_millisecond() +{ + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { + return 0; + } + + return ((uint64) ts.tv_sec) * 1000 + ts.tv_nsec / (1000 * 1000); +} + +uint32 bh_get_tick_sec() +{ + return _bh_time_get_boot_millisecond() / 1000; +} + +/* + * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX time. + * @return milliseconds since from 1970.1.1. + */ +uint64 _bh_time_get_millisecond_from_1970() +{ + struct timeb tp; + ftime(&tp); + + return ((uint64) tp.time) * 1000 + tp.millitm + - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000; +} + +size_t _bh_time_strftime(char *s, size_t max, const char *format, int64 time) +{ + time_t time_sec = time / 1000; + struct timeb tp; + struct tm *ltp; + + ftime(&tp); + time_sec -= tp.timezone * 60; + + ltp = localtime(&time_sec); + if (ltp == NULL) { + return 0; + } + return strftime(s, max, format, ltp); +} + diff --git a/core/shared-lib/platform/linux/shared_platform.cmake b/core/shared-lib/platform/linux/shared_platform.cmake new file mode 100644 index 000000000..5b403a09c --- /dev/null +++ b/core/shared-lib/platform/linux/shared_platform.cmake @@ -0,0 +1,24 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_SHARED_DIR}) +include_directories(${PLATFORM_SHARED_DIR}/../include) + + +file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c) + +set (PLATFORM_SHARED_SOURCE ${source_all}) + diff --git a/core/shared-lib/platform/win32/bh_assert.c b/core/shared-lib/platform/win32/bh_assert.c new file mode 100644 index 000000000..b0bbbcbe1 --- /dev/null +++ b/core/shared-lib/platform/win32/bh_assert.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include "bh_assert.h" +#include + +#ifdef BH_TEST +#include +#endif + +#ifdef BH_TEST +/* for exception throwing */ +jmp_buf bh_test_jb; +#endif + +void bh_assert_internal(int v, const char *file_name, int line_number, + const char *expr_string) +{ + if (v) + return; + + if (!file_name) + file_name = "NULL FILENAME"; + if (!expr_string) + expr_string = "NULL EXPR_STRING"; + + printf("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, + file_name, line_number); + +#ifdef BH_TEST + longjmp(bh_test_jb, 1); +#endif + + abort(); +} + +void bh_debug_internal(const char *file_name, int line_number, const char *fmt, + ...) +{ +#ifndef JEFF_TEST_VERIFIER + va_list args; + + va_start(args, fmt); + bh_assert(file_name); + + printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number); + vprintf(fmt, args); + + va_end(args); + printf("\n"); +#endif +} + diff --git a/core/shared-lib/platform/win32/bh_definition.c b/core/shared-lib/platform/win32/bh_definition.c new file mode 100644 index 000000000..058804c68 --- /dev/null +++ b/core/shared-lib/platform/win32/bh_definition.c @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_definition.h" + +int bh_return(int ret) +{ + return ret; +} diff --git a/core/shared-lib/platform/win32/bh_platform.h b/core/shared-lib/platform/win32/bh_platform.h new file mode 100755 index 000000000..c898a747d --- /dev/null +++ b/core/shared-lib/platform/win32/bh_platform.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_PLATFORM_H +#define _BH_PLATFORM_H + +#include "bh_config.h" +#include "bh_types.h" + +#ifndef NVALGRIND +#define NVALGRIND +#endif + +/* Reserve bytes on applet stack for native functions called from + * Java methods to avoid undetectable stack overflow. + */ +#ifndef APPLET_PRESERVED_STACK_SIZE +#define APPLET_PRESERVED_STACK_SIZE (16 * BH_KB) +#endif + +typedef unsigned __int64 uint64; +typedef __int64 int64; + +extern void DEBUGME(void); + +#define DIE do{bh_debug("Die here\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); DEBUGME(void); while(1);}while(0) + +#ifndef BH_INVALID_HANDLE +#define BH_INVALID_HANDLE NULL +#endif + +#define BH_PLATFORM "AMULET" + +#include +#include +#include +#include +#include + +#include + +#define _STACK_SIZE_ADJUSTMENT (32 * 1024) + +/* Stack size of applet manager thread. */ +#define BH_APPLET_MANAGER_THREAD_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of HMC thread. */ +#define BH_HMC_THREAD_STACK_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of watchdog thread. */ +#define BH_WATCHDOG_THREAD_SIZE (4 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Stack size of applet threads's native part. */ +#define BH_APPLET_PRESERVED_STACK_SIZE (8 * 1024 + _STACK_SIZE_ADJUSTMENT) + +/* Maximal recursion depth of interpreter. */ +#define BH_MAX_INTERP_RECURSION_DEPTH 8 + +#define wa_malloc bh_malloc +#define wa_free bh_free + +#define snprintf _snprintf + +#define BH_ROUTINE_MODIFIER __stdcall + +typedef void *korp_tid; +#define INVALID_THREAD_ID 0 + +typedef void *korp_mutex; +typedef void *korp_sem; + +typedef struct { + korp_sem s; + unsigned waiting_count; +} korp_cond; + +typedef void* (BH_ROUTINE_MODIFIER *thread_start_routine_t)(void*); + +#endif + diff --git a/core/shared-lib/platform/win32/bh_platform_log.c b/core/shared-lib/platform/win32/bh_platform_log.c new file mode 100755 index 000000000..80bec06c5 --- /dev/null +++ b/core/shared-lib/platform/win32/bh_platform_log.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "bh_platform.h" + +void bh_log_emit(const char *fmt, va_list ap) +{ + vprintf(fmt, ap); + fflush(stdout); +} + +int bh_fprintf(FILE *stream, const char *fmt, ...) +{ + int ret; + va_list ap; + va_start(ap, fmt); + ret = vfprintf(stream ? stream : stdout, fmt, ap); + va_end(ap); + return ret; +} + +int bh_fflush(void *stream) +{ + return fflush(stream ? stream : stdout); +} diff --git a/core/shared-lib/platform/win32/bh_thread.c b/core/shared-lib/platform/win32/bh_thread.c new file mode 100755 index 000000000..ab7e783b5 --- /dev/null +++ b/core/shared-lib/platform/win32/bh_thread.c @@ -0,0 +1,342 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_thread.h" +#include "bh_assert.h" +#include "bh_log.h" +#include "bh_memory.h" + +#include +#include + +#ifdef _DEBUG +#define THREAD_STACK_ADJUSTMENT (32 * 1024) +#else +#define THREAD_STACK_ADJUSTMENT 0 +#endif + +static korp_mutex thread_list_lock; +static DWORD tls_indexes[BH_MAX_TLS_NUM]; + +typedef struct { + int zero_padding; + thread_start_routine_t start; + void* stack; + void* args; + int stack_size; +} vm_thread_block; + +static DWORD tb_index; + +int _vm_thread_sys_init() +{ + unsigned int i; + for (i = 0; i < BH_MAX_TLS_NUM; i++) { + tls_indexes[i] = TlsAlloc(); + if (tls_indexes[i] == TLS_OUT_OF_INDEXES) + return BHT_ERROR; + } + + tb_index = TlsAlloc(); + if (tb_index == TLS_OUT_OF_INDEXES) + return BHT_ERROR; + + return vm_mutex_init(&thread_list_lock); +} + +static unsigned int BH_ROUTINE_MODIFIER beihai_starter(void* arg) +{ + vm_thread_block* tb = (vm_thread_block*) arg; + TlsSetValue(tb_index, tb); + tb->stack = (void *) &arg; + tb->start(tb->args); + + return 0; +} + +int _vm_thread_create(korp_tid *tid, thread_start_routine_t start, void *arg, + unsigned int stack_size) +{ + unsigned int default_stack_size = 20 * 1024; + vm_thread_block* tb; + bh_assert(tid); + bh_assert(start); + + if (stack_size == 0) + stack_size = default_stack_size; + +#ifdef _DEBUG + stack_size = THREAD_STACK_ADJUSTMENT + stack_size*3; +#endif + + tb = (vm_thread_block*) bh_malloc(sizeof(*tb)); + if (tb == NULL) + return BHT_ERROR; + + memset(tb, 0, sizeof(*tb)); + + tb->start = start; + tb->stack_size = stack_size; + tb->args = arg; + + *tid = (korp_tid) _beginthreadex(NULL, stack_size, beihai_starter, + (void*) tb, 0, NULL); + + /* TODO: to deal with the handle; how to close it? */ + return (*tid == INVALID_THREAD_ID) ? BHT_ERROR : BHT_OK; +} + +korp_tid _vm_self_thread() +{ + return (korp_tid) GetCurrentThread(); +} + +void vm_thread_exit(void *code) +{ + vm_thread_block *tb = (vm_thread_block*) TlsGetValue(tb_index); + bh_free(tb); + _endthreadex((unsigned int) code); +} + +void* vm_get_stackaddr() +{ + vm_thread_block *tb = (vm_thread_block*) TlsGetValue(tb_index); + return (char *) tb->stack + THREAD_STACK_ADJUSTMENT - tb->stack_size; +} + +void *_vm_tls_get(unsigned idx) +{ + bh_assert(idx < BH_MAX_TLS_NUM); + return TlsGetValue(tls_indexes[idx]); +} + +int _vm_tls_put(unsigned idx, void *tls) +{ + BOOL r; + + bh_assert(idx < BH_MAX_TLS_NUM); + r = TlsSetValue(tls_indexes[idx], tls); + return (r == FALSE) ? BHT_ERROR : BHT_OK; +} + +int _vm_mutex_init(korp_mutex *mutex) +{ + bh_assert(mutex); + *mutex = CreateMutex(NULL, FALSE, NULL); + return (*mutex == 0) ? BHT_ERROR : BHT_OK; +} + +int _vm_mutex_destroy(korp_mutex *mutex) +{ + return BHT_OK; +} + +/* Returned error (e.g. ERROR_INVALID_HANDLE) from + locking the mutex indicates some logic error present in + the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_lock(korp_mutex *mutex) +{ + DWORD ret; + + bh_assert(mutex); + ret = WaitForSingleObject(*mutex, INFINITE); + if (WAIT_FAILED == ret) { + LOG_FATAL("vm mutex lock failed (ret=%d)!\n", GetLastError()); + exit(-1); + } +} + +int vm_mutex_trylock(korp_mutex *mutex) +{ + DWORD ret; + + bh_assert(mutex); + ret = WaitForSingleObject(*mutex, 0); + if (WAIT_FAILED == ret) { + LOG_FATAL("vm mutex lock failed (ret=%d)!\n", GetLastError()); + exit(-1); + } + return ret == WAIT_OBJECT_0 ? BHT_OK : BHT_ERROR; +} + +/* Returned error (e.g. ERROR_INVALID_HANDLE) from + unlocking the mutex indicates some logic error present + in the program somewhere. + Don't try to recover error for an existing unknown error.*/ +void vm_mutex_unlock(korp_mutex *mutex) +{ + BOOL ret; + + bh_assert(mutex); + ret = ReleaseMutex(*mutex); + if (FALSE == ret) { + LOG_FATAL("vm mutex unlock failed (ret=%d)!\n", GetLastError()); + exit(-1); + } +} + +#define BH_SEM_COUNT_MAX 0xFFFF + +int _vm_sem_init(korp_sem *sem, unsigned int count) +{ + bh_assert(sem); + bh_assert(count <= BH_SEM_COUNT_MAX); + *sem = CreateSemaphore(NULL, count, BH_SEM_COUNT_MAX, NULL); + + return (*sem == NULL) ? BHT_ERROR : BHT_OK; +} + +int _vm_sem_destroy(korp_sem *sem) +{ + return BHT_OK; +} + +int _vm_sem_P(korp_sem *sem) +{ + DWORD r; + bh_assert(sem); + r = WaitForSingleObject(*sem, INFINITE); + + return (r == WAIT_FAILED) ? BHT_ERROR : BHT_OK; +} + +int _vm_sem_reltimedP(korp_sem *sem, int mills) +{ + DWORD r; + bh_assert(sem); + + if (mills == BHT_WAIT_FOREVER) + mills = INFINITE; + + r = WaitForSingleObject(*sem, (unsigned int) mills); + + switch (r) { + case WAIT_OBJECT_0: + return BHT_OK; + case WAIT_TIMEOUT: + return BHT_TIMEDOUT; + default: + return BHT_ERROR; + } +} + +int _vm_sem_V(korp_sem *sem) +{ + BOOL r; + bh_assert(sem); + r = ReleaseSemaphore(*sem, 1, NULL); + return (r == FALSE) ? BHT_ERROR : BHT_OK; +} + +int _vm_cond_init(korp_cond *cond) +{ + bh_assert(cond); + cond->waiting_count = 0; + return vm_sem_init(&cond->s, 0); +} + +int _vm_cond_destroy(korp_cond *cond) +{ + bh_assert(cond); + return vm_sem_destroy(&cond->s); +} + +int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex) +{ + bh_assert(cond); + bh_assert(mutex); + + cond->waiting_count++; + + vm_mutex_unlock(mutex); + + if (vm_sem_P(&cond->s) != BHT_OK) + return BHT_ERROR; + + vm_mutex_lock(mutex); + + cond->waiting_count--; + + return BHT_OK; +} + +int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills) +{ + int r; + + bh_assert(cond); + bh_assert(mutex); + + cond->waiting_count++; + + vm_mutex_unlock(mutex); + + r = vm_sem_reltimedP(&cond->s, mills); + + if ((r != BHT_OK) && (r != BHT_TIMEDOUT)) + return BHT_ERROR; + + vm_mutex_lock(mutex); + + cond->waiting_count--; + + return r; +} + +int _vm_cond_signal(korp_cond *cond) +{ + bh_assert(cond); + + if (cond->waiting_count == 0) + return BHT_OK; + + if (vm_sem_V(&cond->s) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int _vm_cond_broadcast(korp_cond *cond) +{ + /* FIXME: use pthread's API to implement this and above + functions. */ + + unsigned count = cond->waiting_count; + + for (; count > 0; count--) + vm_sem_V(&cond->s); + + return BHT_OK; +} + +int _vm_thread_cancel(korp_tid thread) +{ + /* FIXME: implement this with Windows API. */ + return 0; +} + +int _vm_thread_join(korp_tid thread, void **value_ptr) +{ + /* FIXME: implement this with Windows API. */ + return 0; +} + +int _vm_thread_detach(korp_tid thread) +{ + /* FIXME: implement this with Windows API. */ + return 0; +} diff --git a/core/shared-lib/platform/win32/bh_time.c b/core/shared-lib/platform/win32/bh_time.c new file mode 100755 index 000000000..c8d426c4d --- /dev/null +++ b/core/shared-lib/platform/win32/bh_time.c @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "bh_time.h" + +#include +#include + +/* Since GetTickCount64 is not supported on Windows XP, use a temporary method + * to solve the issue. However, GetTickCount return a DWORD value and overflow + * may happen (http://msdn.microsoft.com/en-us/library/ms724408(v=vs.85).aspx). + * + * TODO: Implement GetTickCount64 on Windows XP by self or check overflow issues. + */ +#if (WINVER >= 0x0600) +extern uint64 __stdcall GetTickCount64(void); +#else +extern uint32 __stdcall GetTickCount(void); +#endif + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +uint64 _bh_time_get_tick_millisecond() +{ + return 5; +} + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +uint64 _bh_time_get_boot_millisecond() +{ + /* Since GetTickCount64 is not supported on Windows XP, use a temporary method + * to solve the issue. However, GetTickCount return a DWORD value and overflow + * may happen (http://msdn.microsoft.com/en-us/library/ms724408(v=vs.85).aspx). + * + * TODO: Implement GetTickCount64 on Windows XP by self or check overflow issues. + */ +#if (WINVER >= 0x0600) + return GetTickCount64(); +#else + return GetTickCount(); +#endif +} + +/* + * This function returns GMT time milliseconds since from 1970.1.1, AKA UNIX time. + * @return milliseconds since from 1970.1.1. + */ +uint64 _bh_time_get_millisecond_from_1970() +{ + struct timeb tp; + ftime(&tp); + + return ((uint64) tp.time) * 1000 + tp.millitm + - (tp.dstflag == 0 ? 0 : 60 * 60 * 1000) + tp.timezone * 60 * 1000; +} + +size_t bh_time_strftime(char *s, size_t max, const char *format, int64 time) +{ + time_t time_sec = time / 1000; + struct timeb tp; + struct tm local_time; + + if (NULL == s) + return 0; + + ftime(&tp); + time_sec -= tp.timezone * 60; + if (localtime_s(&local_time, &time_sec) != 0) + return 0; + + return strftime(s, max, format, &local_time); +} + +int bh_time_get(uint8 *timeoff_info, int16 timeoff_info_len, uint32* time) +{ + return BH_UNIMPLEMENTED; +} + +int bh_time_set(uint32 ntp, uint8 *timeoff_info) +{ + return BH_UNIMPLEMENTED; +} diff --git a/core/shared-lib/platform/zephyr/Makefile b/core/shared-lib/platform/zephyr/Makefile new file mode 100644 index 000000000..4528ff531 --- /dev/null +++ b/core/shared-lib/platform/zephyr/Makefile @@ -0,0 +1,15 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +obj-y += bh_assert.o bh_definition.o bh_memory.o bh_platform_log.o bh_thread.o bh_time.o diff --git a/core/shared-lib/platform/zephyr/bh_assert.c b/core/shared-lib/platform/zephyr/bh_assert.c new file mode 100644 index 000000000..121adddfd --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_assert.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include "bh_assert.h" +#include +#include +#include + +#ifdef BH_TEST +#include +#endif + +#ifdef BH_TEST +/* for exception throwing */ +jmp_buf bh_test_jb; +#endif +extern void abort(void); +void bh_assert_internal(int v, const char *file_name, int line_number, + const char *expr_string) +{ + if (v) + return; + + if (!file_name) + file_name = "NULL FILENAME"; + if (!expr_string) + expr_string = "NULL EXPR_STRING"; + + printk("\nASSERTION FAILED: %s, at FILE=%s, LINE=%d\n", expr_string, + file_name, line_number); + +#ifdef BH_TEST + longjmp(bh_test_jb, 1); +#endif + + abort(); +} + +void bh_debug_internal(const char *file_name, int line_number, const char *fmt, + ...) +{ +#ifndef JEFF_TEST_VERIFIER + va_list args; + + va_start(args, fmt); + bh_assert(file_name); + + printf("\nDebug info FILE=%s, LINE=%d: ", file_name, line_number); + vprintf(fmt, args); + + va_end(args); + printf("\n"); +#endif +} + diff --git a/core/shared-lib/platform/zephyr/bh_definition.c b/core/shared-lib/platform/zephyr/bh_definition.c new file mode 100644 index 000000000..0c9d3fc6c --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_definition.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_definition.h" +#include "bh_platform.h" + +int bh_return(int ret) +{ + return ret; +} + +#define RSIZE_MAX 0x7FFFFFFF +int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, unsigned int n) +{ + char *dest = (char*) s1; + char *src = (char*) s2; + if (n == 0) { + return 0; + } + + if (s1 == NULL || s1max > RSIZE_MAX) { + return -1; + } + if (s2 == NULL || n > s1max) { + memset(dest, 0, s1max); + return -1; + } + memcpy(dest, src, n); + return 0; +} + +int b_strcat_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s1) + strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcat(s1, s2); + + return 0; +} + +int b_strcpy_s(char * s1, size_t s1max, const char * s2) +{ + if (NULL + == s1|| NULL == s2 || s1max < (strlen(s2) + 1) || s1max > RSIZE_MAX) { + return -1; + } + + strcpy(s1, s2); + + return 0; +} + diff --git a/core/shared-lib/platform/zephyr/bh_platform.c b/core/shared-lib/platform/zephyr/bh_platform.c new file mode 100755 index 000000000..fe05e8bd1 --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_platform.c @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include +#include + +char *bh_strdup(const char *s) +{ + char *s1 = NULL; + if (s && (s1 = bh_malloc(strlen(s) + 1))) + memcpy(s1, s, strlen(s) + 1); + return s1; +} diff --git a/core/shared-lib/platform/zephyr/bh_platform.h b/core/shared-lib/platform/zephyr/bh_platform.h new file mode 100644 index 000000000..4e22d9049 --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_platform.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _BH_PLATFORM_H +#define _BH_PLATFORM_H + +#include "bh_config.h" +#include "bh_types.h" +#include "bh_memory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef CONFIG_NET_BUF_USER_DATA_SIZE +#define CONFIG_NET_BUF_USER_DATA_SIZE 0 +#endif +#include +#include +#include +#include + +/* Platform name */ +#define BH_PLATFORM "Zephyr" + +#define BH_APPLET_PRESERVED_STACK_SIZE (2 * BH_KB) + +/* Default thread priority */ +#define BH_THREAD_DEFAULT_PRIORITY 7 + +#define BH_ROUTINE_MODIFIER + +/* Invalid thread tid */ +#define INVALID_THREAD_ID NULL + +#define INVALID_SEM_ID SEM_FAILED +#define BH_WAIT_FOREVER K_FOREVER + +typedef uint64_t uint64; +typedef int64_t int64; + +typedef struct k_thread korp_thread; +typedef korp_thread *korp_tid; +typedef struct k_mutex korp_mutex; +typedef struct k_sem korp_sem; + +#define wa_malloc bh_malloc +#define wa_free bh_free +#define wa_strdup bh_strdup + +struct bh_thread_wait_node; +typedef struct bh_thread_wait_node *bh_thread_wait_list; +typedef struct korp_cond { + struct k_mutex wait_list_lock; + bh_thread_wait_list thread_wait_list; +} korp_cond; + +typedef void* (*thread_start_routine_t)(void*); + +#define wa_malloc bh_malloc +#define wa_free bh_free + +/* Unit test framework is based on C++, where the declaration of + snprintf is different. */ +#ifndef __cplusplus +int snprintf(char *buffer, size_t count, const char *format, ...); +#endif + +#ifndef NULL +#define NULL ((void*)0) +#endif + +#define bh_assert(x) \ + do { \ + if (!(x)) { \ + printk("bh_assert(%s, %d)\n", __func__, __LINE__);\ + } \ + } while (0) + +extern int b_memcpy_s(void * s1, unsigned int s1max, const void * s2, + unsigned int n); +extern int b_strcat_s(char * s1, size_t s1max, const char * s2); +extern int b_strcpy_s(char * s1, size_t s1max, const char * s2); + +#endif diff --git a/core/shared-lib/platform/zephyr/bh_platform_log.c b/core/shared-lib/platform/zephyr/bh_platform_log.c new file mode 100644 index 000000000..c418cd819 --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_platform_log.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_platform.h" +#include + +struct out_context { + int count; +}; + +typedef int (*out_func_t)(int c, void *ctx); + +extern void *__printk_get_hook(void); +static int (*_char_out)(int) = NULL; + +static int char_out(int c, struct out_context *ctx) +{ + ctx->count++; + if (_char_out == NULL) { + _char_out = __printk_get_hook(); + } + return _char_out(c); +} + +static int bh_vprintk(const char *fmt, va_list ap) +{ + struct out_context ctx = { 0 }; + _vprintk((out_func_t) char_out, &ctx, fmt, ap); + return ctx.count; +} + +void bh_log_emit(const char *fmt, va_list ap) +{ + bh_vprintk(fmt, ap); +} + +int bh_fprintf(FILE *stream, const char *fmt, ...) +{ + (void) stream; + va_list ap; + int ret; + + va_start(ap, fmt); + ret = bh_vprintk(fmt, ap); + va_end(ap); + + return ret; +} + +int bh_fflush(void *stream) +{ + (void) stream; + return 0; +} + diff --git a/core/shared-lib/platform/zephyr/bh_thread.c b/core/shared-lib/platform/zephyr/bh_thread.c new file mode 100755 index 000000000..99dd1a246 --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_thread.c @@ -0,0 +1,537 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_thread.h" +#include "bh_assert.h" +#include "bh_log.h" +#include "bh_memory.h" +#include +#include + +typedef struct bh_thread_wait_node { + struct k_sem sem; + bh_thread_wait_list next; +} bh_thread_wait_node; + +typedef struct bh_thread_data { + /* Next thread data */ + struct bh_thread_data *next; + /* Zephyr thread handle */ + korp_tid tid; + /* Jeff thread local root */ + void *tlr; + /* Lock for waiting list */ + struct k_mutex wait_list_lock; + /* Waiting list of other threads who are joining this thread */ + bh_thread_wait_list thread_wait_list; + /* Thread stack size */ + unsigned stack_size; + /* Thread stack */ + char stack[1]; +} bh_thread_data; + +typedef struct bh_thread_obj { + struct k_thread thread; + /* Whether the thread is terminated and this thread object is to + be freed in the future. */ + bool to_be_freed; + struct bh_thread_obj *next; +} bh_thread_obj; + +static bool is_thread_sys_inited = false; + +/* Thread data of supervisor thread */ +static bh_thread_data supervisor_thread_data; + +/* Lock for thread data list */ +static struct k_mutex thread_data_lock; + +/* Thread data list */ +static bh_thread_data *thread_data_list = NULL; + +/* Lock for thread object list */ +static struct k_mutex thread_obj_lock; + +/* Thread object list */ +static bh_thread_obj *thread_obj_list = NULL; + +static void thread_data_list_add(bh_thread_data *thread_data) +{ + k_mutex_lock(&thread_data_lock, K_FOREVER); + if (!thread_data_list) + thread_data_list = thread_data; + else { + /* If already in list, just return */ + bh_thread_data *p = thread_data_list; + while (p) { + if (p == thread_data) { + k_mutex_unlock(&thread_data_lock); + return; + } + p = p->next; + } + + /* Set as head of list */ + thread_data->next = thread_data_list; + thread_data_list = thread_data; + } + k_mutex_unlock(&thread_data_lock); +} + +static void thread_data_list_remove(bh_thread_data *thread_data) +{ + k_mutex_lock(&thread_data_lock, K_FOREVER); + if (thread_data_list) { + if (thread_data_list == thread_data) + thread_data_list = thread_data_list->next; + else { + /* Search and remove it from list */ + bh_thread_data *p = thread_data_list; + while (p && p->next != thread_data) + p = p->next; + if (p && p->next == thread_data) + p->next = p->next->next; + } + } + k_mutex_unlock(&thread_data_lock); +} + +static bh_thread_data * +thread_data_list_lookup(k_tid_t tid) +{ + k_mutex_lock(&thread_data_lock, K_FOREVER); + if (thread_data_list) { + bh_thread_data *p = thread_data_list; + while (p) { + if (p->tid == tid) { + /* Found */ + k_mutex_unlock(&thread_data_lock); + return p; + } + p = p->next; + } + } + k_mutex_unlock(&thread_data_lock); + return NULL; +} + +static void thread_obj_list_add(bh_thread_obj *thread_obj) +{ + k_mutex_lock(&thread_obj_lock, K_FOREVER); + if (!thread_obj_list) + thread_obj_list = thread_obj; + else { + /* Set as head of list */ + thread_obj->next = thread_obj_list; + thread_obj_list = thread_obj; + } + k_mutex_unlock(&thread_obj_lock); +} + +static void thread_obj_list_reclaim() +{ + bh_thread_obj *p, *p_prev; + k_mutex_lock(&thread_obj_lock, K_FOREVER); + p_prev = NULL; + p = thread_obj_list; + while (p) { + if (p->to_be_freed) { + if (p_prev == NULL) { /* p is the head of list */ + thread_obj_list = p->next; + bh_free(p); + p = thread_obj_list; + } else { /* p is not the head of list */ + p_prev->next = p->next; + bh_free(p); + p = p_prev->next; + } + } else { + p_prev = p; + p = p->next; + } + } + k_mutex_unlock(&thread_obj_lock); +} + +int _vm_thread_sys_init() +{ + if (is_thread_sys_inited) + return BHT_OK; + + k_mutex_init(&thread_data_lock); + k_mutex_init(&thread_obj_lock); + + /* Initialize supervisor thread data */ + memset(&supervisor_thread_data, 0, sizeof(supervisor_thread_data)); + supervisor_thread_data.tid = k_current_get(); + /* Set as head of thread data list */ + thread_data_list = &supervisor_thread_data; + + is_thread_sys_inited = true; + return BHT_OK; +} + +void vm_thread_sys_destroy(void) +{ + if (is_thread_sys_inited) { + is_thread_sys_inited = false; + } +} + +static bh_thread_data * +thread_data_current() +{ + k_tid_t tid = k_current_get(); + return thread_data_list_lookup(tid); +} + +static void vm_thread_cleanup(void) +{ + bh_thread_data *thread_data = thread_data_current(); + + bh_assert(thread_data != NULL); + k_mutex_lock(&thread_data->wait_list_lock, K_FOREVER); + if (thread_data->thread_wait_list) { + /* Signal each joining thread */ + bh_thread_wait_list head = thread_data->thread_wait_list; + while (head) { + bh_thread_wait_list next = head->next; + k_sem_give(&head->sem); + bh_free(head); + head = next; + } + thread_data->thread_wait_list = NULL; + } + k_mutex_unlock(&thread_data->wait_list_lock); + + thread_data_list_remove(thread_data); + /* Set flag to true for the next thread creating to + free the thread object */ + ((bh_thread_obj*) thread_data->tid)->to_be_freed = true; + bh_free(thread_data); +} + +static void vm_thread_wrapper(void *start, void *arg, void *thread_data) +{ + /* Set thread custom data */ + ((bh_thread_data*) thread_data)->tid = k_current_get(); + thread_data_list_add(thread_data); + + ((thread_start_routine_t) start)(arg); + vm_thread_cleanup(); +} + +int _vm_thread_create(korp_tid *p_tid, thread_start_routine_t start, void *arg, + unsigned int stack_size) +{ + return _vm_thread_create_with_prio(p_tid, start, arg, stack_size, + BH_THREAD_DEFAULT_PRIORITY); +} + +int _vm_thread_create_with_prio(korp_tid *p_tid, thread_start_routine_t start, + void *arg, unsigned int stack_size, int prio) +{ + korp_tid tid; + bh_thread_data *thread_data; + unsigned thread_data_size; + + if (!p_tid || !stack_size) + return BHT_ERROR; + + /* Free the thread objects of terminated threads */ + thread_obj_list_reclaim(); + + /* Create and initialize thread object */ + if (!(tid = bh_malloc(sizeof(bh_thread_obj)))) + return BHT_ERROR; + + memset(tid, 0, sizeof(bh_thread_obj)); + + /* Create and initialize thread data */ + thread_data_size = offsetof(bh_thread_data, stack) + stack_size; + if (!(thread_data = bh_malloc(thread_data_size))) { + bh_free(tid); + return BHT_ERROR; + } + + memset(thread_data, 0, thread_data_size); + k_mutex_init(&thread_data->wait_list_lock); + thread_data->stack_size = stack_size; + thread_data->tid = tid; + + /* Create the thread */ + if (!((tid = k_thread_create(tid, (k_thread_stack_t *) thread_data->stack, + stack_size, vm_thread_wrapper, start, arg, thread_data, prio, 0, + K_NO_WAIT)))) { + bh_free(tid); + bh_free(thread_data); + return BHT_ERROR; + } + + bh_assert(tid == thread_data->tid); + + /* Set thread custom data */ + thread_data_list_add(thread_data); + thread_obj_list_add((bh_thread_obj*) tid); + *p_tid = tid; + return BHT_OK; +} + +korp_tid _vm_self_thread() +{ + return (korp_tid) k_current_get(); +} + +void vm_thread_exit(void * code) +{ + (void) code; + korp_tid self = vm_self_thread(); + vm_thread_cleanup(); + k_thread_abort((k_tid_t) self); +} + +int _vm_thread_cancel(korp_tid thread) +{ + k_thread_abort((k_tid_t) thread); + return 0; +} + +int _vm_thread_join(korp_tid thread, void **value_ptr, int mills) +{ + (void) value_ptr; + bh_thread_data *thread_data; + bh_thread_wait_node *node; + + /* Create wait node and append it to wait list */ + if (!(node = bh_malloc(sizeof(bh_thread_wait_node)))) + return BHT_ERROR; + + k_sem_init(&node->sem, 0, 1); + node->next = NULL; + + /* Get thread data */ + thread_data = thread_data_list_lookup(thread); + bh_assert(thread_data != NULL); + + k_mutex_lock(&thread_data->wait_list_lock, K_FOREVER); + if (!thread_data->thread_wait_list) + thread_data->thread_wait_list = node; + else { + /* Add to end of waiting list */ + bh_thread_wait_node *p = thread_data->thread_wait_list; + while (p->next) + p = p->next; + p->next = node; + } + k_mutex_unlock(&thread_data->wait_list_lock); + + /* Wait the sem */ + k_sem_take(&node->sem, mills); + + /* Wait some time for the thread to be actually terminated */ + k_sleep(100); + + return BHT_OK; +} + +int _vm_thread_detach(korp_tid thread) +{ + (void) thread; + return BHT_OK; +} + +void *_vm_tls_get(unsigned idx) +{ + (void) idx; + bh_thread_data *thread_data; + + bh_assert(idx == 0); + thread_data = thread_data_current(); + + return thread_data ? thread_data->tlr : NULL; +} + +int _vm_tls_put(unsigned idx, void * tls) +{ + bh_thread_data *thread_data; + + (void) idx; + bh_assert(idx == 0); + thread_data = thread_data_current(); + bh_assert(thread_data != NULL); + + thread_data->tlr = tls; + return BHT_OK; +} + +int _vm_mutex_init(korp_mutex *mutex) +{ + (void) mutex; + k_mutex_init(mutex); + return BHT_OK; +} + +int _vm_recursive_mutex_init(korp_mutex *mutex) +{ + k_mutex_init(mutex); + return BHT_OK; +} + +int _vm_mutex_destroy(korp_mutex *mutex) +{ + (void) mutex; + return BHT_OK; +} + +void vm_mutex_lock(korp_mutex *mutex) +{ + k_mutex_lock(mutex, K_FOREVER); +} + +int vm_mutex_trylock(korp_mutex *mutex) +{ + return k_mutex_lock(mutex, K_NO_WAIT); +} + +void vm_mutex_unlock(korp_mutex *mutex) +{ + k_mutex_unlock(mutex); +} + +int _vm_sem_init(korp_sem* sem, unsigned int c) +{ + k_sem_init(sem, 0, c); + return BHT_OK; +} + +int _vm_sem_destroy(korp_sem *sem) +{ + (void) sem; + return BHT_OK; +} + +int _vm_sem_wait(korp_sem *sem) +{ + return k_sem_take(sem, K_FOREVER); +} + +int _vm_sem_reltimedwait(korp_sem *sem, int mills) +{ + return k_sem_take(sem, mills); +} + +int _vm_sem_post(korp_sem *sem) +{ + k_sem_give(sem); + return BHT_OK; +} + +int _vm_cond_init(korp_cond *cond) +{ + k_mutex_init(&cond->wait_list_lock); + cond->thread_wait_list = NULL; + return BHT_OK; +} + +int _vm_cond_destroy(korp_cond *cond) +{ + (void) cond; + return BHT_OK; +} + +static int _vm_cond_wait_internal(korp_cond *cond, korp_mutex *mutex, + bool timed, int mills) +{ + bh_thread_wait_node *node; + + /* Create wait node and append it to wait list */ + if (!(node = bh_malloc(sizeof(bh_thread_wait_node)))) + return BHT_ERROR; + + k_sem_init(&node->sem, 0, 1); + node->next = NULL; + + k_mutex_lock(&cond->wait_list_lock, K_FOREVER); + if (!cond->thread_wait_list) + cond->thread_wait_list = node; + else { + /* Add to end of wait list */ + bh_thread_wait_node *p = cond->thread_wait_list; + while (p->next) + p = p->next; + p->next = node; + } + k_mutex_unlock(&cond->wait_list_lock); + + /* Unlock mutex, wait sem and lock mutex again */ + k_mutex_unlock(mutex); + k_sem_take(&node->sem, timed ? mills : K_FOREVER); + k_mutex_lock(mutex, K_FOREVER); + + /* Remove wait node from wait list */ + k_mutex_lock(&cond->wait_list_lock, K_FOREVER); + if (cond->thread_wait_list == node) + cond->thread_wait_list = node->next; + else { + /* Remove from the wait list */ + bh_thread_wait_node *p = cond->thread_wait_list; + while (p->next != node) + p = p->next; + p->next = node->next; + } + bh_free(node); + k_mutex_unlock(&cond->wait_list_lock); + + return BHT_OK; +} + +int _vm_cond_wait(korp_cond *cond, korp_mutex *mutex) +{ + return _vm_cond_wait_internal(cond, mutex, false, 0); +} + +int _vm_cond_reltimedwait(korp_cond *cond, korp_mutex *mutex, int mills) +{ + return _vm_cond_wait_internal(cond, mutex, true, mills); +} + +int _vm_cond_signal(korp_cond *cond) +{ + /* Signal the head wait node of wait list */ + k_mutex_lock(&cond->wait_list_lock, K_FOREVER); + if (cond->thread_wait_list) + k_sem_give(&cond->thread_wait_list->sem); + k_mutex_unlock(&cond->wait_list_lock); + + return BHT_OK; +} + +int _vm_cond_broadcast(korp_cond *cond) +{ + /* Signal each wait node of wait list */ + k_mutex_lock(&cond->wait_list_lock, K_FOREVER); + if (cond->thread_wait_list) { + bh_thread_wait_node *p = cond->thread_wait_list; + while (p) { + k_sem_give(&p->sem); + p = p->next; + } + } + k_mutex_unlock(&cond->wait_list_lock); + + return BHT_OK; +} + diff --git a/core/shared-lib/platform/zephyr/bh_time.c b/core/shared-lib/platform/zephyr/bh_time.c new file mode 100755 index 000000000..9fe2bdbb8 --- /dev/null +++ b/core/shared-lib/platform/zephyr/bh_time.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_time.h" + +/* + * This function returns milliseconds per tick. + * @return milliseconds per tick. + */ +uint64 _bh_time_get_tick_millisecond() +{ + return k_uptime_get_32(); +} + +/* + * This function returns milliseconds after boot. + * @return milliseconds after boot. + */ +uint64 _bh_time_get_boot_millisecond() +{ + return k_uptime_get_32(); +} + +uint64 _bh_time_get_millisecond_from_1970() +{ + return k_uptime_get(); +} + +size_t _bh_time_strftime(char *str, size_t max, const char *format, int64 time) +{ + (void) format; + (void) time; + uint32 t = k_uptime_get_32(); + int h, m, s; + + t = t % (24 * 60 * 60); + h = t / (60 * 60); + t = t % (60 * 60); + m = t / 60; + s = t % 60; + + return snprintf(str, max, "%02d:%02d:%02d", h, m, s); +} + diff --git a/core/shared-lib/platform/zephyr/shared_platform.cmake b/core/shared-lib/platform/zephyr/shared_platform.cmake new file mode 100644 index 000000000..102ec9c78 --- /dev/null +++ b/core/shared-lib/platform/zephyr/shared_platform.cmake @@ -0,0 +1,24 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${PLATFORM_SHARED_DIR}) +include_directories(${PLATFORM_SHARED_DIR}/../include) + + +file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c) + +set (PLATFORM_SHARED_SOURCE ${source_all}) + diff --git a/core/shared-lib/shared_lib.cmake b/core/shared-lib/shared_lib.cmake new file mode 100644 index 000000000..7c131940e --- /dev/null +++ b/core/shared-lib/shared_lib.cmake @@ -0,0 +1,17 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include (${CMAKE_CURRENT_LIST_DIR}/utils/shared_utils.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/mem-alloc/mem_alloc.cmake) +include (${CMAKE_CURRENT_LIST_DIR}/platform/${PLATFORM}/shared_platform.cmake) diff --git a/core/shared-lib/utils/CMakeLists.txt b/core/shared-lib/utils/CMakeLists.txt new file mode 100644 index 000000000..1f2e561c7 --- /dev/null +++ b/core/shared-lib/utils/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include_directories (. ../include ../platform/include ../platform/${PLATFORM} coap/er-coap coap/extension) + + +file (GLOB_RECURSE source_all *.c ) + +add_library (vmutilslib ${source_all}) + diff --git a/core/shared-lib/utils/Makefile b/core/shared-lib/utils/Makefile new file mode 100644 index 000000000..0a2104cff --- /dev/null +++ b/core/shared-lib/utils/Makefile @@ -0,0 +1,16 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +obj-y += bh_list.o bh_log.o attr-container.o bh_queue.o +obj-y += coap/ diff --git a/core/shared-lib/utils/bh_list.c b/core/shared-lib/utils/bh_list.c new file mode 100644 index 000000000..0c15ff513 --- /dev/null +++ b/core/shared-lib/utils/bh_list.c @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_list.h" +#include "bh_assert.h" + +#ifdef BH_DEBUG +/** + * Test whehter a pointer value has exist in given list. + * + * @param list pointer to list. + * @param elem pointer to elem that will be inserted into list. + * @return true if the pointer has been in the list; + * false otherwise. + */ +BH_STATIC bool bh_list_is_elem_exist(bh_list *list, void *elem); +#endif + +bh_list_status bh_list_init(bh_list *list) +{ + if (!list) + return BH_LIST_ERROR; + + (list->head).next = NULL; + list->len = 0; + return BH_LIST_SUCCESS; +} + +bh_list_status _bh_list_insert(bh_list *list, void *elem) +{ + bh_list_link *p = NULL; + + if (!list || !elem) + return BH_LIST_ERROR; +#ifdef BH_DEBUG + bh_assert (!bh_list_is_elem_exist(list, elem)); +#endif + p = (bh_list_link *) elem; + p->next = (list->head).next; + (list->head).next = p; + list->len++; + return BH_LIST_SUCCESS; +} + +bh_list_status bh_list_remove(bh_list *list, void *elem) +{ + bh_list_link *cur = NULL; + bh_list_link *prev = NULL; + + if (!list || !elem) + return BH_LIST_ERROR; + + cur = (list->head).next; + + while (cur) { + if (cur == elem) { + if (prev) + prev->next = cur->next; + else + (list->head).next = cur->next; + + list->len--; + return BH_LIST_SUCCESS; + } + + prev = cur; + cur = cur->next; + } + + return BH_LIST_ERROR; +} + +uint32 bh_list_length(bh_list *list) +{ + return (list ? list->len : 0); +} + +void* bh_list_first_elem(bh_list *list) +{ + return (list ? (list->head).next : NULL); +} + +void* bh_list_elem_next(void *node) +{ + return (node ? ((bh_list_link *) node)->next : NULL); +} + +#ifdef BH_DEBUG +BH_STATIC bool bh_list_is_elem_exist(bh_list *list, void *elem) +{ + bh_list_link *p = NULL; + + if (!list || !elem) return false; + + p = (list->head).next; + while (p && p != elem) p = p->next; + + return (p != NULL); +} +#endif + diff --git a/core/shared-lib/utils/bh_log.c b/core/shared-lib/utils/bh_log.c new file mode 100644 index 000000000..58591fb66 --- /dev/null +++ b/core/shared-lib/utils/bh_log.c @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @file bh_log.c + * @date Tue Nov 8 18:20:06 2011 + * + * @brief Implementation of Beihai's log system. + */ + +#include "bh_assert.h" +#include "bh_time.h" +#include "bh_thread.h" +#include "bh_log.h" +#include "bh_platform_log.h" + +/** + * The verbose level of the log system. Only those verbose logs whose + * levels are less than or equal to this value are outputed. + */ +static int log_verbose_level; + +/** + * The lock for protecting the global output stream of logs. + */ +static korp_mutex log_stream_lock; + +/** + * The current logging thread that owns the log_stream_lock. + */ +static korp_tid cur_logging_thread = INVALID_THREAD_ID; + +/** + * Whether the currently being printed log is ennabled. + */ +static bool cur_log_enabled; + +int _bh_log_init() +{ + log_verbose_level = 3; + return vm_mutex_init(&log_stream_lock); +} + +void _bh_log_set_verbose_level(int level) +{ + log_verbose_level = level; +} + +void _bh_log_printf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + _bh_log_vprintf(fmt, ap); + va_end(ap); +} + +/** + * Return true if the given tag is enabled by the configuration. + * + * @param tag the tag (or prefix) of the log message. + * + * @return true if the log should be enabled. + */ +static bool is_log_enabled(const char *tag) +{ + /* Print all non-verbose or verbose logs whose levels are less than + or equal to the configured verbose level. */ + return tag[0] != 'V' || tag[1] - '0' <= log_verbose_level; +} + +/** + * Helper function for converting "..." to va_list. + */ +static void bh_log_emit_helper(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + bh_log_emit(fmt, ap); + va_end(ap); +} + +extern size_t _bh_time_strftime(char *s, size_t max, const char *format, + int64 time); + +void _bh_log_vprintf(const char *fmt, va_list ap) +{ + korp_tid self = vm_self_thread(); + /* Try to own the log stream and start the log output. */ + if (self != cur_logging_thread) { + vm_mutex_lock(&log_stream_lock); + cur_logging_thread = self; + + if (fmt && (cur_log_enabled = is_log_enabled(fmt))) { + char buf[32]; + bh_time_strftime(buf, 32, "%Y-%m-%d %H:%M:%S", + bh_time_get_millisecond_from_1970()); + bh_log_emit_helper("\n[%s - %X]: ", buf, (int) self); + + /* Strip the "Vn." prefix. */ + if (fmt && strlen(fmt) >= 3 && fmt[0] == 'V' && fmt[1] && fmt[2]) + fmt += 3; + } + } + + if (cur_log_enabled && fmt) + bh_log_emit(fmt, ap); +} + +void _bh_log_commit() +{ + if (vm_self_thread() != cur_logging_thread) + /* Ignore the single commit without printing anything. */ + return; + + cur_logging_thread = INVALID_THREAD_ID; + vm_mutex_unlock(&log_stream_lock); +} + +void _bh_log(const char *tag, const char *file, int line, const char *fmt, ...) +{ + va_list ap; + + if (tag) + _bh_log_printf(tag); + + if (file) + _bh_log_printf("%s:%d", file, line); + + va_start(ap, fmt); + _bh_log_vprintf(fmt, ap); + va_end(ap); + + _bh_log_commit(); +} + +#if defined(BH_DEBUG) + +BH_STATIC char com_switchs[LOG_COM_MAX]; /* 0: off; 1: on */ +BH_STATIC char *com_names[LOG_COM_MAX] = {"app_manager", "gc", "hmc", "utils", + "verifier_jeff", "vmcore_jeff"}; + +BH_STATIC int com_find_name(const char **com) +{ + int i; + const char *c, *name; + + for (i = 0; i < LOG_COM_MAX; i++) { + c = *com; + name = com_names[i]; + while (*name != '\0') { + if (*c != *name) + break; + c++; + name++; + } + if (*name == '\0') { + *com = c; + return i; + } + } + + return LOG_COM_MAX; +} + +void log_parse_coms(const char *coms) +{ + int i; + + for (i = LOG_COM_MAX; i--; ) + com_switchs[i] = 0; + + com_switchs[LOG_COM_UTILS] = 1; /* utils is a common part */ + + if (coms == NULL) + return; + + while (*coms != '\0') { + i = com_find_name(&coms); + if (i == LOG_COM_MAX) + break; + com_switchs[i] = 1; + + if (*coms == '\0') + return; + if (*coms != ';') + break; + /* *com == ';' */ + coms++; + } + + /* Log the message without aborting. */ + LOG_DEBUG(LOG_COM_UTILS, "The component names for logging are not right: %s.", coms); +} + +int bh_log_dcom_is_enabled(int component) +{ + return com_switchs[component]; +} + +#endif /* defined(BH_DEBUG) */ + diff --git a/core/shared-lib/utils/bh_queue.c b/core/shared-lib/utils/bh_queue.c new file mode 100644 index 000000000..2fef7ace0 --- /dev/null +++ b/core/shared-lib/utils/bh_queue.c @@ -0,0 +1,258 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bh_queue.h" +#include "bh_thread.h" +#include "bh_memory.h" +#include "bh_time.h" +#include "bh_common.h" + +typedef struct _bh_queue_node { + struct _bh_queue_node * next; + struct _bh_queue_node * prev; + unsigned short tag; + unsigned long len; + void * body; + bh_msg_cleaner msg_cleaner; +} bh_queue_node; + +struct bh_queue { + bh_queue_mutex queue_lock; + bh_queue_cond queue_wait_cond; + unsigned int cnt; + unsigned int max; + unsigned int drops; + bh_queue_node * head; + bh_queue_node * tail; + + bool exit_loop_run; +}; + +char * bh_message_payload(bh_message_t message) +{ + return message->body; +} + +int bh_message_payload_len(bh_message_t message) +{ + return message->len; +} + +int bh_message_type(bh_message_t message) +{ + return message->tag; +} + +bh_queue * +bh_queue_create() +{ + int ret; + bh_queue *queue = bh_queue_malloc(sizeof(bh_queue)); + + if (queue) { + memset(queue, 0, sizeof(bh_queue)); + queue->max = DEFAULT_QUEUE_LENGTH; + + ret = bh_queue_mutex_init(&queue->queue_lock); + if (ret != 0) { + bh_queue_free(queue); + return NULL; + } + + ret = bh_queue_cond_init(&queue->queue_wait_cond); + if (ret != 0) { + bh_queue_mutex_destroy(&queue->queue_lock); + bh_queue_free(queue); + return NULL; + } + } + + return queue; +} + +void bh_queue_destroy(bh_queue *queue) +{ + bh_queue_node *node; + + if (!queue) + return; + + bh_queue_mutex_lock(&queue->queue_lock); + while (queue->head) { + node = queue->head; + queue->head = node->next; + + bh_free_msg(node); + } + bh_queue_mutex_unlock(&queue->queue_lock); + + bh_queue_cond_destroy(&queue->queue_wait_cond); + bh_queue_mutex_destroy(&queue->queue_lock); + bh_queue_free(queue); +} + +bool bh_post_msg2(bh_queue *queue, bh_queue_node *msg) +{ + if (queue->cnt >= queue->max) { + queue->drops++; + bh_free_msg(msg); + return false; + } + + bh_queue_mutex_lock(&queue->queue_lock); + + if (queue->cnt == 0) { + bh_assert(queue->head == NULL); + bh_assert(queue->tail == NULL); + queue->head = queue->tail = msg; + msg->next = msg->prev = NULL; + queue->cnt = 1; + + bh_queue_cond_signal(&queue->queue_wait_cond); + } else { + msg->next = NULL; + msg->prev = queue->tail; + queue->tail->next = msg; + queue->tail = msg; + queue->cnt++; + } + + bh_queue_mutex_unlock(&queue->queue_lock); + + return true; +} + +bool bh_post_msg(bh_queue *queue, unsigned short tag, void *body, + unsigned int len) +{ + bh_queue_node *msg = bh_new_msg(tag, body, len, NULL); + if (msg == NULL) { + queue->drops++; + if (len != 0 && body) + bh_free(body); + return false; + } + + if (!bh_post_msg2(queue, msg)) { + // bh_post_msg2 already freed the msg for failure + return false; + } + + return true; +} + +bh_queue_node * bh_new_msg(unsigned short tag, void *body, unsigned int len, + void * handler) +{ + bh_queue_node *msg = (bh_queue_node*) bh_queue_malloc( + sizeof(bh_queue_node)); + if (msg == NULL) + return NULL; + memset(msg, 0, sizeof(bh_queue_node)); + msg->len = len; + msg->body = body; + msg->tag = tag; + msg->msg_cleaner = (bh_msg_cleaner) handler; + + return msg; +} + +void bh_free_msg(bh_queue_node *msg) +{ + if (msg->msg_cleaner) { + msg->msg_cleaner(msg->body); + bh_queue_free(msg); + return; + } + + // note: sometime we just use the payload pointer for a integer value + // len!=0 is the only indicator about the body is an allocated buffer. + if (msg->body && msg->len) + bh_queue_free(msg->body); + + bh_queue_free(msg); +} + +bh_message_t bh_get_msg(bh_queue *queue, int timeout) +{ + bh_queue_node *msg = NULL; + bh_queue_mutex_lock(&queue->queue_lock); + + if (queue->cnt == 0) { + bh_assert(queue->head == NULL); + bh_assert(queue->tail == NULL); + + if (timeout == 0) { + bh_queue_mutex_unlock(&queue->queue_lock); + return NULL; + } + + bh_queue_cond_timedwait(&queue->queue_wait_cond, &queue->queue_lock, + timeout); + } + + if (queue->cnt == 0) { + bh_assert(queue->head == NULL); + bh_assert(queue->tail == NULL); + } else if (queue->cnt == 1) { + bh_assert(queue->head == queue->tail); + + msg = queue->head; + queue->head = queue->tail = NULL; + queue->cnt = 0; + } else { + msg = queue->head; + queue->head = queue->head->next; + queue->head->prev = NULL; + queue->cnt--; + } + + bh_queue_mutex_unlock(&queue->queue_lock); + + return msg; +} + +unsigned bh_queue_get_message_count(bh_queue *queue) +{ + if (!queue) + return 0; + + return queue->cnt; +} + +void bh_queue_enter_loop_run(bh_queue *queue, + bh_queue_handle_msg_callback handle_cb) +{ + if (!queue) + return; + + while (!queue->exit_loop_run) { + bh_queue_node * message = bh_get_msg(queue, BH_WAIT_FOREVER); + + if (message) { + handle_cb(message); + bh_free_msg(message); + } + } +} + +void bh_queue_exit_loop_run(bh_queue *queue) +{ + if (queue) { + queue->exit_loop_run = true; + bh_queue_cond_signal(&queue->queue_wait_cond); + } +} diff --git a/core/shared-lib/utils/runtime_timer.c b/core/shared-lib/utils/runtime_timer.c new file mode 100644 index 000000000..60356e930 --- /dev/null +++ b/core/shared-lib/utils/runtime_timer.c @@ -0,0 +1,478 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "runtime_timer.h" +#include "bh_thread.h" +#include "bh_time.h" + +#define PRINT(...) +//#define PRINT printf + +typedef struct _app_timer { + struct _app_timer * next; + uint32 id; + unsigned int interval; + uint64 expiry; + bool is_periodic; +} app_timer_t; + +struct _timer_ctx { + app_timer_t * g_app_timers; + app_timer_t * idle_timers; + app_timer_t * free_timers; + unsigned int g_max_id; + int pre_allocated; + unsigned int owner; + + //add mutext and conditions + korp_cond cond; + korp_mutex mutex; + + timer_callback_f timer_callback; + check_timer_expiry_f refresh_checker; +}; + +uint32 bh_get_elpased_ms(uint32 * last_system_clock) +{ + uint32 elpased_ms; + + // attention: the bh_get_tick_ms() return 64 bits integer. + // but the bh_get_elpased_ms() is designed to use 32 bits clock count. + uint32 now = (uint32) bh_get_tick_ms(); + + // system clock overrun + if (now < *last_system_clock) { + elpased_ms = now + (0xFFFFFFFF - *last_system_clock) + 1; + } else { + elpased_ms = now - *last_system_clock; + } + + *last_system_clock = now; + + return elpased_ms; +} + +static app_timer_t * remove_timer_from(timer_ctx_t ctx, uint32 timer_id, + bool active_list) +{ + vm_mutex_lock(&ctx->mutex); + app_timer_t ** head; + if (active_list) + head = &ctx->g_app_timers; + else + head = &ctx->idle_timers; + + app_timer_t * t = *head; + app_timer_t * prev = NULL; + + while (t) { + if (t->id == timer_id) { + if (prev == NULL) { + *head = t->next; + PRINT("removed timer [%d] at head from list %d\n", t->id, active_list); + } else { + prev->next = t->next; + PRINT("removed timer [%d] after [%d] from list %d\n", t->id, prev->id, active_list); + } + vm_mutex_unlock(&ctx->mutex); + + if (active_list && prev == NULL && ctx->refresh_checker) + ctx->refresh_checker(ctx); + + return t; + } else { + prev = t; + t = t->next; + } + } + + vm_mutex_unlock(&ctx->mutex); + + return NULL; +} + +static app_timer_t * remove_timer(timer_ctx_t ctx, uint32 timer_id, + bool * active) +{ + app_timer_t* t = remove_timer_from(ctx, timer_id, true); + if (t) { + if (active) + *active = true; + return t; + } + + if (active) + *active = false; + return remove_timer_from(ctx, timer_id, false); +} + +static void reschedule_timer(timer_ctx_t ctx, app_timer_t * timer) +{ + + vm_mutex_lock(&ctx->mutex); + app_timer_t * t = ctx->g_app_timers; + app_timer_t * prev = NULL; + + timer->next = NULL; + timer->expiry = bh_get_tick_ms() + timer->interval; + + while (t) { + if (timer->expiry < t->expiry) { + if (prev == NULL) { + timer->next = ctx->g_app_timers; + ctx->g_app_timers = timer; + PRINT("rescheduled timer [%d] at head\n", timer->id); + } else { + timer->next = t; + prev->next = timer; + PRINT("rescheduled timer [%d] after [%d]\n", timer->id, prev->id); + } + + vm_mutex_unlock(&ctx->mutex); + + // ensure the refresh_checker() is called out of the lock + if (prev == NULL && ctx->refresh_checker) + ctx->refresh_checker(ctx); + + return; + } else { + prev = t; + t = t->next; + } + } + + if (prev) { + // insert to the list end + prev->next = timer; + PRINT("rescheduled timer [%d] at end, after [%d]\n", timer->id, prev->id); + } else { + // insert at the begin + bh_assert(ctx->g_app_timers == NULL); + ctx->g_app_timers = timer; + PRINT("rescheduled timer [%d] as first\n", timer->id); + } + + vm_mutex_unlock(&ctx->mutex); + + // ensure the refresh_checker() is called out of the lock + if (prev == NULL && ctx->refresh_checker) + ctx->refresh_checker(ctx); + +} + +static void release_timer(timer_ctx_t ctx, app_timer_t * t) +{ + if (ctx->pre_allocated) { + vm_mutex_lock(&ctx->mutex); + t->next = ctx->free_timers; + ctx->free_timers = t; + PRINT("recycle timer :%d\n", t->id); + vm_mutex_unlock(&ctx->mutex); + } else { + PRINT("destroy timer :%d\n", t->id); + bh_free(t); + } +} + +void release_timer_list(app_timer_t ** p_list) +{ + app_timer_t *t = *p_list; + while (t) { + app_timer_t *next = t->next; + PRINT("destroy timer list:%d\n", t->id); + bh_free(t); + t = next; + } + + *p_list = NULL; +} + +/* + * + * API exposed + * + */ + +timer_ctx_t create_timer_ctx(timer_callback_f timer_handler, + check_timer_expiry_f expiery_checker, int prealloc_num, + unsigned int owner) +{ + timer_ctx_t ctx = (timer_ctx_t) bh_malloc(sizeof(struct _timer_ctx)); + if (ctx == NULL) + return NULL; + memset(ctx, 0, sizeof(struct _timer_ctx)); + + ctx->timer_callback = timer_handler; + ctx->pre_allocated = prealloc_num; + ctx->refresh_checker = expiery_checker; + ctx->owner = owner; + + while (prealloc_num > 0) { + app_timer_t *timer = (app_timer_t*) bh_malloc(sizeof(app_timer_t)); + if (timer == NULL) + goto cleanup; + + memset(timer, 0, sizeof(*timer)); + timer->next = ctx->free_timers; + ctx->free_timers = timer; + prealloc_num--; + } + + vm_cond_init(&ctx->cond); + vm_mutex_init(&ctx->mutex); + + PRINT("timer ctx created. pre-alloc: %d\n", ctx->pre_allocated); + + return ctx; + + cleanup: + + if (ctx) { + release_timer_list(&ctx->free_timers); + bh_free(ctx); + } + printf("timer ctx create failed\n"); + return NULL; +} + +void destroy_timer_ctx(timer_ctx_t ctx) +{ + while (ctx->free_timers) { + void * tmp = ctx->free_timers; + ctx->free_timers = ctx->free_timers->next; + bh_free(tmp); + } + + cleanup_app_timers(ctx); + + vm_cond_destroy(&ctx->cond); + vm_mutex_destroy(&ctx->mutex); + bh_free(ctx); +} + +void timer_ctx_set_lock(timer_ctx_t ctx, bool lock) +{ + if (lock) + vm_mutex_lock(&ctx->mutex); + else + vm_mutex_unlock(&ctx->mutex); +} + +void * timer_ctx_get_lock(timer_ctx_t ctx) +{ + return &ctx->mutex; +} + +unsigned int timer_ctx_get_owner(timer_ctx_t ctx) +{ + return ctx->owner; +} + +void add_idle_timer(timer_ctx_t ctx, app_timer_t * timer) +{ + vm_mutex_lock(&ctx->mutex); + timer->next = ctx->idle_timers; + ctx->idle_timers = timer; + vm_mutex_unlock(&ctx->mutex); +} + +uint32 sys_create_timer(timer_ctx_t ctx, int interval, bool is_period, + bool auto_start) +{ + + app_timer_t *timer; + + if (ctx->pre_allocated) { + if (ctx->free_timers == NULL) + return -1; + else { + timer = ctx->free_timers; + ctx->free_timers = timer->next; + } + } else { + timer = (app_timer_t*) bh_malloc(sizeof(app_timer_t)); + if (timer == NULL) + return -1; + } + + memset(timer, 0, sizeof(*timer)); + + ctx->g_max_id++; + if (ctx->g_max_id == -1) + ctx->g_max_id++; + timer->id = ctx->g_max_id; + timer->interval = interval; + timer->is_periodic = is_period; + + if (auto_start) + reschedule_timer(ctx, timer); + else + add_idle_timer(ctx, timer); + + return timer->id; +} + +bool sys_timer_cancel(timer_ctx_t ctx, uint32 timer_id) +{ + bool from_active; + app_timer_t * t = remove_timer(ctx, timer_id, &from_active); + if (t == NULL) + return false; + + add_idle_timer(ctx, t); + + PRINT("sys_timer_stop called\n"); + return from_active; +} + +bool sys_timer_destory(timer_ctx_t ctx, uint32 timer_id) +{ + bool from_active; + app_timer_t * t = remove_timer(ctx, timer_id, &from_active); + if (t == NULL) + return false; + + release_timer(ctx, t); + + PRINT("sys_timer_destory called\n"); + return true; +} + +bool sys_timer_restart(timer_ctx_t ctx, uint32 timer_id, int interval) +{ + app_timer_t * t = remove_timer(ctx, timer_id, NULL); + if (t == NULL) + return false; + + if (interval > 0) + t->interval = interval; + + reschedule_timer(ctx, t); + + PRINT("sys_timer_restart called\n"); + return true; +} + +/* + * + * + * API called by the timer manager from another thread or the kernel timer handler + * + * + */ + +// lookup the app queue by the module name +//post a timeout message to the app queue +// +static void handle_expired_timers(timer_ctx_t ctx, app_timer_t * expired) +{ + while (expired) { + app_timer_t * t = expired; + ctx->timer_callback(t->id, ctx->owner); + + expired = expired->next; + if (t->is_periodic) { + // if it is repeating, then reschedule it; + reschedule_timer(ctx, t); + + } else { + // else move it to idle list + add_idle_timer(ctx, t); + } + } +} + +int get_expiry_ms(timer_ctx_t ctx) +{ + int ms_to_next_expiry; + uint64 now = bh_get_tick_ms(); + + vm_mutex_lock(&ctx->mutex); + if (ctx->g_app_timers == NULL) + ms_to_next_expiry = 7 * 24 * 60 * 60 * 1000; // 1 week + else if (ctx->g_app_timers->expiry >= now) + ms_to_next_expiry = ctx->g_app_timers->expiry - now; + else + ms_to_next_expiry = 0; + vm_mutex_unlock(&ctx->mutex); + + return ms_to_next_expiry; +} + +int check_app_timers(timer_ctx_t ctx) +{ + vm_mutex_lock(&ctx->mutex); + + app_timer_t * t = ctx->g_app_timers; + app_timer_t * prev = NULL; + app_timer_t * expired = NULL; + + uint64 now = bh_get_tick_ms(); + + while (t) { + if (now >= t->expiry) { + ctx->g_app_timers = t->next; + + t->next = expired; + expired = t; + + t = ctx->g_app_timers; + } else { + break; + } + } + vm_mutex_unlock(&ctx->mutex); + + handle_expired_timers(ctx, expired); + + return get_expiry_ms(ctx); +} + +void cleanup_app_timers(timer_ctx_t ctx) +{ + app_timer_t *t; + + vm_mutex_lock(&ctx->mutex); + + release_timer_list(&ctx->g_app_timers); + release_timer_list(&ctx->idle_timers); + + vm_mutex_unlock(&ctx->mutex); +} + +/* + * + * One reference implementation for timer manager + * + * + */ + +void * thread_timer_check(void * arg) +{ + timer_ctx_t ctx = (timer_ctx_t) arg; + while (1) { + int ms_to_expiry = check_app_timers(ctx); + vm_mutex_lock(&ctx->mutex); + vm_cond_reltimedwait(&ctx->cond, &ctx->mutex, ms_to_expiry); + vm_mutex_unlock(&ctx->mutex); + } +} + +void wakeup_timer_thread(timer_ctx_t ctx) +{ + vm_cond_signal(&ctx->cond); +} + diff --git a/core/shared-lib/utils/runtime_timer.h b/core/shared-lib/utils/runtime_timer.h new file mode 100644 index 000000000..1f0aaa063 --- /dev/null +++ b/core/shared-lib/utils/runtime_timer.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIB_BASE_RUNTIME_TIMER_H_ +#define LIB_BASE_RUNTIME_TIMER_H_ + +#include "bh_platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +uint32 bh_get_elpased_ms(uint32 * last_system_clock); + +struct _timer_ctx; +typedef struct _timer_ctx * timer_ctx_t; +typedef void (*timer_callback_f)(uint32 id, unsigned int owner); +typedef void (*check_timer_expiry_f)(timer_ctx_t ctx); + +timer_ctx_t create_timer_ctx(timer_callback_f timer_handler, + check_timer_expiry_f, int prealloc_num, unsigned int owner); +void destroy_timer_ctx(timer_ctx_t); +void timer_ctx_set_lock(timer_ctx_t ctx, bool lock); +void * timer_ctx_get_lock(timer_ctx_t ctx); +unsigned int timer_ctx_get_owner(timer_ctx_t ctx); + +uint32 sys_create_timer(timer_ctx_t ctx, int interval, bool is_period, + bool auto_start); +bool sys_timer_destory(timer_ctx_t ctx, uint32 timer_id); +bool sys_timer_cancel(timer_ctx_t ctx, uint32 timer_id); +bool sys_timer_restart(timer_ctx_t ctx, uint32 timer_id, int interval); +void cleanup_app_timers(timer_ctx_t ctx); +int check_app_timers(timer_ctx_t ctx); +int get_expiry_ms(timer_ctx_t ctx); + +void wakeup_timer_thread(timer_ctx_t ctx); +void * thread_timer_check(void * arg); + +#ifdef __cplusplus +} +#endif +#endif /* LIB_BASE_RUNTIME_TIMER_H_ */ diff --git a/core/shared-lib/utils/shared_utils.cmake b/core/shared-lib/utils/shared_utils.cmake new file mode 100644 index 000000000..910ea8711 --- /dev/null +++ b/core/shared-lib/utils/shared_utils.cmake @@ -0,0 +1,24 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set (UTILS_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR}) + +include_directories(${UTILS_SHARED_DIR}) +include_directories(${UTILS_SHARED_DIR}/../include) + + +file (GLOB_RECURSE source_all ${UTILS_SHARED_DIR}/*.c) + +set (UTILS_SHARED_SOURCE ${source_all}) + diff --git a/projects/README.md b/projects/README.md new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/projects/README.md @@ -0,0 +1 @@ +#

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 F_aC(cL)QQR literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o new file mode 100644 index 0000000000000000000000000000000000000000..112c282f172b132194c47ac95e5b6de94cd46d64 GIT binary patch literal 2608 zcma)8O>7%Q6n+~!sY{c_m|szl778Lr&B~@}D5ZzcXz8U?QPpsOqV2{RV-wpO+2j61 z4TRd2YB@*|_>cn^L?tdra6%kFvXt^u&Kx*!1PN4wgwz9vNalUBJC40Ip)Z+v^S$4h zH#;wR*FN=%VHl*zpa|_CqVs!v&6Hvjl%R2%um4tU$G^9?VL1M!y?xvmZ?9p^P5{lXN0?GW^#F9O3z%VWHO>;W?aUL$IM*uf}79z>Y`f^rdKjc zLYn2=im>k6-PcU%lDe6)ID?BD@sx1 zoa)59K`zyM?d!bHh8?ThwT3-fx7WnS53;0g-$}Kqt2L4%)zvksJdtG~y{&#!d8;?$ zs;qw;;`&$HQK&kVn%33r_3G++r*g2`9%XU%c-Y(Yz5il)wHh@;8 zal_tx$=+C<$o@PyYE$P|+q=E5VXrmjH|p_*-E6#iM;snQjpeYiy0t|oXJ?O@6Y~p| zqO6!ltSKuwIbBgG^-gNqN={j+yo#)i*+%ND*4Hv)PLlh(hsqdx~Z6XJFCk(%LKC{=fYiKZz1-O+3C z{+A3q)T?G331Qw~4@F2l;;tk@Bi%I?5sHQI-Vh!Q;js|jM-K!Noa26q^6&|@OK|?D z1B_ZFIR6U)Mr{(bm*xTt7U%JL2sF1qD{vz&Kj#w!)9G&xSL z?BsJ&=7l4Qi#fO0Z{p;NIq8eg9~|^VM|zIm6UkBW^4?p7&PJ+LQ9AFH1ubNqf@(tq zN5D);2u{fDEWPBUvr7*83vm^RhV~QjFBx3&NpQZZqmXlf&w?k2aCXQq1o98S`9f|4 z^3MbLH{kri{{sFH(Vv0-pFlstcLDuV;13fW4)82<#6JzpdC!4ALUa|JFW7`Xe^N8x z{CDO&I6fh(e7PXq1?IBk^Q>M;aY>T3=t`HYg>qR<)?F31U}g=t3acdYzOwJ${7bP) zo*%g1XwWrTX|GV=j!st5lfpWAdVW&f0;vQ7SHpkE_$c>E2iTCy(tTl5AxG#yPx8Q8 zzuf<_dzNkRI{(k^&;UD~i&fqK1x^HO-2spnZ&Z`^!F$76+nwUI>T`jiwtIsyu6ibr z|HQ2Z?-v8U_=d6nOFZB+!~>M&F|LE~8g`%>kKVi&8L0lLv^(cmW89nfSI)c1GUSC^ z=lz7&h?nF6>hK1p{iT|r!}u)VO32d@UGP8v8&Hb}*7_Vr*$!vZq|fm+3wrl=g^PhY vV}IzLdVlDXy{VdP_anAbx;q5FcJHdqLM9Z#RVH{J}_Z*25v4XM+_L7cTa2;A5*D1)Tg@A&XCGG86n=~c4(N?w! zW&>kZ1wlddMI7SeU?4*fYuBlRJycM95FZ4E%;up=9|VQ?`<>i#b8kp#Ke+e%^ZU;C z=X@vU<_+t)rwzjpO@_2dLle2$QAdUq8<4x?pu|gm6svvTSryuDUBRntRf?-d$*SIZ zUuo5q-s=R*R;RI1?g6|K@eJRWrC9Bp7_aG^N~P>x&W_;!g<(W)ANN3BToVuDGn3iL>^VvJgq=(~@@bd^otxE5%w z?t-p1=gRR40vH>mwQv5s-`M!!9~4)%wgNS?tMOW)NB32-wu|SsrO?~#I2PVKLS(56 z2#R2aeH6Kc$Ws}$s>>@^xq&yX;Z-jx`b9e}#VzCfs*^8PBQsQWvQHJ(%J>Np>~UZD zPD)A*?EkI~->Sq$@mxd-9jdI&i9oP$tq^IQ8zC;ldN{LoCk6!}%aSoLA*@Gw_!|#wz23?E(ob)@6 cMVDdZe;{0yDjvTP%;}F;MWUZz)1>4557W;2egFUf literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c4b13bca0a84a6308e4b3454c655daf6c5c4b4a9 GIT binary patch literal 5388 zcmbtXU5Hy%9zU5$?bT-5G){F^tKKexqi9T}j#|4~tLTuf?t}PJWLd`QR;n-aP!Pq3f>x{vl0w8jsPXqZ_nbR7cjk^? zC*1tc|NGoF%=n5WX#w#?S8G!y1CTPT#r&7xH- zR}QK`q+`E}si2h8zfxzys@j#ZuKz|^-}yqx4jYyo z_Ql_341t!MzADESoRUA?X~#)AcO4qGHWL^2MYWkh;aruwF+}i3&>I<}J{Osd%)NW2 zuYTgt%ooC5etZaw<}zt5GFO`&s;Aqsh1=RuJ>99H(_z~VvHefbYprP4X-|o+)6t63 z!A`%^XGgJhI*}9jtB*$U-`E_jwTvk-s&x*}+QYfm7Wk17d4^@M&6}x@jN%f;>!XI8 z4Aw_uaxzpOby;icql2KFde7awH58TQiZP|r3tYK%y$yA3qz%M}h!XA$L3nXWiXp>_ zb?310>qyFIpuX?GqWJE7J<}l})2W?^HtsuWpsdYJQY+TTv>OSe-F0HyrS8+S_E64% z$KDk__dF~$((T4(YS(7k!ucOOPQ`SwG<8jG(*ot@4r*p%EDs>cgL>->RCG2E&2wsf7_GOxB*=T>u@)IyzG z3+jABBi+KHqNkV21KrY0Nl8?`RhwxE=gp<$WiE^6eJmvJPk(>j3;Qdp^Iq6rf8z0A zuV62*5e5To5!UAJnxho{CVcs~mEv?rDeeG$DT|V~bPEJa(ZbqcbDVoyS9!5sSoQQ_ zu;t--3D+7MC0>u~I<@BOq<0N=@tx_GvxdSvY>dW3o!Yxm?wcl#9GA#lC69%c-la?B z=GJ$k8!k<7tILL4b$API6iezN`ku{(Bvu8uKvhDq8WxF`>{^B}p~akwkCEQ$9@!T!=`*Rfi<6`_hiZ4Vrh z$_(;acLu%QGnXbkinQw8y<{?aXfF@o z7YFba0em2UuL|I+1Grvgm)tMb1o)SVt9=y4ep>*)U*TNq1mfKl;9CK_9Kfdo_>&4} zZzROU;)MYJ)d2pM!r3bcu|mABaP~$*42Vw@&R$4}RpJ|kbL|siwTJ@hA=l#t+H{fn{b;#kERcPiEVv=wCdxeN)EtDS>dvl=k z>qFq{qiWeCOjayQ^y<0yd;y=XX?}OiV@^rpy(+xs2dua^`2f+qst1VbE-tflJ!*;& ze?XD?&_34_CWN>QFoO16M;vW*x56J(_%noPr@t%u>xzy~K+y-~?+BM+&!GOavl5VY z))HPW#HC7){YUzJgb3mlMgO;=pCW`G-XUn`tfKSI+INKzI~5GG#~Ui;zE&_y?jyzj z;b-L7PmJGGes?R#oyquysE>T^B1As_A%y(rgoxu?!fV{RNIS$)r_F@;0NO){W8e@W zK5mZ@;ux4Ej0tgukj|3TgGD>L7tpS_FsEl|XImukeU}xOE}LzF} zanogs7K-)D#+4Ama(buqhJYG*9P99Ku226kx$7W9<6feUep}@*Pih2n%5jY1p`7;nB4p${olFevcPr+8zbW|L z0~-CJS+T$Bk+j|3ZzrDX8ae2o8okQFE7v_F@241t;9=D#h_o33!_1leN$U6z>9NOMV z%>DLKu*WrLe3*Ln&SCD4?<5ve-eExJ(Du$^?zguGMs5d<_ILx(@hyV_b?A%ZVnWl3NjZay3Ig9*I^Q_v^y#-}V6iUKM!?h4p8&ugPH_ML literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o new file mode 100644 index 0000000000000000000000000000000000000000..8b487ad7d588e7e3a5d9c3bc9429d491805a213a GIT binary patch literal 3492 zcma)8U1%It6h6C~*j3Xu-PSh!v98);3U=7k7)fcd8mEQgPZc7Cv`jb2q#Kjnl%3hM zO8Nt-&=8A#6cKFk#TU^x3n~Pn)IO;XJ_tVKA%f5dt>m$=e&5WTox9U5c-Xn;p7Wji zowIk&%$xWaRl&GX6Be5m2nhlZOKy}Mb*)D@~f6cCR&D$MU?A1%>SHALYD3tl!RFSaXxJJ3UC$L=uqA*{k#RDl!~v!frBekOdHa^_p4qwFv1(33K+c zdt(!#!PK*G)$W+H@6OwI$yl!~Yr)r$#C@TiaejN?jLDm;GPpstJa2EBvzLqv&D(W( z!SA0vzbyXd*_F0>trICrYmh|qUbVZ-dY055=vGC^k%58z`R>8tTE(yBU$lCy!rs1G zVD((+>9Y#GR!?D12;}z_din}|g?=RDKcl2Rct=t*+0^!qwzezS#2xVQqU_`F%DU`_ z=~vgbSAIf7h#jCGvWtV_r(*mB{g8DW6h9i{GxS4_a!@>dI0#_w&*+D28N$9&X_I?(ol`eIO|;V{3_Fvs+oU7% zaBtIs4K*YqkA(jjJ|ZdDretJ|JRdo_0-UWAOGcsxI&x*?u^7ZG)5spWGqN^;uTR(; z686S~{Y1iMRk38kJJ4`sWQ!bVSR$R64<_u<$YyWl@PE9>W-sONe?E?E_D&A1RZysj(hVP}d>q$3;$2)pz*?Bx8#gfi)9yk`#&YzyMR{0U0T}tryumrkMG(!)_dHru4&kC)#{#}z(B{F} z&<4$X>{T;wDZ-%wVH{-$S2E6gTWg$;II}+T?ZTy^^__vktnVAtM?TiaJmjOkip%8t z2zKyY08LT8Im}JIpTWoV^8JRn$;X$L{tv!yl#l0#$=3m606rDv`v(q_FAF~H z1HMv}kLyjow_pU{KM|qwWic`Nx(q&^?#j0daa^POSAsDUaZwSYqQ*b5Th)^=nJR8NQ~D(4Ad&y^hQSx#omtM6yAYJmx738UdkKrne`n vecVfZb}^Mt5I1D->6BV?GOibkj=_QBCOEgq$NR&aCf{Y8V_TI3m`?u#GWsd@ literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6cd50a37b5c5ab9ce69bd09e2eb2bd5e7a98aed4 GIT binary patch literal 5484 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 P_72XC2c)r}N`3zaS>$3< literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o new file mode 100644 index 0000000000000000000000000000000000000000..58886c56700fc4843476d51b132acc7abcf89881 GIT binary patch literal 61320 zcmd_T4|o;D)jvMD2^uw;sHvrjdR0_Zh#*K&P=gS~3K|g<6%8Q?1Pvr6H~g`v*vqzT zuc^G&wAh+zTie&RYH4efDrtjIp{;MlYHgxKV~Z_msHH8fspW0HpU=$My|XuaZ-P9( z@AG`0-#*znd(NCW=ggcle|C1W_ui73S7c>nDeuTq*(!-CmHT^>GeLt2I^Fhl^kSU=qda-dDvC7E1q{r&N61x|b8;hShs@32iYA>N&(6+o%Gb4zz5YiGQD zYD4|x{Oa1JRp+lEZ)jLtwsc8FeQjBN$Rw6Hc7t6i#YoO=DN zDA=p&>!ORwm()~Mj*gbs)YMi)7uA<9trA+1;j2JSbXj?9$#O5_VqsodwY0W=Rdi8p zeYCuO@p8Xd<1*M+QC+^Urb;PlkJi+dS60O8tM>R;HFk z6-w8vtfHYVI>pp-%%woe7S=W{t1PcyW#x~Fj$_;D0v?lYwg69MRb8w)dR|)I^lfY! zz-qjO^<^?RaI%qEUu|tSY8u7>#V4`67^nN2{EZz_`_67R#;QQyv1xv2JZO{G4wwe9ktqJ zbaYWo`C>TW;^>)`MMtXI##pp=QB;RhLsXnwUQtoi(4g3oixK|5t2{#GlI2S(tD*~6 zMenMruLYlOmS{!oGB~vX9*@Rqp;wpo2Nt==0nEkeK@L?sBXXwVPjPt`eQWp<*OZIcX@6LAGV<#{;)$P}5Pz?i=9<4cu7pg?beoh4_ zGvcBbmmjVN?cPEXN+Bvw=efMxZ%-7(g_BG2mW$v@Be*UpI5#mj4~5p7pf$_YIO+qw!mOPl zeH4niCA+J>UI;7EIOEzACA$;2+DllR!u(1((6v(@F{wvoP&b{XEDWFyR-7UiL)XvxbWH@$?`?cG7#1?l}#}RM1jk^*h z9f`TS;@hIP+@@_l7_~v6VQPbhWl$U6Yy2d2h5arJD=BnKcJ(*nucNzRvgG>FMgY>oWhcaY9!~cUMV=CXY&9H;%w{=X>vTcXgb}5d(c|7}$DqLGH~) z@j$Hn-?X8dHgwoFAlweX%_@F(u4+7HQxuoI$HuYld$lST;o!8d`WqI2VlW2{m(hy= z*((Ln9gZs5gZ13Wn~GWZ3>Hp+Y3|2%-Vg_tZwJ$p8j!hj8q9Q-MTyf$ zbvG#SceC6bV2{76++Vn_9o!&JwxJq z!`h+u1XIO$dw=}b{il`eIc@G<(-hJ^e#IdgqYehf6*68OqbX4gd0T#$BSR5MrDM_3 z7<7chzA_0xx~}B)?In9y_w6Nn4d^ytHv!9_r{-qu#Hg45EZTpc*Hp++O{MToo(qnB z@$P%wk{xV;Zj5j*v(bRgeL2{{k0{x51gp}0IEtLP1{&OwcCXO3#N778tZnX&BX+`9 zN5o5ZXZ3s-t(*4%wStvV|ICnX1tR?yO$!%GQHvMj=V%c8hp`YD;f1twf- zCbl3WYhB6yHFxh^8F^!VtCTZ_Mj&%=HE;*hbT0N1~wxt{;NmBtdGentj^sbr?mF{8 z?r&wLn4JUv_P4TlX@4u_`qgpf1Bq*IEtcUnSQ2?SooN=m072``M2yw15=GgFA`R0az+j{G`XN1MT{{#N4w+S0!h%ZHvb(FgON)iUCJcjvGDD%tz) zzW11T-|GCeF9Pd{fF<5{PwbQNzI*c>j=X~ib7VX~dtQOU`tJ|YZ8Y@j`B{zD4);V{AC!zDQwi^qip-LyA7@A=v z7)mh`5!?JqO;r?1#!(f-0cf* z-=0nXq1(dRNw???VeRDpHEWC8#0JmQQdy>@t{Y-Yed>X3)r??$o$5_A^sFY ze0W0lK0UxN-g@(mK%bCl?C9C`Z_n=dp5d6%n`UI0uni0`J*}F}G~4ia`*71u8*a>G z@h3A_OhcPOhoqiQX;mDrvGB^l!V8O;4?4262e&&9fzF|!_k1iF&&G&%%>~Y}S$fG(zAFcwkCa3{@i4c*o2oy~kO!97D4x znB*n}4)8!Ct1hJm+JvrzbxYgs`5$2r-nwBBVt-F}vydq!YL1x|$jiA)>{LkPsDt2r&chVNEwAg};>RYN{6@ z;X}~&e-1T5wrT&aMw*=P<87qsJ2T$3xO&0Yds)IEdBB|+SA+33y(VnbDRC6qlxJ z?9laNs#cztaCl*~G@NX(fbm&7IZ1B-QzxC&e&;jP`Xnmf#Jeo=`YKJ6>W1-~P|JxAlvA$dq-#Wp7yaZ6%OeJl z-i*RM{3E#Tg}ELLg9%A`Z-E#6t*p5>i0J#${I#FB8;c^`LVseJQQlPA=hA|R+W{@OG}}G8a^W*-BNSO)p^}}D zoFqYl^ExQuGfxXeU+=libvkrecF(M>uFgy}8+nwGwR5uO@OtR0eh=LZH%bqsh{@WB zhSQQ}U>A%Te2XU+>+f~WGGM)DBpJAsMUL}yQT?dGFkvHtyjWbvZb`1N-{T5<5*CEq zg1lR=u+If%R>nAAy=Wgy$snuw z49ltB25F%TRj{Q8<_;57;cGxWKpYAGrL2gGF^p!6?3_Q_(WMx0yWpOrBN=erpo9lp z>fPUNU6ujoCg+1@Bau=Va^&$s?)|WkBg15EMoP#rBN=kFz*0kw9Ovnx5^`ih$PqB) zV#$!3hA8RTVL~o{?Kj|g9d^$$c(jeKvxlW*=rUf_spUg*1i~=UHWs9&!oyvT5RsnG zSmO3t;>;>TrB?B4~t;XQP%Bko6}!-gOt~gJHogZ~&B{bpiD+mSq?4_kf#?Jj!4PAcxlhj=~PM*}1jGTrx~{ zSSY0fFeBLk>cEiN0myNlE-D>>Oy~dv>;Tot4saGb0B^!E=H{=(mZ|9g59o-c9M{P~ zYQ+Q5pudvA!zlEY+lws`xj_*`gCdeH7ZF@b_l&eepUs0_s*(sc^b88RTU$r&^u*-`^c2r_#n_}$Dz_N4I&V79CzSj6m> zG7w9Xf!Ky7?%{J8PX3GaDEw!(x}NZwrg_UY8blfWt!of#-XaI1Y<5rQkl7JjC-r=n zy3&Zlb4bjA2en0aTN+ti%8LuV9oNPP4&R6~E?zs(#cP)PE)HKXPJb_*i&NKvBhYj* zF3DO@n@w`6i=&{$+n5GjOkU5$R}FNrmd8>-54p}r&=L-FlKwAA`k&KC&mZU$`2Sk% z{|;g@^I8)eT!T$xio;XqSHgKZ(Ot=bDf20xV`$T4v-Xq7H&XONUNaQ*mixCS+LLC@ zZ%w)4?LnmIrP`wdUELh>T^)YobJOq9ih9B2_T@iY+`rDLM?i&6O8z5B*BPbT-b_b> z@s755&Ev~(A2?&d7;mHKNNj}ObK-UNX4Hz$Id6|h?~EpzjZ7Bc)JNE$Ti`DPTi}Zg zYyo!e#Ej9wl36>jeUGvxJKjEJvPM^60Mh)$lMErP>`y{Ara`t?e9x%FLk^!GV`Z%E z!s;m~n`l5b329}&RS&zH857pC0B!AH_m!W07e?r@*xfgXOZ}&(cn?P#YX<93ms-5V z7O#1Jn8u~k!5D9&XwRj*4t1%K$pUmKVcMo?zcb)cyW}Cev=Xv2xO4{WvciREz@;Rl zwL2HGbzIYp-c%DZEo8XYliRNFVY}%a7^g>Qw_^~;TetHwb(OT^w}v|2;w`m!&8>eL z$Ik&{yp5tg$MZVW@kS;K(D8(68*qDV!0~p;Lw5Wfke$Kt^I(_dc%lKvlaSW#eA*q> zm$@nxmxd3|&v!xXK@ZRKwXs7Ro)=iW8HeXeFyf^;q@GK89qLjelLhEf!n94Ze`&y_ zcF99_=?2Ko;L>W?Wx14Sz@;RlwR;L=59rH*m056fmdl9-Tuwq-yRU-m zl-mb0*K_^(lXiQH&Bc?x37opa2kPCOFyo*H>ebr#p$*h)EZ&R*^;$5-+bG&|F|R{i zY-F+kT}+s^sZO~);9|SvA-nj+B^h134t7~CCK_-t32E(K1lgejwYkOcH}t~?>!UlM z`k)8v`?bMC8?4t`ycq}Uhrk$bqiD~qybg7%k;wvdD`DE^xe_l1nzq$zX}jbhyR~<5 zMz?N&U6xyk2HZ+QTDu>B?C_rZoZ1lDZ^K_+8T|%~IOw7I5pDX=hUUjC-i$-@<6w-p zQMBh^UWYo^$YcRJm@sWaEm{wC8_bhx*^hWC8l0Fl{?NurT0%yX2w!AF?y}e+TTc{7*FCe-hH#{oC@S z|M5h4%k$WJ3)@G{un8)T4ov4tzuV%?IPC8RW4w)`J@4~6)cZyz3()(7XH#Pnfn1zj<@O_jbuc z_WhNRox%6Hy5@XzqMxM@4fvjfw08I2l=S^apXb9D_^};u$w80wdAd478|e!y-rz`Y z-pSd)=f8zua(DQz43ab)q<9-Oc`?B2&=@c(Sb#A=n6@n+ofn7!yW}Cqz%;Ud3!50D ztfyk@@N%o$d_PmXzUjSP2q%w%6g>Gx>N%O$p-wgmS%6L^Oxsw`-w<%JUGk8fd>dqE zaPnx_WjUE>z{w<}wL7BiW@9BxW7#V@dCWZl1EF?4p!KjkgXu#(r zq_z7PZ8slg^Sgigj^6Lv;Y0S87r}ebLw2z?a%e;Lbc@#>vgNIgfH!A=H{M3+o;P_N z>P;h-1?Ww}w5`%NJK#;bgTt`3)~cb!!L?Q$Nbxpm@*KTFI<{x9yUL?CqYJ z8NIz0c3Ivg8t^s=Y3*);Z2X5Rn<=#$hmX%wUx2oQo`2VA8;3Uk-f!^+=U+Xwz|GbR zha0q;A7L6Ct=B_Jyp4K2H}g8w%|;;$(9MKto9ni#18%lU9eh7A1ZYCOV zGYM(!{`RM6w{9$PbFx#157#&S_@i{{4cf?|&BKpay!JetYo5r$&(;fOk7++Y&NTVI zb-Yo23{v84)a&_~*P(tk3R!@DCQRF2%dZOf*)Dm=em)VhGx+&&*k$>dXu!`Tq_z7e zGhlZ!8*505>DY5=Ugp>jAGq=+|QTuZKI*e68omw3_siz`9$0($|#y z291b!HX_e^u~5G@=j#7Ve+FdhWmt0IqZVx>t491Eq24M85A*tG(NxXkOlax+Oo(~M z7at&BaY7&qK||3ES9vCweP;7tpVZmWRF`AEWU!s@cGCx#-qN&4Un?1?8E>-VTWe@%I+(aoAL7lV9^5OgX=Cf@XV{YZjp!LU=0heJ7toy6*BQ=5 zub?k3#|OW7A+E9RG1o=pn>6vZhrp1%{C_gK@1lTG=W!H?ZxQW5z0A^jc`+~;Q}iD0 z>$PmdhhpTjVm(`a6w(Ep_WXz1`EgFC9lo==0?|Qkxaur{);f6`OX_v8z900G~I zK#GUTNIi`&lB^7Ch4YFBy$dTw5B6 z`WnMqwfpncreGj>fg6k*KdRyj7Q38ZAGLWl6g~P5=Sp z7gGFd4buEC8jX{1ZD}OxYYcDI15bN(4B0T}w|~9CWeR2e%@VE&5gA42WtsZ}^Ae^v zLOyB<*9{n4Np94W(lboaoVo7y;0?tloxK@p!r}FJM;CB%_25nVct;m@@UIF6`uJ%Qd})*J8O0uhUc8ToXLY!$asi%kq#m->FS|ovCi~0sqW~k4I>h zT}Xe7f5yeKhlE5k36q;ya`ndyyf+uK0r2`^KL($|+dr-|111kx#*jEj9LAnZHn@)b zV2gG`joZANsrB8B!1L!lnq@CiF`I-$GYOM*$$FSg2`gYW<=JM>3^SWV-|X-RZ~I=- z?2tIw2Q_ZW=_T^eRKiN4w4;eD88 zc1VyYe5Mi~s$-fiNOCnx9#S!zghVq5lXb}zFq;zUVK(L2X3q&Tn?&F2@YufgyUErL z36cV+ahnU7rVEncnq>r1F`I-$GYOM*NyauMFt#agxz*b9!ptVoH#>Zc-SC~H*&#s^ zg&MbcB-3<3GD@?IMk;2Lfd7<4I$4)wY*PYboAPY4=ZBe1qHlJ1Y`^jf0$8U$&5)0b0Qrluu zW@%f#(yqVy-|3{##g^5nwrGN9OL!FC5@yR9u>}ihw#!;=3yGbMzW%wkMi#g0K)32o z)b~Yr2>tO}A@#o><>(91xn65CDYH5QIv)bX(n-|Una2NNIya!4rSlQ$aY*cR^tI6` zi@(P}w{#Nqb%y)7|M8G|K8|vh&L^}slQK){DLS77#nMUC*BS25gs(GXcd@Ib6x}Ig zHQ3cM4;fvKNy%i#{s6kf+eVsWulzK@i??v!_kPoBlU(x@(q8#>wJe~0dYBHZ`S6u_ zZJ$ZWWcP;@Y*3c3?GX&Q4T`lXh4JIX1(2~umKGOuxlJJ=N zq-Du~3AU?cJuM0I*#>P1v%4H#2V=WE)jOKtSrQ&SPklYvCL!K=jFyCX=Lv0tNy!wn zWLv6tG{LhZJWkH=Ey*#v`1*@<&JKt|VDz{0f-7YHXrt@AoT@<+JPm35|Cm=-`8ZzU zFnqPnlh2E!{MRYpj&x1%)>3E0K+x6Hh)blJa*^z8$}s;K>j7RhA`RM~(S7 zGIm>M9ALQQBnt4Fgu_I~gIsoNhXZjpW9KNLR7Ok}; z>F6cs~BATJtEwGh!gmR`3k?f*(~p{DCg%8z1hMC0|Rnr)B&e2uLx0FG%q= zW~4V}Vwf>3s8>xNv}&=L9o*3pYS6xc2JHvwzBZ=1H7|>|k*U9NV#=oYcHS@J&RR!R zxC<+&R2NTQx0{PX8k*YC(Av6Wz=b#Ue;x^~Ssz5CH1z?H;%&@GZ_Y2rgqXvE($rdP z(xmWl>kiAL488KSq@3`+bcQ7-L$5p{DJR?yZ+$h{L>czCOs{3xL>E4;0~KR}j#saj#0 zG2yh;OhP#z1i$Y^mi|`K{W0A$JG?okTdGW$V5oMTT&m*OjUW5cPXqG?s3J>$E9nDN zg|~L+!(I!8Y>~RoMoiak^D{{Gcd&TT-%6q{-q{3fyR#Xo>Gs4E&BO;jcXJQJaL+d| z&Bv!O?6=EjW@WetcjJW2Mz&K|^ERZ~NM7`}l9)7d2e9qV%Serp#1qZLLyY{Zn}r`b z+hH5JBh}FG7)fkMwx;fv_A(Xg2kL8n9jP{y7yYdyCJpTXw%yr<)EG(}+mlE`4DE!W zor4$}9$~-xa?;S?KvdVKSCfg{#Jn7=5cuV|tR2U`3D5CM`WaRV4;+lhbGCfqHU40o zEjHZulPs~pA!=Tq+fu-7Wv)4mz5BGi?mPM4?{nYC|NdXI{`0}RO?fA{zepI)Y?r?^ zpeqsHF2DFvvRwu&aq-Pq`k{F@Q@zj)+49_@S@t5u^ERXx!jEf?a!AInyj+-YSUSG1 zpYK6Y94`4JBJG;w`m;Hgvd~eQ-(w9~nv4Q#e=Ax0TPeD~l?L>;Qg<@K_{u=whdRsz z68Z_=j1K==bF!^Mf_)#fVtbe=)`{NNqyxL!eVXL}(u70CqZ}5>P{S+EVhzdK-%8g0 zRu=AWrJxKoG(&&rPmyFCcQ!witYJtrDEu@OT9RqHXvozpc}NouQ;7zWQO!Fs5aLRr zf#SSqxN*DwuLO<(+x1{+Mg#gzULOwq?URhL{r(qe1r;9UP*;X_etRT?j#gsV8!2Wl zowC^MO#c@5QDbQ~Z1di-)Z>x8F@bNCLN7MInPUD6jiuq5WdzcML&l?Yp$v8W@C??G z#jr(=6dwlFDRpJ6<429AWe=v*(Z3}N8FSrNPQ#C_jpFdudD^RP(`a1bF)Y(&UfTm_ z_*~TgU!m%nR`fMp*{6rg#Nmk>bKF;sfTE~YbOaQQ)QX5Fnt5$23Li7S6t0Lb_6(d$ z+*igy-EggL9Mp}_>WIS&DeA&kEN5Hlf@`{!eO!p;CWa^Qe$);#6>M=k+`k2X8rD7B z<)|J2`K`_Dh|)6&D-zi;`^snlre2zSqdgV*ssb>z5zANS8x z72%Hg-v^S_2pPVj2y{G}VXB9(z)lwaYfNX4MvAYTBE>Ip;`K4&{jJPPKi;D9efHw1 zFLm)0?$~QAb3?{}vCxS}GEDUt5ZI!`$1ZjD6r>4?ra%O zLEh(vI~}4}d^S~%?CTma(rc8?mU-xVosLdV5^KZb_KBuswS6Tcf=Y-EQAv2@P76~K z4JsizL?z+z_V)cDH5nOHLUf2q!hNzTOv$LA5~4#?67G{iOG$9N!Vh$CORQ7z8Qa@i z{I5NRH~Y(plol~@+;shcrfCQ8EGql$9$!Lun||JsV6E1hZaC0%1tlEz_RoC@;SDy! zl3>-P>AC|=Qz;?q?SJ_a!dv4oOM)MvquIv2Ii2VcV}q^FoKANu0X zJBA-?9^UDY3qw}7JtXwz`gHGeq2bO;xL)-`pDz_-9PV&l_x5UqM^$Fg&m83 z4YFeq?(DIa0U^$=_6(@e1`rK3;G_BeN1x4D`#Mi~Oe-fEs{Es^izZsitud85X?=R- z)}`EiT^QZFGI!4Ron$4fk(J&s3unmL0XaRsoN!Nk+me&Xo}c@2!aLM$mYhuX{L7aU z-Y-tDd|H3#fBe7) zgWo+~sm@`$ks(F&`zsBFf(_fl98Ig&B0`=&E{2Gd_e-U8+cg++^Ph7Fp2=I}Iy1Rm ze~Rf_Ei?2rvl0%k{g+h21M&~|rLFKxUEyS!vBEz-4i(yim4c%S_|?_eu)Tvl&}pX@51NtK|tD&&f1n^`AdhsjgxBP|Yrf zMT~D73JumZtZ(oJSOF0!{uWso8X$we!^hcw-aCYW_aF1909HWv?A|J+&!NYX7c{5VHfzMQ5hdgD;8f3i^ z-pkflYV~r_JhE$trtQu)q-IB#c%qqjh~~kTYT==N*geS#>-&J@fL5yecQVcB<<4W^ z$6>kjrlX7aJzQhM@&@4n zsE{7>bOFCbG&ZbY@D^E10gho$HekaPp?!o_>Rn{Z!yWoZkb(d4_@{DP`#wMz?$pmH zT;~7~`~w%$W?m1BPx;l*(BIgWJ*4n1S@~(t8yN=U9q1EXPBP8tmoa%9jEAHBO_Ai7 zqy-F%4(^#h9pxAPC@nZJR?V9B;Ga5Oan}%9XQytRWSX&c@=-NLZI{CW$+pqOhm9J% zZGLqm+s3dbo3dew2>b}`)w{@+cSupY&yL#tI%-KuH1j$nYW2D?{3pvY?tDJI((_B; z6F$5de#`8)w9La;!sj0H@7dT;<>2CN|Au#l8`F#3?o5GjP89DvMKzr*^Nj-U|BpKz z5_|>W^T9t?cy@=r;z7Y~GZlGC7EsAPs}>~qO2TXLUzQSU(!nl)^|(+!t#2;Ws(2l5 znwp2n@%KK!U4vD`0@Jb$Q=^t=ofd4gMm2Ah5;EN2e(odFq?H2fb z=Kw|=NEH4wU5y0vDV+L{O3VF+)$*BiZ> zhP<|JRu6WBbhYf!+I4DcAIjcV`20NEvf!hKPgl!6ZJ16i!-lYI2oHf5VqU}e?-_UE z_YeED7M)sJ+`*P>;cmYXI(j3$nO~T^089yIK0?8D)*?-qv>5ZJMvL)N=;k8oI_tpD z^Cm`(-jThh_eOh9=^fE~V(;+Y6M74KkLxYyJ*GFW_sHJd-otuxs2IDJVZS^6ChlL> zqyP4|Rzlt$^cV9s^=e$1pHIzyt~i3OS%UpH2 ziDpv`+Ui~&wFU0P*J~jv-aZn~@Md4$$wUmT)zPlg;v76Q`4}XVMAHECpPgQi z+dFI%r|or41FaTIM@-gT)BCZ}Pvm;PlDr=Oimcl_p&4FM*@gL3B;%Ur`C9rPPc;UX(`3`* zDk0R1853mq03*A?FSU8esPkGP*!5ESrTLF@(~mu=uCAjg&X99Vz|pEiaZ1mXu8I{* z_@MrWW&Qo@<8A9vR>jV5aw^dx7db>@r|DSdrKfni&R{dI@6BG{o3%bsvb$>hutE@G z!!%P<)&5&< zrA~MV9&Bo6R`PYH^*#TMSk!|lP3do?J`Ai#l1A15!_TrIRrza|Ykt@nj z=z$<-@5vdnt%gaiTJZ+iqV3K+h+-{zOYkvDTsIXurcyMJ!xU8}ILlEhT$6)QKG8zf zbGEu298>tVIKKTu61ua+Hd)hFd|Ow~w7T7vX=<%Qaepur6Sp4t`BvDqqP$^gS**Ig zs=TtSyr!nMqD)g3)t4`=qSjN}Ygn zIL;Gsj=*^<=ocQQ)H!hY)wq3p_GqQfz;@8Lah`(wD9+Pyj>LHu&QUne#W@=1Tx<`v z<1E7USezH&oPe_h`=!UACms87c;XXE{puv>2Yr&9KR#Kh`%lG_?9-H*hu8bAJ`*zV zQtYsEl={QDO0|u~Sp-|gD)r0-NT8pfYP=Y6KSinQE>&t=u~J7~uGH>n zO1)a5)Q_(O4?d@si_hCF#pm;0!&!+h8g}BmZkAHtz*%^WQlG`yhx2xPlXDl&Yf4cM zoEPBZtB>P60Uxeyz&Yl6rT&QXYjaT7xk}~Xlhj*r-i7avkHh!P_uzc=CZ*21S*ho6 zo`>HhcogUH`0azw;XE5ZP_Z57b@&mCw{TXKDfJhe*DX-$2RM%{SL!C5-^95W=XVw= zb#Vo3tW@g1asCD8C##gY7w0c=ejGoIRe|$YI4@d^8!?=pt47-|L7U)w6X%TEG2-2! z)D1PL(^AxD8SJT5YBkPYoY&MT^+TK=yHlxcI2-Df+Kh8p1KI=UD>x^_lzJHFe{f#W zi0KjMFL359$2HEJ70`?GA2|6t@VjxAuTtuFILq!ro8lb#X{Bm#K7;cB&abXU-R?%4 z;hcOA;^$taPFsT*yiciC&x3x+=?I`u~XW_ebO1*${gsaqjII}*l)Eu1K za9)}~{czrRKX`Dq;rywbbp=Xo!1)%=3CAjR9OAAUdH;Vo^tiEPS*)tQuB-wBOWC5v zWff%$SH-F-YAX>(S5BLDadgz&g^kN%jnNB>CKQbwGqF))mYq*Jj+2>qI!@^lZvGZH*G5emTE#Kfy-$!D|UIgy&JQ(w};$TxZjd?Ua& zNBGd~lky^Kv`x&94U+$m8NYW(W1C941OlVdB+O>$%fYqsTW(_%KDM@HGVZN`>z{o9}YQ zQiab)yH^U|D4VY`Y4--nzrxOsT&@{dev{;%Xy@OMEZ-sde`5W;dS(A1n;fG->XZC? zAGGqX`ds#BbK=9YYagVo+f6Sr;~#hGd8}jXc=E1{XJ_9X`Po)IBI;~Ek#48)9QD_J zKLZ!p%FZP&0Vzz`px8$?oTSGv5TiIFp3{UW8;^Z;I{+`&`C_b}f4I_P5O9vg5p}ra z7?7=wNWqU(GlXK~9jU4WXZb8OJ%v9{Vfxnx$Lfg6Q(qCBzRFT1f*Fvlj!{1n3dimU zaQnzcZGR;M);r?Y-Vn1@f!ZVaraTq}){(7_RS{`oj@=R9_K~fQSHmTrV|N6&ePm-+ z954B7w}?MW8m?^22(u-Bs?OIlgfAjneOy&aezDH~xSz+1Z1oAndp8~&yCcBuBOBhl zJCN^r*KlR4lhj(t=a?MF)u7#PK--+&;3^S?Xs}zF6m;2e6h)D`L&8KT)Uvi#A~NXb^0+u~54)bTQPJk+zCUnYBi zyifUgyvSBpr{Gtqv&9}}a5OAR!Kb9)Gg9zoiC3?DOA3Bd3V$pGzb^$(q~Kpn!MREA z9kln`DfstO@E@n(ze&O0Nx}b}g4y)O@g@Ho)_Ol^YUU5fRthO$Y)ld~H zt7xn*Gh1Bt{?_7wIrX?dU9z;Qj9Cp;HH(ZSo2u_?^*yZ?6`EC6wX9NISu&^Ws)-ZI zu9$u8tg@-or_a`uD*}}I+E~r_3lu=T0W}jRXbfOQdD)_+lm-=YU?U$VKy?oOHf&X#Wl4H;jrXoS$Sn;z0!MsHB}2$1ASbzGFCRJ426Ac+{6Gn zsSM)mOdB140drT>)>oEQ)Yh$1Q)kY+b{eWYbykVGVs=T1TrOF*y!MW&YszCwmRFTs zwJe4*sU%nsAYD;YTRwnK6H_^Fs9jQN{3PL++<#c6HKxh*Hz%sgmsQqOmBq>z)>IW; zIPQW;DlFzM96x@nT3WTVVrd=n%NrW1>SJY#%9qrrvgO!Pt!ZG;Ajd>uMfDvfGY}<= z#j2GRRdul?waWtaRST=jmg)|}EA|11s$8;mHH2POdYb%8$S6V*WsIFVzp{nO?my|sxnljwtkhWs6rhU)zsG3s~A`+R6W{JHQZS* zecvm_I7%9i!l=!_rlmcqVObr8EK+)99jP|^IFVu41IAdERgQf)LM)EC@*&jgfF&H8 zfG<>f#Yy@pl79wZ1o?S{w_`t#@DA+n3Do6lM9xw($3(!)nVoVpAND0VmPX`eC94() zj!f`+_j{J#=bDD`i_4-8lo0%n3;YiA!QY5m(8wuD zbr43CisqW~R{*m7bHq`83n9wCB=DEaNBJ)wVak6oY06gvvix@m5kK2VNBLKX zqg_tKHS??z%v19_cYu9vEE-NM7`etB;UKlVFw?_Qf?_A z<*g+Sd0!v|-xmdLU_RvS!mTpp)t&$dd7Xgd+f5wua&fCndDjC{oJ~uCts(^f?E-57DR&zoZX5nC z@Oa!}6E73^B|w(@I&tXv8FA?8B@R6&i~zhCegmYQ8HC`UC2%(Lp=S}{6s+m7vBG*> zONe^h2T1<=i9`NI;*kG4;*fs~cnNO=B;P{fEAY%n@GlTYxpxHrli-ta!$STm0GS^r z4!NzwFNI$Po(mhucOf9<-XM56ag_U^;BA5*bDH7*1R(RzCxp(`q(lDG#3BDpfoGg< z_=^B3|60LsCXVvo6Z~1h4?n~39|y?%Yl%bdeZ(R6DS`ha9d>7pG;&V|BtC{X%H1Ql zEBKp&zbE*=2~nrZ&ouI5fRz83z#h^eZ$EL^{jswQ9tEWQI|W}Y`2PsrA$SfpEF#59 zoe4<$ZzK-+ae*(B4*9<&4*7k8XOA-S=KwOlOz@3@zaaPl;*eW(j*)w_z;6Pw+|$G% z_Z7k4Bo4dJJJ;k-1SI}B!5$);*@{Bfwur^`NSz-@CS*b{O<*SU+~MuihMxkKSdmJ-ysgUM~yRZ4j|>05r^D0 zf+vWh+%CcYDEOoc4F5Dh=HEtm1^NN$kl#fd@{bsA;A}w3zm+)T-y^t79Od5>{5`>O zN1*wq0y6(`;*k3WambBaXyDa=lzRhl$Xy}$XNaTRYl6Qm`1unJ|HXjJzn*Xg`U~lh z|7+rq{~v)@e$w#I2BiE3!S5lC@~;T~rr_sc>xcGC1Y~|Qamd|H9CH6I@al^U-wlA; zZoxl8oOTQTw&3SuY^L0c0hwPz9CE)#9CCjl@B_kA@H~F9;hzjh`SS%|OdRDm3BFbE zLX7E@e<~pJ?;;NQPZEdx4uK;tF?{C(Qf{f>w-86UCk1~_@LZIo+~Wb6KZ7{r-bEbe zw*~%6EAVa7A-9J(cSokiSXrt;8X(@Jf?^Dj@MX!9OkdM&gkFJK~Ug4Ehk^WJ1V~0aE_G#3BDN z!M{fw@(u`o_*Dj<2T1-3!JCOg{tLt*w_orxKV|SQ12X^Es|`F4FtQTwYY6^%;wbkE z!S@M%%S^++Q{aqQ27g%KQP&v!Zh?OhSbnXczb3Gx)ZotvJm)%te^ubovkg89knM51 z;Ev#r3mkd9;kyiwe76aFTj>81e8e1+-weolZxsABfiveC`eH!J`MkjF8w~vvK+>lQ zd|v3k5xh^}oi`f(`vJ-SeSxFq8TvFp(iaJQN9Z34e)3Hw|4V?h^Yohyd|Ke?w;23O z0*{<;@OuP43>b-Gy(aLKTTT8&fTYhB_!FUb3jQ~NGj22d6@cVlE%4Vu|FhtSm6`nc zfV6Xk;OhncLFfewz*mHE3y^$u#4k|l3Bh*~pNRE(xydgT_!WV_7kK_c6{1l~@5n>JT8=>zL`tjAEPf+R}K=MCK9Q>OJ zC*k?m5<|aB;Hv^JyIt%6B>&w4w~~%}{fap1^}gW$68w}qK(EJs3?TJ=mN?3PN8nD< zkHULc#8F<=05;&h29W&K#KE5sc+yfspG1gq(*RlScET9$S0(?~#8K`a0!M&{{AUA_ z{~E$ZjQgZR&ylqTHVFKkz>+#c|Bk@CI}Ls|Amv{nu#WI7jE9o{hS2{Z@Km%xWEAWK zq`n^sJRooa>Ks{x=k0*Zf0+1P*ryQuKg2(+)On~Q^D6)&tFeD1_zvQCqrQS)g1V9K zUV&Q#W-mAN*?^JJ$QS%q#LvZkmEiYaPSAD$MxuE4Q1HW78vJHJ<~IudAR+93OX&X; z`thK#9`gXn-#{Gl))S&WokHI)^kc!xdffm>{yT|-{|khu-)llY31yjIA@F+w|1R(t z$Y8m%1Z5dh`3q-$hdL@ ze^lW21wJqNXWVPb-AagZ)qpJb1;M{2@H;{uzQ*uh1W0@46Gyql#8IwM@CO7wD)76K zfBb!>`~*OjzmYh~FC>og>jd8*@S8$E?lY#GD=<55@Jk3$eg+`R-ynFMz%>FBlK=6w zrrdReC^sLF_RcE?;FGs zi$5V;hJ7SL*gGr>5cRu-5cR7kgdKdhk@e(0eq_GV?_;pO+$U##H6iUIgnk}b;L8!1 zD=<%Bfj|`1d@xl*R7u0Az>xx3AIcjoaIC-y0w)QaBCuHCbb&JjqKaBhslYh`=Lv)g zoxeaJT%_@8fi(i_1jYoe6u4U88i8vCt`m5_!1V$j61YL&BLW{2__)9)1U@Nnqrhhb zZW6dzV7tI=0(S^}S>R5AuM6xDxJzKSz}*7(2;3`hpTPYB`ve{ks1PUG{{nLb<_Rni z$p4WbAK&jH93e0&aHPOd0`>D9@QoFGg1|`vrwA+-I9=cjfine`3Y;Twp1}D67YM8r zSS_$dV4c92z?A}53tS^`t-y5x?-#gU;6nm82z*4~V*(!+_=LbG1#T4hjKEC-Hw$bR zxJ}>=fiDZ(De!fH9Rha=>=w9N;2wc{1@05LUtpiW0|N09j`6?1T!DE4^>aY@u~6{g z0!Ijp3LGhLl)%vf#|oSvaFW0&0*eJs7dS)UOo62W=Lno9aK69=0xJb_d}Dmp2&@wr z6Sz{~YJqD6^1UdQTPN^-f$If6ByfYkM+815@Nt1p2z*lDMuE==+$3lMP0 zxNn8MyssEbI11}%!gI0SARLYNx(SQ0KSVed`+$TOVBJAD0pk_y=lw6=*W&%%e8P*B zT1_|w^Csb?cs@l~EYGno$Gn&Wd^+Yc!Yh=TLpTHF2r=(ILO2umjf9w2cM)R#JwS+f z8jZG!EKo`nHLO~SH#Gob^#)dZS24WHqKYcZW96!7VMBu|BB987m8qz{s>TrYTNAP5 zOHC;`@*;@<>-DCh`dTADMN*o7s7nzm|96-AhLdfQ5v0vazRom|A^1|$z1^zUnj>gMQ&Dsb%1+PrZ)Yvow)$T@-i)>ni=CR{Bgf5&bZ* zr1$bxrtI{k^$T6PsP4eJGe}n)@M_m!Z2n7L85s2|OVYE8!e0H-?=e1@|wA0bpJO}tN2Qo{D&^az#$wbfd@mrI!t&mbO#RR z@i+}9uQ6QfBOTw_$j!w$7$2sP0eYjLd55QWDhRyx?3;t@a*s*!h+cvd)1oTI$zxNS zu>(_t!jz!zw`kWbIBj{Yz)!~M9n9l_?d^cPc1s?nVP76@S+zV&d-~``I)w`5hzd*q z+ImNzLSgmz9Qf>d?0{a%U_Fk+iD^!^?+*cOd3QtJc+k9qc|4xRY0KMV$;0x&m-jlZ zZFw6Z54Yd`;mP|)3f~Lh!}7yFJid?N!j|`oH1aM=;rk8vKITg^GKgLXKD!>dxIw2s z*)GT8^x9=^io8ET-l@p<4%)8@k@pPbT@oU%JB9DBY54w}!dHYw#ulu9 zAX^_Frtp0$4c}4d7%bzp^9VH3T9HBE$vYf;cKb!G`ko9vul-I=k@r{{d7ns;H_DR7 zc<|(%mm+T@I@uT+CWmL=CsX*Y1K+hC6QIX8Erstf@L_rEA0FSeDSSJ@x6tQG%DW|n z?*eqnvqSi5QuuBHUvUWE-6?zzgYV1`zAvQk{RDi+hw$n9Fwi~!z6!n%L->A_BJY;darN$N#fo`vK@< zMjCk!q{v%f$-`}@FYkvb@@A%y_jHQ9YD*q&UwwJ6rpPNzBaiQC+y1SyDDNfHHg}AWe?^5gy=>HK04-e+?C;*>rUmxU+ z!URKk#W+2Am!!yRdtCm97(6^Yc^9R~i@uSx?{e^Y@@^7&=i_@% literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o new file mode 100644 index 0000000000000000000000000000000000000000..0b0389d6311b912f1346988b74ee2ddbca0ed9bb GIT binary patch literal 67948 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 sToP++q_r7?KC`iDhN|lZwnUG-q&iwFWiDC!T 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 Zfq&w0JhLd4V*d3k7E2efB7GUW{}1z9ZEXMm literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o new file mode 100644 index 0000000000000000000000000000000000000000..dd24a49629b5117eca124349c858f111c6d4420e GIT binary patch literal 3256 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 G?*9R3aLFYA literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o new file mode 100644 index 0000000000000000000000000000000000000000..677489e8749cc2ecfa497bc5ac0abe5fef56f124 GIT binary patch literal 660 zcmah`Jx{|h5PhMAQnA3y5+;h&S`JDr!CI9rs9R^0gh&;T6k$h#1^y^IGrxeIW1ldQ zfRmozJ>Tg*?6>*#RTM>Fi_pWj0>)mXZNdmc>;a3}>@ps$@}@RTJQb;s6V)xq<6wF>0U?gc61*oD}A%B8c_g3zf>m6iOrMa zHG8IfHW0U&$slsAA&N~^l{MYf8&itKay8K=EAD^P|4STG(C$Vr)tY-dFNk>W6YujT zzvZ1$-ag^Kys@t*iLKdss`cDq`&vvryIbIn9nU=95ozveLmz~>b-Zz&umw$xG@3% literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o new file mode 100644 index 0000000000000000000000000000000000000000..f549f0e816e089ebc098b2e6407cc168f4099b38 GIT binary patch literal 3872 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 G!}1GOo&+rb literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o new file mode 100644 index 0000000000000000000000000000000000000000..db64e2a3079298057e3202071ecdd02aff26fd9a GIT binary patch literal 2088 zcmb7E&2Jl35T8wKVq7=4!Eh;u1*s5Fy=%9LMMEPJl1*yKxWS2~a(Z3c>+Gi9U28ue zMFc7gQmqKo8)r@&khmfBh}0t5zW|Os1PP%WKr3)E|GcaR(WGUvYt_28e6EuP)pTt`-M1X|eciWJ-`{1n)%INGg-&4E zMzM3#(a}@X`+dLI_uM_B9r$Y7^$gWFbROYw%8D~09MahrMyA#*_{2@*{&TNgsM`F3bac(awz@0zI)PIO%!`eJO$8cGxNjB+c0X`v(MJbbh3Sfow z41N^@=oqWiIa&|;t7-|-m}tn zZQF2gRmTksWwYKaM)!qF282O&sxj zR}oOJ2od?HZ{qp-nBWTfC?A!D$Vc@`348sf~L4@L~s%7evLSOj=M&diy9J*|esp6*S=if?H&85&8ZCN%BkS literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9cf7f71a1cdb6a089c7a8e80d9b6fbe8f1281ecc GIT binary patch literal 2256 zcmb7E&1+Ow6hCifVn&?UaT-732TWt z^X|PXg|E(8mL*y&iA&!SxjzsflS+-su2~3bzdS77 z;3LMqEc(kyaR)nv)av@u;G-Vor8u;e^8XNSVN3bTDRH-v6Ma%W8P|2BbiwT>>}eWPM^@K$+<+?Y*@m1y zbLNZeXtCloTrYdvp0so0c~4mrzf9!q+@w8`8w-H!vD`#Hm(P8U{}zb#?Hk=8=N#AYpQ@OTr>1TYMeBF){n<#o^FtY z{5Od~E^*Q^u?vcW_#OHo@4^G5Kbz+>A+LLVL?Wk`cFcrf$0Ig2X-Hhc10VY0GH9UW z+a9rZMC_dr`-6x*gc}qH`<;=590+apH-r3#Lz^m%F&?plyBPF4gZjRV;O8Rt#n5JN zGpPSc1TSsDcgVL9Tq^UWnlrc1Sa25>8+Mg;({a6KLn@`ZQ?FiMDzyZQmg7>v2GDYw z)v^l!i)&7U3U&ynFX%z&+~ReofjFg^n)Sxews~qaU_W(6EK4+eE&h#&7(U8ckoL=5MrHOLezgfp(jLp4Tha`N0*tR(8u`S6VHx>9G47 zx0}wj(ARH)=?u1uZAG1G>wTx*y*GtK`F_WmHRLcT4`AejrJ9Lx z+zz#JVtPTRA=q#UTf6DhTJ5AS6X%+!3wPB|^2mGU`NFLW&s`}J&Q;g*UEjSybh;Ro zj3@WWcxoHVRm*ybpE(bll_lWMt>g9!^Y-GLx%B}QMy90v{}%ns%E{^5A>5X_AVsPG zDNBW>&#%ytavE%VCZ4Ag3gKB#q5f=%u>{|li7(H@)b4H%dx6{?j3UwDD3+t0WJoZ* zu+Kmg^m>C1MPbw#?s54!sJTG2!uA+ZL&Yt&)uN|4hd{)8kqp|fa#Yx^_GI{2lGq7k zK%yPTBt~IRFeoM?h|VC2!ajKYfegj^z1C_hgU+LZ9Co*NM?n;#&wt7?c>G@TieK#M zq*%Y@1;x{^^Ecil@c2dk#dFnp<-P$hExPX&07sz>m9Vic4t!j3z8Sn7+^+%U8a|ih zHPp|&;=?)C4P^_I=(Bc|We&?0lzp_za m7rck;DA9e(Jvn6o_zH^^%KPwnyu;kHeBL+kJYZV%dA|X%$d4xg literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o new file mode 100644 index 0000000000000000000000000000000000000000..aca552319c2a125e5a822853eabf14f2a9999a7c GIT binary patch literal 1716 zcma)6-Afcv6hE`>)>Nyh^$-}eL6A`nvt~<1kSU`t6=G}=7US$X>x%m!yLZGQ>tPFA zmO%Os{6|8t9{evP41)Hdz{g-aznOd2aUklj=brDcd(X~W>%p|9X{11-9y*eUlJUSY z=96I>pgzhrzct!A|2kf>)=O1CW+5=y!~#XruDPMzlVqJ&0a){gkM6Y*BcwU zAFg-9k9yeKrJ1RzJE`Gp&Z`J7b;}qt%#n=eOX)Z1jA4!$Y4ciONR685jF~aV31tA< zt2xqM>)KE<9^d4PxyU*o;5v@`efs;@WN%{W3ws2%yU;V(IFvm$?>iv&IrI!ya47pi z5D!%t!fz3$U!Ab+_)8JLTr6y6xhEpa$CTP0IuWt!5&29+PDbR@bWUn;7lRb1OCgVb z=C4NNClT3@GVW@S`x%eeCnNG>DdX-2iTlkJ?bVVa3e{TKE>)L|JT%PMZh2YI+G=gN zA_`O&i&am+RFIlA#n^UTIQbPjUtF;Z&T`3jDwMo>5v4FgjK{vfRO=1Xt1bMSA9e(r_b)$F<_p*L|AVXtsJb_pKgBq~2uN{ayx&p-<(p?dobMCM*i!{6-&0nE^UZQT>>2t)Un<`U^N7LRfUk@hp9>Dy zfI`wh%d@INQlZ36=@*lF_^qoTrl<>e#~AK!Av7<(0IEM;_wJi9OY7|S5sU;?7gW`R dX^RymBWA`I2Km6FCa37a4hOyHO2MoU{{Z`F-6sG5 literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b47494b13372199fa75c490da0223362f3f43c88 GIT binary patch literal 15768 zcmbVT4RBP~bw0Z*flLI*vP>Z+bfG{nfkl8Mz?QN2S$<-`7?49;V7+J`Xoa+^><>RK z!f|CXkr&lu>cl@G9hx%jB(+ngWjZv)jcQ1VJETJ=xTO>7p{X)MMoLOrwQ(8}^*i_7 zd-uMpeOjj1?A~|ocg}au{e9=&m7kAp*$@Z>NTmRUs3;NDEOC(rku9LT^bEE3{it_% z`qaOyq>N(pNHlbqQifCD=0L2hpReh`|Z1yOT>UwL#AJ>3`qwxm7X=l3mW?#IaNyC5z+T z-Py(6nRJKKmdh?_OJ|%V+4gwGNi6P6?qAZ~8P6R^XS$YjCR6#NOZKo`|$j zHWzO@6w4-`bHb~`^^{8{xG0mOWa4PJIlOjLZ0nlcv0Yns#~s?01sNyz*u2EUvnLhte9A{7>vT~)wWU)DcM>cpM63FugU%n;fgU5f zbf6F&?2Fz(*Y!v5Y!{>2K^@dS4Y(ZMFb1ftdF+;X@1k~{J&{CoG zPGLticy^3l!>kcX#yInoDq4sMQrJ4;ET7Dd{O#?j zqx>}2(LL=mVcmX0``U9^V|!h!zlaTJY@dsLL1BgHZQKu)!v?~@S&9YP*)*(wa_}yhmJ#jv2S~Ip|uXrecP)> z^H)W4x!TeEWyOb@=UP+{p{x{yA47GP&bVD)1?3Jx6G!tkqj`{3NwTmU8&_5WYwKA6 z!P{{jNKuK^UDexD6*xRYw5t6Tbd)DLqwHn56jBkv-D>@}wu1R=kl~b6n zCkOHqg~Cv!xetw9FTFj3l$Wl5UDy7ma$WTH9o-Rq(P3{{`${*@O~LqPuHgYS@gF1zUk0i-}f$pkH9rC z@v$0)u^LRC-kw{OTP27K)cav7Uk4{sa8eXqVRvaruE@FCyZ==Rh3GB6Hx2JYx?zj8 zsZU4xY!M!k22FBT)z3@byVI!Mpwhb|8NRG8MPm*sHh;OL_>*iZLDEyL+q+rA#^%Kv zrm;bktY&BL@LV^H5U=PP;uU?0T^DHs{)KTS;zqKQF- zE~g7o?3e<(_$!(}QKqtFj{nr_C9D;{Q#;OIw8kHO4E{J6no?SDj*qyJRRF zYePVsb7Du5x%OChCYg4z&TQss0^6^Y z_yQA86zz9Q{B08tzNzhxO8k=^e1pbcllUGFzFXrL%Glp1WB;MVpY-rQq4}o=86fiW zZ)F*Lx5P)8MEBn>HUCkG`}OZ@65r^tU#IOal(D}d@q-@wHenw|*@qH;-^ADVhJxSw z&LuU!XX1^+i7!KnZ8)WUXqLEN8}^jJk4u~n)S7>XpcixWjKpV{cxw^AIF3D=m`M(| zD5{{JiD6N=_m+roYa}~IDuhsCrVv%QYYv6X8-Q%45LMC~S-|Ts0NG3-nn25CL6yKK zm@sOaXvz0k@<%MWnzqOi-fMzXZQ)aBpDf|E8=&U)8=!n$dngZ@F zp>0Am-JLTiaq$fr!t?`KG6i{n zHcQFPLKuw^S#rO?#j4giA(~5*T|0Mkv;zQc-!M^kEcC;_ITOjWB0G!pP$lw z!4DzYZOKnlqa2U7fYf6D*(_yN{0W6Ng$KVivHOMb?Z6PBEn@@(O64V{!S z?+3N`?~9iHSEbCcS1qED>dzSo9mi+HhJ}vlG(l0E$Mur?wfj>fF zBLw08Z1CXCw9&%%Ntt7}TI|=|7XG}H`F&nXE%dU5pYhnQrEgd`nLiOFv+9hTJ(d+G zM<+q<4@j}jWHuKQr&v{xZi{!uvbl67e$a^>a*pxYR$@mo_?gPdP%O56M|9V&PscX2 zZdhqrHwwo@_IkO&!VBh$D(1C576jm(dcK<Lhxy?`#c0^| zW~_grB0yTc_3M=87&!8X542nXUU5$ z#VK^h_ENDJ737X}7ki?JsP6Dk>7mvmEp`^Kj$4#TrgEYaTz}P7npahoYC3tl=G7{7 z<;G3-y>C;X=dz8pi&t;4n3Kt*(!4XqbIEi{j%8O&T*NU!@fJ>bQ!LTA-Ah766>2SU zPv>C~C9zl{c{q{e1>2QQ@B`)myO=(Zh#wOk2|iCVJTyjol*jT8(4*#mFX&M#UKg_G za$jhRr`nuOJ+-B1D0HNgDGdw30Nr({VJYIB$0zmx-npOP90H%1f(VW|J`PMI`ZUW3 z(+{x>y_YzL-tTky(?$EREPq&*^T~+q*RhN+o=+ZZKaX<+qY;@eXB?IANg?{sYbtj4ebS0O?ZBVb6YY{wU-7NSvG)-zv-bB*HkKC>Y<*GVr7pAZx`V8l=>*XB6*EvV~MEz_1>tDor z8L5X!;nyyqmviS0x0_GA!90nRcMy|9)U&>f{ZXkGEu;5bnR+((+w(jO9+&lO^w$&Z zIU)7Xm~q?vSrYecfz9rHH@6>MD#jmGi1ENuq9F8MHib{dc2;4SVUrcw)pFb{&-31Z5>}P0Nh;X+>RFM z|2ED~x%)`)W%vF&*pKzb<-bRCm2MJ^A+%)^HuPl^GD%7=gsh+bG|%?WRG>_;`@>3 zGH#AA(0#&R#^orIi09%I*`LjduSm(W6T=a8UeX6BPwALbR0OZ-2v-p?-hVpGE~3R( zs~I~-GHKT_%~I4;r?Mi4QNx%}c^obBVrJ-CM2hu_@U#esN@WB)wvbyji6ev; zC>gSPRa{#YNEIU)O#&H}Jv@%XCVOb0fy`VQpEQyJbup}a*K{@p!zLyT;E8y~> zj6!1>1zbjq&wxvb@fC16QAVL011>AZXTYUJ8HIAq#3jb~47kh~UjdgIWfWG7ufUfa z<1*my4$3Iteq($F+;c?Q(p_Cn3L8=?opT}^x3w-7hkjUMk9PP1B904`drc2P5wA0v zAPw+Z@+8JM&BlkH@hTF@Pmg2nDtyZ6;q^F1Pu0a0sArBbY(9?fRjQB=2usH3v7Jgv z4`Jh&_P(W*B*r4bSaFVPVFBsX95>G3SZ5+W%*Xs^@L^w7|NR@Dcj2RwYR79RxDTHe z30wsqLIM#xak=8VfM>Qrh#=BR2*&@`AoLixj1TLndRM{V90M|`dIunz_1;CjD^bSn zK**%)y@h9!?_a?u{x${WoD|DfyuWU4V(>JCB?^or)lzy zfRFo?`4GZszB$li8`a)p;Nv(@CB-+(;=60`Ar#bn%@*J1z=zOFC&kD8Z~9j;mnaM^ z_OA{fm~J~a=fK~M1=viR--hzch6OYt4F_;wk5yiOF~ z3l`s+O80!KC>39i#rGok)Oa8?)_iYRd`a-Vt;moozAssPr@*%fIQQR7e3XChSbQ@u z&^SWrr1<{I;=2yM1<+zXgzB2_Uo5^h@bMm@lH%jvzRmHy3%(X8F<%%T<=@XNzHj^Z z_Y;e+d0x>!EIrLvjr9dpJ)iHxrc%nkD(IR1CBWALJN6H*YQFgvp94M|t#snLIL)#6 z&KdsA2d>)tn8kM$mteqES&rhFtOWS$wC!r{*7ydYbQ?#divP8%yw=wfN2( ze7r9x|M(1P&X@1|_{V=6W{$^AgAYef&G*k1-}FgD2TSEH9}It@O4&ndo$#Wx7P zQscYO;yVRCHNKA+e48x3hw(Bk#kbz#J8$qc8+?w%mjWNZ4^&d^jaz&-!H20Y`foLI z)!r8@z8ArVD-N9$UysE%Xz;Z_Tk(C_;`@q^f3I46!v^14gYPdSAEtvy=fTJC1C_X5 zPS-8HYtX|#os`~xTY5Kr^rpdp+pg-p4L!486yFL z$MK4(w*Y$gD<$Mg?+r_@8G1D(^#0n?+X6lO(@F8&wDk7)@cqit>-6E9Rq1WVap>VH zO(#|FbdQ;El(KU1WhDqm_gR_ZV|N9w70+5o*9nByv`dS^k;-2X6PLZQ^8f6~ISmUb&L%~2Ct>Bx{G!p5hK;CUcjz;yiyTPsbbuddV(4bRa;blaB@ zZ~tM??N)8)=4m- zuf6(O9}3~bj%A2aK+sr+R9&^UFt)HpS7{rC;a zSAK5(8nU%y6FDc$7K4{TEUqqY{Xv_)HM zvb3VDwOHDmt?jV11?gmMw)HODwLME);Rv5vx$yQfnOmK% zTyH6x%Vo1zHiKnzQJk55n2W8Kik+XOL*3nvwYB&5nQ0% zk#I-F(e`jS5(~$|odgJw@>UNi#{)`h(Csl?m{Fm2H`WhF68;L#X&L7n{7h#ti8$Yx z3J`1($={2gZk8pN=W8O?eX^T%zMm4+5N}wb8rmXhSRe4{bsjzF(HlK_lSgl$ZLS4p zAL9HSQUszSu8y-0aXrs_{CysM#G@Z|b@U{}^`CTg^dLlaH0|nO$oH8?|H9SLix36r zvd90mN2mT&+(>72HA!(-jK859Y)cNuv*}DGo!67Okpapd%QGL`7}cN485^RKnH;ZU z0ANx)o;MP#CsV`m!9+U426G_&=0JKs(pJ-OhK;aN-uU2XE*p<@J`(1|?%Hahd1G|Y zNyJ$b8An1#eGNpr!1;j2z?+HiH2b){+rdLbt>CPjcKw~;+|*}W`w;jJqEp~Ii9Q8q zoHp=UqJ!Xk-BRETjz0MUM4yA-!;_jnmNgRn%#G0sPYKD;j~b*7B#Z>9{rNnpqk2Y# zQLXN*dN$HgY!-J{6V~y(r@ZdjkV#4+o%eqPR}WlG=CWCRgtsx0Gj#RPbG`eVR#$4& zQw)>f3-JF5{lMEGzTl{5sdzUYbmPQJuvy$g9LMdbz8IUugaAj!Lp2Zg>~n>W)2c~ z$61!~zLM}zm%#hbT_g5;lXbi;f&||CY>@F5Bs{#L0`Gg4<@!#sa#n!3KB%)iWV~M) zubpk!FTPoU_dCnLLtj8K{sqJ;qBFyXvEp*a$Ww;nWI_z+4iCt}jkq~DTtZ&Z8V|WX zKOc~&4}B5!@e@$JQ!LV6j@u%Vu`Wb8C*q=fVLxVL3(NI9fCpUU6nB|LT4YBNf=dGL EUnrCW=l}o! literal 0 HcmV?d00001 diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/link.txt b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/link.txt new file mode 100644 index 000000000..7a9e27cf8 --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libvmlib.a CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o +/usr/bin/ranlib libvmlib.a diff --git a/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/progress.make b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/progress.make new file mode 100644 index 000000000..ee2a7095f --- /dev/null +++ b/core/iwasm/products/linux/b/CMakeFiles/vmlib.dir/progress.make @@ -0,0 +1,26 @@ +CMAKE_PROGRESS_1 = 29 +CMAKE_PROGRESS_2 = 30 +CMAKE_PROGRESS_3 = 31 +CMAKE_PROGRESS_4 = 32 +CMAKE_PROGRESS_5 = 33 +CMAKE_PROGRESS_6 = 34 +CMAKE_PROGRESS_7 = 35 +CMAKE_PROGRESS_8 = 36 +CMAKE_PROGRESS_9 = 37 +CMAKE_PROGRESS_10 = 38 +CMAKE_PROGRESS_11 = 39 +CMAKE_PROGRESS_12 = 40 +CMAKE_PROGRESS_13 = 41 +CMAKE_PROGRESS_14 = 42 +CMAKE_PROGRESS_15 = 43 +CMAKE_PROGRESS_16 = 44 +CMAKE_PROGRESS_17 = 45 +CMAKE_PROGRESS_18 = 46 +CMAKE_PROGRESS_19 = 47 +CMAKE_PROGRESS_20 = 48 +CMAKE_PROGRESS_21 = 49 +CMAKE_PROGRESS_22 = 50 +CMAKE_PROGRESS_23 = 51 +CMAKE_PROGRESS_24 = 52 +CMAKE_PROGRESS_25 = 53 + diff --git a/core/iwasm/products/linux/b/Makefile b/core/iwasm/products/linux/b/Makefile new file mode 100644 index 000000000..492dd803a --- /dev/null +++ b/core/iwasm/products/linux/b/Makefile @@ -0,0 +1,1006 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.5 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named vmlib + +# Build rule for target. +vmlib: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vmlib +.PHONY : vmlib + +# fast build rule for target. +vmlib/fast: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/build +.PHONY : vmlib/fast + +#============================================================================= +# Target rules for targets named iwasm + +# Build rule for target. +iwasm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 iwasm +.PHONY : iwasm + +# fast build rule for target. +iwasm/fast: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/build +.PHONY : iwasm/fast + +#============================================================================= +# Target rules for targets named libiwasm + +# Build rule for target. +libiwasm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 libiwasm +.PHONY : libiwasm + +# fast build rule for target. +libiwasm/fast: + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/build +.PHONY : libiwasm/fast + +ext-lib-export.o: ext-lib-export.c.o + +.PHONY : ext-lib-export.o + +# target to build an object file +ext-lib-export.c.o: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/ext-lib-export.c.o +.PHONY : ext-lib-export.c.o + +ext-lib-export.i: ext-lib-export.c.i + +.PHONY : ext-lib-export.i + +# target to preprocess a source file +ext-lib-export.c.i: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/ext-lib-export.c.i +.PHONY : ext-lib-export.c.i + +ext-lib-export.s: ext-lib-export.c.s + +.PHONY : ext-lib-export.s + +# target to generate assembly for a file +ext-lib-export.c.s: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/ext-lib-export.c.s +.PHONY : ext-lib-export.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.s.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.c.s + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.o: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.o + +# target to build an object file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.o + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.i: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.i + +# target to preprocess a source file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.i + +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.s: home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s + +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.s + +# target to generate assembly for a file +home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s: + $(MAKE) -f CMakeFiles/vmlib.dir/build.make CMakeFiles/vmlib.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s + $(MAKE) -f CMakeFiles/libiwasm.dir/build.make CMakeFiles/libiwasm.dir/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s +.PHONY : home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.c.s + +main.o: main.c.o + +.PHONY : main.o + +# target to build an object file +main.c.o: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/main.c.o +.PHONY : main.c.o + +main.i: main.c.i + +.PHONY : main.i + +# target to preprocess a source file +main.c.i: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/main.c.i +.PHONY : main.c.i + +main.s: main.c.s + +.PHONY : main.s + +# target to generate assembly for a file +main.c.s: + $(MAKE) -f CMakeFiles/iwasm.dir/build.make CMakeFiles/iwasm.dir/main.c.s +.PHONY : main.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... vmlib" + @echo "... iwasm" + @echo "... libiwasm" + @echo "... rebuild_cache" + @echo "... ext-lib-export.o" + @echo "... ext-lib-export.i" + @echo "... ext-lib-export.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/base/base-lib-export.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/lib/native/libc/libc_wrapper.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm-native.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/platform/linux/wasm_platform.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_dlfcn.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_hashmap.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_log.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/utils/wasm_vector.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/invokeNative_ia32.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-application.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-interp.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-loader.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/runtime/vmcore_wasm/wasm-runtime.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/bh_memory.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_alloc.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_hmu.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/ems/ems_kfc.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/mem-alloc/mem_alloc.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_assert.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_definition.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_platform_log.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_thread.s" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.o" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.i" + @echo "... home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/shared-lib/platform/linux/bh_time.s" + @echo "... main.o" + @echo "... main.i" + @echo "... main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/core/iwasm/products/linux/b/cmake_install.cmake b/core/iwasm/products/linux/b/cmake_install.cmake new file mode 100644 index 000000000..7af00e415 --- /dev/null +++ b/core/iwasm/products/linux/b/cmake_install.cmake @@ -0,0 +1,44 @@ +# Install script for directory: /home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/xin/wasm/ssg_micro_runtime-dynamic-apps-projects/core/iwasm/products/linux/b/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/core/iwasm/products/linux/b/iwasm b/core/iwasm/products/linux/b/iwasm new file mode 100755 index 0000000000000000000000000000000000000000..d3a205d68c75a6258cfd6e64621e333a03e82bf7 GIT binary patch literal 166492 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