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