aboutsummaryrefslogtreecommitdiff
path: root/tools/llvmc/CompilerDriver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/llvmc/CompilerDriver.cpp')
-rw-r--r--tools/llvmc/CompilerDriver.cpp48
1 files changed, 36 insertions, 12 deletions
diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp
index f1d3e58bad..ff63b2100e 100644
--- a/tools/llvmc/CompilerDriver.cpp
+++ b/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.