//===- subzero/src/main.cpp - Entry point for bitcode translation ---------===// // // The Subzero Code Generator // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// \brief Defines the entry point for translating PNaCl bitcode into native /// code. /// //===----------------------------------------------------------------------===// #include "IceBrowserCompileServer.h" #include "IceBuildDefs.h" #include "IceCompileServer.h" #ifdef __pnacl__ #include <malloc.h> #endif // __pnacl__ /// Depending on whether we are building the compiler for the browser or /// standalone, we will end up creating a Ice::BrowserCompileServer or /// Ice::CLCompileServer object. Method /// Ice::CompileServer::runAndReturnErrorCode is used for the invocation. /// There are no real commandline arguments in the browser case. They are /// supplied via IPC so argc, and argv are not used in that case. /// We can only compile the Ice::BrowserCompileServer object with the PNaCl /// compiler toolchain, when building Subzero as a sandboxed translator. int main(int argc, char **argv) { #ifdef __pnacl__ #define M_GRANULARITY (-2) // PNaCl's default malloc implementation grabs small chunks of memory with // mmap at a time, hence causing significant slowdowns. This call ensures that // mmap is used to allocate 16MB at a time, to amortize the system call cost. mallopt(M_GRANULARITY, 16 * 1024 * 1024); #undef M_GRANULARITY #endif // __pnacl__ if (Ice::BuildDefs::browser()) { assert(argc == 1); return Ice::BrowserCompileServer().runAndReturnErrorCode(); } return Ice::CLCompileServer(argc, argv).runAndReturnErrorCode(); }