r220547 - Driver: add missed file from previous commit

Justin Bogner mail at justinbogner.com
Tue Nov 4 21:06:58 PST 2014


Saleem Abdulrasool <compnerd at compnerd.org> writes:
> Author: compnerd
> Date: Thu Oct 23 22:24:33 2014
> New Revision: 220547
>
> URL: http://llvm.org/viewvc/llvm-project?rev=220547&view=rev
> Log:
> Driver: add missed file from previous commit
>
> Added:
>     cfe/trunk/lib/Driver/CrossWindowsToolChain.cpp
>
> Added: cfe/trunk/lib/Driver/CrossWindowsToolChain.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/CrossWindowsToolChain.cpp?rev=220547&view=auto
> ==============================================================================
> --- cfe/trunk/lib/Driver/CrossWindowsToolChain.cpp (added)
> +++ cfe/trunk/lib/Driver/CrossWindowsToolChain.cpp Thu Oct 23 22:24:33 2014
> @@ -0,0 +1,123 @@
> +//===--- CrossWindowsToolChain.cpp - Cross Windows Tool Chain -------------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "ToolChains.h"
> +#include "clang/Driver/Driver.h"
> +#include "clang/Driver/Options.h"
> +#include "llvm/Option/ArgList.h"
> +
> +using namespace clang::driver;
> +using namespace clang::driver::toolchains;
> +
> +CrossWindowsToolChain::CrossWindowsToolChain(const Driver &D,
> +                                             const llvm::Triple &T,
> +                                             const llvm::opt::ArgList &Args)
> +    : Generic_GCC(D, T, Args) {
> +  if (GetCXXStdlibType(Args) == ToolChain::CST_Libstdcxx) {
> +    const std::string &SysRoot = D.SysRoot;
> +
> +    // libstdc++ resides in /usr/lib, but depends on libgcc which is placed in
> +    // /usr/lib/gcc.
> +    getFilePaths().push_back(SysRoot + "/usr/lib");
> +    getFilePaths().push_back(SysRoot + "/usr/lib/gcc");
> +  }
> +}
> +
> +bool CrossWindowsToolChain::IsUnwindTablesDefault() const {
> +  // FIXME: all non-x86 targets need unwind tables, however, LLVM currently does
> +  // not know how to emit them.
> +  return getArch() == llvm::Triple::x86_64;
> +}
> +
> +bool CrossWindowsToolChain::isPICDefault() const {
> +  return getArch() == llvm::Triple::x86_64;
> +}
> +
> +bool CrossWindowsToolChain::isPIEDefault() const {
> +  return getArch() == llvm::Triple::x86_64;
> +}
> +
> +bool CrossWindowsToolChain::isPICDefaultForced() const {
> +  return getArch() == llvm::Triple::x86_64;
> +}
> +
> +void CrossWindowsToolChain::
> +AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
> +                          llvm::opt::ArgStringList &CC1Args) const {
> +  const Driver &D = getDriver();
> +  const std::string &SysRoot = D.SysRoot;
> +
> +  if (DriverArgs.hasArg(options::OPT_nostdlibinc))
> +    return;
> +
> +  addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");
> +  if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
> +    SmallString<128> ResourceDir(D.ResourceDir);
> +    llvm::sys::path::append(ResourceDir, "include");
> +    addSystemInclude(DriverArgs, CC1Args, ResourceDir.str());
> +  }
> +  addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
> +}
> +
> +void CrossWindowsToolChain::
> +AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
> +                             llvm::opt::ArgStringList &CC1Args) const {
> +  const llvm::Triple &Triple = getTriple();
> +  const std::string &SysRoot = getDriver().SysRoot;
> +
> +  if (DriverArgs.hasArg(options::OPT_nostdlibinc) ||
> +      DriverArgs.hasArg(options::OPT_nostdincxx))
> +    return;
> +
> +  switch (GetCXXStdlibType(DriverArgs)) {
> +  case ToolChain::CST_Libcxx:
> +    addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include/c++/v1");
> +    break;
> +
> +  case ToolChain::CST_Libstdcxx:
> +    addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/incldue/c++");

I guess /usr/incldue is a typo. This seems like it should've come up by
now - is nothing using this?

> +    switch (Triple.getArch()) {
> +    default: llvm_unreachable("unsupported architecture");
> +    case llvm::Triple::x86:
> +    case llvm::Triple::x86_64:
> +      addSystemInclude(DriverArgs, CC1Args,
> +                       SysRoot + "/usr/include/c++/" + Triple.str());
> +      break;
> +    }
> +    addSystemInclude(DriverArgs, CC1Args,
> +                     SysRoot + "/usr/include/c++/backwards");
> +  }
> +}
> +
> +void CrossWindowsToolChain::
> +AddCXXStdlibLibArgs(const llvm::opt::ArgList &DriverArgs,
> +                    llvm::opt::ArgStringList &CC1Args) const {
> +  switch (GetCXXStdlibType(DriverArgs)) {
> +  case ToolChain::CST_Libcxx:
> +    CC1Args.push_back("-lc++");
> +    break;
> +  case ToolChain::CST_Libstdcxx:
> +    CC1Args.push_back("-lstdc++");
> +    CC1Args.push_back("-lmingw32");
> +    CC1Args.push_back("-lmingwex");
> +    CC1Args.push_back("-lgcc");
> +    CC1Args.push_back("-lmoldname");
> +    CC1Args.push_back("-lmingw32");
> +    break;
> +  }
> +}
> +
> +Tool *CrossWindowsToolChain::buildLinker() const {
> +  return new tools::CrossWindows::Link(*this);
> +}
> +
> +Tool *CrossWindowsToolChain::buildAssembler() const {
> +  return new tools::CrossWindows::Assemble(*this);
> +}
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list