Merge pull request #263 from anmonteiro/snapshotv1

allow custom V8 startup snapshot
This commit is contained in:
Jared Allard
2016-10-18 17:25:34 -07:00
committed by GitHub
2 changed files with 45 additions and 3 deletions
+5
View File
@@ -151,6 +151,11 @@ nexe.compile({
resourceRoot: [ 'path/' ], // where to embed the resourceFiles.
flags: true, // use this for applications that need command line flags.
jsFlags: "--use_strict", // v8 flags
startupSnapshot: 'path/to/snapshot.js', // when you want to specify a script to be
// added to V8's startup snapshot. This V8
// feature deserializes a heap to save startup time.
// More information in this blog post:
// http://v8project.blogspot.de/2015/09/custom-startup-snapshots.html
framework: "node" // node, nodejs, or iojs
}, function(err) {
if(err) {
+40 -3
View File
@@ -162,7 +162,7 @@ exports.compile = function(options, complete) {
*/
function monkeyPatchNodeConfig(next) {
_monkeyPatchNodeConfig(nodeCompiler, next);
_monkeyPatchNodeConfig(nodeCompiler, next, options);
},
/**
@@ -478,7 +478,7 @@ function _getNodeCompiler(nodeFileDir, nodeConfigureArgs, nodeMakeArgs, nodeVCBu
if (!nodeVCBuildArgs || !nodeVCBuildArgs.length) {
nodeVCBuildArgs = [ "nosign" ]; // "release" is already the default config value in VCBuild.bat
}
// spawn a vcbuild process with our custom enviroment.
var vcbuild = spawn("vcbuild.bat", nodeVCBuildArgs, {
cwd: dir,
@@ -617,7 +617,7 @@ function _getNodeCompiler(nodeFileDir, nodeConfigureArgs, nodeMakeArgs, nodeVCBu
/**
*/
function _monkeyPatchNodeConfig(compiler, complete) {
function _monkeyPatchNodeConfig(compiler, complete, options) {
async.waterfall([
/**
* monkeypatch the gyp file to include the nexe.js and nexeres.js files
@@ -626,6 +626,14 @@ function _monkeyPatchNodeConfig(compiler, complete) {
_monkeyPatchGyp(compiler, next)
},
/**
* patch the configure file to allow for custom startup snapshots
*/
function(next) {
_monkeyPatchConfigure(compiler, next, options);
},
/**
* monkeypatch main entry point
*/
@@ -655,6 +663,35 @@ function _monkeyPatchGyp(compiler, complete) {
)
}
/**
* patch the configure file to allow for custom startup snapshots
*/
function _monkeyPatchConfigure(compiler, complete, options) {
var configurePath = path.join(compiler.dir, "configure");
var snapshotPath = options.startupSnapshot;
if (snapshotPath != null) {
_log('monkey patching configure file');
snapshotPath = path.join(process.cwd(), snapshotPath);
_monkeypatch(
configurePath,
function(content) {
return ~content.indexOf("embed_script");
},
function(content, next) {
next(null, content.replace(
"def configure_v8(o):",
`def configure_v8(o):\n o['variables']['embed_script'] = '${snapshotPath}'\n o['variables']['warmup_script'] = '${snapshotPath}'`));
},
complete
)
}
return complete();
}
/**
*/