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