Home | History | Annotate | Download | only in src
      1 //===- subzero/src/main.cpp - Entry point for bitcode translation ---------===//
      2 //
      3 //                        The Subzero Code Generator
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 ///
     10 /// \file
     11 /// \brief Defines the entry point for translating PNaCl bitcode into native
     12 /// code.
     13 ///
     14 //===----------------------------------------------------------------------===//
     15 
     16 #include "IceBrowserCompileServer.h"
     17 #include "IceBuildDefs.h"
     18 #include "IceCompileServer.h"
     19 
     20 #ifdef __pnacl__
     21 #include <malloc.h>
     22 #endif // __pnacl__
     23 
     24 /// Depending on whether we are building the compiler for the browser or
     25 /// standalone, we will end up creating a Ice::BrowserCompileServer or
     26 /// Ice::CLCompileServer object. Method
     27 /// Ice::CompileServer::runAndReturnErrorCode is used for the invocation.
     28 /// There are no real commandline arguments in the browser case. They are
     29 /// supplied via IPC so argc, and argv are not used in that case.
     30 /// We can only compile the Ice::BrowserCompileServer object with the PNaCl
     31 /// compiler toolchain, when building Subzero as a sandboxed translator.
     32 int main(int argc, char **argv) {
     33 #ifdef __pnacl__
     34 #define M_GRANULARITY (-2)
     35   // PNaCl's default malloc implementation grabs small chunks of memory with
     36   // mmap at a time, hence causing significant slowdowns. This call ensures that
     37   // mmap is used to allocate 16MB at a time, to amortize the system call cost.
     38   mallopt(M_GRANULARITY, 16 * 1024 * 1024);
     39 #undef M_GRANULARITY
     40 #endif // __pnacl__
     41 
     42   if (Ice::BuildDefs::browser()) {
     43     assert(argc == 1);
     44     return Ice::BrowserCompileServer().runAndReturnErrorCode();
     45   }
     46   return Ice::CLCompileServer(argc, argv).runAndReturnErrorCode();
     47 }
     48