Fix #32: Separate build of filesystem from main wasm module

This commit is contained in:
Michael Droettboom 2018-05-18 14:15:47 -04:00
parent 918ccc7300
commit 12b05ad373
2 changed files with 21 additions and 10 deletions

View File

@ -64,6 +64,7 @@ KIWISOLVER_LIBS=$(KIWISOLVER_ROOT)/kiwisolver.so
SITEPACKAGES=root/lib/python$(PYMINOR)/site-packages
all: build/pyodide.asm.js \
build/pyodide.asm.data \
build/pyodide.js \
build/pyodide_dev.js \
build/python.html \
@ -78,15 +79,18 @@ all: build/pyodide.asm.js \
build/pyodide.asm.js: src/main.bc src/jsimport.bc src/jsproxy.bc src/js2python.bc \
src/pyimport.bc src/pyproxy.bc src/python2js.bc \
src/runpython.bc src/dummy_thread.bc root/.built
src/runpython.bc src/dummy_thread.bc
[ -d build ] || mkdir build
$(CC) -s EXPORT_NAME="'pyodide'" --bind -o build/pyodide.asm.html $(filter %.bc,$^) \
$(LDFLAGS) $(foreach d,$(wildcard root/*),--preload-file $d@/$(notdir $d))
$(LDFLAGS) -s FORCE_FILESYSTEM=1
rm build/pyodide.asm.asm.js
rm build/pyodide.asm.wasm.pre
rm build/pyodide.asm.html
build/pyodide.asm.data: root/.built
python2 $(FILEPACKAGER) build/pyodide.asm.data --preload root/lib@lib --js-output=build/pyodide.asm.data.js
build/pyodide_dev.js: src/pyodide.js
cp $< $@
sed -i -e "s#{{DEPLOY}}##g" $@

View File

@ -50,7 +50,6 @@ var languagePluginLoader = new Promise((resolve, reject) => {
toLoad.forEach((package) => {
let script = document.createElement('script');
script.src = `${baseURL}${package}.js`;
console.log(script.src);
script.onerror = (e) => {
reject(e);
};
@ -78,6 +77,7 @@ var languagePluginLoader = new Promise((resolve, reject) => {
let wasmURL = `${baseURL}pyodide.asm.wasm`;
let Module = {};
window.Module = Module;
let wasm_promise = WebAssembly.compileStreaming(fetch(wasmURL));
Module.instantiateWasm = (info, receiveInstance) => {
@ -88,17 +88,24 @@ var languagePluginLoader = new Promise((resolve, reject) => {
};
Module.filePackagePrefixURL = baseURL;
Module.postRun = () => {
delete window.Module;
resolve();
};
let script = document.createElement('script');
script.src = `${baseURL}pyodide.asm.js`;
script.onload = () => {
window.pyodide = pyodide(Module);
window.pyodide.loadPackage = loadPackage;
window.pyodide.makeCallableProxy = makeCallableProxy;
let data_script = document.createElement('script');
data_script.src = `${baseURL}pyodide.asm.data.js`;
data_script.onload = (event) => {
let script = document.createElement('script');
script.src = `${baseURL}pyodide.asm.js`;
script.onload = () => {
window.pyodide = pyodide(Module);
window.pyodide.loadPackage = loadPackage;
window.pyodide.makeCallableProxy = makeCallableProxy;
};
document.head.appendChild(script);
};
document.head.appendChild(script);
document.head.appendChild(data_script);
if (window.iodide !== undefined) {
// Load the custom CSS for Pyodide