• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
main(int argc,char ** argv)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