From 9710d9325f426121cc1f2c62386a71d0c022d613 Mon Sep 17 00:00:00 2001 From: Wenyong Huang Date: Fri, 30 Apr 2021 09:13:29 +0800 Subject: [PATCH] Fix wasm-c-api JIT mode issue and enable set LLVM_DIR in cmd line (#624) --- build-scripts/config_common.cmake | 16 +++++++++------- core/iwasm/common/wasm_c_api.c | 19 ++++++++++++------- samples/wasm-c-api/CMakeLists.txt | 4 ++-- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/build-scripts/config_common.cmake b/build-scripts/config_common.cmake index f6b8e51c..233174a1 100644 --- a/build-scripts/config_common.cmake +++ b/build-scripts/config_common.cmake @@ -80,15 +80,17 @@ endif () if (WAMR_BUILD_JIT EQUAL 1) if (WAMR_BUILD_AOT EQUAL 1) add_definitions("-DWASM_ENABLE_JIT=1") - set (LLVM_SRC_ROOT "${WAMR_ROOT_DIR}/core/deps/llvm") - set (LLVM_BUILD_ROOT "${LLVM_SRC_ROOT}/build") - if (WAMR_BUILD_PLATFORM STREQUAL "windows") + if (NOT DEFINED LLVM_DIR) + set (LLVM_SRC_ROOT "${WAMR_ROOT_DIR}/core/deps/llvm") + set (LLVM_BUILD_ROOT "${LLVM_SRC_ROOT}/build") + if (WAMR_BUILD_PLATFORM STREQUAL "windows") set (LLVM_BUILD_ROOT "${LLVM_SRC_ROOT}/win32build") + endif () + if (NOT EXISTS "${LLVM_BUILD_ROOT}") + message (FATAL_ERROR "Cannot find LLVM dir: ${LLVM_BUILD_ROOT}") + endif () + set (CMAKE_PREFIX_PATH "${LLVM_BUILD_ROOT};${CMAKE_PREFIX_PATH}") endif () - if (NOT EXISTS "${LLVM_BUILD_ROOT}") - message (FATAL_ERROR "Cannot find LLVM dir: ${LLVM_BUILD_ROOT}") - endif () - set (CMAKE_PREFIX_PATH "${LLVM_BUILD_ROOT};${CMAKE_PREFIX_PATH}") find_package(LLVM REQUIRED CONFIG) include_directories(${LLVM_INCLUDE_DIRS}) add_definitions(${LLVM_DEFINITIONS}) diff --git a/core/iwasm/common/wasm_c_api.c b/core/iwasm/common/wasm_c_api.c index 4e883153..cc5473a1 100644 --- a/core/iwasm/common/wasm_c_api.c +++ b/core/iwasm/common/wasm_c_api.c @@ -1203,7 +1203,7 @@ wasm_trap_new_internal(const char *string) goto failed; } - wasm_name_new_from_string_nt(trap->message, string); + wasm_name_new_from_string(trap->message, string); if (strlen(string) && !trap->message->data) { goto failed; } @@ -1409,12 +1409,12 @@ wasm_module_imports(const wasm_module_t *module, continue; } - wasm_name_new_from_string_nt(&module_name, module_name_rt); + wasm_name_new_from_string(&module_name, module_name_rt); if (strlen(module_name_rt) && !module_name.data) { goto failed; } - wasm_name_new_from_string_nt(&name, field_name_rt); + wasm_name_new_from_string(&name, field_name_rt); if (strlen(field_name_rt) && !name.data) { goto failed; } @@ -1494,12 +1494,12 @@ wasm_module_imports(const wasm_module_t *module, continue; } - wasm_name_new_from_string_nt(&module_name, module_name_rt); + wasm_name_new_from_string(&module_name, module_name_rt); if (strlen(module_name_rt) && !module_name.data) { goto failed; } - wasm_name_new_from_string_nt(&name, field_name_rt); + wasm_name_new_from_string(&name, field_name_rt); if (strlen(field_name_rt) && !name.data) { goto failed; } @@ -1623,7 +1623,7 @@ wasm_module_exports(const wasm_module_t *module, wasm_exporttype_vec_t *out) } /* byte* -> wasm_byte_vec_t */ - wasm_name_new_from_string_nt(&name, export->name); + wasm_name_new_from_string(&name, export->name); if (strlen(export->name) && !name.data) { goto failed; } @@ -3221,6 +3221,11 @@ aot_link_func(const wasm_instance_t *inst, return false; } + if (!bh_vector_append((Vector *)inst->imports, &cloned)) { + wasm_func_delete(cloned); + return false; + } + import_aot_func->call_conv_raw = true; import_aot_func->attachment = cloned; import_aot_func->func_ptr_linked = native_func_trampoline; @@ -3243,7 +3248,7 @@ aot_link_global(const AOTModule *module_aot, bh_assert(import_aot_global); //TODO: import->type ? - val_type = wasm_globaltype_content(wasm_global_type(import)); + val_type = wasm_globaltype_content(import->type); bh_assert(val_type); switch (wasm_valtype_kind(val_type)) { diff --git a/samples/wasm-c-api/CMakeLists.txt b/samples/wasm-c-api/CMakeLists.txt index 144bfa89..7e0e38d2 100644 --- a/samples/wasm-c-api/CMakeLists.txt +++ b/samples/wasm-c-api/CMakeLists.txt @@ -130,10 +130,10 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug") if(VALGRIND) foreach(EX ${EXAMPLES}) add_custom_target(${EX}_LEAK_TEST - COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes --show-reachable=yes ./${EX} + COMMAND ${VALGRIND} --tool=memcheck --leak-check=yes ./${EX} DEPENDS ${EX} ${EX}_WASM VERBATIM - SOURCES ${EX} + COMMENT "run a leak check on ${EX}" ) endforeach() endif (VALGRIND)