P4C
The P4 Compiler
Loading...
Searching...
No Matches
parser_options.h
1/*
2Copyright 2013-present Barefoot Networks, Inc.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17/* -*-C++-*- */
18
19#ifndef FRONTENDS_COMMON_PARSER_OPTIONS_H_
20#define FRONTENDS_COMMON_PARSER_OPTIONS_H_
21
22#include <cstdio>
23#include <filesystem>
24#include <set>
25
26#include "ir/configuration.h"
27#include "ir/pass_manager.h"
28#include "lib/compile_context.h"
29#include "lib/cstring.h"
30#include "lib/options.h"
31
32namespace P4 {
33
36extern const char *p4includePath;
37extern const char *p4_14includePath;
38
40bool isSystemFile(cstring filename);
41
47 std::set<cstring> disabledAnnotations;
48
50 mutable size_t dump_uid = 0;
51
52 protected:
54 void dumpPass(const char *manager, unsigned seq, const char *pass, const IR::Node *node) const;
55
56 public:
57 explicit ParserOptions(std::string_view defaultMessage = "Parse a P4 program");
58
59 std::vector<const char *> *process(int argc, char *const argv[]) override;
60 enum class FrontendVersion { P4_14, P4_16 };
61
63 static void closeFile(FILE *file);
65 using PreprocessorResult = std::unique_ptr<FILE, decltype(&closeFile)>;
66
70 FrontendVersion langVersion = FrontendVersion::P4_16;
72 cstring preprocessor_options = cstring::empty;
74 std::filesystem::path file;
76 bool doNotCompile = false;
80 bool doNotPreprocess = false;
82 std::vector<cstring> top4;
84 std::filesystem::path dumpFolder = ".";
88 void setInputFile();
90 const char *getIncludePath() const override;
92 std::optional<ParserOptions::PreprocessorResult> preprocess() const;
94 bool isv1() const;
97 DebugHook getDebugHook() const;
99 bool isAnnotationDisabled(const IR::Annotation *a) const;
102 bool searchForIncludePath(const char *&includePathOut, std::vector<cstring> relativePaths,
103 const char *);
106 bool noIncludes = false;
107};
108
112 public:
115 static P4CContext &get();
116
120 static const P4CConfiguration &getConfig();
121
122 P4CContext() {}
123
125 virtual ParserOptions &options() = 0;
126
131
136
141
146
148 void setDiagnosticAction(std::string_view diagnostic, DiagnosticAction action) {
149 errorReporter().setDiagnosticAction(diagnostic, action);
150 }
151
152 protected:
156 virtual bool isRecognizedDiagnostic(cstring diagnostic);
157
160 virtual const P4CConfiguration &getConfigImpl();
161};
162
166template <typename OptionsType>
167class P4CContextWithOptions final : public P4CContext {
168 public:
174
176
177 template <typename OptionsDerivedType>
178 P4CContextWithOptions(P4CContextWithOptions<OptionsDerivedType> &context) {
179 optionsInstance = context.options();
180 }
181
182 template <typename OptionsDerivedType>
183 P4CContextWithOptions &operator=(P4CContextWithOptions<OptionsDerivedType> &context) {
184 optionsInstance = context.options();
185 }
186
188 OptionsType &options() override { return optionsInstance; }
189
190 private:
192 OptionsType optionsInstance;
193};
194
195} // namespace P4
196
197#endif /* FRONTENDS_COMMON_PARSER_OPTIONS_H_*/
Definition compile_context.h:85
virtual ErrorReporter & errorReporter()
Definition compile_context.cpp:65
void setDefaultWarningDiagnosticAction(DiagnosticAction action)
set the default diagnostic action for calls to P4::warning().
Definition error_reporter.h:251
void setDiagnosticAction(std::string_view diagnostic, DiagnosticAction action)
Set the action to take for the given diagnostic.
Definition error_reporter.h:243
DiagnosticAction getDefaultWarningDiagnosticAction()
Definition error_reporter.h:248
DiagnosticAction getDefaultInfoDiagnosticAction()
Definition error_reporter.h:256
void setDefaultInfoDiagnosticAction(DiagnosticAction action)
set the default diagnostic action for calls to P4::info().
Definition error_reporter.h:259
Definition node.h:95
Definition ir/configuration.h:24
Definition parser_options.h:111
virtual bool isRecognizedDiagnostic(cstring diagnostic)
Definition parser_options.cpp:542
virtual const P4CConfiguration & getConfigImpl()
Definition parser_options.cpp:548
void setDefaultInfoDiagnosticAction(DiagnosticAction action)
set the default diagnostic action for calls to P4::info().
Definition parser_options.h:133
void setDefaultWarningDiagnosticAction(DiagnosticAction action)
set the default diagnostic action for calls to P4::warning().
Definition parser_options.h:143
void setDiagnosticAction(std::string_view diagnostic, DiagnosticAction action)
Set the action to take for the given diagnostic.
Definition parser_options.h:148
static P4CContext & get()
Definition parser_options.cpp:535
static const P4CConfiguration & getConfig()
Definition parser_options.cpp:537
virtual ParserOptions & options()=0
DiagnosticAction getDefaultWarningDiagnosticAction() final
Definition parser_options.h:138
DiagnosticAction getDefaultInfoDiagnosticAction() final
Definition parser_options.h:128
Definition parser_options.h:167
OptionsType & options() override
Definition parser_options.h:188
static P4CContextWithOptions & get()
Definition parser_options.h:171
Definition parser_options.h:45
cstring compilerVersion
Compiler version.
Definition parser_options.h:78
std::filesystem::path file
file to compile (- for stdin)
Definition parser_options.h:74
bool isv1() const
True if we are compiling a P4 v1.0 or v1.1 program.
Definition parser_options.cpp:473
bool noIncludes
Definition parser_options.h:106
cstring exe_name
Name of executable that is being run.
Definition parser_options.h:68
FrontendVersion langVersion
Which language to compile.
Definition parser_options.h:70
bool doNotCompile
if true preprocess only
Definition parser_options.h:76
void dumpPass(const char *manager, unsigned seq, const char *pass, const IR::Node *node) const
Function that is returned by getDebugHook.
Definition parser_options.cpp:475
bool optimizeParserInlining
If false, optimization of callee parsers (subparsers) inlining is disabled.
Definition parser_options.h:86
bool isAnnotationDisabled(const IR::Annotation *a) const
Check whether this particular annotation was disabled.
Definition parser_options.cpp:520
std::optional< ParserOptions::PreprocessorResult > preprocess() const
Returns the output of the preprocessor.
Definition parser_options.cpp:424
std::vector< const char * > * process(int argc, char *const argv[]) override
Definition parser_options.cpp:397
std::vector< cstring > top4
substrings matched against pass names
Definition parser_options.h:82
std::unique_ptr< FILE, decltype(&closeFile)> PreprocessorResult
Records the result of the preprocessor.
Definition parser_options.h:65
cstring preprocessor_options
options to pass to preprocessor
Definition parser_options.h:72
const char * getIncludePath() const override
Return target specific include path.
Definition parser_options.cpp:411
bool searchForIncludePath(const char *&includePathOut, std::vector< cstring > relativePaths, const char *)
Definition parser_options.cpp:372
bool doNotPreprocess
if true skip preprocess
Definition parser_options.h:80
std::filesystem::path dumpFolder
debugging dumps of programs written in this folder
Definition parser_options.h:84
static void closeFile(FILE *file)
Tries to close the input stream associated with the result.
Definition parser_options.cpp:53
DebugHook getDebugHook() const
Definition parser_options.cpp:529
void setInputFile()
Expect that the only remaining argument is the input file.
Definition parser_options.cpp:343
Definition lib/options.h:34
Definition cstring.h:85
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
bool isSystemFile(cstring file)
Try to guess whether a file is a "system" file.
Definition parser_options.cpp:51
DiagnosticAction
An action to take when a diagnostic message is triggered.
Definition error_reporter.h:37
const char * p4includePath
Definition parser_options.cpp:46
std::function< void(const char *manager, unsigned seqNo, const char *pass, const IR::Node *node)> DebugHook
Definition pass_manager.h:38
static CompileContextType & top()
Definition compile_context.h:48