diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-26 02:14:07 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-26 02:14:07 +0000 |
commit | 81fe60b7871f9ac5913afa4015dd43db90a6273c (patch) | |
tree | 183502e98931549b5d9f7bdf2c240fba82153767 /clang/lib/Driver | |
parent | cbc693579c444ad9888494c7589aa52563f79ab7 (diff) | |
download | bcm5719-llvm-81fe60b7871f9ac5913afa4015dd43db90a6273c.tar.gz bcm5719-llvm-81fe60b7871f9ac5913afa4015dd43db90a6273c.zip |
Add clang -cc1 parsing for preprocessor options.
llvm-svn: 89917
Diffstat (limited to 'clang/lib/Driver')
-rw-r--r-- | clang/lib/Driver/CC1Options.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/clang/lib/Driver/CC1Options.cpp b/clang/lib/Driver/CC1Options.cpp index 522784745d0..3a5cc548403 100644 --- a/clang/lib/Driver/CC1Options.cpp +++ b/clang/lib/Driver/CC1Options.cpp @@ -13,6 +13,7 @@ #include "clang/Driver/OptTable.h" #include "clang/Driver/Option.h" #include "clang/Frontend/CompilerInvocation.h" +#include "clang/Frontend/PCHReader.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/SmallVector.h" @@ -356,7 +357,7 @@ static void ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args) { static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) { using namespace cc1options; - Opts.Sysroot = getLastArgValue(Args, OPT_isysroot); + Opts.Sysroot = getLastArgValue(Args, OPT_isysroot, "/"); Opts.Verbose = Args.hasArg(OPT_v); Opts.UseStandardIncludes = !Args.hasArg(OPT_nostdinc); Opts.BuiltinIncludePath = ""; @@ -401,6 +402,43 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args) { } static void ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args) { + using namespace cc1options; + Opts.ImplicitPCHInclude = getLastArgValue(Args, OPT_include_pch); + Opts.ImplicitPTHInclude = getLastArgValue(Args, OPT_include_pth); + Opts.TokenCache = getLastArgValue(Args, OPT_token_cache); + Opts.UsePredefines = !Args.hasArg(OPT_undef); + + // Add macros from the command line. + for (arg_iterator it = Args.filtered_begin(OPT_D, OPT_U), + ie = Args.filtered_end(); it != ie; ++it) { + if (it->getOption().matches(OPT_D)) + Opts.addMacroDef(it->getValue(Args)); + else + Opts.addMacroUndef(it->getValue(Args)); + } + + Opts.MacroIncludes = getAllArgValues(Args, OPT_imacros); + + // Add the ordered list of -includes. + for (arg_iterator it = Args.filtered_begin(OPT_include, OPT_include_pch, + OPT_include_pth), + ie = Args.filtered_end(); it != ie; ++it) { + // PCH is handled specially, we need to extra the original include path. + if (it->getOption().matches(OPT_include_pch)) { + // FIXME: Disabled for now, I don't want to incur the cost of linking in + // Sema and all until we are actually going to use it. Alternatively this + // could be factored out somehow. + // PCHReader::getOriginalSourceFile(it->getValue(Args)); + std::string OriginalFile = "FIXME"; + + // FIXME: Don't fail like this. + if (OriginalFile.empty()) + exit(1); + + Opts.Includes.push_back(OriginalFile); + } else + Opts.Includes.push_back(it->getValue(Args)); + } } static void ParsePreprocessorOutputArgs(PreprocessorOutputOptions &Opts, |