Как создать автономную веб-сборку с помощью emscripten - PullRequest
0 голосов
/ 28 августа 2018

Документация предлагает два варианта: позволить оптимизатору удалить ненужный код, а затем заменить клей .js своим или использовать флаг SIDE_MODULE.

Обе опции приводят к импорту memory (вместо экспорта), а в случае SIDE_MODULE также определяется тонна дополнительного импорта / экспорта.

Сравните это с чистым выводом, предоставленным Webassembly Studio :

(module
  (type $t0 (func))
  (type $t1 (func (result i32)))
  (func $__wasm_call_ctors (type $t0))
  (func $main (export "main") (type $t1) (result i32)
    i32.const 42)
  (table $T0 1 1 anyfunc)
  (memory $memory (export "memory") 2)
  (global $g0 (mut i32) (i32.const 66560))
  (global $__heap_base (export "__heap_base") i32 (i32.const 66560))
  (global $__data_end (export "__data_end") i32 (i32.const 1024)))

Здесь память экспортируется, и предоставляется __heap_base, что облегчает написание нашего собственного распределителя. Вывод Emscripten не экспортирует такие значения, поэтому мы не можем знать, с чего начать выделение памяти.

Можно ли получить аналогичный вывод с emcc?

Обновление: кажется, что статические / стековые размеры определяются внутренне emcc, и единственный способ получить их - проанализировать сгенерированный файл .js. Боковые модули - это другой зверь, и мне, вероятно, следует избегать их, если мне на самом деле не нужны перемещаемые модули.

...