mirror of
https://github.com/google/pebble.git
synced 2025-03-19 18:41:21 +00:00
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
// generate_snapshot.js is a barebones tool for creating snapshots from within an automated process,
|
|
// with the goal of eliminating build-time dependencies in exchange for a more narrow set of
|
|
// capabilities
|
|
|
|
var fs = require('fs');
|
|
var jsCompiler = require('./js_tooling');
|
|
|
|
function writeToFile(argv, dataToWrite) {
|
|
var data;
|
|
if (Array.isArray(dataToWrite)) {
|
|
data = byteArrayToStr(dataToWrite);
|
|
}
|
|
else if (typeof dataToWrite == 'object') {
|
|
data = JSON.stringify(dataToWrite);
|
|
}
|
|
else {
|
|
data = dataToWrite;
|
|
}
|
|
fs.writeFileSync(argv.output, data, 'binary');
|
|
}
|
|
|
|
function byteArrayToStr(arr) {
|
|
var result = '';
|
|
for (i = 0; i < arr.length; i++) {
|
|
result += String.fromCharCode(arr[i]);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
if (require.main === module) {
|
|
if (process.argv.length < 4) {
|
|
console.log("Usage: " + __filename + " JS_FILE OUTPUT [MEMORY_REPORT]");
|
|
process.exit(-1);
|
|
}
|
|
var js_file = process.argv[2];
|
|
var output_file = process.argv[3];
|
|
|
|
var snapshot_size_file = 'snapshot_size.json';
|
|
if (process.argv.length == 5) {
|
|
snapshot_size_file = process.argv[4];
|
|
}
|
|
|
|
var expectedArgs = {
|
|
prefix: function(v) {return decodeURIComponent(v)},
|
|
maxsize: function(v) {return parseInt(v)},
|
|
padding: function(v) {return parseInt(v)}
|
|
};
|
|
|
|
var options = {};
|
|
Object.keys(expectedArgs).forEach(function(k) {
|
|
var idx = process.argv.indexOf('--' + k);
|
|
if (idx >= 0) {
|
|
options[k] = expectedArgs[k](process.argv[idx+1]);
|
|
}
|
|
});
|
|
|
|
var js = fs.readFileSync(js_file, 'utf8');
|
|
var result = jsCompiler.createSnapshot(js, options);
|
|
|
|
if (result.result != 'success') {
|
|
console.error(result['result'] + ':', result['reason']);
|
|
process.exit(1);
|
|
} else {
|
|
writeToFile({'output': output_file}, result['snapshot']);
|
|
|
|
// This call writes out the bytecode memory usage for
|
|
// /tools/resources/resource_map/resource_generator.py to read. Please update that file
|
|
// if you make changes to the output format/filename here
|
|
var snapshot_size_data = {size: result['snapshotSize'], max: result['snapshotMaxSize']};
|
|
writeToFile({'output': snapshot_size_file}, snapshot_size_data);
|
|
}
|
|
}
|