From 07d3aed3aa3a054deb502cedf867f559fc690755 Mon Sep 17 00:00:00 2001 From: Wanming Lin Date: Wed, 17 Jan 2024 13:35:13 +0800 Subject: [PATCH] [WebNN EP] Fixed build issue with disable_rtti (#19173) Previously building webnn ep with --disable_rtti will throw unboundTypeError since unbound type names are illegal with RTTI disabled in Embind API, we can fix it by adding a -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 flag. --- cmake/adjust_global_compile_flags.cmake | 5 +++++ cmake/onnxruntime_webassembly.cmake | 5 ++++- tools/ci_build/build.py | 4 ---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cmake/adjust_global_compile_flags.cmake b/cmake/adjust_global_compile_flags.cmake index 30d8cbf78f..2c7bf9f1c2 100644 --- a/cmake/adjust_global_compile_flags.cmake +++ b/cmake/adjust_global_compile_flags.cmake @@ -123,6 +123,11 @@ if (onnxruntime_DISABLE_RTTI) add_compile_options("$<$:/GR->" "$<$:/we4541>") else() add_compile_options("$<$:-fno-rtti>") + if (onnxruntime_USE_WEBNN) + # Avoid unboundTypeError for WebNN EP since unbound type names are illegal with RTTI disabled + # in Embind API, relevant issue: https://github.com/emscripten-core/emscripten/issues/7001 + add_compile_options("$<$:-DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0>") + endif() endif() else() #MSVC RTTI flag /GR is not added to CMAKE_CXX_FLAGS by default. But, anyway VC++2019 treats "/GR" default on. diff --git a/cmake/onnxruntime_webassembly.cmake b/cmake/onnxruntime_webassembly.cmake index 858583e64e..546d50c1ca 100644 --- a/cmake/onnxruntime_webassembly.cmake +++ b/cmake/onnxruntime_webassembly.cmake @@ -268,7 +268,10 @@ else() endif() if (onnxruntime_USE_WEBNN) - set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " --bind -sWASM_BIGINT") + set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " --bind -sWASM_BIGINT") + if (onnxruntime_DISABLE_RTTI) + set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -fno-rtti -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0") + endif() endif() # Set link flag to enable exceptions support, this will override default disabling exception throwing behavior when disable exceptions. diff --git a/tools/ci_build/build.py b/tools/ci_build/build.py index 1a6262edf4..1034a82cb2 100644 --- a/tools/ci_build/build.py +++ b/tools/ci_build/build.py @@ -1283,10 +1283,6 @@ def generate_build_tree( if args.use_webnn: if not args.build_wasm: raise BuildError("WebNN is only available for WebAssembly build.") - if args.disable_rtti: - # Avoid unboundTypeError for WebNN EP since unbound type names are illegal with RTTI disabled - # in Embind API, relevant issue: https://github.com/emscripten-core/emscripten/issues/16911 - raise BuildError("WebNN is not supported with RTTI disabled.") cmake_args += ["-Donnxruntime_USE_WEBNN=ON"] if args.use_snpe: