2019-11-10 10:22:33 +00:00
|
|
|
#!/usr/bin/nodejs
|
|
|
|
/*
|
|
|
|
Mashes together a bunch of different apps to make
|
|
|
|
a single firmware JS file which can be uploaded.
|
|
|
|
*/
|
2020-05-04 13:07:17 +00:00
|
|
|
var SETTINGS = {
|
|
|
|
pretokenise : true
|
|
|
|
};
|
2019-11-10 10:22:33 +00:00
|
|
|
|
|
|
|
var path = require('path');
|
|
|
|
var ROOTDIR = path.join(__dirname, '..');
|
|
|
|
var APPDIR = ROOTDIR+'/apps';
|
|
|
|
var APPJSON = ROOTDIR+'/apps.json';
|
|
|
|
var OUTFILE = ROOTDIR+'/firmware.js';
|
|
|
|
var APPS = [ // IDs of apps to install
|
2020-03-09 17:06:13 +00:00
|
|
|
"boot","launch","mclock","setting",
|
|
|
|
"about","alarm","widbat","widbt","welcome"
|
2019-11-10 10:22:33 +00:00
|
|
|
];
|
2020-03-09 17:06:13 +00:00
|
|
|
var MINIFY = true;
|
2019-11-10 10:22:33 +00:00
|
|
|
|
|
|
|
var fs = require("fs");
|
2020-08-25 10:46:33 +00:00
|
|
|
var AppInfo = require(ROOTDIR+"/core/js/appinfo.js");
|
2019-11-10 10:22:33 +00:00
|
|
|
var appjson = JSON.parse(fs.readFileSync(APPJSON).toString());
|
|
|
|
var appfiles = [];
|
|
|
|
|
|
|
|
function fileGetter(url) {
|
|
|
|
console.log("Loading "+url)
|
2020-03-09 17:06:13 +00:00
|
|
|
if (MINIFY) {
|
2020-03-10 15:33:41 +00:00
|
|
|
/*if (url.endsWith(".js")) {
|
2020-03-09 17:06:13 +00:00
|
|
|
var f = url.slice(0,-3);
|
|
|
|
console.log("MINIFYING "+f);
|
|
|
|
const execSync = require('child_process').execSync;
|
2020-03-10 15:33:41 +00:00
|
|
|
// --config PRETOKENISE=true
|
|
|
|
// --minify
|
|
|
|
code = execSync(`espruino --config SET_TIME_ON_WRITE=false --minify --board BANGLEJS ${f}.js -o ${f}.min.js`);
|
2020-03-09 17:06:13 +00:00
|
|
|
console.log(code.toString());
|
|
|
|
url = f+".min.js";
|
2020-03-10 15:33:41 +00:00
|
|
|
}*/
|
2020-03-09 17:06:13 +00:00
|
|
|
if (url.endsWith(".json")) {
|
|
|
|
var f = url.slice(0,-5);
|
|
|
|
console.log("MINIFYING JSON "+f);
|
2020-08-25 10:46:33 +00:00
|
|
|
var j = eval("("+fs.readFileSync(url).toString("binary")+")");
|
2020-03-09 17:06:13 +00:00
|
|
|
var code = JSON.stringify(j);
|
|
|
|
//console.log(code);
|
|
|
|
url = f+".min.json";
|
|
|
|
fs.writeFileSync(url, code);
|
|
|
|
}
|
|
|
|
}
|
2020-08-25 10:46:33 +00:00
|
|
|
return Promise.resolve(fs.readFileSync(url).toString("binary"));
|
2019-11-10 10:22:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Promise.all(APPS.map(appid => {
|
|
|
|
var app = appjson.find(app=>app.id==appid);
|
|
|
|
if (app===undefined) throw new Error(`App ${appid} not found`);
|
2020-05-04 13:07:17 +00:00
|
|
|
return AppInfo.getFiles(app, {
|
|
|
|
fileGetter : fileGetter,
|
|
|
|
settings : SETTINGS
|
|
|
|
}).then(files => {
|
2019-11-10 10:22:33 +00:00
|
|
|
appfiles = appfiles.concat(files);
|
|
|
|
});
|
|
|
|
})).then(() => {
|
|
|
|
//console.log(appfiles);
|
2020-03-11 16:30:36 +00:00
|
|
|
var js = "// Generated by BangleApps/bin/firmwaremaker.js\n";
|
2019-11-10 10:22:33 +00:00
|
|
|
appfiles.forEach((file) => {
|
|
|
|
js += file.cmd+"\n";
|
2020-03-10 15:33:41 +00:00
|
|
|
/*if (file.crc && file.evaluate!==true) {
|
|
|
|
js += `\x10if (E.CRC32(require('Storage').read(${JSON.stringify(file.name)}))!=${file.crc}){console.log("${file.name} invalid");FAIL++}\n`;
|
|
|
|
}*/
|
2019-11-10 10:22:33 +00:00
|
|
|
});
|
|
|
|
fs.writeFileSync(OUTFILE, js);
|
|
|
|
console.log("Output written to "+OUTFILE);
|
|
|
|
});
|