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 <string>
5#include <vector>
6
7#include "backends/p4tools/common/compiler/compiler_result.h"
8#include "backends/p4tools/common/compiler/midend.h"
9#include "backends/p4tools/common/core/target.h"
10#include "frontends/common/options.h"
11#include "frontends/p4/frontend.h"
12#include "ir/ir.h"
13#include "lib/compile_context.h"
14
15namespace P4Tools {
16
18class CompilerTarget : public Target {
19 public:
21 static ICompileContext *makeContext(std::string_view toolName);
22
26 static std::vector<const char *> *initCompiler(std::string_view toolName, int argc,
27 char **argv);
28
33 static CompilerResultOrError runCompiler(std::string_view toolName);
34
38 static CompilerResultOrError runCompiler(std::string_view toolName, const std::string &source);
39
40 private:
44 static CompilerResultOrError runCompiler(std::string_view toolName, const IR::P4Program *);
45
46 protected:
48 [[nodiscard]] virtual ICompileContext *makeContextImpl() const;
49
51 virtual CompilerResultOrError runCompilerImpl(const IR::P4Program *) const;
52
56 virtual std::vector<const char *> *initCompilerImpl(int argc, char **argv) const;
57
61 static const IR::P4Program *runParser();
62
66 const IR::P4Program *runFrontend(const IR::P4Program *program) const;
67
69 [[nodiscard]] virtual MidEnd mkMidEnd(const CompilerOptions &options) const;
70
72 [[nodiscard]] virtual P4::FrontEnd mkFrontEnd() const;
73
77 const IR::P4Program *runMidEnd(const IR::P4Program *program) const;
78
79 explicit CompilerTarget(std::string_view toolName, const std::string &deviceName,
80 const std::string &archName);
81
82 private:
84 static const CompilerTarget &get(std::string_view toolName);
85};
86
87} // namespace P4Tools
88
89#endif /* BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_ */
Definition frontends/common/options.h:28
Definition compile_context.h:30
Definition frontend.h:69
Encapsulates the details of invoking the P4 compiler for a target device and architecture.
Definition compiler_target.h:18
virtual std::vector< const char * > * initCompilerImpl(int argc, char **argv) const
Definition compiler_target.cpp:72
virtual ICompileContext * makeContextImpl() const
Definition compiler_target.cpp:68
static std::vector< const char * > * initCompiler(std::string_view toolName, int argc, char **argv)
Definition compiler_target.cpp:25
static ICompileContext * makeContext(std::string_view toolName)
Definition compiler_target.cpp:21
virtual MidEnd mkMidEnd(const CompilerOptions &options) const
A factory method for providing a target-specific mid end implementation.
Definition compiler_target.cpp:105
static CompilerResultOrError runCompiler(std::string_view toolName)
Definition compiler_target.cpp:30
static const IR::P4Program * runParser()
Definition compiler_target.cpp:77
const IR::P4Program * runMidEnd(const IR::P4Program *program) const
Definition compiler_target.cpp:112
const IR::P4Program * runFrontend(const IR::P4Program *program) const
Definition compiler_target.cpp:87
virtual P4::FrontEnd mkFrontEnd() const
A factory method for providing a target-specific front end implementation.
Definition compiler_target.cpp:103
virtual CompilerResultOrError runCompilerImpl(const IR::P4Program *) const
Definition compiler_target.cpp:54
Definition p4tools/common/compiler/midend.h:24
Definition p4tools/common/core/target.h:17
std::string toolName
The name of the tool supported by this instance.
Definition p4tools/common/core/target.h:54
Definition common/compiler/compiler_result.cpp:3
std::optional< std::reference_wrapper< const CompilerResult > > CompilerResultOrError
Definition common/compiler/compiler_result.h:31