• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <cstdio>
2 #include <fstream>
3 #include <iostream>
4 #include <sstream>
5 #include <string>
6 
7 #include "cache_builder.h"
8 #include "debug_utils-inl.h"
9 #include "libplatform/libplatform.h"
10 #include "v8.h"
11 
12 using node::native_module::CodeCacheBuilder;
13 using v8::ArrayBuffer;
14 using v8::Context;
15 using v8::HandleScope;
16 using v8::Isolate;
17 using v8::Local;
18 
19 #ifdef _WIN32
20 #include <VersionHelpers.h>
21 #include <WinError.h>
22 #include <windows.h>
23 
wmain(int argc,wchar_t * argv[])24 int wmain(int argc, wchar_t* argv[]) {
25 #else   // UNIX
26 int main(int argc, char* argv[]) {
27 #endif  // _WIN32
28 
29   v8::V8::SetFlagsFromString("--random_seed=42");
30   v8::V8::SetFlagsFromString("--harmony-top-level-await");
31 
32   if (argc < 2) {
33     std::cerr << "Usage: " << argv[0] << " <path/to/output.cc>\n";
34     return 1;
35   }
36 
37   std::ofstream out;
38   out.open(argv[1], std::ios::out | std::ios::binary);
39   if (!out.is_open()) {
40     std::cerr << "Cannot open " << argv[1] << "\n";
41     return 1;
42   }
43 
44   node::per_process::enabled_debug_list.Parse(nullptr);
45 
46   std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
47   v8::V8::InitializePlatform(platform.get());
48   v8::V8::Initialize();
49 
50   // Create a new Isolate and make it the current one.
51   Isolate::CreateParams create_params;
52   create_params.array_buffer_allocator_shared.reset(
53       ArrayBuffer::Allocator::NewDefaultAllocator());
54   Isolate* isolate = Isolate::New(create_params);
55   {
56     Isolate::Scope isolate_scope(isolate);
57     v8::HandleScope handle_scope(isolate);
58     v8::Local<v8::Context> context = v8::Context::New(isolate);
59     v8::Context::Scope context_scope(context);
60 
61     // The command line flags are part of the code cache's checksum so reset
62     // --random_seed= to its default value before creating the code cache.
63     v8::V8::SetFlagsFromString("--random_seed=0");
64     std::string cache = CodeCacheBuilder::Generate(context);
65     out << cache;
66     out.close();
67   }
68   isolate->Dispose();
69 
70   v8::V8::ShutdownPlatform();
71   return 0;
72 }
73