P4C
The P4 Compiler
Loading...
Searching...
No Matches
p4tools/modules/smith/targets/nic/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_NIC_TARGET_H_
8#define BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_NIC_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 "backends/p4tools/modules/smith/targets/nic/expressions.h"
20#include "ir/ir.h"
21
22namespace P4::P4Tools::P4Smith::Nic {
23
24class AbstractNicSmithTarget : public SmithTarget {
25 protected:
26 explicit AbstractNicSmithTarget(const std::string &deviceName, const std::string &archName);
27};
28
29class DpdkPnaSmithTarget : public AbstractNicSmithTarget {
30 private:
31 DeclarationGenerator *_declarationGenerator = new DeclarationGenerator(*this);
32 ExpressionGenerator *_expressionGenerator = new NicExpressionGenerator(*this);
33 StatementGenerator *_statementGenerator = new StatementGenerator(*this);
34 ParserGenerator *_parserGenerator = new ParserGenerator(*this);
35 TableGenerator *_tableGenerator = new TableGenerator(*this);
36
37 [[nodiscard]] IR::P4Parser *generateMainParserBlock() const;
38 [[nodiscard]] IR::P4Control *generatePreControlBlock() const;
39 [[nodiscard]] IR::P4Control *generateMainControlBlock() const;
40 [[nodiscard]] IR::P4Control *generateMainDeparserBlock() const;
41
42 public:
44 static void make();
45
46 [[nodiscard]] int writeTargetPreamble(std::ostream *ostream) const override;
47
48 [[nodiscard]] const IR::P4Program *generateP4Program() const override;
49
50 [[nodiscard]] DeclarationGenerator &declarationGenerator() const override {
51 return *_declarationGenerator;
52 }
53
54 [[nodiscard]] ExpressionGenerator &expressionGenerator() const override {
55 return *_expressionGenerator;
56 }
57
58 [[nodiscard]] StatementGenerator &statementGenerator() const override {
59 return *_statementGenerator;
60 }
61
62 [[nodiscard]] ParserGenerator &parserGenerator() const override { return *_parserGenerator; }
63
64 [[nodiscard]] TableGenerator &tableGenerator() const override { return *_tableGenerator; }
65
66 private:
67 DpdkPnaSmithTarget();
68};
69
70} // namespace P4::P4Tools::P4Smith::Nic
71
72#endif /* BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_NIC_TARGET_H_ */
Definition declarations.h:19
Definition common/expressions.h:54
static void make()
Registers this target.
Definition p4tools/modules/smith/targets/nic/target.cpp:43
int writeTargetPreamble(std::ostream *ostream) const override
Definition p4tools/modules/smith/targets/nic/target.cpp:387
Definition targets/nic/expressions.h:9
Definition p4tools/modules/smith/common/parser.h:18