Date: Tue, 27 Oct 2009 20:40:05 +0000 (UTC) From: Roman Divacky <rdivacky@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r198526 - in projects/clangbsd/contrib/llvm/tools/clang: include/clang/Driver lib/Driver Message-ID: <200910272040.n9RKe5L4041350@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200910272040.n9RKe5L4041350>