P4C
The P4 Compiler
Loading...
Searching...
No Matches
compiler_target.h
1/*
2 * SPDX-FileCopyrightText: 2022 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_
8#define BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_
9
10#include <string>
11
12#include "backends/p4tools/common/compiler/compiler_result.h"
13#include "backends/p4tools/common/compiler/context.h"
14#include "backends/p4tools/common/compiler/midend.h"
15#include "backends/p4tools/common/core/target.h"
16#include "frontends/common/options.h"
17#include "frontends/common/parser_options.h"
18#include "frontends/p4/frontend.h"
19#include "ir/ir.h"
20#include "lib/compile_context.h"
21
22namespace P4::P4Tools {
23
25class CompilerTarget : public Target {
26 public:
32 std::string_view toolName);
33
38 std::string_view toolName, const std::string &source);
39
40 private:
45 std::string_view toolName, const IR::P4Program *);
46
47 protected:
50 const IR::P4Program *) const;
51
55 static const IR::P4Program *runParser(const ParserOptions &options);
56
60 const IR::P4Program *runFrontend(const CompilerOptions &options,
61 const IR::P4Program *program) const;
62
64 [[nodiscard]] virtual MidEnd mkMidEnd(const CompilerOptions &options) const;
65
67 [[nodiscard]] virtual P4::FrontEnd mkFrontEnd() const;
68
72 const IR::P4Program *runMidEnd(const CompilerOptions &options,
73 const IR::P4Program *program) const;
74
75 explicit CompilerTarget(std::string_view toolName, const std::string &deviceName,
76 const std::string &archName);
77
78 private:
80 static const CompilerTarget &get(std::string_view toolName);
81};
82
83} // namespace P4::P4Tools
84
85#endif /* BACKENDS_P4TOOLS_COMMON_COMPILER_COMPILER_TARGET_H_ */
Definition frontends/common/options.h:31
Definition frontends/p4/frontend.h:80
virtual MidEnd mkMidEnd(const CompilerOptions &options) const
A factory method for providing a target-specific mid end implementation.
Definition compiler_target.cpp:91
const IR::P4Program * runMidEnd(const CompilerOptions &options, const IR::P4Program *program) const
Definition compiler_target.cpp:98
const IR::P4Program * runFrontend(const CompilerOptions &options, const IR::P4Program *program) const
Definition compiler_target.cpp:71
static const IR::P4Program * runParser(const ParserOptions &options)
Definition compiler_target.cpp:63
static CompilerResultOrError runCompiler(const CompilerOptions &options, std::string_view toolName)
Definition compiler_target.cpp:21
virtual CompilerResultOrError runCompilerImpl(const CompilerOptions &options, const IR::P4Program *) const
Definition compiler_target.cpp:48
virtual P4::FrontEnd mkFrontEnd() const
A factory method for providing a target-specific front end implementation.
Definition compiler_target.cpp:89
Definition p4tools/common/compiler/midend.h:30
std::string toolName
The name of the tool supported by this instance.
Definition p4tools/common/core/target.h:63
Target(std::string_view toolName, const std::string &deviceName, const std::string &archName)
Definition p4tools/common/core/target.cpp:146
Definition parser_options.h:40
Definition common/compiler/compiler_result.cpp:7
std::optional< std::reference_wrapper< const CompilerResult > > CompilerResultOrError
Definition common/compiler/compiler_result.h:37