1 //===-- Options.h -----------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines command line options used by llvm-debuginfo-analyzer.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef OPTIONS_H
14 #define OPTIONS_H
15 
16 #include "llvm/DebugInfo/LogicalView/Core/LVLine.h"
17 #include "llvm/DebugInfo/LogicalView/Core/LVOptions.h"
18 #include "llvm/DebugInfo/LogicalView/Core/LVScope.h"
19 #include "llvm/DebugInfo/LogicalView/Core/LVSymbol.h"
20 #include "llvm/DebugInfo/LogicalView/Core/LVType.h"
21 #include "llvm/Support/CommandLine.h"
22 
23 namespace llvm {
24 namespace logicalview {
25 namespace cmdline {
26 
27 class OffsetParser final : public llvm::cl::parser<unsigned long long> {
28 public:
29   OffsetParser(llvm::cl::Option &O);
30   ~OffsetParser() override;
31 
32   // Parse an argument representing an offset. Return true on error.
33   // If the prefix is 0, the base is octal, if the prefix is 0x or 0X, the
34   // base is hexadecimal, otherwise the base is decimal.
35   bool parse(llvm::cl::Option &O, StringRef ArgName, StringRef ArgValue,
36              unsigned long long &Val);
37 };
38 
39 typedef llvm::cl::list<unsigned long long, bool, OffsetParser> OffsetOptionList;
40 
41 extern llvm::cl::OptionCategory AttributeCategory;
42 extern llvm::cl::OptionCategory CompareCategory;
43 extern llvm::cl::OptionCategory OutputCategory;
44 extern llvm::cl::OptionCategory PrintCategory;
45 extern llvm::cl::OptionCategory ReportCategory;
46 extern llvm::cl::OptionCategory SelectCategory;
47 extern llvm::cl::OptionCategory WarningCategory;
48 extern llvm::cl::OptionCategory InternalCategory;
49 
50 extern llvm::cl::list<std::string> InputFilenames;
51 extern llvm::cl::opt<std::string> OutputFilename;
52 
53 extern llvm::cl::list<std::string> SelectPatterns;
54 
55 extern llvm::cl::list<LVElementKind> SelectElements;
56 extern llvm::cl::list<LVLineKind> SelectLines;
57 extern llvm::cl::list<LVScopeKind> SelectScopes;
58 extern llvm::cl::list<LVSymbolKind> SelectSymbols;
59 extern llvm::cl::list<LVTypeKind> SelectTypes;
60 extern OffsetOptionList SelectOffsets;
61 
62 extern llvm::cl::list<LVAttributeKind> AttributeOptions;
63 extern llvm::cl::list<LVOutputKind> OutputOptions;
64 extern llvm::cl::list<LVPrintKind> PrintOptions;
65 extern llvm::cl::list<LVWarningKind> WarningOptions;
66 extern llvm::cl::list<LVInternalKind> InternalOptions;
67 
68 extern llvm::cl::list<LVCompareKind> CompareElements;
69 extern llvm::cl::list<LVReportKind> ReportOptions;
70 
71 extern LVOptions ReaderOptions;
72 
73 // Perform any additional post parse command line actions. Propagate the
74 // values captured by the command line parser, into the generic reader.
75 void propagateOptions();
76 
77 } // namespace cmdline
78 } // namespace logicalview
79 } // namespace llvm
80 
81 #endif // OPTIONS_H
82