[cfe-commits] r118150 - in /cfe/trunk: include/clang/Driver/Options.td lib/Driver/ToolChains.cpp lib/Driver/ToolChains.h lib/Driver/Tools.cpp lib/Driver/Tools.h
Rafael Espindola
rafael.espindola at gmail.com
Tue Nov 2 21:43:56 PDT 2010
Author: rafael
Date: Tue Nov 2 23:43:56 2010
New Revision: 118150
URL: http://llvm.org/viewvc/llvm-project?rev=118150&view=rev
Log:
Revert while I debug test failures :-(
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Driver/ToolChains.cpp
cfe/trunk/lib/Driver/ToolChains.h
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/lib/Driver/Tools.h
Modified: cfe/trunk/include/clang/Driver/Options.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=118150&r1=118149&r2=118150&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Tue Nov 2 23:43:56 2010
@@ -610,7 +610,6 @@
def undef : Flag<"-undef">, Group<u_Group>;
def unexported__symbols__list : Separate<"-unexported_symbols_list">;
def u : JoinedOrSeparate<"-u">, Group<u_Group>;
-def use_gold_plugin : Flag<"-use-gold-plugin">;
def v : Flag<"-v">,
HelpText<"Show commands to run and use verbose output">;
def weak_l : Joined<"-weak-l">, Flags<[LinkerInput]>;
Modified: cfe/trunk/lib/Driver/ToolChains.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=118150&r1=118149&r2=118150&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains.cpp Tue Nov 2 23:43:56 2010
@@ -23,7 +23,6 @@
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Path.h"
@@ -1178,338 +1177,28 @@
/// Linux toolchain (very bare-bones at the moment).
-enum LinuxDistro {
- DebianLennyAmd64,
- DebianLennyi386,
- DebianSqueezeAmd64,
- DebianSqueezei386,
- DebianSqueezeArm,
- Fedora13X86_64,
- Fedora13i686,
- Fedora14X86_64,
- Fedora14i686,
- OpenSuse11_3X86_64,
- OpenSuse11_3i686,
- UbuntuLucidAmd64,
- UbuntuLucidi386,
- UbuntuMaverickAmd64,
- UbuntuMavericki386,
- UnknownDistro
-};
-
-static bool IsFedora13(enum LinuxDistro Distro) {
- return Distro == Fedora13X86_64 || Distro == Fedora13i686;
-}
-
-static bool IsFedora14(enum LinuxDistro Distro) {
- return Distro == Fedora14X86_64 || Distro == Fedora14i686;
-}
-
-static bool IsFedora(enum LinuxDistro Distro) {
- return IsFedora13(Distro) || IsFedora14(Distro);
-}
-
-static bool IsOpenSuse(enum LinuxDistro Distro) {
- return Distro == OpenSuse11_3X86_64 || Distro == OpenSuse11_3i686;
-}
-
-static bool IsUbuntuLucid(enum LinuxDistro Distro) {
- return Distro == UbuntuLucidi386 || Distro == UbuntuLucidAmd64;
-}
-
-static bool IsUbuntuMaveric(enum LinuxDistro Distro) {
- return Distro == UbuntuMavericki386 || Distro == UbuntuMaverickAmd64;
-}
-
-static bool IsDebianLenny(enum LinuxDistro Distro) {
- return Distro == DebianLennyAmd64 || Distro == DebianLennyi386;
-}
-
-static bool IsDebianSqueeze(enum LinuxDistro Distro) {
- return Distro == DebianSqueezeAmd64 ||
- Distro == DebianSqueezei386 ||
- Distro == DebianSqueezeArm;
-}
-
-static bool IsDebian(enum LinuxDistro Distro) {
- return IsDebianLenny(Distro) || IsDebianSqueeze(Distro);
-}
-
-static bool IsUbuntu(enum LinuxDistro Distro) {
- return IsUbuntuMaveric(Distro) || IsUbuntuLucid(Distro);
-}
-
-static bool IsDebianBased(enum LinuxDistro Distro) {
- return IsDebian(Distro) || IsUbuntu(Distro);
-}
-
-static bool IsArm(enum LinuxDistro Distro) {
- return Distro == DebianSqueezeArm;
-}
-
-static bool IsX86_64(enum LinuxDistro Distro) {
- switch (Distro) {
- default:
- return false;
- case DebianLennyAmd64:
- case DebianSqueezeAmd64:
- case Fedora13X86_64:
- case Fedora14X86_64:
- case OpenSuse11_3X86_64:
- case UbuntuLucidAmd64:
- case UbuntuMaverickAmd64:
- return true;
- }
-}
-
-static bool IsX86(enum LinuxDistro Distro) {
- return !IsArm(Distro) && !IsX86_64(Distro);
-}
-
-static bool HasMultilib(enum LinuxDistro Distro) {
- if (IsX86_64(Distro))
- return true;
- if (IsArm(Distro))
- return false;
- if (IsDebianBased(Distro))
- return true;
- return false;
-}
-
-static LinuxDistro DetectLinuxDistro( llvm::Triple::ArchType Arch) {
- llvm::OwningPtr<const llvm::MemoryBuffer>
- LsbRelease(llvm::MemoryBuffer::getFile("/etc/lsb-release"));
- if (LsbRelease) {
- llvm::StringRef Data = LsbRelease.get()->getBuffer();
- llvm::SmallVector<llvm::StringRef, 8> Lines;
- Data.split(Lines, "\n");
- for (unsigned int i = 0, s = Lines.size(); i < s; ++ i) {
- if (Lines[i] == "DISTRIB_CODENAME=maverick") {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::x86:
- return UbuntuMavericki386;
- case llvm::Triple::x86_64:
- return UbuntuMaverickAmd64;
- }
- }
- if (Lines[i] == "DISTRIB_CODENAME=lucid") {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::x86:
- return UbuntuLucidi386;
- case llvm::Triple::x86_64:
- return UbuntuLucidAmd64;
- }
- }
- }
- return UnknownDistro;
- }
-
- llvm::OwningPtr<const llvm::MemoryBuffer>
- RHRelease(llvm::MemoryBuffer::getFile("/etc/redhat-release"));
- if (RHRelease) {
- llvm::StringRef Data = RHRelease.get()->getBuffer();
- if (Data.startswith("Fedora release 14 (Laughlin)")) {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::x86:
- return Fedora14i686;
- case llvm::Triple::x86_64:
- return Fedora14X86_64;
- }
- }
-
- if (Data.startswith("Fedora release 13 (Goddard)")) {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::x86:
- return Fedora13i686;
- case llvm::Triple::x86_64:
- return Fedora13X86_64;
- }
- }
- return UnknownDistro;
- }
-
- llvm::OwningPtr<const llvm::MemoryBuffer>
- DebianVersion(llvm::MemoryBuffer::getFile("/etc/debian_version"));
- if (DebianVersion) {
- llvm::StringRef Data = DebianVersion.get()->getBuffer();
- if (Data[0] == '5') {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::x86:
- return DebianLennyi386;
- case llvm::Triple::x86_64:
- return DebianLennyAmd64;
- }
- } else if (Data.startswith("squeeze/sid")) {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::arm:
- return DebianSqueezeArm;
- case llvm::Triple::x86:
- return DebianSqueezei386;
- case llvm::Triple::x86_64:
- return DebianSqueezeAmd64;
- }
- }
- return UnknownDistro;
- }
-
- llvm::OwningPtr<const llvm::MemoryBuffer>
- SuseRelease(llvm::MemoryBuffer::getFile("/etc/SuSE-release"));
- if (SuseRelease) {
- llvm::StringRef Data = SuseRelease.get()->getBuffer();
- if (Data.startswith("openSUSE 11.3")) {
- switch (Arch) {
- default:
- return UnknownDistro;
- case llvm::Triple::x86:
- return OpenSuse11_3i686;
- case llvm::Triple::x86_64:
- return OpenSuse11_3X86_64;
- }
- }
- return UnknownDistro;
- }
-
- return UnknownDistro;
-}
-
Linux::Linux(const HostInfo &Host, const llvm::Triple& Triple)
: Generic_ELF(Host, Triple) {
-
- std::string Lib32 = "lib";
- std::string Lib64 = "lib";
- std::string Suffix32 = "";
- std::string Suffix64 = "";
- std::string Base = "";
- std::string GccTriple = "";
-
- llvm::Triple::ArchType Arch =
- llvm::Triple(getDriver().DefaultHostTriple).getArch();
- LinuxDistro Distro = DetectLinuxDistro(Arch);
-
- if (Distro == UnknownDistro)
- llvm::report_fatal_error("Unknown linux distribution.");
-
- if (IsUbuntu(Distro))
- ExtraOpts.push_back("-z relro");
-
- if (IsArm(Distro))
- ExtraOpts.push_back("-X");
-
- if (IsFedora(Distro) || IsUbuntuMaveric(Distro))
- ExtraOpts.push_back("--hash-style=gnu");
-
- if (IsDebian(Distro) || IsUbuntuLucid(Distro))
- ExtraOpts.push_back("--hash-style=both");
-
- if (IsX86_64(Distro))
- Suffix32 = "/32";
-
- if (IsX86(Distro))
- Suffix64 = "/64";
-
- if (IsDebianBased(Distro) && IsX86_64(Distro))
- Lib32 = "lib32";
-
- if ((IsDebianBased(Distro) && IsX86(Distro)) ||
- IsFedora(Distro) || IsOpenSuse(Distro))
- Lib64 = "lib64";
-
- if (IsFedora(Distro))
- ExtraOpts.push_back("--no-add-needed");
-
- if (IsDebianSqueeze(Distro) || IsUbuntu(Distro) || IsOpenSuse(Distro) ||
- IsFedora(Distro))
- ExtraOpts.push_back("--build-id");
-
- if (IsArm(Distro)) {
- if (IsDebianBased(Distro))
- GccTriple = "arm-linux-gnueabi";
- } else if (IsX86_64(Distro)) {
- if (IsDebianBased(Distro))
- GccTriple = "x86_64-linux-gnu";
- else if (IsFedora(Distro))
- GccTriple = "x86_64-redhat-linux";
- else if (IsOpenSuse(Distro))
- GccTriple = "x86_64-suse-linux";
- } else if (IsX86(Distro)) {
- if (Distro == UbuntuMavericki386)
- GccTriple = "i686-linux-gnu";
- else if (IsDebianBased(Distro))
- GccTriple = "i486-linux-gnu";
- if (IsFedora(Distro))
- GccTriple = "i686-redhat-linux";
- if (IsOpenSuse(Distro))
- GccTriple = "i586-suse-linux";
- }
-
- if (IsDebianLenny(Distro))
- Base = "/usr/lib/gcc/" + GccTriple +"/4.3.2";
- if (IsDebianSqueeze(Distro) || IsUbuntuMaveric(Distro))
- Base = "/usr/lib/gcc/" + GccTriple +"/4.4.5";
- if (IsUbuntuLucid(Distro))
- Base = "/usr/lib/gcc/" + GccTriple +"/4.4.3";
- if (IsFedora13(Distro))
- Base = "/usr/lib/gcc/" + GccTriple +"/4.4.4";
- if (IsFedora14(Distro))
- Base = "/usr/lib/gcc/" + GccTriple +"/4.5.1";
- if (IsOpenSuse(Distro) && IsX86_64(Distro))
- Base = "/usr/lib64/gcc/" + GccTriple + "/4.5";
- if (IsOpenSuse(Distro) && IsX86(Distro))
- Base = "/usr/lib/gcc/" + GccTriple + "/4.5";
-
- path_list &Paths = getFilePaths();
- bool Is32Bits = getArch() == llvm::Triple::x86;
-
- std::string Suffix;
- std::string Lib;
-
- if (Is32Bits) {
- Suffix = Suffix32;
- Lib = Lib32;
- } else {
- Suffix = Suffix64;
- Lib = Lib64;
- }
-
- llvm::sys::Path LinkerPath(Base + "/../../../../" + GccTriple + "/bin/ld");
- if (LinkerPath.exists())
- Linker = LinkerPath.str();
- else
- Linker = GetProgramPath("ld");
-
- Paths.push_back(Base + Suffix);
- if (HasMultilib(Distro)) {
- if (IsOpenSuse(Distro) && Is32Bits)
- Paths.push_back(Base + "/../../../../" + GccTriple + "/lib/../lib");
- Paths.push_back(Base + "/../../../../" + Lib);
- Paths.push_back("/lib/../" + Lib);
- Paths.push_back("/usr/lib/../" + Lib);
- }
- if (!Suffix.empty())
- Paths.push_back(Base);
- if (IsOpenSuse(Distro))
- Paths.push_back(Base + "/../../../../" + GccTriple + "/lib");
- Paths.push_back(Base + "/../../..");
- bool IsNative = (Is32Bits && IsX86(Distro)) ||
- (!Is32Bits && IsX86_64(Distro));
- if (IsNative && IsUbuntu(Distro))
- Paths.push_back("/usr/lib/" + GccTriple);
-}
-
-bool Linux::HasNativeLLVMSupport() const {
- return true;
+ getFilePaths().push_back(getDriver().Dir +
+ "/../lib/clang/" CLANG_VERSION_STRING "/");
+ getFilePaths().push_back("/lib/");
+ getFilePaths().push_back("/usr/lib/");
+
+ // Depending on the Linux distribution, any combination of lib{,32,64} is
+ // possible. E.g. Debian uses lib and lib32 for mixed i386/x86-64 systems,
+ // openSUSE uses lib and lib64 for the same purpose.
+ getFilePaths().push_back("/lib32/");
+ getFilePaths().push_back("/usr/lib32/");
+ getFilePaths().push_back("/lib64/");
+ getFilePaths().push_back("/usr/lib64/");
+
+ // FIXME: Figure out some way to get gcc's libdir
+ // (e.g. /usr/lib/gcc/i486-linux-gnu/4.3/ for Ubuntu 32-bit); we need
+ // crtbegin.o/crtend.o/etc., and want static versions of various
+ // libraries. If we had our own crtbegin.o/crtend.o/etc, we could probably
+ // get away with using shared versions in /usr/lib, though.
+ // We could fall back to the approach we used for includes (a massive
+ // list), but that's messy at best.
}
Tool &Linux::SelectTool(const Compilation &C, const JobAction &JA) const {
@@ -1524,8 +1213,6 @@
switch (Key) {
case Action::AssembleJobClass:
T = new tools::linuxtools::Assemble(*this); break;
- case Action::LinkJobClass:
- T = new tools::linuxtools::Link(*this); break;
default:
T = &Generic_GCC::SelectTool(C, JA);
}
Modified: cfe/trunk/lib/Driver/ToolChains.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=118150&r1=118149&r2=118150&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains.h (original)
+++ cfe/trunk/lib/Driver/ToolChains.h Tue Nov 2 23:43:56 2010
@@ -317,12 +317,7 @@
public:
Linux(const HostInfo &Host, const llvm::Triple& Triple);
- virtual bool HasNativeLLVMSupport() const;
-
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
-
- std::string Linker;
- std::vector<std::string> ExtraOpts;
};
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=118150&r1=118149&r2=118150&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Tue Nov 2 23:43:56 2010
@@ -3134,145 +3134,6 @@
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
-void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
- const InputInfo &Output,
- const InputInfoList &Inputs,
- const ArgList &Args,
- const char *LinkingOutput) const {
- const toolchains::Linux& ToolChain =
- static_cast<const toolchains::Linux&>(getToolChain());
- const Driver &D = ToolChain.getDriver();
- ArgStringList CmdArgs;
-
- for (std::vector<std::string>::const_iterator i = ToolChain.ExtraOpts.begin(),
- e = ToolChain.ExtraOpts.end();
- i != e; ++i)
- CmdArgs.push_back(i->c_str());
-
- if (!Args.hasArg(options::OPT_static)) {
- CmdArgs.push_back("--eh-frame-hdr");
- }
-
- CmdArgs.push_back("-m");
- if (ToolChain.getArch() == llvm::Triple::x86)
- CmdArgs.push_back("elf_i386");
- else if (ToolChain.getArch() == llvm::Triple::arm)
- CmdArgs.push_back("armelf_linux_eabi");
- else
- CmdArgs.push_back("elf_x86_64");
-
- if (Args.hasArg(options::OPT_static)) {
- if (ToolChain.getArch() == llvm::Triple::arm)
- CmdArgs.push_back("-Bstatic");
- else
- CmdArgs.push_back("-static");
- } else if (Args.hasArg(options::OPT_shared)) {
- CmdArgs.push_back("-shared");
- }
-
- if (ToolChain.getArch() == llvm::Triple::arm ||
- (!Args.hasArg(options::OPT_static) &&
- !Args.hasArg(options::OPT_shared))) {
- CmdArgs.push_back("-dynamic-linker");
- if (ToolChain.getArch() == llvm::Triple::x86)
- CmdArgs.push_back("/lib/ld-linux.so.2");
- else if (ToolChain.getArch() == llvm::Triple::arm)
- CmdArgs.push_back("/lib/ld-linux.so.3");
- else
- CmdArgs.push_back("/lib64/ld-linux-x86-64.so.2");
- }
-
- CmdArgs.push_back("-o");
- CmdArgs.push_back(Output.getFilename());
-
- if (!Args.hasArg(options::OPT_shared))
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt1.o")));
-
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
-
- const char *crtbegin;
- if (Args.hasArg(options::OPT_static))
- crtbegin = "crtbeginT.o";
- else if (Args.hasArg(options::OPT_shared))
- crtbegin = "crtbeginS.o";
- else
- crtbegin = "crtbegin.o";
-
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
-
- Args.AddAllArgs(CmdArgs, options::OPT_L);
-
- const ToolChain::path_list Paths = ToolChain.getFilePaths();
-
- for (ToolChain::path_list::const_iterator i = Paths.begin(),
- e = Paths.end();
- i != e; ++i) {
- const std::string &s = *i;
- CmdArgs.push_back(Args.MakeArgString(std::string("-L") + s));
- }
-
- AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);
-
- if (D.CCCIsCXX) {
- ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);
- CmdArgs.push_back("-lm");
- }
-
- if (Args.hasArg(options::OPT_static))
- CmdArgs.push_back("--start-group");
-
- if (!D.CCCIsCXX)
- CmdArgs.push_back("-lgcc");
-
- if (Args.hasArg(options::OPT_static)) {
- if (D.CCCIsCXX)
- CmdArgs.push_back("-lgcc");
- } else {
- if (!D.CCCIsCXX)
- CmdArgs.push_back("--as-needed");
- CmdArgs.push_back("-lgcc_s");
- if (!D.CCCIsCXX)
- CmdArgs.push_back("--no-as-needed");
- }
-
- if (Args.hasArg(options::OPT_static))
- CmdArgs.push_back("-lgcc_eh");
- else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX)
- CmdArgs.push_back("-lgcc");
-
- CmdArgs.push_back("-lc");
-
- if (Args.hasArg(options::OPT_static))
- CmdArgs.push_back("--end-group");
- else {
- if (!D.CCCIsCXX)
- CmdArgs.push_back("-lgcc");
-
- if (!D.CCCIsCXX)
- CmdArgs.push_back("--as-needed");
- CmdArgs.push_back("-lgcc_s");
- if (!D.CCCIsCXX)
- CmdArgs.push_back("--no-as-needed");
-
- if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX)
- CmdArgs.push_back("-lgcc");
- }
-
- if (Args.hasArg(options::OPT_shared))
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));
- else
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
-
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
-
- if (Args.hasArg(options::OPT_use_gold_plugin)) {
- CmdArgs.push_back("-plugin");
- std::string Plugin = ToolChain.getDriver().Dir + "/../lib/LLVMgold.so";
- CmdArgs.push_back(Args.MakeArgString(Plugin));
- }
-
- C.addCommand(new Command(JA, *this, ToolChain.Linker.c_str(), CmdArgs));
-}
void minix::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
Modified: cfe/trunk/lib/Driver/Tools.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=118150&r1=118149&r2=118150&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.h (original)
+++ cfe/trunk/lib/Driver/Tools.h Tue Nov 2 23:43:56 2010
@@ -348,18 +348,6 @@
const ArgList &TCArgs,
const char *LinkingOutput) const;
};
- class LLVM_LIBRARY_VISIBILITY Link : public Tool {
- public:
- Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
-
- virtual bool hasIntegratedCPP() const { return false; }
-
- virtual void ConstructJob(Compilation &C, const JobAction &JA,
- const InputInfo &Output,
- const InputInfoList &Inputs,
- const ArgList &TCArgs,
- const char *LinkingOutput) const;
- };
}
/// minix -- Directly call GNU Binutils assembler and linker
namespace minix {
More information about the cfe-commits
mailing list