[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 1/1] libs/wamr: WAMR baremetal demo running on a Raspberry Pi3 B+
WAMR baremetal demo running on a Raspberry Pi3 B+ Signed-off-by: Santiago Pagani <santiagopagani@xxxxxxxxx> --- Makefile.uk | 57 ++++++++++++++--- patches/0005-adapt-main-c-to-unikraft.patch | 9 --- patches/0006-clock_gettime.patch | 70 +++++++++++++++++++++ patches/0007-export-gui-symbols.patch | 17 +++++ patches/0008-wgl_obj_wrapper.patch | 67 ++++++++++++++++++++ patches/0009-event.patch | 11 ++++ 6 files changed, 213 insertions(+), 18 deletions(-) create mode 100644 patches/0006-clock_gettime.patch create mode 100644 patches/0007-export-gui-symbols.patch create mode 100644 patches/0008-wgl_obj_wrapper.patch create mode 100644 patches/0009-event.patch diff --git a/Makefile.uk b/Makefile.uk index 7bbf500..8babbf0 100644 --- a/Makefile.uk +++ b/Makefile.uk @@ -65,6 +65,15 @@ CINCLUDES-$(CONFIG_LIBWAMR) += -I$(LIBWAMR_BASE)/include -I$(LIBWAMR_SRC)/core/iwasm/runtime/include \ -I$(LIBWAMR_SRC)/core/shared-lib/platform/include \ -I$(LIBWAMR_SRC)/core/shared-lib/include \ + -I$(LIBWAMR_SRC)/core/shared-lib/utils \ + -I$(LIBWAMR_SRC)/core/iwasm/lib/native-interface \ + -I$(LIBWAMR_SRC)/core/iwasm/lib/native/extension/sensor \ + -I$(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui \ + -I$(LIBWAMR_SRC)/core/app-mgr/app-mgr-shared \ + -I$(LIBWAMR_SRC)/core/app-mgr/app-manager \ + -I$(LIBWAMR_SRC)/core/shared-lib/coap/extension \ + -I$(LIBWAMR_SRC)/core/shared-lib/coap/er-coap \ + -I$(LIBWAMR_SRC)/core/iwasm/lib/native/base ################################################################################ # Library flags @@ -77,10 +86,12 @@ LIBWAMR_SUPPRESS_FLAGS += -Wno-implicit-function-declaration \ -Wno-unused-label \ -Wno-unused-but-set-variable \ -Wno-cast-function-type \ - -Wno-implicit-fallthrough + -Wno-implicit-fallthrough \ + -Wno-int-to-pointer-cast \ + -Wno-pointer-sign -LIBWAMR_CFLAGS-y += -DNVALGRIND $(LIBWAMR_SUPPRESS_FLAGS) -LIBWAMR_CXXFLAGS-y += -DNVALGRIND $(LIBWAMR_SUPPRESS_FLAGS) +LIBWAMR_CFLAGS-y += -DLV_CONF_INCLUDE_SIMPLE -DNVALGRIND $(LIBWAMR_SUPPRESS_FLAGS) +LIBWAMR_CXXFLAGS-y += -DLV_CONF_INCLUDE_SIMPLE -DNVALGRIND $(LIBWAMR_SUPPRESS_FLAGS) ################################################################################ # Glue code @@ -97,16 +108,44 @@ LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/vmcore-wasm/wasm_application LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/vmcore-wasm/wasm_interp.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/vmcore-wasm/wasm_loader.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/vmcore-wasm/wasm_runtime.c -LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/mem-alloc/bh_memory.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/utils/wasm_log.c -LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/platform/linux/bh_thread.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/utils/wasm_hashmap.c -LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/libc/libc_wrapper.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/utils/wasm_dlfcn.c -LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/mem-alloc/mem_alloc.c -LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/platform/linux/bh_platform.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/runtime/platform/zephyr/wasm_native.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/base/base_lib_export.c -LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/products/linux/ext_lib_export.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/libc/libc_wrapper.c +#LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/app-libs/base/bh_platform.c|base +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/mem-alloc/bh_memory.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/mem-alloc/mem_alloc.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/mem-alloc/ems/ems_kfc.c LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/mem-alloc/ems/ems_alloc.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/utils/bh_queue.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/platform/linux/bh_thread.c +#LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/products/linux/ext_lib_export.c + +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native-interface/attr_container.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/module_utils.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/app_manager.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/watchdog.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/base/timer_wrapper.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/utils/runtime_timer.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native-interface/restful_utils.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/message.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/event.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/app_manager_host.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/resource_reg.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/utils/bh_list.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/platform/linux/bh_time.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/platform/linux/bh_platform.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/shared-lib/platform/linux/bh_definition.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/module_wasm_app.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/app-mgr/app-manager/module_wasm_lib.c + +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui/wgl_btn_wrapper.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui/wgl_native_utils.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui/wgl_label_wrapper.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui/wgl_list_wrapper.c +LIBWAMR_SRCS-y += $(LIBWAMR_SRC)/core/iwasm/lib/native/extension/gui/wgl_cb_wrapper.c diff --git a/patches/0005-adapt-main-c-to-unikraft.patch b/patches/0005-adapt-main-c-to-unikraft.patch index c8f73e5..086b7e8 100644 --- a/patches/0005-adapt-main-c-to-unikraft.patch +++ b/patches/0005-adapt-main-c-to-unikraft.patch @@ -9,15 +9,6 @@ static int app_argc; static char **app_argv; -@@ -158,7 +160,7 @@ - return NULL; - } - --#define USE_GLOBAL_HEAP_BUF 0 -+#define USE_GLOBAL_HEAP_BUF 1 - - #if USE_GLOBAL_HEAP_BUF != 0 - static char global_heap_buf[10 * 1024 * 1024] = { 0 }; @@ -177,15 +179,11 @@ int log_verbose_level = 1; #endif diff --git a/patches/0006-clock_gettime.patch b/patches/0006-clock_gettime.patch new file mode 100644 index 0000000..087e81c --- /dev/null +++ b/patches/0006-clock_gettime.patch @@ -0,0 +1,70 @@ +--- a/core/iwasm/lib/app-libs/libc/lib_base.h 2019-09-09 14:51:40.000000000 +0200 ++++ b/core/iwasm/lib/app-libs/libc/lib_base.h 2019-11-07 13:35:38.697247453 +0100 +@@ -37,6 +37,7 @@ + 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); ++int clock_gettime(clockid_t clk_id, struct timespec *tp); + + #ifdef __cplusplus + } +--- a/core/iwasm/lib/3rdparty/lv_conf.h 2019-12-16 11:31:38.000000000 +0100 ++++ b/core/iwasm/lib/3rdparty/lv_conf.h 2019-12-16 11:31:47.000000000 +0100 +@@ -488,7 +488,7 @@ + /*--END OF LV_CONF_H--*/ + + /*Be sure every define has a default value*/ +-#include "lvgl/src/lv_conf_checker.h" ++//#include "lvgl/src/lv_conf_checker.h" + + #endif /*LV_CONF_H*/ + +--- a/core/iwasm/lib/native/libc/libc_wrapper.c 2019-09-09 14:51:40.000000000 +0200 ++++ b/core/iwasm/lib/native/libc/libc_wrapper.c 2019-11-07 13:35:38.697247453 +0100 +@@ -18,6 +18,10 @@ + #include "wasm_export.h" + #include "wasm_log.h" + #include "wasm_platform_log.h" ++#include <time.h> ++#if CONFIG_PLAT_RASPI ++#include <raspi/time.h> ++#endif + + void + wasm_runtime_set_exception(wasm_module_inst_t module, const char *exception); +@@ -908,6 +912,25 @@ + wasm_runtime_set_exception(module_inst, buf); + } + ++static int ++_clock_gettime_wrapper(clockid_t clk_id, int32 tp_offset) ++{ ++ wasm_module_inst_t module_inst = get_module_inst(); ++ struct timespec *tp_native; ++ ++ if (!validate_app_addr(tp_offset, sizeof(struct timespec *))) ++ return -1; ++ ++ tp_native = addr_app_to_native(tp_offset); ++ #if CONFIG_PLAT_RASPI ++ // When running WAMR on the Raspberry Pi, we add support to WAMR for clock_gettime ++ // using the Raspberry Pi's system timer. Therefore, WAMR will need to include the ++ // raspi/time.h header to use the get_system_timer() function. ++ tp_native->tv_sec = get_system_timer(); ++ #endif ++ return 0; ++} ++ + /*#define ENABLE_SPEC_TEST 1*/ + + #ifdef ENABLE_SPEC_TEST +@@ -969,7 +992,8 @@ + REG_NATIVE_FUNC(env, _emscripten_memcpy_big), + REG_NATIVE_FUNC(env, abort), + REG_NATIVE_FUNC(env, abortStackOverflow), +- REG_NATIVE_FUNC(env, nullFunc_X) ++ REG_NATIVE_FUNC(env, nullFunc_X), ++ REG_NATIVE_FUNC(env, _clock_gettime) + }; + + void* diff --git a/patches/0007-export-gui-symbols.patch b/patches/0007-export-gui-symbols.patch new file mode 100644 index 0000000..e10daee --- /dev/null +++ b/patches/0007-export-gui-symbols.patch @@ -0,0 +1,17 @@ +--- a/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c 2020-01-23 15:23:26.423734785 +0100 ++++ b/samples/gui/wasm-runtime-wgl/src/ext_lib_export.c 2020-01-23 10:15:54.266465950 +0100 +@@ -4,9 +4,12 @@ + #include "gui_api.h" + + static NativeSymbol extended_native_symbol_defs[] = { +-#include "runtime_sensor.inl" +-#include "connection.inl" ++ //#include "runtime_sensor.inl" ++ //#include "connection.inl" + #include "wamr_gui.inl" ++EXPORT_WASM_API(wasm_create_timer), ++EXPORT_WASM_API(wasm_timer_cancel), ++EXPORT_WASM_API(wasm_timer_restart), + }; + + #include "ext_lib_export.h" diff --git a/patches/0008-wgl_obj_wrapper.patch b/patches/0008-wgl_obj_wrapper.patch new file mode 100644 index 0000000..aef412f --- /dev/null +++ b/patches/0008-wgl_obj_wrapper.patch @@ -0,0 +1,67 @@ +--- a/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c 2019-09-09 14:51:40.000000000 +0200 ++++ b/core/iwasm/lib/native/extension/gui/wgl_obj_wrapper.c 2020-01-29 13:41:40.000000000 +0100 +@@ -253,6 +253,27 @@ + sizeof(*object_event)); + } + ++extern wasm_module_inst_t wasm_module_inst_unikraft; ++static void trigger_wasm_widget_event(object_node_t *object_node, lv_event_t event) ++{ ++ uint32 argv[2]; ++ wasm_function_inst_t func_on_object_event; ++ ++ func_on_object_event = wasm_runtime_lookup_function(wasm_module_inst_unikraft, "on_widget_event", "(i32i32)"); ++ if (!func_on_object_event) { ++ printf("Cannot find function _on_object_event\n"); ++ return; ++ } ++ ++ argv[0] = object_node->obj_id; ++ argv[1] = event; ++ if (!wasm_runtime_call_wasm(wasm_module_inst_unikraft, NULL, func_on_object_event, 2, argv)) { ++ printf(":Got exception running wasm code: %s\n", wasm_runtime_get_exception(wasm_module_inst_unikraft)); ++ wasm_runtime_clear_exception(wasm_module_inst_unikraft); ++ return; ++ } ++} ++ + static void internal_lv_obj_event_cb(lv_obj_t *obj, lv_event_t event) + { + object_node_t *elem; +@@ -262,8 +283,8 @@ + elem = (object_node_t *)bh_list_first_elem(&g_object_list); + while (elem) { + if (obj == elem->obj) { +- post_widget_msg_to_module(elem, event); + vm_mutex_unlock(&g_object_list_mutex); ++ trigger_wasm_widget_event(elem, event); + return; + } + elem = (object_node_t *) bh_list_elem_next(elem); +@@ -288,19 +309,19 @@ + + void wgl_init(void) + { +- korp_thread tid; ++ // korp_thread tid; + +- lv_init(); ++ // lv_init(); + + bh_list_init(&g_object_list); +- vm_recursive_mutex_init(&g_object_list_mutex); ++ vm_mutex_init(&g_object_list_mutex); + init_object_event_callback_framework(); + + /* new a thread, call lv_task_handler periodically */ +- vm_thread_create(&tid, +- lv_task_handler_thread_routine, +- NULL, +- BH_APPLET_PRESERVED_STACK_SIZE); ++// vm_thread_create(&tid, ++// lv_task_handler_thread_routine, ++// NULL, ++// BH_APPLET_PRESERVED_STACK_SIZE); + } + + /* ------------------------------------------------------------------------- diff --git a/patches/0009-event.patch b/patches/0009-event.patch new file mode 100644 index 0000000..36fc273 --- /dev/null +++ b/patches/0009-event.patch @@ -0,0 +1,11 @@ +--- a/core/app-mgr/app-manager/event.h 2019-09-09 14:51:40.000000000 +0200 ++++ b/core/app-mgr/app-manager/event.h 2020-01-24 14:52:50.000000000 +0100 +@@ -33,7 +33,7 @@ + */ + bool + event_handle_event_request(uint8_t code, const char *event_url, +- uint32_t register); ++ uint32_t reg_client); + + /** + * Test whether the event is registered -- 2.17.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |