From b64ce6803b7836947d5018e6160d644c0e57d07d Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Mon, 27 Feb 2023 10:01:47 -0800 Subject: [PATCH] Update JS -> native dependencies to include transitive dependencies Followup to #18849 --- src/jsifier.js | 23 +++++++++++++++++++++-- src/library_html5.js | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/jsifier.js b/src/jsifier.js index 09023bfb6af40..498e125ed6a63 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -66,6 +66,25 @@ function isDefined(symName) { return false; } +function getTransitiveDeps(symbol) { + const transitiveDeps = new Set(); + const seen = new Set(); + const toVisit = [symbol]; + while (toVisit.length) { + const sym = toVisit.pop(); + if (!seen.has(sym)) { + let directDeps = LibraryManager.library[sym + '__deps'] || []; + directDeps = directDeps.filter((d) => typeof d === 'string'); + if (directDeps.length) { + directDeps.forEach(transitiveDeps.add, transitiveDeps); + toVisit.push(...directDeps); + } + seen.add(sym); + } + } + return Array.from(transitiveDeps); +} + function runJSify(symbolsOnly = false) { const libraryItems = []; const symbolDeps = {}; @@ -254,8 +273,8 @@ function ${name}(${args}) { if (symbolsOnly) { if (!isJsOnlySymbol(symbol) && LibraryManager.library.hasOwnProperty(symbol)) { - externalDeps = deps.filter((d) => !isJsOnlySymbol(d) && !(d in LibraryManager.library) && typeof d === 'string'); - symbolDeps[symbol] = externalDeps; + var transtiveDeps = getTransitiveDeps(symbol); + symbolDeps[symbol] = transtiveDeps.filter((d) => !isJsOnlySymbol(d) && !(d in LibraryManager.library)); } return; } diff --git a/src/library_html5.js b/src/library_html5.js index 34c5f4f2fd692..491a1ac4cafd8 100644 --- a/src/library_html5.js +++ b/src/library_html5.js @@ -2359,7 +2359,7 @@ var LibraryHTML5 = { emscripten_set_batterychargingchange_callback_on_thread__proxy: 'sync', emscripten_set_batterychargingchange_callback_on_thread__sig: 'iii', - emscripten_set_batterychargingchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery', 'malloc'], + emscripten_set_batterychargingchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery'], emscripten_set_batterychargingchange_callback_on_thread: function(userData, callbackfunc, targetThread) { if (!battery()) return {{{ cDefine('EMSCRIPTEN_RESULT_NOT_SUPPORTED') }}}; registerBatteryEventCallback(battery(), userData, true, callbackfunc, {{{ cDefine('EMSCRIPTEN_EVENT_BATTERYCHARGINGCHANGE') }}}, "chargingchange", targetThread); @@ -2368,7 +2368,7 @@ var LibraryHTML5 = { emscripten_set_batterylevelchange_callback_on_thread__proxy: 'sync', emscripten_set_batterylevelchange_callback_on_thread__sig: 'iii', - emscripten_set_batterylevelchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery', 'malloc'], + emscripten_set_batterylevelchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery'], emscripten_set_batterylevelchange_callback_on_thread: function(userData, callbackfunc, targetThread) { if (!battery()) return {{{ cDefine('EMSCRIPTEN_RESULT_NOT_SUPPORTED') }}}; registerBatteryEventCallback(battery(), userData, true, callbackfunc, {{{ cDefine('EMSCRIPTEN_EVENT_BATTERYLEVELCHANGE') }}}, "levelchange", targetThread);