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/context.h"
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/common/parser_options.h"
13#include "frontends/p4/frontend.h"
14#include "ir/ir.h"
15#include "lib/compile_context.h"
16
17namespace P4::P4Tools {
18
20class CompilerTarget : public Target {
21 public:
23 static ICompileContext *makeContext(std::string_view toolName);
24
28 static std::vector<const char *> *initCompiler(std::string_view toolName, int argc,
29 char **argv);
30
36 std::string_view toolName);
37
42 std::string_view toolName, const std::string &source);
43
44 private:
49 std::string_view toolName, const IR::P4Program *);
50
51 protected:
53 [[nodiscard]] virtual ICompileContext *makeContextImpl() const;
54
57 const IR::P4Program *) const;
58
62 virtual std::vector<const char *> *initCompilerImpl(int argc, char **argv) const;
63
67 static const IR::P4Program *runParser(const ParserOptions &options);
68
72 const IR::P4Program *runFrontend(const CompilerOptions &options,
73 const IR::P4Program *program) const;
74
76 [[nodiscard]] virtual MidEnd mkMidEnd(const CompilerOptions &options) const;
77
79 [[nodiscard]] virtual P4::FrontEnd mkFrontEnd() const;
80
84 const IR::P4Program *runMidEnd(const CompilerOptions &options,
85 const IR::P4Program *program) const;
86
87 explicit CompilerTarget(std::string_view toolName, const std::string &deviceName,
88 const std::string &archName);
89
90 private:
92 static const CompilerTarget &get(std::string_view toolName);
93};
94
95} // namespace P4::P4Tools
96
97#endif /* BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_ */
Definition frontends/common/options.h:30
Definition frontend.h:69
Definition compile_context.h:32
Encapsulates the details of invoking the P4 compiler for a target device and architecture.
Definition compiler_target.h:20
virtual MidEnd mkMidEnd(const CompilerOptions &options) const
A factory method for providing a target-specific mid end implementation.
Definition compiler_target.cpp:103
static ICompileContext * makeContext(std::string_view toolName)
Definition compiler_target.cpp:19
const IR::P4Program * runMidEnd(const CompilerOptions &options, const IR::P4Program *program) const
Definition compiler_target.cpp:110
const IR::P4Program * runFrontend(const CompilerOptions &options, const IR::P4Program *program) const
Definition compiler_target.cpp:87
static const IR::P4Program * runParser(const ParserOptions &options)
Definition compiler_target.cpp:79
static CompilerResultOrError runCompiler(const CompilerOptions &options, std::string_view toolName)
Definition compiler_target.cpp:28
virtual CompilerResultOrError runCompilerImpl(const CompilerOptions &options, const IR::P4Program *) const
Definition compiler_target.cpp:55
virtual ICompileContext * makeContextImpl() const
Definition compiler_target.cpp:70
static std::vector< const char * > * initCompiler(std::string_view toolName, int argc, char **argv)
Definition compiler_target.cpp:23
virtual std::vector< const char * > * initCompilerImpl(int argc, char **argv) const
Definition compiler_target.cpp:74
virtual P4::FrontEnd mkFrontEnd() const
A factory method for providing a target-specific front end implementation.
Definition compiler_target.cpp:101
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 parser_options.h:45
Definition common/compiler/compiler_result.cpp:3
std::optional< std::reference_wrapper< const CompilerResult > > CompilerResultOrError
Definition common/compiler/compiler_result.h:31