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[])24int 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