svn commit: r198526 - in projects/clangbsd/contrib/llvm/tools/clang:
include/clang/Driver lib/Driver
Roman Divacky
rdivacky at FreeBSD.org
Tue Oct 27 20:40:06 UTC 2009
Author: rdivacky
Date: Tue Oct 27 20:40:05 2009
New Revision: 198526
URL: http://svn.freebsd.org/changeset/base/198526
Log:
Implement parts of -B, namely prefixing of library searching that we need
when building 32bit libs on amd64.
Modified:
projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Driver.h
projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.def
projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Driver.cpp
Modified: projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Driver.h
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Driver.h Tue Oct 27 19:37:37 2009 (r198525)
+++ projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Driver.h Tue Oct 27 20:40:05 2009 (r198526)
@@ -111,6 +111,9 @@ private:
std::list<std::string> TempFiles;
std::list<std::string> ResultFiles;
+ /// -B prefix
+ std::string Prefix;
+
public:
Driver(const char *_Name, const char *_Dir,
const char *_DefaultHostTriple,
@@ -191,6 +194,8 @@ public:
/// PrintVersion - Print the driver version.
void PrintVersion(const Compilation &C, llvm::raw_ostream &OS) const;
+ std::string GetPrefix() const;
+
/// GetFilePath - Lookup \arg Name in the list of file search paths.
///
/// \arg TC - The tool chain for additional information on
Modified: projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.def
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.def Tue Oct 27 19:37:37 2009 (r198525)
+++ projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.def Tue Oct 27 20:40:05 2009 (r198526)
@@ -254,7 +254,7 @@ OPTION("--write-dependencies", _write_de
OPTION("--write-user-dependencies", _write_user_dependencies, Flag, INVALID, MMD, "", 0, 0, 0)
OPTION("--", _, Joined, INVALID, f, "u", 0, 0, 0)
OPTION("-A", A, JoinedOrSeparate, INVALID, INVALID, "", 0, 0, 0)
-OPTION("-B", B, JoinedOrSeparate, INVALID, INVALID, "u", 0, 0, 0)
+OPTION("-B", B, JoinedOrSeparate, INVALID, INVALID, "", 0, 0, 0)
OPTION("-CC", CC, Flag, INVALID, INVALID, "", 0, 0, 0)
OPTION("-C", C, Flag, INVALID, INVALID, "", 0, 0, 0)
OPTION("-D", D, JoinedOrSeparate, INVALID, INVALID, "", 0, 0, 0)
Modified: projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Driver.cpp
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Driver.cpp Tue Oct 27 19:37:37 2009 (r198525)
+++ projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Driver.cpp Tue Oct 27 20:40:05 2009 (r198526)
@@ -219,6 +219,14 @@ Compilation *Driver::BuildCompilation(in
if (!HandleImmediateArgs(*C))
return C;
+ // HACK
+ if (C->getArgs().hasArg(options::OPT_B)) {
+ Arg *B_dir = C->getArgs().getLastArg(options::OPT_B);
+ Prefix = B_dir->getValue(C->getArgs());
+ } else {
+ Prefix = "";
+ }
+
// Construct the list of abstract actions to perform for this compilation. We
// avoid passing a Compilation here simply to enforce the abstraction that
// pipelining is not host or toolchain dependent (other than the driver driver
@@ -1130,6 +1138,10 @@ void Driver::BuildJobsForAction(Compilat
}
}
+std::string Driver::GetPrefix() const {
+ return Prefix;
+}
+
const char *Driver::GetNamedOutputPath(Compilation &C,
const JobAction &JA,
const char *BaseInput,
@@ -1183,6 +1195,12 @@ const char *Driver::GetNamedOutputPath(C
std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {
const ToolChain::path_list &List = TC.getFilePaths();
+ if (!Prefix.empty()) {
+ llvm::sys::Path P(Prefix);
+ P.appendComponent(Name);
+ if (P.exists())
+ return P.str();
+ }
for (ToolChain::path_list::const_iterator
it = List.begin(), ie = List.end(); it != ie; ++it) {
llvm::sys::Path P(*it);
@@ -1197,6 +1215,12 @@ std::string Driver::GetFilePath(const ch
std::string Driver::GetProgramPath(const char *Name, const ToolChain &TC,
bool WantFile) const {
const ToolChain::path_list &List = TC.getProgramPaths();
+ if (!Prefix.empty()) {
+ llvm::sys::Path P(Prefix);
+ P.appendComponent(Name);
+ if (WantFile ? P.exists() : P.canExecute())
+ return P.str();
+ }
for (ToolChain::path_list::const_iterator
it = List.begin(), ie = List.end(); it != ie; ++it) {
llvm::sys::Path P(*it);
More information about the svn-src-projects
mailing list