Skip to content

Commit b64ce68

Browse files
committed
Update JS -> native dependencies to include transitive dependencies
Followup to #18849
1 parent ca5f2bc commit b64ce68

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

src/jsifier.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,25 @@ function isDefined(symName) {
6666
return false;
6767
}
6868

69+
function getTransitiveDeps(symbol) {
70+
const transitiveDeps = new Set();
71+
const seen = new Set();
72+
const toVisit = [symbol];
73+
while (toVisit.length) {
74+
const sym = toVisit.pop();
75+
if (!seen.has(sym)) {
76+
let directDeps = LibraryManager.library[sym + '__deps'] || [];
77+
directDeps = directDeps.filter((d) => typeof d === 'string');
78+
if (directDeps.length) {
79+
directDeps.forEach(transitiveDeps.add, transitiveDeps);
80+
toVisit.push(...directDeps);
81+
}
82+
seen.add(sym);
83+
}
84+
}
85+
return Array.from(transitiveDeps);
86+
}
87+
6988
function runJSify(symbolsOnly = false) {
7089
const libraryItems = [];
7190
const symbolDeps = {};
@@ -254,8 +273,8 @@ function ${name}(${args}) {
254273

255274
if (symbolsOnly) {
256275
if (!isJsOnlySymbol(symbol) && LibraryManager.library.hasOwnProperty(symbol)) {
257-
externalDeps = deps.filter((d) => !isJsOnlySymbol(d) && !(d in LibraryManager.library) && typeof d === 'string');
258-
symbolDeps[symbol] = externalDeps;
276+
var transtiveDeps = getTransitiveDeps(symbol);
277+
symbolDeps[symbol] = transtiveDeps.filter((d) => !isJsOnlySymbol(d) && !(d in LibraryManager.library));
259278
}
260279
return;
261280
}

src/library_html5.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,7 +2359,7 @@ var LibraryHTML5 = {
23592359

23602360
emscripten_set_batterychargingchange_callback_on_thread__proxy: 'sync',
23612361
emscripten_set_batterychargingchange_callback_on_thread__sig: 'iii',
2362-
emscripten_set_batterychargingchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery', 'malloc'],
2362+
emscripten_set_batterychargingchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery'],
23632363
emscripten_set_batterychargingchange_callback_on_thread: function(userData, callbackfunc, targetThread) {
23642364
if (!battery()) return {{{ cDefine('EMSCRIPTEN_RESULT_NOT_SUPPORTED') }}};
23652365
registerBatteryEventCallback(battery(), userData, true, callbackfunc, {{{ cDefine('EMSCRIPTEN_EVENT_BATTERYCHARGINGCHANGE') }}}, "chargingchange", targetThread);
@@ -2368,7 +2368,7 @@ var LibraryHTML5 = {
23682368

23692369
emscripten_set_batterylevelchange_callback_on_thread__proxy: 'sync',
23702370
emscripten_set_batterylevelchange_callback_on_thread__sig: 'iii',
2371-
emscripten_set_batterylevelchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery', 'malloc'],
2371+
emscripten_set_batterylevelchange_callback_on_thread__deps: ['$registerBatteryEventCallback', '$battery'],
23722372
emscripten_set_batterylevelchange_callback_on_thread: function(userData, callbackfunc, targetThread) {
23732373
if (!battery()) return {{{ cDefine('EMSCRIPTEN_RESULT_NOT_SUPPORTED') }}};
23742374
registerBatteryEventCallback(battery(), userData, true, callbackfunc, {{{ cDefine('EMSCRIPTEN_EVENT_BATTERYLEVELCHANGE') }}}, "levelchange", targetThread);

0 commit comments

Comments
 (0)