| Index: src/IceCompileServer.h
|
| diff --git a/src/IceCompileServer.h b/src/IceCompileServer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a0a0e7ad5d1551ab2a15511b2d9ceb536304edca
|
| --- /dev/null
|
| +++ b/src/IceCompileServer.h
|
| @@ -0,0 +1,84 @@
|
| +//===- subzero/src/IceCompileServer.h - Compile server ----------*- C++ -*-===//
|
| +//
|
| +// The Subzero Code Generator
|
| +//
|
| +// This file is distributed under the University of Illinois Open Source
|
| +// License. See LICENSE.TXT for details.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +//
|
| +// This file declares the compile server. Given a compiler implementation,
|
| +// it dispatches compile requests to the implementation.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +#ifndef SUBZERO_SRC_ICECOMPILESERVER_H
|
| +#define SUBZERO_SRC_ICECOMPILESERVER_H
|
| +
|
| +#include "IceCompiler.h"
|
| +#include "IceDefs.h"
|
| +#include "IceGlobalContext.h"
|
| +
|
| +namespace llvm {
|
| +class DataStreamer;
|
| +class raw_fd_ostream;
|
| +};
|
| +
|
| +namespace Ice {
|
| +
|
| +// A CompileServer awaits compile requests, and dispatches the requests
|
| +// to a given Compiler. Each request is paired with an input stream,
|
| +// a context (which has the output stream), and a set of arguments.
|
| +// The CompileServer takes over the current thread to listen to requests,
|
| +// and compile requests are handled on separate threads.
|
| +//
|
| +// Currently, this only handles a single request.
|
| +//
|
| +// When run on the commandline, it receives and therefore dispatches
|
| +// the request immediately. When run in the browser, it blocks waiting
|
| +// for a request.
|
| +class CompileServer {
|
| + CompileServer() = delete;
|
| + CompileServer(const CompileServer &) = delete;
|
| + CompileServer &operator=(const CompileServer &) = delete;
|
| +
|
| +public:
|
| + explicit CompileServer(Compiler &Comp) : Comp(Comp) {}
|
| +
|
| + virtual ~CompileServer() {}
|
| +
|
| + virtual void run() = 0;
|
| +
|
| + ErrorCode &getErrorCode() { return LastError; }
|
| + void transferErrorCode(ErrorCodes Code) { LastError.assign(Code); }
|
| +
|
| +protected:
|
| + Compiler &getCompiler() const { return Comp; }
|
| +
|
| + Compiler &Comp;
|
| + ErrorCode LastError;
|
| +};
|
| +
|
| +// Commandline variant of the compile server.
|
| +class CLCompileServer : public CompileServer {
|
| + CLCompileServer() = delete;
|
| + CLCompileServer(const CLCompileServer &) = delete;
|
| + CLCompileServer &operator=(const CLCompileServer &) = delete;
|
| +
|
| +public:
|
| + CLCompileServer(Compiler &Comp, int argc, char **argv)
|
| + : CompileServer(Comp), argc(argc), argv(argv) {}
|
| +
|
| + ~CLCompileServer() final {}
|
| +
|
| + void run() final;
|
| +
|
| +private:
|
| + int argc;
|
| + char **argv;
|
| + std::unique_ptr<GlobalContext> Ctx;
|
| +};
|
| +
|
| +} // end of namespace Ice
|
| +
|
| +#endif // SUBZERO_SRC_ICECOMPILESERVER_H
|
|
|