diff --git a/package-lock.json b/package-lock.json index dc0c0f97..9bfcb7d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "license": "GPL-3.0", "dependencies": { "@sentry/electron": "^2.5.1", + "@types/emscripten": "^1.39.5", "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", "binaryen": "^101.0.0", @@ -653,6 +654,11 @@ "integrity": "sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA==", "dev": true }, + "node_modules/@types/emscripten": { + "version": "1.39.5", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.5.tgz", + "integrity": "sha512-DIOOg+POSrYl+OlNRHQuIEqCd8DCtynG57H862UCce16nXJX7J8eWxNGgOcf8Eyge8zXeSs27mz1UcFu8L/L7g==" + }, "node_modules/@types/escodegen": { "version": "0.0.6", "integrity": "sha1-UjCpznluBCzabwhtvxnyLqMwZZw=", @@ -9656,6 +9662,11 @@ "integrity": "sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA==", "dev": true }, + "@types/emscripten": { + "version": "1.39.5", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.5.tgz", + "integrity": "sha512-DIOOg+POSrYl+OlNRHQuIEqCd8DCtynG57H862UCce16nXJX7J8eWxNGgOcf8Eyge8zXeSs27mz1UcFu8L/L7g==" + }, "@types/escodegen": { "version": "0.0.6", "integrity": "sha1-UjCpznluBCzabwhtvxnyLqMwZZw=", diff --git a/package.json b/package.json index e37054a5..50724f92 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "license": "GPL-3.0", "dependencies": { "@sentry/electron": "^2.5.1", + "@types/emscripten": "^1.39.5", "@wasmer/wasi": "^0.12.0", "@wasmer/wasmfs": "^0.12.0", "binaryen": "^101.0.0", diff --git a/src/worker/workermain.ts b/src/worker/workermain.ts index a1840e82..17f961c0 100644 --- a/src/worker/workermain.ts +++ b/src/worker/workermain.ts @@ -1,9 +1,14 @@ -"use strict"; +/// import type { WorkerResult, WorkerFileUpdate, WorkerBuildStep, WorkerMessage, WorkerError, Dependency, SourceLine, CodeListing, CodeListingMap, Segment, WorkerOutput, SourceLocation } from "../common/workertypes"; import { getBasePlatform, getRootBasePlatform, hex } from "../common/util"; import { Assembler } from "./assembler"; +interface EmscriptenModule { + callMain: (args: string[]) => void; + FS : any; // TODO +} + declare function importScripts(path:string); declare function postMessage(msg); @@ -377,10 +382,160 @@ interface BuildStep extends WorkerBuildStep { maxts? }; -var buildsteps : BuildStep[] = []; -var buildstartseq : number = 0; -var workfs : {[path:string]:FileEntry} = {}; -var workerseq : number = 0; +/// + +class FileWorkingStore { + workfs : {[path:string]:FileEntry} = {}; + workerseq : number = 0; + + constructor() { + this.reset(); + } + reset() { + this.workfs = {}; + this.newVersion(); + } + currentVersion() { + return this.workerseq; + } + newVersion() { + let ts = new Date().getTime(); + if (ts <= this.workerseq) + ts = ++this.workerseq; + return ts; + } + putFile(path:string, data:FileData) : FileEntry { + var encoding = (typeof data === 'string') ? 'utf8' : 'binary'; + var entry = this.workfs[path]; + if (!entry || !compareData(entry.data, data) || entry.encoding != encoding) { + this.workfs[path] = entry = {path:path, data:data, encoding:encoding, ts:this.newVersion()}; + console.log('+++', entry.path, entry.encoding, entry.data.length, entry.ts); + } + return entry; + } + hasFile(path: string) { + return this.workfs[path] != null; + } + getFileData(path:string) : FileData { + return this.workfs[path] && this.workfs[path].data; + } + getFileAsString(path:string) : string { + let data = this.getFileData(path); + if (data != null && typeof data !== 'string') + throw new Error(`${path}: expected string`) + return data as string; // TODO + } + getFileEntry(path:string) : FileEntry { + return this.workfs[path]; + } +} + +var store = new FileWorkingStore(); + +/// + +class Builder { + steps : BuildStep[] = []; + startseq : number = 0; + + // returns true if file changed during this build step + wasChanged(entry:FileEntry) : boolean { + return entry.ts > this.startseq; + } + executeBuildSteps() { + this.startseq = store.currentVersion(); + var linkstep : BuildStep = null; + while (this.steps.length) { + var step = this.steps.shift(); // get top of array + var platform = step.platform; + var toolfn = TOOLS[step.tool]; + if (!toolfn) throw Error("no tool named " + step.tool); + step.params = PLATFORM_PARAMS[getBasePlatform(platform)]; + try { + step.result = toolfn(step); + } catch (e) { + console.log("EXCEPTION", e, e.stack); + return {errors:[{line:0, msg:e+""}]}; // TODO: catch errors already generated? + } + if (step.result) { + step.result.params = step.params; + // errors? return them + if (step.result.errors && step.result.errors.length) { + applyDefaultErrorPath(step.result.errors, step.path); + return step.result; + } + // if we got some output, return it immediately + if (step.result.output) { + return step.result; + } + // combine files with a link tool? + if (step.result.linktool) { + if (linkstep) { + linkstep.files = linkstep.files.concat(step.result.files); + linkstep.args = linkstep.args.concat(step.result.args); + } else { + linkstep = { + tool:step.result.linktool, + platform:platform, + files:step.result.files, + args:step.result.args + }; + } + } + // process with another tool? + if (step.result.nexttool) { + var asmstep : BuildStep = step.result; + asmstep.tool = step.result.nexttool; + asmstep.platform = platform; + this.steps.push(asmstep); + } + // process final step? + if (this.steps.length == 0 && linkstep) { + this.steps.push(linkstep); + linkstep = null; + } + } + } + } + handleMessage(data: WorkerMessage) : WorkerResult { + this.steps = []; + // file updates + if (data.updates) { + for (var i=0; i buildstartseq; + return store.putFile(path, data); } function getWorkFileAsString(path:string) : string { - return workfs[path] && workfs[path].data as string; // TODO + return store.getFileAsString(path); } function populateEntry(fs, path:string, entry:FileEntry, options:BuildOptions) { @@ -429,17 +573,18 @@ function populateEntry(fs, path:string, entry:FileEntry, options:BuildOptions) { } // write file fs.writeFile(path, data, {encoding:entry.encoding}); - fs.utime(path, entry.ts, entry.ts); + var time = new Date(entry.ts); + fs.utime(path, time, time); console.log("<<<", path, entry.data.length); } // can call multiple times (from populateFiles) -function gatherFiles(step:BuildStep, options?:BuildOptions) { +function gatherFiles(step:BuildStep, options?:BuildOptions) : number { var maxts = 0; if (step.files) { for (var i=0; i entry.ts) return true; } @@ -526,7 +671,7 @@ function anyTargetChanged(step:BuildStep, targets:string[]) { if (!step.maxts) throw Error("call populateFiles() first"); // see if any target files are more recent than inputs for (var i=0; i step.maxts) return true; } @@ -883,11 +1028,11 @@ function assembleDASM(step:BuildStep) { errorMatcher(s); } } - var Module = emglobal.DASM({ + var Module : EmscriptenModule = emglobal.DASM({ noInitialRun:true, print:match_fn }); - var FS = Module['FS']; + var FS = Module.FS; populateFiles(step, FS, { mainFilePath:'main.a' }); @@ -1056,14 +1201,14 @@ function assembleCA65(step:BuildStep) { var lstpath = step.prefix+".lst"; if (staleFiles(step, [objpath, lstpath])) { var objout, lstout; - var CA65 = emglobal.ca65({ + var CA65 : EmscriptenModule = emglobal.ca65({ instantiateWasm: moduleInstFn('ca65'), noInitialRun:true, //logReadFiles:true, print:print_fn, printErr:msvcErrorMatcher(errors), }); - var FS = CA65['FS']; + var FS = CA65.FS; setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); fixParamsWithDefines(step.path, step.params); @@ -1094,20 +1239,20 @@ function linkLD65(step:BuildStep) { var binpath = "main"; if (staleFiles(step, [binpath])) { var errors = []; - var LD65 = emglobal.ld65({ + var LD65 : EmscriptenModule = emglobal.ld65({ instantiateWasm: moduleInstFn('ld65'), noInitialRun:true, //logReadFiles:true, print:print_fn, printErr:function(s) { errors.push({msg:s,line:0}); } }); - var FS = LD65['FS']; + var FS = LD65.FS; setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); populateExtraFiles(step, FS, params.extra_link_files); // populate .cfg file, if it is a custom one - if (workfs[params.cfgfile]) { - populateEntry(FS, params.cfgfile, workfs[params.cfgfile], null); + if (store.hasFile(params.cfgfile)) { + populateEntry(FS, params.cfgfile, store.getFileEntry(params.cfgfile), null); } var libargs = params.libargs || []; var cfgfile = params.cfgfile; @@ -1257,14 +1402,14 @@ function compileCC65(step:BuildStep) { gatherFiles(step, {mainFilePath:"main.c"}); var destpath = step.prefix + '.s'; if (staleFiles(step, [destpath])) { - var CC65 = emglobal.cc65({ + var CC65 : EmscriptenModule = emglobal.cc65({ instantiateWasm: moduleInstFn('cc65'), noInitialRun:true, //logReadFiles:true, print:print_fn, printErr:match_fn, }); - var FS = CC65['FS']; + var FS = CC65.FS; setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); fixParamsWithDefines(step.path, params); @@ -1368,14 +1513,14 @@ function assembleSDASZ80(step:BuildStep) { } } } - var ASZ80 = emglobal.sdasz80({ + var ASZ80 : EmscriptenModule = emglobal.sdasz80({ instantiateWasm: moduleInstFn('sdasz80'), noInitialRun:true, //logReadFiles:true, print:match_asm_fn, printErr:match_asm_fn, }); - var FS = ASZ80['FS']; + var FS = ASZ80.FS; populateFiles(step, FS); execMain(step, ASZ80, ['-plosgffwy', step.path]); if (errors.length) { @@ -1413,14 +1558,14 @@ function linkSDLDZ80(step:BuildStep) } } var params = step.params; - var LDZ80 = emglobal.sdldz80({ + var LDZ80 : EmscriptenModule = emglobal.sdldz80({ instantiateWasm: moduleInstFn('sdldz80'), noInitialRun:true, //logReadFiles:true, print:match_aslink_fn, printErr:match_aslink_fn, }); - var FS = LDZ80['FS']; + var FS = LDZ80.FS; setupFS(FS, 'sdcc'); populateFiles(step, FS); populateExtraFiles(step, FS, params.extra_link_files); @@ -1517,7 +1662,7 @@ function compileSDCC(step:BuildStep) { var errors = []; var params = step.params; loadNative('sdcc'); - var SDCC = emglobal.sdcc({ + var SDCC : EmscriptenModule = emglobal.sdcc({ instantiateWasm: moduleInstFn('sdcc'), noInitialRun:true, noFSInit:true, @@ -1525,7 +1670,7 @@ function compileSDCC(step:BuildStep) { printErr:msvcErrorMatcher(errors), //TOTAL_MEMORY:256*1024*1024, }); - var FS = SDCC['FS']; + var FS = SDCC.FS; populateFiles(step, FS); // load source file and preprocess var code = getWorkFileAsString(step.path); @@ -1595,13 +1740,13 @@ function preprocessMCPP(step:BuildStep, filesys:string) { // :2: error: Can't open include file "foo.h" var errors = []; var match_fn = makeErrorMatcher(errors, /:(\d+): (.+)/, 1, 2, step.path); - var MCPP = emglobal.mcpp({ + var MCPP : EmscriptenModule = emglobal.mcpp({ noInitialRun:true, noFSInit:true, print:print_fn, printErr:match_fn, }); - var FS = MCPP['FS']; + var FS = MCPP.FS; if (filesys) setupFS(FS, filesys); populateFiles(step, FS); populateExtraFiles(step, FS, params.extra_compile_files); @@ -1619,7 +1764,7 @@ function preprocessMCPP(step:BuildStep, filesys:string) { if (params.extra_preproc_args) { args.push.apply(args, params.extra_preproc_args); } - MCPP.callMain(args); + execMain(step, MCPP, args); if (errors.length) return {errors:errors}; var iout = FS.readFile("main.i", {encoding:'utf8'}); @@ -1766,7 +1911,7 @@ function compileVerilator(step:BuildStep) { // TODO: %Error: Specified --top-module 'ALU' isn't at the top level, it's under another cell 'cpu' // TODO: ... Use "/* verilator lint_off BLKSEQ */" and lint_on around source to disable this message. var match_fn = makeErrorMatcher(errors, /%(.+?): (.+?):(\d+)?[:]?\s*(.+)/i, 3, 4, step.path, 2); - var verilator_mod = emglobal.verilator_bin({ + var verilator_mod : EmscriptenModule = emglobal.verilator_bin({ instantiateWasm: moduleInstFn('verilator_bin'), noInitialRun: true, noExitRuntime: true, @@ -1777,7 +1922,7 @@ function compileVerilator(step:BuildStep) { }); var code = getWorkFileAsString(step.path); var topmod = detectTopModuleName(code); - var FS = verilator_mod['FS']; + var FS = verilator_mod.FS; var listings : CodeListingMap = {}; // process inline assembly, add listings where found populateFiles(step, FS, { @@ -1803,7 +1948,7 @@ function compileVerilator(step:BuildStep) { "--x-assign", "fast", "--noassert", "--pins-sc-biguint", "--debug-check", // for XML output "--top-module", topmod, step.path] - verilator_mod.callMain(args); + execMain(step, verilator_mod, args); } catch (e) { console.log(e); errors.push({line:0,msg:"Compiler internal error: " + e}); @@ -1853,7 +1998,7 @@ function compileYosys(step:BuildStep) { var errors = []; var match_fn = makeErrorMatcher(errors, /ERROR: (.+?) in line (.+?[.]v):(\d+)[: ]+(.+)/i, 3, 4, step.path); starttime(); - var yosys_mod = emglobal.yosys({ + var yosys_mod : EmscriptenModule = emglobal.yosys({ instantiateWasm: moduleInstFn('yosys'), noInitialRun:true, print:print_fn, @@ -1861,11 +2006,11 @@ function compileYosys(step:BuildStep) { }); endtime("create module"); var topmod = detectTopModuleName(code); - var FS = yosys_mod['FS']; + var FS = yosys_mod.FS; FS.writeFile(topmod+".v", code); starttime(); try { - yosys_mod.callMain(["-q", "-o", topmod+".json", "-S", topmod+".v"]); + execMain(step, yosys_mod, ["-q", "-o", topmod+".json", "-S", topmod+".v"]); } catch (e) { console.log(e); endtime("compile"); @@ -1902,14 +2047,14 @@ error1.asm(11): warning: 'foobar' treated as label (instruction typo?) Add a colon or move to first column to stop this warning. 1 errors (see listing if no diagnostics appeared here) */ - var ZMAC = emglobal.zmac({ + var ZMAC : EmscriptenModule = emglobal.zmac({ instantiateWasm: moduleInstFn('zmac'), noInitialRun:true, //logReadFiles:true, print:print_fn, printErr:makeErrorMatcher(errors, /([^( ]+)\s*[(](\d+)[)]\s*:\s*(.+)/, 2, 3, step.path), }); - var FS = ZMAC['FS']; + var FS = ZMAC.FS; populateFiles(step, FS); // TODO: don't know why CIM (hexary) doesn't work execMain(step, ZMAC, ['-z', '-c', '--oo', 'lst,cim', step.path]); @@ -1954,14 +2099,14 @@ function preprocessBatariBasic(code:string) : string { bbout += s; bbout += "\n"; } - var BBPRE = emglobal.preprocess({ + var BBPRE : EmscriptenModule = emglobal.preprocess({ noInitialRun:true, //logReadFiles:true, print:addbbout_fn, printErr:print_fn, noFSInit:true, }); - var FS = BBPRE['FS']; + var FS = BBPRE.FS; setupStdin(FS, code); BBPRE.callMain([]); console.log("preprocess " + code.length + " -> " + bbout.length + " bytes"); @@ -1995,7 +2140,7 @@ function compileBatariBasic(step:BuildStep) { gatherFiles(step, {mainFilePath:"main.bas"}); var destpath = step.prefix + '.asm'; if (staleFiles(step, [destpath])) { - var BB = emglobal.bb2600basic({ + var BB : EmscriptenModule = emglobal.bb2600basic({ noInitialRun:true, //logReadFiles:true, print:addasmout_fn, @@ -2003,7 +2148,7 @@ function compileBatariBasic(step:BuildStep) { noFSInit:true, TOTAL_MEMORY:64*1024*1024, }); - var FS = BB['FS']; + var FS = BB.FS; populateFiles(step, FS); // preprocess, pipe file to stdin var code = getWorkFileAsString(step.path); @@ -2097,20 +2242,20 @@ function assembleXASM6809(step:BuildStep) { lasterror = s.slice(6); } } - var Module = emglobal.xasm6809({ + var Module : EmscriptenModule = emglobal.xasm6809({ noInitialRun:true, //logReadFiles:true, print:match_fn, printErr:print_fn }); - var FS = Module['FS']; + var FS = Module.FS; //setupFS(FS); populateFiles(step, FS, { mainFilePath:'main.asm' }); var binpath = step.prefix + '.bin'; var lstpath = step.prefix + '.lst'; // in stdout - Module.callMain(["-c", "-l", "-s", "-y", "-o="+binpath, step.path]); + execMain(step, Module, ["-c", "-l", "-s", "-y", "-o="+binpath, step.path]); if (errors.length) return {errors:errors}; var aout = FS.readFile(binpath, {encoding:'binary'}); @@ -2170,12 +2315,12 @@ function assembleNESASM(step:BuildStep) { break; } } - var Module = emglobal.nesasm({ + var Module : EmscriptenModule = emglobal.nesasm({ instantiateWasm: moduleInstFn('nesasm'), noInitialRun:true, print:match_fn }); - var FS = Module['FS']; + var FS = Module.FS; populateFiles(step, FS, { mainFilePath:'main.a' }); @@ -2260,7 +2405,7 @@ function compileCMOC(step:BuildStep) { '-I/share/include', '-I.', step.path]; - var CMOC = emglobal.cmoc({ + var CMOC : EmscriptenModule = emglobal.cmoc({ instantiateWasm: moduleInstFn('cmoc'), noInitialRun:true, //logReadFiles:true, @@ -2273,7 +2418,7 @@ function compileCMOC(step:BuildStep) { if (preproc.errors) return preproc; else code = preproc.code; // set up filesystem - var FS = CMOC['FS']; + var FS = CMOC.FS; //setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); FS.writeFile(step.path, code); @@ -2304,14 +2449,14 @@ function assembleLWASM(step:BuildStep) { if (staleFiles(step, [objpath, lstpath])) { var objout, lstout; var args = ['-9', '--obj', '-I/share/asminc', '-o'+objpath, '-l'+lstpath, step.path]; - var LWASM = emglobal.lwasm({ + var LWASM : EmscriptenModule = emglobal.lwasm({ instantiateWasm: moduleInstFn('lwasm'), noInitialRun:true, //logReadFiles:true, print:print_fn, printErr:msvcErrorMatcher(errors), }); - var FS = LWASM['FS']; + var FS = LWASM.FS; //setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); fixParamsWithDefines(step.path, step.params); @@ -2337,7 +2482,7 @@ function linkLWLINK(step:BuildStep) { var binpath = "main"; if (staleFiles(step, [binpath])) { var errors = []; - var LWLINK = emglobal.lwlink({ + var LWLINK : EmscriptenModule = emglobal.lwlink({ instantiateWasm: moduleInstFn('lwlink'), noInitialRun:true, //logReadFiles:true, @@ -2349,7 +2494,7 @@ function linkLWLINK(step:BuildStep) { errors.push({msg:s,line:0}); } }); - var FS = LWLINK['FS']; + var FS = LWLINK.FS; //setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); populateExtraFiles(step, FS, params.extra_link_files); @@ -2449,7 +2594,7 @@ function compileSmallerC(step:BuildStep) { //'-nobss', '-no-externs', step.path, destpath]; - var smlrc = emglobal.smlrc({ + var smlrc : EmscriptenModule = emglobal.smlrc({ instantiateWasm: moduleInstFn('smlrc'), noInitialRun:true, //logReadFiles:true, @@ -2462,7 +2607,7 @@ function compileSmallerC(step:BuildStep) { if (preproc.errors) return preproc; else code = preproc.code; // set up filesystem - var FS = smlrc['FS']; + var FS = smlrc.FS; //setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); FS.writeFile(step.path, code); @@ -2499,14 +2644,14 @@ function assembleYASM(step:BuildStep) { '-o', objpath, '-l', lstpath, '--mapfile='+mappath, step.path]; // return yasm/*.ready*/ - var YASM = emglobal.yasm({ + var YASM : EmscriptenModule = emglobal.yasm({ instantiateWasm: moduleInstFn('yasm'), noInitialRun:true, //logReadFiles:true, print:print_fn, printErr:msvcErrorMatcher(errors), }); - var FS = YASM['FS']; + var FS = YASM.FS; //setupFS(FS, '65-'+getRootBasePlatform(step.platform)); populateFiles(step, FS); //fixParamsWithDefines(step.path, step.params); @@ -2581,14 +2726,14 @@ function compileInform6(step:BuildStep) { } } var args = [ '-afjnops', '-v5', '-Cu', '-E1', '-k', '+/share/lib', step.path ]; - var inform = emglobal.inform({ + var inform : EmscriptenModule = emglobal.inform({ instantiateWasm: moduleInstFn('inform'), noInitialRun:true, //logReadFiles:true, print:match_fn, printErr:match_fn, }); - var FS = inform['FS']; + var FS = inform.FS; setupFS(FS, 'inform'); populateFiles(step, FS); //fixParamsWithDefines(step.path, step.params); @@ -2675,7 +2820,7 @@ function assembleMerlin32(step:BuildStep) { var objpath = step.prefix+".bin"; if (staleFiles(step, [objpath])) { var args = [ '-v', step.path ]; - var merlin32 = emglobal.merlin32({ + var merlin32 : EmscriptenModule = emglobal.merlin32({ instantiateWasm: moduleInstFn('merlin32'), noInitialRun:true, print:(s:string) => { @@ -2697,7 +2842,7 @@ function assembleMerlin32(step:BuildStep) { }, printErr:print_fn, }); - var FS = merlin32['FS']; + var FS = merlin32.FS; populateFiles(step, FS); execMain(step, merlin32, args); if (errors.length) @@ -2761,13 +2906,13 @@ function compileFastBasic(step:BuildStep) { var destpath = step.prefix + '.s'; var errors = []; if (staleFiles(step, [destpath])) { - var fastbasic = emglobal.fastbasic({ + var fastbasic : EmscriptenModule = emglobal.fastbasic({ instantiateWasm: moduleInstFn('fastbasic-int'), noInitialRun:true, print:print_fn, printErr:makeErrorMatcher(errors, /(.+?):(\d+):(\d+):\s*(.+)/, 2, 4, step.path, 1), }); - var FS = fastbasic['FS']; + var FS = fastbasic.FS; populateFiles(step, FS); var libfile = 'fastbasic-int.lib' params.libargs = [libfile]; @@ -2847,13 +2992,13 @@ function compileSilice(step:BuildStep) { } else console.log(s); } - var silice = emglobal.silice({ + var silice : EmscriptenModule = emglobal.silice({ instantiateWasm: moduleInstFn('silice'), noInitialRun:true, print:match_fn, printErr:match_fn, }); - var FS = silice['FS']; + var FS = silice.FS; setupFS(FS, 'Silice'); populateFiles(step, FS); populateExtraFiles(step, FS, params.extra_compile_files); @@ -2885,14 +3030,14 @@ function compileWiz(step:BuildStep) { var destpath = step.prefix + (params.wiz_rom_ext || ".bin"); var errors : WorkerError[] = []; if (staleFiles(step, [destpath])) { - var wiz = emglobal.wiz({ + var wiz : EmscriptenModule = emglobal.wiz({ instantiateWasm: moduleInstFn('wiz'), noInitialRun:true, print:print_fn, //test.wiz:2: error: expected statement, but got identifier `test` printErr:makeErrorMatcher(errors, /(.+?):(\d+):\s*(.+)/, 2, 3, step.path, 1), }); - var FS = wiz['FS']; + var FS = wiz.FS; setupFS(FS, 'wiz'); populateFiles(step, FS); populateExtraFiles(step, FS, params.extra_compile_files); @@ -2941,14 +3086,14 @@ function assembleARMIPS(step:BuildStep) { if (staleFiles(step, [objpath])) { var args = [ step.path, '-temp', lstpath, '-sym', sympath, '-erroronwarning' ]; - var armips = emglobal.armips({ + var armips : EmscriptenModule = emglobal.armips({ instantiateWasm: moduleInstFn('armips'), noInitialRun:true, print:error_fn, printErr:error_fn, }); - var FS = armips['FS']; + var FS = armips.FS; var code = getWorkFileAsString(step.path); code = `.arm.little :: .create "${objpath}",0 :: ${code} .close`; @@ -3073,14 +3218,14 @@ function assembleVASMARM(step:BuildStep) { if (staleFiles(step, [objpath])) { var args = [ '-Fbin', '-m7tdmi', '-x', '-wfail', step.path, '-o', objpath, '-L', lstpath ]; - var vasm = emglobal.vasm({ + var vasm : EmscriptenModule = emglobal.vasm({ instantiateWasm: moduleInstFn('vasmarm_std'), noInitialRun:true, print:match_fn, printErr:match_fn, }); - var FS = vasm['FS']; + var FS = vasm.FS; populateFiles(step, FS); execMain(step, vasm, args); if (errors.length) { @@ -3228,70 +3373,6 @@ var TOOL_PRELOADFS = { 'wiz': 'wiz', } -function applyDefaultErrorPath(errors:WorkerError[], path:string) { - if (!path) return; - for (var i=0; i