forked from OSchip/llvm-project
Add PreprocessorOutputOptions to CompilerInvocation, and move initialization to
clang-cc/Options.cpp llvm-svn: 86828
This commit is contained in:
parent
531f6c662b
commit
22bdabf05f
|
@ -15,6 +15,7 @@
|
|||
#include "clang/Frontend/DiagnosticOptions.h"
|
||||
#include "clang/Frontend/HeaderSearchOptions.h"
|
||||
#include "clang/Frontend/PreprocessorOptions.h"
|
||||
#include "clang/Frontend/PreprocessorOutputOptions.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include <string>
|
||||
|
||||
|
@ -42,13 +43,13 @@ class CompilerInvocation {
|
|||
/// Options controlling the preprocessor (aside from #include handling).
|
||||
PreprocessorOptions PreprocessorOpts;
|
||||
|
||||
/// Options controlling preprocessed output.
|
||||
PreprocessorOutputOptions PreprocessorOutputOpts;
|
||||
|
||||
/// The location for the output file. This is optional only for compiler
|
||||
/// invocations which have no output.
|
||||
std::string OutputFile;
|
||||
|
||||
/// Set of target-specific code generation features to enable/disable.
|
||||
llvm::StringMap<bool> TargetFeatures;
|
||||
|
||||
public:
|
||||
CompilerInvocation() {}
|
||||
|
||||
|
@ -58,11 +59,6 @@ public:
|
|||
std::string &getOutputFile() { return OutputFile; }
|
||||
const std::string &getOutputFile() const { return OutputFile; }
|
||||
|
||||
llvm::StringMap<bool> &getTargetFeatures() { return TargetFeatures; }
|
||||
const llvm::StringMap<bool> &getTargetFeatures() const {
|
||||
return TargetFeatures;
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name Option Subgroups
|
||||
/// @{
|
||||
|
@ -88,6 +84,13 @@ public:
|
|||
return PreprocessorOpts;
|
||||
}
|
||||
|
||||
PreprocessorOutputOptions &getPreprocessorOutputOpts() {
|
||||
return PreprocessorOutputOpts;
|
||||
}
|
||||
const PreprocessorOutputOptions &getPreprocessorOutputOpts() const {
|
||||
return PreprocessorOutputOpts;
|
||||
}
|
||||
|
||||
/// @}
|
||||
};
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ bool ProcessWarningOptions(Diagnostic &Diags,
|
|||
|
||||
/// DoPrintPreprocessedInput - Implement -E mode.
|
||||
void DoPrintPreprocessedInput(Preprocessor &PP, llvm::raw_ostream* OS,
|
||||
PreprocessorOutputOptions &Opts);
|
||||
const PreprocessorOutputOptions &Opts);
|
||||
|
||||
/// RewriteMacrosInInput - Implement -rewrite-macros mode.
|
||||
void RewriteMacrosInInput(Preprocessor &PP, llvm::raw_ostream* OS);
|
||||
|
|
|
@ -468,7 +468,7 @@ static void DoPrintMacros(Preprocessor &PP, llvm::raw_ostream *OS) {
|
|||
/// DoPrintPreprocessedInput - This implements -E mode.
|
||||
///
|
||||
void clang::DoPrintPreprocessedInput(Preprocessor &PP, llvm::raw_ostream *OS,
|
||||
PreprocessorOutputOptions &Opts) {
|
||||
const PreprocessorOutputOptions &Opts) {
|
||||
// Show macros with no output is handled specially.
|
||||
if (!Opts.ShowCPP) {
|
||||
assert(Opts.ShowMacros && "Not yet implemented!");
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "clang/Frontend/HeaderSearchOptions.h"
|
||||
#include "clang/Frontend/PCHReader.h"
|
||||
#include "clang/Frontend/PreprocessorOptions.h"
|
||||
#include "clang/Frontend/PreprocessorOutputOptions.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
@ -526,6 +527,31 @@ isysroot("isysroot", llvm::cl::value_desc("dir"), llvm::cl::init("/"),
|
|||
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Preprocessed Output Options
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
namespace preprocessoroutputoptions {
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
DisableLineMarkers("P", llvm::cl::desc("Disable linemarker output in -E mode"));
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
EnableCommentOutput("C", llvm::cl::desc("Enable comment output in -E mode"));
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
EnableMacroCommentOutput("CC",
|
||||
llvm::cl::desc("Enable comment output in -E mode, "
|
||||
"even from macro expansions"));
|
||||
static llvm::cl::opt<bool>
|
||||
DumpMacros("dM", llvm::cl::desc("Print macro definitions in -E mode instead of"
|
||||
" normal output"));
|
||||
static llvm::cl::opt<bool>
|
||||
DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
|
||||
"addition to normal output"));
|
||||
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Option Object Construction
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -1010,3 +1036,15 @@ void clang::InitializeLangOptions(LangOptions &Options, LangKind LK,
|
|||
|
||||
Target.setForcedLangOptions(Options);
|
||||
}
|
||||
|
||||
void
|
||||
clang::InitializePreprocessorOutputOptions(PreprocessorOutputOptions &Opts) {
|
||||
using namespace preprocessoroutputoptions;
|
||||
|
||||
Opts.ShowCPP = !DumpMacros;
|
||||
Opts.ShowMacros = DumpMacros || DumpDefines;
|
||||
Opts.ShowLineMarkers = !DisableLineMarkers;
|
||||
Opts.ShowComments = EnableCommentOutput;
|
||||
Opts.ShowMacroComments = EnableMacroCommentOutput;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ class DiagnosticOptions;
|
|||
class HeaderSearchOptions;
|
||||
class LangOptions;
|
||||
class PreprocessorOptions;
|
||||
class PreprocessorOutputOptions;
|
||||
class TargetInfo;
|
||||
|
||||
enum LangKind {
|
||||
|
@ -55,6 +56,8 @@ void InitializeLangOptions(LangOptions &Options, LangKind LK,
|
|||
|
||||
void InitializePreprocessorOptions(PreprocessorOptions &Opts);
|
||||
|
||||
void InitializePreprocessorOutputOptions(PreprocessorOutputOptions &Opts);
|
||||
|
||||
} // end namespace clang
|
||||
|
||||
#endif
|
||||
|
|
|
@ -454,27 +454,10 @@ static llvm::cl::opt<bool> OptPedantic("pedantic");
|
|||
static llvm::cl::opt<bool> OptPedanticErrors("pedantic-errors");
|
||||
static llvm::cl::opt<bool> OptNoWarnings("w");
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Preprocessing (-E mode) Options
|
||||
//===----------------------------------------------------------------------===//
|
||||
static llvm::cl::opt<bool>
|
||||
DisableLineMarkers("P", llvm::cl::desc("Disable linemarker output in -E mode"));
|
||||
static llvm::cl::opt<bool>
|
||||
EnableCommentOutput("C", llvm::cl::desc("Enable comment output in -E mode"));
|
||||
static llvm::cl::opt<bool>
|
||||
EnableMacroCommentOutput("CC",
|
||||
llvm::cl::desc("Enable comment output in -E mode, "
|
||||
"even from macro expansions"));
|
||||
static llvm::cl::opt<bool>
|
||||
DumpMacros("dM", llvm::cl::desc("Print macro definitions in -E mode instead of"
|
||||
" normal output"));
|
||||
static llvm::cl::opt<bool>
|
||||
DumpDefines("dD", llvm::cl::desc("Print macro definitions in -E mode in "
|
||||
"addition to normal output"));
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Dependency file options
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static llvm::cl::opt<std::string>
|
||||
DependencyFile("dependency-file",
|
||||
llvm::cl::desc("Filename (or -) to write dependency output to"));
|
||||
|
@ -920,13 +903,8 @@ static void ProcessInputFile(const CompilerInvocation &CompOpts,
|
|||
|
||||
case PrintPreprocessedInput: {
|
||||
llvm::TimeRegion Timer(ClangFrontendTimer);
|
||||
PreprocessorOutputOptions Opts;
|
||||
Opts.ShowCPP = !DumpMacros;
|
||||
Opts.ShowMacros = DumpMacros || DumpDefines;
|
||||
Opts.ShowLineMarkers = !DisableLineMarkers;
|
||||
Opts.ShowComments = EnableCommentOutput;
|
||||
Opts.ShowMacroComments = EnableMacroCommentOutput;
|
||||
DoPrintPreprocessedInput(PP, OS.get(), Opts);
|
||||
DoPrintPreprocessedInput(PP, OS.get(),
|
||||
CompOpts.getPreprocessorOutputOpts());
|
||||
ClearSourceMgr = true;
|
||||
}
|
||||
|
||||
|
@ -1123,6 +1101,9 @@ static void ConstructCompilerInvocation(CompilerInvocation &Opts,
|
|||
// Initialize the other preprocessor options.
|
||||
InitializePreprocessorOptions(Opts.getPreprocessorOpts());
|
||||
|
||||
// Initialize the preprocessed output options.
|
||||
InitializePreprocessorOutputOptions(Opts.getPreprocessorOutputOpts());
|
||||
|
||||
// Finalize some code generation options.
|
||||
FinalizeCompileOptions(Opts.getCompileOpts(), Opts.getLangOpts());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue