aboutsummaryrefslogtreecommitdiffstats
path: root/tools/llvmc
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-08-16 20:31:44 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-08-16 20:31:44 +0000
commit3b4c5d72e0e7eaf40a7a0d54d2cd8f07435f705f (patch)
treeafc7523fcf01e8eeaaa06d94d19508f33734ebde /tools/llvmc
parentec46ea34dcc615558294e9e0dbd0dd0f2894f574 (diff)
downloadexternal_llvm-3b4c5d72e0e7eaf40a7a0d54d2cd8f07435f705f.zip
external_llvm-3b4c5d72e0e7eaf40a7a0d54d2cd8f07435f705f.tar.gz
external_llvm-3b4c5d72e0e7eaf40a7a0d54d2cd8f07435f705f.tar.bz2
Patches to correct several bugs in llvmc.
Patches contributed by Bram Adams. Thanks Bram. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29729 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvmc')
-rw-r--r--tools/llvmc/CompilerDriver.cpp53
-rw-r--r--tools/llvmc/Configuration.cpp7
-rw-r--r--tools/llvmc/Makefile2
-rw-r--r--tools/llvmc/c3
4 files changed, 58 insertions, 7 deletions
diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp
index 82dc547..64232f3 100644
--- a/tools/llvmc/CompilerDriver.cpp
+++ b/tools/llvmc/CompilerDriver.cpp
@@ -227,9 +227,54 @@ private:
assert(pat != 0 && "Invalid command pattern");
// Copy over some pattern things that don't need to change
- action->program = pat->program;
action->flags = pat->flags;
+ // See if program starts with wildcard...
+ std::string programName=pat->program.toString();
+ if (programName[0] == '%' && programName.length() >2) {
+ switch(programName[1]){
+ case 'b':
+ if (programName.substr(0,8) == "%bindir%") {
+ std::string tmp(LLVM_BINDIR);
+ tmp.append(programName.substr(8));
+ pat->program.set(tmp);
+ }
+ break;
+ case 'l':
+ if (programName.substr(0,12) == "%llvmgccdir%"){
+ std::string tmp(LLVMGCCDIR);
+ tmp.append(programName.substr(12));
+ pat->program.set(tmp);
+ }else if (programName.substr(0,13) == "%llvmgccarch%"){
+ std::string tmp(LLVMGCCARCH);
+ tmp.append(programName.substr(13));
+ pat->program.set(tmp);
+ }else if (programName.substr(0,9) == "%llvmgcc%"){
+ std::string tmp(LLVMGCC);
+ tmp.append(programName.substr(9));
+ pat->program.set(tmp);
+ }else if (programName.substr(0,9) == "%llvmgxx%"){
+ std::string tmp(LLVMGXX);
+ tmp.append(programName.substr(9));
+ pat->program.set(tmp);
+ }else if (programName.substr(0,9) == "%llvmcc1%"){
+ std::string tmp(LLVMCC1);
+ tmp.append(programName.substr(9));
+ pat->program.set(tmp);
+ }else if (programName.substr(0,13) == "%llvmcc1plus%"){
+ std::string tmp(LLVMCC1PLUS);
+ tmp.append(programName.substr(13));
+ pat->program.set(tmp);
+ }else if (programName.substr(0,8) == "%libdir%") {
+ std::string tmp(LLVM_LIBDIR);
+ tmp.append(programName.substr(8));
+ pat->program.set(tmp);
+ }
+ break;
+ }
+ }
+ action->program = pat->program;
+
// Do the substitutions from the pattern to the actual
StringVector::iterator PI = pat->args.begin();
StringVector::iterator PE = pat->args.end();
@@ -426,9 +471,9 @@ private:
const char** Args = (const char**)
alloca(sizeof(const char*)*(action->args.size()+2));
Args[0] = action->program.toString().c_str();
- for (unsigned i = 1; i != action->args.size(); ++i)
- Args[i] = action->args[i].c_str();
- Args[action->args.size()] = 0; // null terminate list.
+ for (unsigned i = 1; i <= action->args.size(); ++i)
+ Args[i] = action->args[i-1].c_str();
+ Args[action->args.size()+1] = 0; // null terminate list.
if (isSet(TIME_ACTIONS_FLAG)) {
Timer timer(action->program.toString());
timer.startTimer();
diff --git a/tools/llvmc/Configuration.cpp b/tools/llvmc/Configuration.cpp
index ba3c93c..1364e9b 100644
--- a/tools/llvmc/Configuration.cpp
+++ b/tools/llvmc/Configuration.cpp
@@ -116,6 +116,8 @@ namespace {
result.clear();
while (next_is_real()) {
switch (token ) {
+ case LLVMGCCDIR_SUBST:
+ case LLVMGCCARCH_SUBST:
case STRING :
case OPTION :
result += ConfigLexerState.StringVal;
@@ -260,6 +262,11 @@ namespace {
str.clear();
do {
switch (token) {
+ case BINDIR_SUBST:
+ case LLVMGCC_SUBST:
+ case LLVMGXX_SUBST:
+ case LLVMCC1_SUBST:
+ case LLVMCC1PLUS_SUBST:
case OPTION:
case STRING:
case ARGS_SUBST:
diff --git a/tools/llvmc/Makefile b/tools/llvmc/Makefile
index 0e63d13..2ccf85a 100644
--- a/tools/llvmc/Makefile
+++ b/tools/llvmc/Makefile
@@ -24,7 +24,7 @@ CPPFLAGS = -DLLVMGCCDIR="\"$(LLVMGCCDIR)\"" \
-DLLVMGCC="\"$(LLVMGCC)\"" \
-DLLVMGXX="\"$(LLVMGXX)\"" \
-DLLVMCC1="\"$(LLVMCC1)\"" \
- -DLLVMCC1PLUS="$(LLVMCC1PLUS)"
+ -DLLVMCC1PLUS="\"$(LLVMCC1PLUS)\""
include $(LEVEL)/Makefile.common
diff --git a/tools/llvmc/c b/tools/llvmc/c
index cbe6830..1f7d48e 100644
--- a/tools/llvmc/c
+++ b/tools/llvmc/c
@@ -9,8 +9,7 @@
lang.opt3=-O3
lang.opt4=-O3
lang.opt5=-O3
- lang.libs=%llvmgccdir%/lib %llvmgccdir%/lib \
- %llvmgccdir%/lib/gcc/%llvmgccarch%
+ lang.libs=%llvmgccdir%/lib %llvmgccdir%/lib %llvmgccdir%/lib/gcc/%llvmgccarch%
##########################################################
# Pre-processor definitions