1*5f757f3fSDimitry Andric //===- RemarkUtilHelpers.h ------------------------------------------------===//
2*5f757f3fSDimitry Andric //
3*5f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*5f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*5f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*5f757f3fSDimitry Andric //
7*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
8*5f757f3fSDimitry Andric //
9*5f757f3fSDimitry Andric // Helpers for remark utilites
10*5f757f3fSDimitry Andric //
11*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
12*5f757f3fSDimitry Andric #include "llvm-c/Remarks.h"
13*5f757f3fSDimitry Andric #include "llvm/ADT/StringRef.h"
14*5f757f3fSDimitry Andric #include "llvm/Remarks/Remark.h"
15*5f757f3fSDimitry Andric #include "llvm/Remarks/RemarkFormat.h"
16*5f757f3fSDimitry Andric #include "llvm/Remarks/RemarkParser.h"
17*5f757f3fSDimitry Andric #include "llvm/Remarks/YAMLRemarkSerializer.h"
18*5f757f3fSDimitry Andric #include "llvm/Support/Error.h"
19*5f757f3fSDimitry Andric #include "llvm/Support/FileSystem.h"
20*5f757f3fSDimitry Andric #include "llvm/Support/MemoryBuffer.h"
21*5f757f3fSDimitry Andric #include "llvm/Support/ToolOutputFile.h"
22*5f757f3fSDimitry Andric 
23*5f757f3fSDimitry Andric // Keep input + output help + names consistent across the various modes via a
24*5f757f3fSDimitry Andric // hideous macro.
25*5f757f3fSDimitry Andric #define INPUT_OUTPUT_COMMAND_LINE_OPTIONS(SUBOPT)                              \
26*5f757f3fSDimitry Andric   static cl::opt<std::string> InputFileName(cl::Positional, cl::init("-"),     \
27*5f757f3fSDimitry Andric                                             cl::desc("<input file>"),          \
28*5f757f3fSDimitry Andric                                             cl::sub(SUBOPT));                  \
29*5f757f3fSDimitry Andric   static cl::opt<std::string> OutputFileName(                                  \
30*5f757f3fSDimitry Andric       "o", cl::init("-"), cl::desc("Output"), cl::value_desc("filename"),      \
31*5f757f3fSDimitry Andric       cl::sub(SUBOPT));
32*5f757f3fSDimitry Andric 
33*5f757f3fSDimitry Andric // Keep Input format and names consistent accross the modes via a macro.
34*5f757f3fSDimitry Andric #define INPUT_FORMAT_COMMAND_LINE_OPTIONS(SUBOPT)                              \
35*5f757f3fSDimitry Andric   static cl::opt<Format> InputFormat(                                          \
36*5f757f3fSDimitry Andric       "parser", cl::desc("Input remark format to parse"),                      \
37*5f757f3fSDimitry Andric       cl::values(clEnumValN(Format::YAML, "yaml", "YAML"),                     \
38*5f757f3fSDimitry Andric                  clEnumValN(Format::Bitstream, "bitstream", "Bitstream")),     \
39*5f757f3fSDimitry Andric       cl::sub(SUBOPT));
40*5f757f3fSDimitry Andric 
41*5f757f3fSDimitry Andric #define DEBUG_LOC_INFO_COMMAND_LINE_OPTIONS(SUBOPT)                            \
42*5f757f3fSDimitry Andric   static cl::opt<bool> UseDebugLoc(                                            \
43*5f757f3fSDimitry Andric       "use-debug-loc",                                                         \
44*5f757f3fSDimitry Andric       cl::desc(                                                                \
45*5f757f3fSDimitry Andric           "Add debug loc information when generating tables for "              \
46*5f757f3fSDimitry Andric           "functions. The loc is represented as (path:line number:column "     \
47*5f757f3fSDimitry Andric           "number)"),                                                          \
48*5f757f3fSDimitry Andric       cl::init(false), cl::sub(SUBOPT));
49*5f757f3fSDimitry Andric 
50*5f757f3fSDimitry Andric namespace llvm {
51*5f757f3fSDimitry Andric namespace remarks {
52*5f757f3fSDimitry Andric Expected<std::unique_ptr<MemoryBuffer>>
53*5f757f3fSDimitry Andric getInputMemoryBuffer(StringRef InputFileName);
54*5f757f3fSDimitry Andric Expected<std::unique_ptr<ToolOutputFile>>
55*5f757f3fSDimitry Andric getOutputFileWithFlags(StringRef OutputFileName, sys::fs::OpenFlags Flags);
56*5f757f3fSDimitry Andric Expected<std::unique_ptr<ToolOutputFile>>
57*5f757f3fSDimitry Andric getOutputFileForRemarks(StringRef OutputFileName, Format OutputFormat);
58*5f757f3fSDimitry Andric } // namespace remarks
59*5f757f3fSDimitry Andric } // namespace llvm
60