P4C
The P4 Compiler
Loading...
Searching...
No Matches
backends/p4tools/modules/smith/targets/bmv2/v1model.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_BMV2_V1MODEL_H_
8#define BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_BMV2_V1MODEL_H_
9
10#include <ostream>
11
12#include "backends/p4tools/modules/smith/common/declarations.h"
13#include "backends/p4tools/modules/smith/common/expressions.h"
14#include "backends/p4tools/modules/smith/common/parser.h"
15#include "backends/p4tools/modules/smith/common/statements.h"
16#include "backends/p4tools/modules/smith/common/table.h"
17#include "backends/p4tools/modules/smith/targets/bmv2/target.h"
18#include "ir/ir.h"
19
20namespace P4::P4Tools::P4Smith::BMv2 {
21
22class Bmv2V1modelSmithTarget : public AbstractBMv2SmithTarget {
23 private:
24 DeclarationGenerator *_declarationGenerator = new DeclarationGenerator(*this);
25 ExpressionGenerator *_expressionGenerator = new ExpressionGenerator(*this);
26 StatementGenerator *_statementGenerator = new StatementGenerator(*this);
27 ParserGenerator *_parserGenerator = new ParserGenerator(*this);
28 TableGenerator *_tableGenerator = new TableGenerator(*this);
29
30 [[nodiscard]] IR::P4Parser *generateParserBlock() const;
31 [[nodiscard]] IR::P4Control *generateIngressBlock() const;
32 [[nodiscard]] IR::P4Control *generateUpdateBlock() const;
33 [[nodiscard]] IR::P4Control *generateVerifyBlock() const;
34 [[nodiscard]] IR::P4Control *generateEgressBlock() const;
35 [[nodiscard]] IR::P4Control *generateDeparserBlock() const;
36
37 public:
39 static void make();
40
41 [[nodiscard]] int writeTargetPreamble(std::ostream *ostream) const override;
42
43 [[nodiscard]] const IR::P4Program *generateP4Program() const override;
44
45 [[nodiscard]] DeclarationGenerator &declarationGenerator() const override {
46 return *_declarationGenerator;
47 }
48
49 [[nodiscard]] ExpressionGenerator &expressionGenerator() const override {
50 return *_expressionGenerator;
51 }
52
53 [[nodiscard]] StatementGenerator &statementGenerator() const override {
54 return *_statementGenerator;
55 }
56
57 [[nodiscard]] ParserGenerator &parserGenerator() const override { return *_parserGenerator; }
58
59 [[nodiscard]] TableGenerator &tableGenerator() const override { return *_tableGenerator; }
60
61 private:
62 Bmv2V1modelSmithTarget();
63};
64
65} // namespace P4::P4Tools::P4Smith::BMv2
66
67#endif /* BACKENDS_P4TOOLS_MODULES_SMITH_TARGETS_BMV2_V1MODEL_H_ */
int writeTargetPreamble(std::ostream *ostream) const override
Definition backends/p4tools/modules/smith/targets/bmv2/v1model.cpp:323
static void make()
Registers this target.
Definition backends/p4tools/modules/smith/targets/bmv2/v1model.cpp:36
Definition declarations.h:19
Definition common/expressions.h:54
Definition p4tools/modules/smith/common/parser.h:18