-
Notifications
You must be signed in to change notification settings - Fork 30k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: add --node-snapshot-main configure option
This adds a --build-snapshot runtime option which is currently only supported by the node_mksnapshot binary, and a --node-snapshot-main configure option that makes use it to run a custom script when building the embedded snapshot. The idea is to have this experimental feature in core as a configure-time feature for now, and investigate the renaming V8 bugs before we make it available to more users via making it a runtime option. PR-URL: #42466 Reviewed-By: Darshan Sen <[email protected]> Reviewed-By: Mohammed Keyvanzadeh <[email protected]> Reviewed-By: Khaidi Chu <[email protected]> Reviewed-By: Chengzhong Wu <[email protected]>
- Loading branch information
1 parent
8970167
commit ce5e484
Showing
12 changed files
with
365 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
'use strict'; | ||
|
||
const { | ||
Error, | ||
SafeSet, | ||
SafeArrayIterator | ||
} = primordials; | ||
|
||
const binding = internalBinding('mksnapshot'); | ||
const { NativeModule } = require('internal/bootstrap/loaders'); | ||
const { | ||
compileSnapshotMain, | ||
} = binding; | ||
|
||
const { | ||
getOptionValue | ||
} = require('internal/options'); | ||
|
||
const { | ||
readFileSync | ||
} = require('fs'); | ||
|
||
const supportedModules = new SafeSet(new SafeArrayIterator([ | ||
// '_http_agent', | ||
// '_http_client', | ||
// '_http_common', | ||
// '_http_incoming', | ||
// '_http_outgoing', | ||
// '_http_server', | ||
'_stream_duplex', | ||
'_stream_passthrough', | ||
'_stream_readable', | ||
'_stream_transform', | ||
'_stream_wrap', | ||
'_stream_writable', | ||
// '_tls_common', | ||
// '_tls_wrap', | ||
'assert', | ||
'assert/strict', | ||
// 'async_hooks', | ||
'buffer', | ||
// 'child_process', | ||
// 'cluster', | ||
'console', | ||
'constants', | ||
'crypto', | ||
// 'dgram', | ||
// 'diagnostics_channel', | ||
// 'dns', | ||
// 'dns/promises', | ||
// 'domain', | ||
'events', | ||
'fs', | ||
'fs/promises', | ||
// 'http', | ||
// 'http2', | ||
// 'https', | ||
// 'inspector', | ||
// 'module', | ||
// 'net', | ||
'os', | ||
'path', | ||
'path/posix', | ||
'path/win32', | ||
// 'perf_hooks', | ||
'process', | ||
'punycode', | ||
'querystring', | ||
// 'readline', | ||
// 'repl', | ||
'stream', | ||
'stream/promises', | ||
'string_decoder', | ||
'sys', | ||
'timers', | ||
'timers/promises', | ||
// 'tls', | ||
// 'trace_events', | ||
// 'tty', | ||
'url', | ||
'util', | ||
'util/types', | ||
'v8', | ||
// 'vm', | ||
// 'worker_threads', | ||
// 'zlib', | ||
])); | ||
|
||
const warnedModules = new SafeSet(); | ||
function supportedInUserSnapshot(id) { | ||
return supportedModules.has(id); | ||
} | ||
|
||
function requireForUserSnapshot(id) { | ||
if (!NativeModule.canBeRequiredByUsers(id)) { | ||
// eslint-disable-next-line no-restricted-syntax | ||
const err = new Error( | ||
`Cannot find module '${id}'. ` | ||
); | ||
err.code = 'MODULE_NOT_FOUND'; | ||
throw err; | ||
} | ||
if (!supportedInUserSnapshot(id)) { | ||
if (!warnedModules.has(id)) { | ||
process.emitWarning( | ||
`built-in module ${id} is not yet supported in user snapshots`); | ||
warnedModules.add(id); | ||
} | ||
} | ||
|
||
return require(id); | ||
} | ||
|
||
function main() { | ||
const { | ||
prepareMainThreadExecution | ||
} = require('internal/bootstrap/pre_execution'); | ||
|
||
prepareMainThreadExecution(true, false); | ||
process.once('beforeExit', function runCleanups() { | ||
for (const cleanup of binding.cleanups) { | ||
cleanup(); | ||
} | ||
}); | ||
|
||
const file = process.argv[1]; | ||
const path = require('path'); | ||
const filename = path.resolve(file); | ||
const dirname = path.dirname(filename); | ||
const source = readFileSync(file, 'utf-8'); | ||
const snapshotMainFunction = compileSnapshotMain(filename, source); | ||
|
||
if (getOptionValue('--inspect-brk')) { | ||
internalBinding('inspector').callAndPauseOnStart( | ||
snapshotMainFunction, undefined, | ||
requireForUserSnapshot, filename, dirname); | ||
} else { | ||
snapshotMainFunction(requireForUserSnapshot, filename, dirname); | ||
} | ||
} | ||
|
||
main(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.