• 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   argv = uv_setup_args(argc, argv);
28 #endif  // _WIN32
29 
30   v8::V8::SetFlagsFromString("--random_seed=42");
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   std::unique_ptr<ArrayBuffer::Allocator> array_buffer_allocator {
53       ArrayBuffer::Allocator::NewDefaultAllocator() };
54   create_params.array_buffer_allocator = array_buffer_allocator.get();
55   Isolate* isolate = Isolate::New(create_params);
56   {
57     Isolate::Scope isolate_scope(isolate);
58     v8::HandleScope handle_scope(isolate);
59     v8::Local<v8::Context> context = v8::Context::New(isolate);
60     v8::Context::Scope context_scope(context);
61 
62     // The command line flags are part of the code cache's checksum so reset
63     // --random_seed= to its default value before creating the code cache.
64     v8::V8::SetFlagsFromString("--random_seed=0");
65     std::string cache = CodeCacheBuilder::Generate(context);
66     out << cache;
67     out.close();
68   }
69   isolate->Dispose();
70 
71   v8::V8::ShutdownPlatform();
72   return 0;
73 }
74