P4C
The P4 Compiler
Loading...
Searching...
No Matches
p4tools/modules/smith/targets/tofino/target.h
1/*
2 * SPDX-FileCopyrightText: 2024 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_TOFINO_TARGET_H_
8#define BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_TOFINO_TARGET_H_
9
10#include <ostream>
11#include <string>
12
13#include "backends/p4tools/modules/smith/common/declarations.h"
14#include "backends/p4tools/modules/smith/common/expressions.h"
15#include "backends/p4tools/modules/smith/common/parser.h"
16#include "backends/p4tools/modules/smith/common/statements.h"
17#include "backends/p4tools/modules/smith/common/table.h"
18#include "backends/p4tools/modules/smith/core/target.h"
19#include "ir/ir.h"
20
21namespace P4::P4Tools::P4Smith::Tofino {
22
23class AbstractTofinoSmithTarget : public SmithTarget {
24 protected:
25 explicit AbstractTofinoSmithTarget(const std::string &deviceName, const std::string &archName);
26};
27
28class TofinoTnaSmithTarget : public AbstractTofinoSmithTarget {
29 private:
30 DeclarationGenerator *_declarationGenerator = new DeclarationGenerator(*this);
31 ExpressionGenerator *_expressionGenerator = new ExpressionGenerator(*this);
32 StatementGenerator *_statementGenerator = new StatementGenerator(*this);
33 ParserGenerator *_parserGenerator = new ParserGenerator(*this);
34 TableGenerator *_tableGenerator = new TableGenerator(*this);
35
36 [[nodiscard]] IR::P4Parser *generateIngressParserBlock() const;
37 [[nodiscard]] IR::P4Control *generateIngressBlock() const;
38 [[nodiscard]] IR::P4Control *generateIngressDeparserBlock() const;
39 [[nodiscard]] IR::P4Parser *generateEgressParserBlock() const;
40 [[nodiscard]] IR::P4Control *generateEgressBlock() const;
41 [[nodiscard]] IR::P4Control *generateEgressDeparserBlock() const;
42
43 public:
45 static void make();
46
47 [[nodiscard]] int writeTargetPreamble(std::ostream *ostream) const override;
48
49 [[nodiscard]] const IR::P4Program *generateP4Program() const override;
50
51 [[nodiscard]] DeclarationGenerator &declarationGenerator() const override {
52 return *_declarationGenerator;
53 }
54
55 [[nodiscard]] ExpressionGenerator &expressionGenerator() const override {
56 return *_expressionGenerator;
57 }
58
59 [[nodiscard]] StatementGenerator &statementGenerator() const override {
60 return *_statementGenerator;
61 }
62
63 [[nodiscard]] ParserGenerator &parserGenerator() const override { return *_parserGenerator; }
64
65 [[nodiscard]] TableGenerator &tableGenerator() const override { return *_tableGenerator; }
66
67 private:
68 TofinoTnaSmithTarget();
69};
70
71} // namespace P4::P4Tools::P4Smith::Tofino
72
73#endif /* BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_TOFINO_TARGET_H_ */
Definition declarations.h:19
Definition common/expressions.h:54
Definition p4tools/modules/smith/common/parser.h:18
static void make()
Registers this target.
Definition p4tools/modules/smith/targets/tofino/target.cpp:45
int writeTargetPreamble(std::ostream *ostream) const override
Definition p4tools/modules/smith/targets/tofino/target.cpp:541