| Index: src/IceBrowserCompileServer.h
|
| diff --git a/src/IceBrowserCompileServer.h b/src/IceBrowserCompileServer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..177440f7ef96d7041a1c6656f936b4b55985bf57
|
| --- /dev/null
|
| +++ b/src/IceBrowserCompileServer.h
|
| @@ -0,0 +1,95 @@
|
| +//===- subzero/src/IceBrowserCompileServer.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. Each request is paired
|
| +// with an abstraction of the input and output streams, which the compiler
|
| +// will acquire.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +#ifndef SUBZERO_SRC_ICEBROWSERCOMPILESERVER_H
|
| +#define SUBZERO_SRC_ICEBROWSERCOMPILESERVER_H
|
| +
|
| +#include <thread>
|
| +
|
| +#include "IceCompileServer.h"
|
| +#include "IceDefs.h"
|
| +
|
| +namespace llvm {
|
| +class DataStreamer;
|
| +class QueueStreamer;
|
| +class raw_fd_ostream;
|
| +};
|
| +
|
| +namespace Ice {
|
| +
|
| +// Browser variant of the compile server.
|
| +class BrowserCompileServer : public CompileServer {
|
| + BrowserCompileServer() = delete;
|
| + BrowserCompileServer(const BrowserCompileServer &) = delete;
|
| + BrowserCompileServer &operator=(const BrowserCompileServer &) = delete;
|
| +
|
| +public:
|
| + BrowserCompileServer(Compiler &Comp)
|
| + : CompileServer(Comp), OutputFD(-1), InputStream(nullptr), argc(-1),
|
| + argv(nullptr) {}
|
| +
|
| + ~BrowserCompileServer() final;
|
| +
|
| + void run() final;
|
| +
|
| + std::unique_ptr<llvm::DataStreamer>
|
| + getInputStream(const IceString &InputFilename,
|
| + std::string &ErrorString) final;
|
| +
|
| + std::unique_ptr<llvm::raw_fd_ostream>
|
| + getOutputStream(const IceString &OutputFilename, std::error_code &EC) final;
|
| +
|
| + void takeArgs(int argc_, char **argv_) {
|
| + argc = argc_;
|
| + argv = argv_;
|
| + }
|
| +
|
| + // Call to push more bytes to the current input stream.
|
| + // Returns false on success and true on error.
|
| + bool pushInputBytes(unsigned char *Data, size_t NumBytes);
|
| +
|
| + // Notify the input stream of EOF.
|
| + void endInputStream();
|
| +
|
| + // Set the output file descriptor to use for the current compile
|
| + // request. Must be called before getOutputStream().
|
| + void setOutputFD(int fd) { OutputFD = fd; }
|
| +
|
| + // Start the compile thread.
|
| + void startCompileThread();
|
| +
|
| + // Wait for the compile thread to complete.
|
| + void waitForCompileThread() {
|
| + CompileThread.join();
|
| + InputStream = nullptr;
|
| + }
|
| +
|
| +private:
|
| + // This currently only handles a single compile request, hence one copy
|
| + // of the state.
|
| + int OutputFD;
|
| + // A borrowed reference to the current InputStream. The compiler owns
|
| + // the actual reference so the server must be careful not to access
|
| + // after the compiler is done.
|
| + llvm::QueueStreamer *InputStream;
|
| + std::thread CompileThread;
|
| + int argc;
|
| + char **argv;
|
| +};
|
| +
|
| +} // end of namespace Ice
|
| +
|
| +#endif // SUBZERO_SRC_ICEBROWSERCOMPILESERVER_H
|
|
|