xref: /aosp_15_r20/external/swiftshader/third_party/subzero/src/IceCompileServer.h (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker //===- subzero/src/IceCompileServer.h - Compile server ----------*- C++ -*-===//
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker //                        The Subzero Code Generator
4*03ce13f7SAndroid Build Coastguard Worker //
5*03ce13f7SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*03ce13f7SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*03ce13f7SAndroid Build Coastguard Worker //
8*03ce13f7SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*03ce13f7SAndroid Build Coastguard Worker ///
10*03ce13f7SAndroid Build Coastguard Worker /// \file
11*03ce13f7SAndroid Build Coastguard Worker /// \brief Declares the compile server.
12*03ce13f7SAndroid Build Coastguard Worker ///
13*03ce13f7SAndroid Build Coastguard Worker /// Given a compiler implementation, it dispatches compile requests to the
14*03ce13f7SAndroid Build Coastguard Worker /// implementation.
15*03ce13f7SAndroid Build Coastguard Worker ///
16*03ce13f7SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
17*03ce13f7SAndroid Build Coastguard Worker 
18*03ce13f7SAndroid Build Coastguard Worker #ifndef SUBZERO_SRC_ICECOMPILESERVER_H
19*03ce13f7SAndroid Build Coastguard Worker #define SUBZERO_SRC_ICECOMPILESERVER_H
20*03ce13f7SAndroid Build Coastguard Worker 
21*03ce13f7SAndroid Build Coastguard Worker #include "IceCompiler.h"
22*03ce13f7SAndroid Build Coastguard Worker #include "IceDefs.h"
23*03ce13f7SAndroid Build Coastguard Worker #include "IceGlobalContext.h"
24*03ce13f7SAndroid Build Coastguard Worker 
25*03ce13f7SAndroid Build Coastguard Worker namespace llvm {
26*03ce13f7SAndroid Build Coastguard Worker class DataStreamer;
27*03ce13f7SAndroid Build Coastguard Worker class raw_fd_ostream;
28*03ce13f7SAndroid Build Coastguard Worker } // namespace llvm
29*03ce13f7SAndroid Build Coastguard Worker 
30*03ce13f7SAndroid Build Coastguard Worker namespace Ice {
31*03ce13f7SAndroid Build Coastguard Worker 
32*03ce13f7SAndroid Build Coastguard Worker /// A CompileServer awaits compile requests, and dispatches the requests to a
33*03ce13f7SAndroid Build Coastguard Worker /// given Compiler. Each request is paired with an input stream, a context
34*03ce13f7SAndroid Build Coastguard Worker /// (which has the output stream), and a set of arguments. The CompileServer
35*03ce13f7SAndroid Build Coastguard Worker /// takes over the current thread to listen to requests, and compile requests
36*03ce13f7SAndroid Build Coastguard Worker /// are handled on separate threads.
37*03ce13f7SAndroid Build Coastguard Worker ///
38*03ce13f7SAndroid Build Coastguard Worker /// Currently, this only handles a single request.
39*03ce13f7SAndroid Build Coastguard Worker ///
40*03ce13f7SAndroid Build Coastguard Worker /// When run on the commandline, it receives and therefore dispatches the
41*03ce13f7SAndroid Build Coastguard Worker /// request immediately. When run in the browser, it blocks waiting for a
42*03ce13f7SAndroid Build Coastguard Worker /// request.
43*03ce13f7SAndroid Build Coastguard Worker class CompileServer {
44*03ce13f7SAndroid Build Coastguard Worker   CompileServer(const CompileServer &) = delete;
45*03ce13f7SAndroid Build Coastguard Worker   CompileServer &operator=(const CompileServer &) = delete;
46*03ce13f7SAndroid Build Coastguard Worker 
47*03ce13f7SAndroid Build Coastguard Worker public:
48*03ce13f7SAndroid Build Coastguard Worker   CompileServer() = default;
49*03ce13f7SAndroid Build Coastguard Worker 
50*03ce13f7SAndroid Build Coastguard Worker   virtual ~CompileServer() = default;
51*03ce13f7SAndroid Build Coastguard Worker 
52*03ce13f7SAndroid Build Coastguard Worker   virtual void run() = 0;
53*03ce13f7SAndroid Build Coastguard Worker 
getErrorCode()54*03ce13f7SAndroid Build Coastguard Worker   virtual ErrorCode &getErrorCode() { return LastError; }
transferErrorCode(ErrorCodes Code)55*03ce13f7SAndroid Build Coastguard Worker   void transferErrorCode(ErrorCodes Code) { LastError.assign(Code); }
56*03ce13f7SAndroid Build Coastguard Worker 
runAndReturnErrorCode()57*03ce13f7SAndroid Build Coastguard Worker   int runAndReturnErrorCode() {
58*03ce13f7SAndroid Build Coastguard Worker     run();
59*03ce13f7SAndroid Build Coastguard Worker     return getErrorCode().value();
60*03ce13f7SAndroid Build Coastguard Worker   }
61*03ce13f7SAndroid Build Coastguard Worker 
62*03ce13f7SAndroid Build Coastguard Worker protected:
getCompiler()63*03ce13f7SAndroid Build Coastguard Worker   Compiler &getCompiler() { return Comp; }
64*03ce13f7SAndroid Build Coastguard Worker 
65*03ce13f7SAndroid Build Coastguard Worker   Compiler Comp;
66*03ce13f7SAndroid Build Coastguard Worker   ErrorCode LastError;
67*03ce13f7SAndroid Build Coastguard Worker };
68*03ce13f7SAndroid Build Coastguard Worker 
69*03ce13f7SAndroid Build Coastguard Worker /// Commandline variant of the compile server.
70*03ce13f7SAndroid Build Coastguard Worker class CLCompileServer : public CompileServer {
71*03ce13f7SAndroid Build Coastguard Worker   CLCompileServer() = delete;
72*03ce13f7SAndroid Build Coastguard Worker   CLCompileServer(const CLCompileServer &) = delete;
73*03ce13f7SAndroid Build Coastguard Worker   CLCompileServer &operator=(const CLCompileServer &) = delete;
74*03ce13f7SAndroid Build Coastguard Worker 
75*03ce13f7SAndroid Build Coastguard Worker public:
CLCompileServer(int argc,char ** argv)76*03ce13f7SAndroid Build Coastguard Worker   CLCompileServer(int argc, char **argv) : argc(argc), argv(argv) {}
77*03ce13f7SAndroid Build Coastguard Worker 
78*03ce13f7SAndroid Build Coastguard Worker   ~CLCompileServer() final = default;
79*03ce13f7SAndroid Build Coastguard Worker 
80*03ce13f7SAndroid Build Coastguard Worker   void run() final;
81*03ce13f7SAndroid Build Coastguard Worker 
82*03ce13f7SAndroid Build Coastguard Worker private:
83*03ce13f7SAndroid Build Coastguard Worker   int argc;
84*03ce13f7SAndroid Build Coastguard Worker   char **argv;
85*03ce13f7SAndroid Build Coastguard Worker   std::unique_ptr<GlobalContext> Ctx;
86*03ce13f7SAndroid Build Coastguard Worker };
87*03ce13f7SAndroid Build Coastguard Worker 
88*03ce13f7SAndroid Build Coastguard Worker } // end of namespace Ice
89*03ce13f7SAndroid Build Coastguard Worker 
90*03ce13f7SAndroid Build Coastguard Worker #endif // SUBZERO_SRC_ICECOMPILESERVER_H
91