blob: baaa39ef8adc0cbf17e2ae0021ff1f073b05a3f4 [file] [log] [blame]
Jan Voung44c3a802015-03-27 16:29:08 -07001//===- subzero/src/main.cpp - Entry point for bitcode translation ---------===//
Jim Stichnothf7c9a142014-04-29 10:52:43 -07002//
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//===----------------------------------------------------------------------===//
Andrew Scull9612d322015-07-06 14:53:25 -07009///
10/// \file
Jim Stichnoth92a6e5b2015-12-02 16:52:44 -080011/// \brief Defines the entry point for translating PNaCl bitcode into native
Andrew Scull57e12682015-09-16 11:30:19 -070012/// code.
Andrew Scull9612d322015-07-06 14:53:25 -070013///
Jim Stichnothf7c9a142014-04-29 10:52:43 -070014//===----------------------------------------------------------------------===//
15
Jan Voung44c3a802015-03-27 16:29:08 -070016#include "IceBrowserCompileServer.h"
Reed Kotler43e8ab32015-12-07 14:31:01 -080017#include "IceBuildDefs.h"
Jan Voung44c3a802015-03-27 16:29:08 -070018#include "IceCompileServer.h"
Karl Schimpfb262c5e2014-10-27 14:41:57 -070019
John Porto36d6aa62016-02-26 07:19:59 -080020#ifdef __pnacl__
21#include <malloc.h>
22#endif // __pnacl__
23
Reed Kotler10665a22015-12-10 13:57:32 -080024/// 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.
Jim Stichnothf7c9a142014-04-29 10:52:43 -070032int main(int argc, char **argv) {
John Porto36d6aa62016-02-26 07:19:59 -080033#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
Reed Kotler43e8ab32015-12-07 14:31:01 -080042 if (Ice::BuildDefs::browser()) {
Reed Kotler43e8ab32015-12-07 14:31:01 -080043 assert(argc == 1);
44 return Ice::BrowserCompileServer().runAndReturnErrorCode();
45 }
46 return Ice::CLCompileServer(argc, argv).runAndReturnErrorCode();
Jim Stichnothf7c9a142014-04-29 10:52:43 -070047}