From 12b05ad3730a0f7e41a06cca8f6a0e116ecd08ea Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Fri, 18 May 2018 14:15:47 -0400 Subject: [PATCH] Fix #32: Separate build of filesystem from main wasm module --- Makefile | 8 ++++++-- src/pyodide.js | 23 +++++++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 73a236287..43caac545 100644 --- a/Makefile +++ b/Makefile @@ -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" $@ diff --git a/src/pyodide.js b/src/pyodide.js index a7c6eb081..870b835c2 100644 --- a/src/pyodide.js +++ b/src/pyodide.js @@ -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