Код, сгенерированный Emscripten, не работает в браузере, если заданы параметры отладки (-g4) и создание исходной карты (--source-map-base).
Я начал с Googel's WebAudio с найденным образцом Audio Worklet в https://github.com/GoogleChromeLabs/web-audio-samples.git. Запустив образец из коробки с помощью EMSDK 1.39.14, все работает нормально.
Однако при изменении оптимизации с -O1 на что-то еще (-O0, -O2) или использование -g4 в сочетании с - source-map-base вместо этого приложение не работает при загрузке Audio Worklet с ошибками, появляющимися в консоли браузера.
Мне нужно отладить мой собственный проект, демонстрирующий такое же поведение.
Изменения для примера Makefile:
DEPS = SimpleKernel.cc
build: $(DEPS)
@/home/johannes/workspace/emsdk/upstream/emscripten/emcc --bind -g4 \
--source-map-base https://myhost/web-audio-samples/audio-worklet/design-pattern/wasm \
-s WASM=1 \
-s BINARYEN_ASYNC_COMPILATION=0 \
-s SINGLE_FILE=1 \
SimpleKernel.cc \
-o simple-kernel.wasmmodule.js \
--post-js ../lib/em-es6-module.js
clean:
@rm -f simple-kernel.wasmmodule.js
Сообщения об ошибках из консоли браузера:
Uncaught TypeError: Cannot assign to read only property '__wasm_call_ctors' of object '[object Object]'
at simple-kernel.wasmmodule.js:3794
(anonymous) @ simple-kernel.wasmmodule.js:3794
(index):34 Uncaught (in promise) DOMException: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: The node name 'wasm-worklet-processor' is not defined in AudioWorkletGlobalScope.
at demoCode (https://myhost/web-audio-samples/audio-worklet/design-pattern/wasm/:34:26)
demoCode @ (index):34
async function (async)
demoCode @ (index):32
DemoRunner.eButton.onclick @ Components.js:263
DevTools failed to load SourceMap: Could not load content for https://myhost/web-audio-samples/audio-worklet/design-pattern/wasm{{{ FILENAME_REPLACEMENT_STRINGS_WASM_BINARY_FILE }}}.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE