P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
compiler_target.h
1#ifndef BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_
2#define BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_
3
4#include <functional>
5#include <optional>
6#include <string>
7#include <vector>
8
9#include "backends/p4tools/common/compiler/midend.h"
10#include "backends/p4tools/common/core/target.h"
11#include "frontends/common/options.h"
12#include "frontends/p4/frontend.h"
13#include "ir/ir.h"
14#include "lib/castable.h"
15#include "lib/compile_context.h"
16
17namespace P4Tools {
18
21class CompilerResult : public ICastable {
22 private:
24 std::reference_wrapper<const IR::P4Program> program;
25
26 public:
27 explicit CompilerResult(const IR::P4Program &program);
28
31 [[nodiscard]] const IR::P4Program &getProgram() const;
32
33 DECLARE_TYPEINFO(CompilerResult);
34};
35
38using CompilerResultOrError = std::optional<std::reference_wrapper<const CompilerResult>>;
39
41class CompilerTarget : public Target {
42 public:
45
49 static std::vector<const char *> *initCompiler(int argc, char **argv);
50
56
60 static CompilerResultOrError runCompiler(const std::string &source);
61
62 private:
66 static CompilerResultOrError runCompiler(const IR::P4Program *);
67
68 protected:
70 [[nodiscard]] virtual ICompileContext *makeContextImpl() const;
71
73 virtual CompilerResultOrError runCompilerImpl(const IR::P4Program *) const;
74
78 virtual std::vector<const char *> *initCompilerImpl(int argc, char **argv) const;
79
83 static const IR::P4Program *runParser();
84
88 const IR::P4Program *runFrontend(const IR::P4Program *program) const;
89
91 [[nodiscard]] virtual MidEnd mkMidEnd(const CompilerOptions &options) const;
92
94 [[nodiscard]] virtual P4::FrontEnd mkFrontEnd() const;
95
99 const IR::P4Program *runMidEnd(const IR::P4Program *program) const;
100
101 explicit CompilerTarget(std::string deviceName, std::string archName);
102
103 private:
105 static const CompilerTarget &get();
106};
107
108} // namespace P4Tools
109
110#endif /* BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_ */
Definition options.h:26
Definition castable.h:34
Definition compile_context.h:30
Definition frontend.h:65
Definition compiler_target.h:21
const IR::P4Program & getProgram() const
Definition compiler_target.cpp:21
Encapsulates the details of invoking the P4 compiler for a target device and architecture.
Definition compiler_target.h:41
virtual std::vector< const char * > * initCompilerImpl(int argc, char **argv) const
Definition compiler_target.cpp:73
virtual ICompileContext * makeContextImpl() const
Definition compiler_target.cpp:69
static CompilerResultOrError runCompiler()
Definition compiler_target.cpp:31
virtual MidEnd mkMidEnd(const CompilerOptions &options) const
A factory method for providing a target-specific mid end implementation.
Definition compiler_target.cpp:106
static const IR::P4Program * runParser()
Definition compiler_target.cpp:78
const IR::P4Program * runMidEnd(const IR::P4Program *program) const
Definition compiler_target.cpp:113
const IR::P4Program * runFrontend(const IR::P4Program *program) const
Definition compiler_target.cpp:88
static ICompileContext * makeContext()
Definition compiler_target.cpp:25
virtual P4::FrontEnd mkFrontEnd() const
A factory method for providing a target-specific front end implementation.
Definition compiler_target.cpp:104
virtual CompilerResultOrError runCompilerImpl(const IR::P4Program *) const
Definition compiler_target.cpp:53
static std::vector< const char * > * initCompiler(int argc, char **argv)
Definition compiler_target.cpp:27
Definition midend.h:24
Definition target.h:17
Definition compiler_target.cpp:19
std::optional< std::reference_wrapper< const CompilerResult > > CompilerResultOrError
Definition compiler_target.h:38