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