1515#if WASM_ENABLE_THREAD_MGR != 0
1616#include "../libraries/thread-mgr/thread_manager.h"
1717#endif
18+ #if WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0
19+ #include "wasi_nn_host.h"
20+ #endif
1821
1922static NativeSymbolsList g_native_symbols_list = NULL ;
2023
@@ -472,11 +475,12 @@ quick_aot_entry_init();
472475bool
473476wasm_native_init ()
474477{
475- #if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \
476- || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \
477- || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \
478- || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \
479- || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0
478+ #if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \
479+ || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \
480+ || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \
481+ || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \
482+ || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 \
483+ || WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0
480484 NativeSymbol * native_symbols ;
481485 uint32 n_native_symbols ;
482486#endif
@@ -562,13 +566,30 @@ wasm_native_init()
562566 goto fail ;
563567#endif /* WASM_ENABLE_LIB_RATS */
564568
569+ #if WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0
570+ if (!wasi_nn_initialize ())
571+ goto fail ;
572+
573+ n_native_symbols = get_wasi_nn_export_apis (& native_symbols );
574+ if (n_native_symbols > 0
575+ && !wasm_native_register_natives (
576+ #if WASM_ENABLE_WASI_EPHEMERAL_NN != 0
577+ "wasi_ephemeral_nn" ,
578+ #else
579+ "wasi_nn" ,
580+ #endif /* WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
581+ native_symbols , n_native_symbols ))
582+ goto fail ;
583+ #endif /* WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0 */
584+
565585#if WASM_ENABLE_QUICK_AOT_ENTRY != 0
566586 if (!quick_aot_entry_init ()) {
567- #if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \
568- || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \
569- || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \
570- || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \
571- || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0
587+ #if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \
588+ || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \
589+ || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \
590+ || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \
591+ || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 \
592+ || WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0
572593 goto fail ;
573594#else
574595 return false;
@@ -577,11 +598,12 @@ wasm_native_init()
577598#endif
578599
579600 return true;
580- #if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \
581- || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \
582- || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \
583- || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \
584- || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0
601+ #if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \
602+ || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \
603+ || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \
604+ || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \
605+ || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 \
606+ || WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0
585607fail :
586608 wasm_native_destroy ();
587609 return false;
@@ -599,6 +621,7 @@ wasm_native_destroy()
599621 g_wasi_context_key = NULL ;
600622 }
601623#endif
624+
602625#if WASM_ENABLE_LIB_PTHREAD != 0
603626 lib_pthread_destroy ();
604627#endif
@@ -607,6 +630,10 @@ wasm_native_destroy()
607630 lib_wasi_threads_destroy ();
608631#endif
609632
633+ #if WASM_ENABLE_WASI_NN != 0 || WASM_ENABLE_WASI_EPHEMERAL_NN != 0
634+ wasi_nn_destroy ();
635+ #endif
636+
610637 node = g_native_symbols_list ;
611638 while (node ) {
612639 node_next = node -> next ;
0 commit comments