diff options
Diffstat (limited to 'tools/code_cache/mkcodecache.cc')
-rw-r--r-- | tools/code_cache/mkcodecache.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/code_cache/mkcodecache.cc b/tools/code_cache/mkcodecache.cc new file mode 100644 index 00000000000..24f7e05e1f1 --- /dev/null +++ b/tools/code_cache/mkcodecache.cc @@ -0,0 +1,62 @@ +#include <cstdio> +#include <fstream> +#include <iostream> +#include <sstream> +#include <string> +#include <vector> + +#include "cache_builder.h" +#include "libplatform/libplatform.h" +#include "v8.h" + +using node::native_module::CodeCacheBuilder; +using v8::ArrayBuffer; +using v8::Context; +using v8::HandleScope; +using v8::Isolate; +using v8::Local; + +#ifdef _WIN32 +#include <VersionHelpers.h> +#include <WinError.h> +#include <windows.h> + +int wmain(int argc, wchar_t* argv[]) { +#else // UNIX +int main(int argc, char* argv[]) { +#endif // _WIN32 + + if (argc < 2) { + std::cerr << "Usage: " << argv[0] << " <path/to/output.cc>\n"; + return 1; + } + + std::ofstream out; + out.open(argv[1], std::ios::out | std::ios::binary); + if (!out.is_open()) { + std::cerr << "Cannot open " << argv[1] << "\n"; + return 1; + } + + std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform(); + v8::V8::InitializePlatform(platform.get()); + v8::V8::Initialize(); + + // Create a new Isolate and make it the current one. + Isolate::CreateParams create_params; + create_params.array_buffer_allocator = + ArrayBuffer::Allocator::NewDefaultAllocator(); + Isolate* isolate = Isolate::New(create_params); + { + Isolate::Scope isolate_scope(isolate); + v8::HandleScope handle_scope(isolate); + v8::Local<v8::Context> context = v8::Context::New(isolate); + v8::Context::Scope context_scope(context); + + std::string cache = CodeCacheBuilder::Generate(context); + out << cache; + out.close(); + } + + return 0; +} |