mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-30 21:02:27 +00:00 
			
		
		
		
	Add a switch to build simple sample without gui support (#126)
* Implement memory profiler, optimize memory usage, modify code indent * Implement memory.grow and limit heap space base offset to 1G; modify iwasm build type to Release and 64 bit by default * Add a new extension library: connection * Fix bug of reading magic number and version in big endian platform * Re-org platform APIs: move most platform APIs from iwasm to shared-lib * Enhance wasm loader to fix some security issues * Fix issue about illegal load of EXC_RETURN into PC on stm32 board * Updates that let a restricted version of the interpreter run in SGX * Enable native/app address validation and conversion for wasm app * Remove wasm_application_exectue_* APIs from wasm_export.h which makes confused * Refine binary size and fix several minor issues Optimize interpreter LOAD/STORE opcodes to decrease the binary size Fix issues when using iwasm library: _bh_log undefined, bh_memory.h not found Remove unused _stdin/_stdout/_stderr global variables resolve in libc wrapper Add macros of global heap size, stack size, heap size for Zephyr main.c Clear compile warning of wasm_application.c * Add more strict security checks for libc wrapper API's * Use one libc wrapper copy for sgx and other platforms; remove bh_printf macro for other platform header files * Enhance security of libc strcpy/sprintf wrapper function * Fix issue of call native for x86_64/arm/mips, add module inst parameter for native wrapper functions * Remove get_module_inst() and fix issue of call native * Refine wgl lib: remove module_inst parameter from widget functions; move function index check to runtime instantiate * Refine interpreter call native process, refine memory boudary check * Fix issues of invokeNative function of arm/mips/general version * Add a switch to build simple sample without gui support
This commit is contained in:
		
							parent
							
								
									2fca3aa3f5
								
							
						
					
					
						commit
						f8f61dc898
					
				|  | @ -38,7 +38,10 @@ | |||
| #include "sensor.h" | ||||
| #include "connection.h" | ||||
| #include "timer_wasm_app.h" | ||||
| 
 | ||||
| #if ENABLE_WGL != 0 | ||||
| #include "wgl.h" | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
|  |  | |||
|  | @ -156,7 +156,9 @@ unpack_response(char * packet, int size, response_t * response); | |||
| void | ||||
| free_req_resp_packet(char * packet); | ||||
| 
 | ||||
| #if WASM_ENABLE_GUI != 0 | ||||
| #include "wgl_shared_utils.h" | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|  |  | |||
|  | @ -1795,7 +1795,13 @@ wasm_interp_call_func_bytecode(WASMThread *self, | |||
| 
 | ||||
|         b = POP_F32(); | ||||
|         a = POP_F32(); | ||||
|         PUSH_F32(wa_fmin(a, b)); | ||||
| 
 | ||||
|         if (isnan(a)) | ||||
|             PUSH_F32(a); | ||||
|         else if (isnan(b)) | ||||
|             PUSH_F32(b); | ||||
|         else | ||||
|             PUSH_F32(wa_fmin(a, b)); | ||||
|         HANDLE_OP_END (); | ||||
|       } | ||||
| 
 | ||||
|  | @ -1805,7 +1811,13 @@ wasm_interp_call_func_bytecode(WASMThread *self, | |||
| 
 | ||||
|         b = POP_F32(); | ||||
|         a = POP_F32(); | ||||
|         PUSH_F32(wa_fmax(a, b)); | ||||
| 
 | ||||
|         if (isnan(a)) | ||||
|             PUSH_F32(a); | ||||
|         else if (isnan(b)) | ||||
|             PUSH_F32(b); | ||||
|         else | ||||
|             PUSH_F32(wa_fmax(a, b)); | ||||
|         HANDLE_OP_END (); | ||||
|       } | ||||
| 
 | ||||
|  | @ -1870,7 +1882,13 @@ wasm_interp_call_func_bytecode(WASMThread *self, | |||
| 
 | ||||
|         b = POP_F64(); | ||||
|         a = POP_F64(); | ||||
|         PUSH_F64(wa_fmin(a, b)); | ||||
| 
 | ||||
|         if (isnan(a)) | ||||
|             PUSH_F64(a); | ||||
|         else if (isnan(b)) | ||||
|             PUSH_F64(b); | ||||
|         else | ||||
|             PUSH_F64(wa_fmin(a, b)); | ||||
|         HANDLE_OP_END (); | ||||
|       } | ||||
| 
 | ||||
|  | @ -1880,7 +1898,13 @@ wasm_interp_call_func_bytecode(WASMThread *self, | |||
| 
 | ||||
|         b = POP_F64(); | ||||
|         a = POP_F64(); | ||||
|         PUSH_F64(wa_fmax(a, b)); | ||||
| 
 | ||||
|         if (isnan(a)) | ||||
|             PUSH_F64(a); | ||||
|         else if (isnan(b)) | ||||
|             PUSH_F64(b); | ||||
|         else | ||||
|             PUSH_F64(wa_fmax(a, b)); | ||||
|         HANDLE_OP_END (); | ||||
|       } | ||||
| 
 | ||||
|  |  | |||
|  | @ -131,3 +131,6 @@ | |||
| #define bh_printf printf | ||||
| #endif | ||||
| 
 | ||||
| #ifndef WASM_ENABLE_GUI | ||||
| #define WASM_ENABLE_GUI 0 | ||||
| #endif | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ IWASM_DIR=../../../../core/iwasm | |||
| CFLAGS += -O3 \
 | ||||
| 	  -Wno-int-conversion \
 | ||||
| 	  -DLV_CONF_INCLUDE_SIMPLE \
 | ||||
| 	  -DENABLE_WGL=1 \
 | ||||
| 	  -I$(APP_DIR)/src/ \
 | ||||
| 	  -I$(IWASM_DIR)/lib/app-libs/base/ \
 | ||||
| 	  -I$(IWASM_DIR)/lib/native-interface/ \
 | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ IWASM_DIR=../../../../core/iwasm | |||
| CFLAGS += -O3 \
 | ||||
| 	  -Wno-int-conversion \
 | ||||
| 	  -DLV_CONF_INCLUDE_SIMPLE \
 | ||||
| 	  -DENABLE_WGL=1 \
 | ||||
| 	  -I$(APP_DIR)/src/ \
 | ||||
| 	  -I$(IWASM_DIR)/lib/app-libs/base/ \
 | ||||
| 	  -I$(IWASM_DIR)/lib/native-interface/ \
 | ||||
|  |  | |||
|  | @ -82,6 +82,7 @@ add_definitions (-DWASM_ENABLE_BASE_LIB) | |||
| add_definitions (-Dattr_container_malloc=bh_malloc) | ||||
| add_definitions (-Dattr_container_free=bh_free) | ||||
| add_definitions (-DLV_CONF_INCLUDE_SIMPLE) | ||||
| add_definitions (-DWASM_ENABLE_GUI=1) | ||||
| 
 | ||||
| add_library (vmlib | ||||
|              ${WASM_PLATFORM_LIB_SOURCE} | ||||
|  |  | |||
|  | @ -24,7 +24,8 @@ zephyr_compile_definitions (-DNVALGRIND | |||
|     -D__ZEPHYR__ | ||||
|     -DWASM_ENABLE_BASE_LIB | ||||
|     -Dattr_container_malloc=bh_malloc | ||||
|     -Dattr_container_free=bh_free) | ||||
|     -Dattr_container_free=bh_free | ||||
|     -DWASM_ENABLE_GUI=1) | ||||
| 
 | ||||
| set (IWASM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/core/iwasm) | ||||
| set (APP_MGR_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/core/app-mgr) | ||||
|  |  | |||
|  | @ -48,10 +48,11 @@ set(WASM_DIR  ${WAMR_ROOT_DIR}/core/iwasm) | |||
| set(APP_MGR_DIR ${WAMR_ROOT_DIR}/core/app-mgr) | ||||
| set(SHARED_DIR ${WAMR_ROOT_DIR}/core/shared-lib) | ||||
| 
 | ||||
| set (LV_DRIVERS_DIR ${WASM_DIR}/lib/3rdparty/lv_drivers) | ||||
| set (LVGL_DIR ${WASM_DIR}/lib/3rdparty/lvgl) | ||||
| 
 | ||||
| file(GLOB_RECURSE LV_DRIVERS_SOURCES "${LV_DRIVERS_DIR}/*.c" ) | ||||
| if ("${ENABLE_GUI}" STREQUAL "YES") | ||||
|     set (LV_DRIVERS_DIR ${WASM_DIR}/lib/3rdparty/lv_drivers) | ||||
|     set (LVGL_DIR ${WASM_DIR}/lib/3rdparty/lvgl) | ||||
|     file(GLOB_RECURSE LV_DRIVERS_SOURCES "${LV_DRIVERS_DIR}/*.c" ) | ||||
| endif() | ||||
| 
 | ||||
| enable_language (ASM) | ||||
| 
 | ||||
|  | @ -61,7 +62,9 @@ include (${WASM_DIR}/runtime/vmcore-wasm/vmcore.cmake) | |||
| include (${WASM_DIR}/lib/native/base/wasm_lib_base.cmake) | ||||
| include (${WASM_DIR}/lib/native/libc/wasm_libc.cmake) | ||||
| include (${WASM_DIR}/lib/native/extension/sensor/wasm_lib_sensor.cmake) | ||||
| include (${WASM_DIR}/lib/native/extension/gui/wasm_lib_gui.cmake) | ||||
| if ("${ENABLE_GUI}" STREQUAL "YES") | ||||
|     include (${WASM_DIR}/lib/native/extension/gui/wasm_lib_gui.cmake) | ||||
| endif() | ||||
| include (${WASM_DIR}/lib/native/extension/connection/wasm_lib_conn.cmake) | ||||
| include (${WASM_DIR}/lib/native/extension/connection/${TARGET_PLATFORM}/connection_mgr.cmake) | ||||
| include (${WASM_DIR}/lib/native-interface/native_interface.cmake) | ||||
|  | @ -83,6 +86,10 @@ add_definitions (-Dattr_container_malloc=bh_malloc) | |||
| add_definitions (-Dattr_container_free=bh_free) | ||||
| add_definitions (-DLV_CONF_INCLUDE_SIMPLE) | ||||
| 
 | ||||
| if ("${ENABLE_GUI}" STREQUAL "YES") | ||||
|     add_definitions (-DWASM_ENABLE_GUI=1) | ||||
| endif() | ||||
| 
 | ||||
| add_library (vmlib | ||||
|              ${WASM_PLATFORM_LIB_SOURCE} | ||||
|              ${WASM_UTILS_LIB_SOURCE} | ||||
|  | @ -101,7 +108,12 @@ add_library (vmlib | |||
|              ${NATIVE_INTERFACE_SOURCE} | ||||
|             ) | ||||
| 
 | ||||
| if ("${ENABLE_GUI}" STREQUAL "YES") | ||||
|     add_executable (simple src/main.c src/iwasm_main.c src/ext_lib_export.c ${LV_DRIVERS_SOURCES}) | ||||
|     target_link_libraries (simple vmlib -lm -ldl -lpthread -lSDL2) | ||||
| else () | ||||
|     add_executable (simple src/main.c src/iwasm_main.c src/ext_lib_export.c) | ||||
|     target_link_libraries (simple vmlib -lm -ldl -lpthread) | ||||
| endif () | ||||
| 
 | ||||
| target_link_libraries (simple vmlib -lm -ldl -lpthread -lSDL2) | ||||
| 
 | ||||
|  |  | |||
|  | @ -28,6 +28,8 @@ simple/ | |||
| 
 | ||||
| - build.sh<br/> | ||||
|   The script to build all binaries. | ||||
| - build_no_gui.sh<br/> | ||||
|   The script to build all binaries without gui library support. | ||||
| - CMakeLists.txt<br/> | ||||
|   CMake file used to build the simple application. | ||||
| - README.md<br/> | ||||
|  | @ -101,6 +103,9 @@ Build all binaries | |||
| Execute the build.sh script then all binaries including wasm application files would be generated in 'out' directory. | ||||
| `./build.sh` | ||||
| 
 | ||||
| Or execute the build_no_gui.sh script to build all binaries without gui library support. | ||||
| `./build_no_gui.sh` | ||||
| 
 | ||||
| Out directory structure | ||||
| ------------------------------ | ||||
| ``` | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ echo "#####################build simple project" | |||
| cd ${CURR_DIR} | ||||
| mkdir -p cmake_build | ||||
| cd cmake_build | ||||
| cmake .. | ||||
| cmake -DENABLE_GUI=YES .. | ||||
| make | ||||
| if [ $? != 0 ];then | ||||
|     echo "BUILD_FAIL simple exit as $?\n" | ||||
|  | @ -66,6 +66,7 @@ OUT_FILE=${i%.*}.wasm | |||
| emcc -O3 -I${APP_LIBS}/base -I${APP_LIBS}/extension/sensor -I${NATIVE_LIBS} \ | ||||
|      -I${APP_LIBS}/extension/connection \ | ||||
|      -I${APP_LIBS}/extension/gui \ | ||||
|      -DENABLE_WGL=1 \ | ||||
|      -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ | ||||
|      -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 \ | ||||
|      -s "EXPORTED_FUNCTIONS=['_on_init', '_on_destroy', '_on_request', '_on_response', \ | ||||
|  |  | |||
							
								
								
									
										71
									
								
								samples/simple/build_no_gui.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								samples/simple/build_no_gui.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| CURR_DIR=$PWD | ||||
| WAMR_DIR=${PWD}/../.. | ||||
| OUT_DIR=${PWD}/out | ||||
| BUILD_DIR=${PWD}/build | ||||
| 
 | ||||
| IWASM_ROOT=${PWD}/../../core/iwasm | ||||
| APP_LIBS=${IWASM_ROOT}/lib/app-libs | ||||
| NATIVE_LIBS=${IWASM_ROOT}/lib/native-interface | ||||
| APP_LIB_SRC="${APP_LIBS}/base/*.c ${APP_LIBS}/extension/sensor/*.c ${APP_LIBS}/extension/connection/*.c ${NATIVE_LIBS}/*.c" | ||||
| WASM_APPS=${PWD}/wasm-apps | ||||
| 
 | ||||
| rm -rf ${OUT_DIR} | ||||
| mkdir ${OUT_DIR} | ||||
| mkdir ${OUT_DIR}/wasm-apps | ||||
| 
 | ||||
| cd ${WAMR_DIR}/core/shared-lib/mem-alloc | ||||
| if [ ! -d "tlsf" ]; then | ||||
|     git clone https://github.com/mattconte/tlsf | ||||
| fi | ||||
| 
 | ||||
| echo "#####################build simple project" | ||||
| cd ${CURR_DIR} | ||||
| mkdir -p cmake_build | ||||
| cd cmake_build | ||||
| cmake -DENABLE_GUI=NO .. | ||||
| make | ||||
| if [ $? != 0 ];then | ||||
|     echo "BUILD_FAIL simple exit as $?\n" | ||||
|     exit 2 | ||||
| fi | ||||
| cp -a simple ${OUT_DIR} | ||||
| echo "#####################build simple project success" | ||||
| 
 | ||||
| echo "#####################build host-tool" | ||||
| cd ${WAMR_DIR}/test-tools/host-tool | ||||
| mkdir -p bin | ||||
| cd bin | ||||
| cmake .. | ||||
| make | ||||
| if [ $? != 0 ];then | ||||
|         echo "BUILD_FAIL host tool exit as $?\n" | ||||
|         exit 2 | ||||
| fi | ||||
| cp host_tool ${OUT_DIR} | ||||
| echo "#####################build host-tool success" | ||||
| 
 | ||||
| 
 | ||||
| echo "#####################build wasm apps" | ||||
| 
 | ||||
| cd ${WASM_APPS} | ||||
| 
 | ||||
| for i in `ls *.c | grep -v gui` | ||||
| do | ||||
| APP_SRC="$i ${APP_LIB_SRC}" | ||||
| OUT_FILE=${i%.*}.wasm | ||||
| emcc -O3 -I${APP_LIBS}/base -I${APP_LIBS}/extension/sensor -I${NATIVE_LIBS} \ | ||||
|      -I${APP_LIBS}/extension/connection \ | ||||
|      -s WASM=1 -s SIDE_MODULE=1 -s ASSERTIONS=1 -s STACK_OVERFLOW_CHECK=2 \ | ||||
|      -s TOTAL_MEMORY=65536 -s TOTAL_STACK=4096 \ | ||||
|      -s "EXPORTED_FUNCTIONS=['_on_init', '_on_destroy', '_on_request', '_on_response', \ | ||||
|                              '_on_sensor_event', '_on_timer_callback', '_on_connection_data']" \ | ||||
|      -o ${OUT_DIR}/wasm-apps/${OUT_FILE} ${APP_SRC} | ||||
| if [ -f ${OUT_DIR}/wasm-apps/${OUT_FILE} ]; then | ||||
|         echo "build ${OUT_FILE} success" | ||||
| else | ||||
|         echo "build ${OUT_FILE} fail" | ||||
| fi | ||||
| done | ||||
| echo "#####################build wasm apps done" | ||||
|  | @ -1,12 +1,17 @@ | |||
| #include "lib_export.h" | ||||
| #include "sensor_api.h" | ||||
| #include "connection_api.h" | ||||
| 
 | ||||
| #if WASM_ENABLE_GUI != 0 | ||||
| #include "gui_api.h" | ||||
| #endif | ||||
| 
 | ||||
| static NativeSymbol extended_native_symbol_defs[] = { | ||||
| #include "runtime_sensor.inl" | ||||
| #include "connection.inl" | ||||
| #if WASM_ENABLE_GUI != 0 | ||||
| #include "wamr_gui.inl" | ||||
| #endif | ||||
|         }; | ||||
| 
 | ||||
| #include "ext_lib_export.h" | ||||
|  |  | |||
|  | @ -33,8 +33,10 @@ | |||
| #include "module_wasm_app.h" | ||||
| #include "wasm_export.h" | ||||
| 
 | ||||
| #if WASM_ENABLE_GUI != 0 | ||||
| #include "lv_drivers/display/monitor.h" | ||||
| #include "lv_drivers/indev/mouse.h" | ||||
| #endif | ||||
| 
 | ||||
| #define MAX 2048 | ||||
| 
 | ||||
|  | @ -430,6 +432,7 @@ static bool parse_args(int argc, char *argv[]) | |||
|     return true; | ||||
| } | ||||
| 
 | ||||
| #if WASM_ENABLE_GUI != 0 | ||||
| /**
 | ||||
|  * Initialize the Hardware Abstraction Layer (HAL) for the Littlev graphics library | ||||
|  */ | ||||
|  | @ -461,6 +464,8 @@ static void hal_init(void) | |||
|     indev_drv.read_cb = mouse_read;         /*This function will be called periodically (by the library) to get the mouse position and state*/ | ||||
|     lv_indev_drv_register(&indev_drv); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| // Driver function
 | ||||
| int iwasm_main(int argc, char *argv[]) | ||||
| { | ||||
|  | @ -484,8 +489,11 @@ int iwasm_main(int argc, char *argv[]) | |||
|         goto fail1; | ||||
|     } | ||||
| 
 | ||||
| #if WASM_ENABLE_GUI != 0 | ||||
|     wgl_init(); | ||||
|     hal_init(); | ||||
| #endif | ||||
| 
 | ||||
|     init_sensor_framework(); | ||||
| 
 | ||||
|     // timer manager
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 wenyongh
						wenyongh