class SnapshotWriter {
public:
- explicit SnapshotWriter(const char* snapshot_file)
- : fp_(GetFileDescriptorOrDie(snapshot_file)),
- startup_blob_file_(NULL) {}
+ SnapshotWriter() : fp_(NULL), startup_blob_file_(NULL) {}
~SnapshotWriter() {
- fclose(fp_);
+ if (fp_) fclose(fp_);
if (startup_blob_file_) fclose(startup_blob_file_);
}
+ void SetSnapshotFile(const char* snapshot_file) {
+ if (snapshot_file != NULL) fp_ = GetFileDescriptorOrDie(snapshot_file);
+ }
+
void SetStartupBlobFile(const char* startup_blob_file) {
if (startup_blob_file != NULL)
startup_blob_file_ = GetFileDescriptorOrDie(startup_blob_file);
void WriteSnapshot(v8::StartupData blob) const {
i::Vector<const i::byte> blob_vector(
reinterpret_cast<const i::byte*>(blob.data), blob.raw_size);
- WriteSnapshotFile(blob_vector);
+ MaybeWriteSnapshotFile(blob_vector);
MaybeWriteStartupBlob(blob_vector);
}
}
}
- void WriteSnapshotFile(const i::Vector<const i::byte>& blob) const {
+ void MaybeWriteSnapshotFile(const i::Vector<const i::byte>& blob) const {
+ if (!fp_) return;
+
WriteFilePrefix();
WriteData(blob);
WriteFileSuffix();
// Print the usage if an error occurs when parsing the command line
// flags or if the help flag is set.
int result = i::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
- if (result > 0 || (argc != 2 && argc != 3) || i::FLAG_help) {
- ::printf("Usage: %s [flag] ... outfile\n", argv[0]);
+ if (result > 0 || (argc != 1 && argc != 2) || i::FLAG_help) {
+ ::printf("Usage: %s --startup_src=... --startup_blob=... [extras]\n",
+ argv[0]);
i::FlagList::PrintHelp();
return !i::FLAG_help;
}
v8::V8::Initialize();
{
- SnapshotWriter writer(argv[1]);
+ SnapshotWriter writer;
+ if (i::FLAG_startup_src) writer.SetSnapshotFile(i::FLAG_startup_src);
if (i::FLAG_startup_blob) writer.SetStartupBlobFile(i::FLAG_startup_blob);
- char* extra_code = GetExtraCode(argc == 3 ? argv[2] : NULL);
+ char* extra_code = GetExtraCode(argc == 2 ? argv[1] : NULL);
StartupData blob = v8::V8::CreateSnapshotDataBlob(extra_code);
CHECK(blob.data);
writer.WriteSnapshot(blob);
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
- '<@(INTERMEDIATE_DIR)/snapshot.cc',
+ '--startup_src', '<@(INTERMEDIATE_DIR)/snapshot.cc',
'<(embed_script)',
],
},
'target_conditions': [
['_toolset=="host"', {
'outputs': [
- '<(INTERMEDIATE_DIR)/snapshot.cc',
'<(PRODUCT_DIR)/snapshot_blob_host.bin',
],
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
- '<@(INTERMEDIATE_DIR)/snapshot.cc',
'--startup_blob', '<(PRODUCT_DIR)/snapshot_blob_host.bin',
'<(embed_script)',
],
}, {
'outputs': [
- '<(INTERMEDIATE_DIR)/snapshot.cc',
'<(PRODUCT_DIR)/snapshot_blob.bin',
],
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
- '<@(INTERMEDIATE_DIR)/snapshot.cc',
'--startup_blob', '<(PRODUCT_DIR)/snapshot_blob.bin',
'<(embed_script)',
],
],
}, {
'outputs': [
- '<(INTERMEDIATE_DIR)/snapshot.cc',
'<(PRODUCT_DIR)/snapshot_blob.bin',
],
'action': [
'<(mksnapshot_exec)',
'<@(mksnapshot_flags)',
- '<@(INTERMEDIATE_DIR)/snapshot.cc',
'--startup_blob', '<(PRODUCT_DIR)/snapshot_blob.bin',
'<(embed_script)',
],
'<@(library_files)',
'<@(i18n_library_files)'
],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/libraries.cc',
- ],
+ 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/libraries.cc'],
'action': [
'python',
'../../tools/js2c.py',
'<@(library_files)',
'<@(i18n_library_files)'
],
- 'conditions': [
- [ 'v8_use_external_startup_data==1', {
- 'outputs': ['<@(libraries_bin_file)'],
- 'action': [
- '--startup_blob', '<@(libraries_bin_file)',
- ],
- }],
+ },
+ {
+ 'action_name': 'js2c_bin',
+ 'inputs': [
+ '../../tools/js2c.py',
+ '<@(library_files)',
+ '<@(i18n_library_files)'
+ ],
+ 'outputs': ['<@(libraries_bin_file)'],
+ 'action': [
+ 'python',
+ '../../tools/js2c.py',
+ '<(SHARED_INTERMEDIATE_DIR)/libraries.cc',
+ 'CORE',
+ '<@(library_files)',
+ '<@(i18n_library_files)',
+ '--startup_blob', '<@(libraries_bin_file)',
+ '--nojs',
],
},
{
'../../tools/js2c.py',
'<@(experimental_library_files)',
],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/experimental-libraries.cc',
- ],
+ 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/experimental-libraries.cc'],
'action': [
'python',
'../../tools/js2c.py',
'EXPERIMENTAL',
'<@(experimental_library_files)'
],
- 'conditions': [
- [ 'v8_use_external_startup_data==1', {
- 'outputs': ['<@(libraries_experimental_bin_file)'],
- 'action': [
- '--startup_blob', '<@(libraries_experimental_bin_file)'
- ],
- }],
+ },
+ {
+ 'action_name': 'js2c_experimental_bin',
+ 'inputs': [
+ '../../tools/js2c.py',
+ '<@(experimental_library_files)',
+ ],
+ 'outputs': ['<@(libraries_experimental_bin_file)'],
+ 'action': [
+ 'python',
+ '../../tools/js2c.py',
+ '<(SHARED_INTERMEDIATE_DIR)/experimental-libraries.cc',
+ 'EXPERIMENTAL',
+ '<@(experimental_library_files)',
+ '--startup_blob', '<@(libraries_experimental_bin_file)',
+ '--nojs',
],
},
{
'../../tools/js2c.py',
'<@(code_stub_library_files)',
],
- 'outputs': [
- '<(SHARED_INTERMEDIATE_DIR)/code-stub-libraries.cc',
- ],
+ 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/code-stub-libraries.cc'],
'action': [
'python',
'../../tools/js2c.py',
'CODE_STUB',
'<@(code_stub_library_files)'
],
- 'conditions': [
- [ 'v8_use_external_startup_data==1', {
- 'outputs': ['<@(libraries_code_stub_bin_file)'],
- 'action': [
- '--startup_blob', '<@(libraries_code_stub_bin_file)'
- ],
- }],
+ },
+ {
+ 'action_name': 'js2c_code_stubs_bin',
+ 'inputs': [
+ '../../tools/js2c.py',
+ '<@(code_stub_library_files)',
+ ],
+ 'outputs': ['<@(libraries_code_stub_bin_file)'],
+ 'action': [
+ 'python',
+ '../../tools/js2c.py',
+ '<(SHARED_INTERMEDIATE_DIR)/code-stub-libraries.cc',
+ 'CODE_STUB',
+ '<@(code_stub_library_files)',
+ '--startup_blob', '<@(libraries_code_stub_bin_file)',
+ '--nojs',
],
},
{
'../../tools/js2c.py',
'<@(v8_extra_library_files)',
],
- 'outputs': [
+ 'outputs': ['<(SHARED_INTERMEDIATE_DIR)/extras-libraries.cc'],
+ 'action': [
+ 'python',
+ '../../tools/js2c.py',
'<(SHARED_INTERMEDIATE_DIR)/extras-libraries.cc',
+ 'EXTRAS',
+ '<@(v8_extra_library_files)',
],
+ },
+ {
+ 'action_name': 'js2c_extras_bin',
+ 'inputs': [
+ '../../tools/js2c.py',
+ '<@(v8_extra_library_files)',
+ ],
+ 'outputs': ['<@(libraries_extras_bin_file)'],
'action': [
'python',
'../../tools/js2c.py',
'<(SHARED_INTERMEDIATE_DIR)/extras-libraries.cc',
'EXTRAS',
'<@(v8_extra_library_files)',
- ],
- 'conditions': [
- [ 'v8_use_external_startup_data==1', {
- 'outputs': ['<@(libraries_extras_bin_file)'],
- 'action': [
- '--startup_blob', '<@(libraries_extras_bin_file)',
- ],
- }],
+ '--startup_blob', '<@(libraries_extras_bin_file)',
+ '--nojs',
],
},
{
'EXPERIMENTAL_EXTRAS',
'<@(v8_experimental_extra_library_files)',
],
- 'conditions': [
- [ 'v8_use_external_startup_data==1', {
- 'outputs': ['<@(libraries_experimental_extras_bin_file)'],
- 'action': [
- '--startup_blob', '<@(libraries_experimental_extras_bin_file)',
- ],
- }],
+ },
+ {
+ 'action_name': 'js2c_experimental_extras_bin',
+ 'inputs': [
+ '../../tools/js2c.py',
+ '<@(v8_experimental_extra_library_files)',
+ ],
+ 'outputs': ['<@(libraries_experimental_extras_bin_file)'],
+ 'action': [
+ 'python',
+ '../../tools/js2c.py',
+ '<(SHARED_INTERMEDIATE_DIR)/experimental-extras-libraries.cc',
+ 'EXPERIMENTAL_EXTRAS',
+ '<@(v8_experimental_extra_library_files)',
+ '--startup_blob', '<@(libraries_experimental_extras_bin_file)',
+ '--nojs',
],
},
],