summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvmc/CompilerDriver.cpp
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2004-08-14 09:37:15 +0000
committerReid Spencer <rspencer@reidspencer.com>2004-08-14 09:37:15 +0000
commit9d68ff6ef0e5de0356fb627b3b029fb5158788b8 (patch)
tree3c394f433a41ea004990885ddf857b59ac476c62 /llvm/tools/llvmc/CompilerDriver.cpp
parente37345e78fd2e7e6af9191c03f7c44fae9d00673 (diff)
downloadbcm5719-llvm-9d68ff6ef0e5de0356fb627b3b029fb5158788b8.tar.gz
bcm5719-llvm-9d68ff6ef0e5de0356fb627b3b029fb5158788b8.zip
Converted to use flex for tokenizing input so we can use an easier to
understand recursive descent parser, we can easily handle more syntax variety, and we can more easily change the configuration items accepted. llvm-svn: 15732
Diffstat (limited to 'llvm/tools/llvmc/CompilerDriver.cpp')
-rw-r--r--llvm/tools/llvmc/CompilerDriver.cpp48
1 files changed, 36 insertions, 12 deletions
diff --git a/llvm/tools/llvmc/CompilerDriver.cpp b/llvm/tools/llvmc/CompilerDriver.cpp
index f1d3e58bad9..ff63b2100ed 100644
--- a/llvm/tools/llvmc/CompilerDriver.cpp
+++ b/llvm/tools/llvmc/CompilerDriver.cpp
@@ -29,8 +29,38 @@ namespace {
if ( dotpos = std::string::npos ) return "";
return fullName.substr(dotpos+1);
}
+
const char OutputSuffix[] = ".o";
+ void WriteAction(CompilerDriver::Action* a) {
+ std::cerr << a->program;
+ std::vector<std::string>::iterator I = a->args.begin();
+ while (I != a->args.end()) {
+ std::cerr << " " + *I;
+ ++I;
+ }
+ std::cerr << "\n";
+ }
+
+ void DumpConfigData(CompilerDriver::ConfigData* cd, const std::string& type ){
+ std::cerr << "Configuration Data For '" << cd->langName << "' (" << type
+ << ")\n";
+ std::cerr << "translator.preprocesses=" << cd->TranslatorPreprocesses
+ << "\n";
+ std::cerr << "translator.groks_dash_O=" << cd->TranslatorGroksDashO << "\n";
+ std::cerr << "translator.optimizes=" << cd->TranslatorOptimizes << "\n";
+ std::cerr << "preprocessor.needed=" << cd->PreprocessorNeeded << "\n";
+ std::cerr << "PreProcessor: ";
+ WriteAction(&cd->PreProcessor);
+ std::cerr << "Translator: ";
+ WriteAction(&cd->Translator);
+ std::cerr << "Optimizer: ";
+ WriteAction(&cd->Optimizer);
+ std::cerr << "Assembler: ";
+ WriteAction(&cd->Assembler);
+ std::cerr << "Linker: ";
+ WriteAction(&cd->Linker);
+ }
}
@@ -80,21 +110,13 @@ CompilerDriver::Action* CompilerDriver::GetAction(ConfigData* cd,
}
assert(pat != 0 && "Invalid command pattern");
Action* a = new Action(*pat);
- a->args[pat->inputAt] = input;
- a->args[pat->outputAt] = output;
+ if (pat->inputAt < a->args.size())
+ a->args[pat->inputAt] = input;
+ if (pat->outputAt < a->args.size())
+ a->args[pat->outputAt] = output;
return a;
}
-void CompilerDriver::WriteAction(Action* a) {
- std::cerr << a->program;
- std::vector<std::string>::iterator I = a->args.begin();
- while (I != a->args.end()) {
- std::cerr << " " + *I;
- ++I;
- }
- std::cerr << "\n";
-}
-
void CompilerDriver::DoAction(Action*a)
{
if (isVerbose)
@@ -170,6 +192,8 @@ int CompilerDriver::execute(const InputList& InpList,
if (cd == 0)
error(std::string("Files of type '") + I->second +
"' are not recognized." );
+ if (isDebug)
+ DumpConfigData(cd,I->second);
// We have valid configuration data, now figure out where the output
// of compilation should end up.
OpenPOWER on IntegriCloud