clang  3.9.0
Enumerations | Functions
ToolChains.cpp File Reference
#include "ToolChains.h"
#include "clang/Basic/Cuda.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/Version.h"
#include "clang/Basic/VirtualFileSystem.h"
#include "clang/Config/config.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/SanitizerArgs.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Option/OptTable.h"
#include "llvm/Option/Option.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/TargetParser.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
#include <system_error>
Include dependency graph for ToolChains.cpp:

Go to the source code of this file.

Enumerations

enum  Distro {
  ArchLinux, DebianLenny, DebianSqueeze, DebianWheezy,
  DebianJessie, DebianStretch, Exherbo, RHEL5,
  RHEL6, RHEL7, Fedora, OpenSUSE,
  UbuntuHardy, UbuntuIntrepid, UbuntuJaunty, UbuntuKarmic,
  UbuntuLucid, UbuntuMaverick, UbuntuNatty, UbuntuOneiric,
  UbuntuPrecise, UbuntuQuantal, UbuntuRaring, UbuntuSaucy,
  UbuntuTrusty, UbuntuUtopic, UbuntuVivid, UbuntuWily,
  UbuntuXenial, UnknownDistro
}
 Distribution (very bare-bones at the moment). More...
 

Functions

static const char * ArmMachOArchName (StringRef Arch)
 
static const char * ArmMachOArchNameCPU (StringRef CPU)
 
static bool isSoftFloatABI (const ArgList &Args)
 
static bool isObjCAutoRefCount (const ArgList &Args)
 Determine whether Objective-C automated reference counting is enabled. More...
 
static llvm::StringRef getGCCToolchainDir (const ArgList &Args)
 
static CudaVersion ParseCudaVersionFile (llvm::StringRef V)
 
static void addMultilibFlag (bool Enabled, const char *const Flag, std::vector< std::string > &Flags)
 
static bool isArmOrThumbArch (llvm::Triple::ArchType Arch)
 
static bool isMipsArch (llvm::Triple::ArchType Arch)
 
static bool isMips32 (llvm::Triple::ArchType Arch)
 
static bool isMips64 (llvm::Triple::ArchType Arch)
 
static bool isMipsEL (llvm::Triple::ArchType Arch)
 
static bool isMips16 (const ArgList &Args)
 
static bool isMicroMips (const ArgList &Args)
 
static Multilib makeMultilib (StringRef commonSuffix)
 
static bool findMipsCsMultilibs (const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
 
static bool findMipsAndroidMultilibs (const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
 
static bool findMipsMuslMultilibs (const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
 
static bool findMipsMtiMultilibs (const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
 
static bool findMipsImgMultilibs (const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
 
static bool findMIPSMultilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, DetectedMultilibs &Result)
 
static void findAndroidArmMultilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, DetectedMultilibs &Result)
 
static bool findBiarchMultilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, bool NeedsBiarchSuffix, DetectedMultilibs &Result)
 
static void addPathIfExists (const Driver &D, const Twine &Path, ToolChain::path_list &Paths)
 
static bool IsRedhat (enum Distro Distro)
 
static bool IsOpenSUSE (enum Distro Distro)
 
static bool IsDebian (enum Distro Distro)
 
static bool IsUbuntu (enum Distro Distro)
 
static Distro DetectDistro (const Driver &D, llvm::Triple::ArchType Arch)
 
static std::string getMultiarchTriple (const Driver &D, const llvm::Triple &TargetTriple, StringRef SysRoot)
 Get our best guess at the multiarch triple for a target. More...
 
static StringRef getOSLibDir (const llvm::Triple &Triple, const ArgList &Args)
 
static void addMultilibsFilePaths (const Driver &D, const MultilibSet &Multilibs, const Multilib &Multilib, StringRef InstallPath, ToolChain::path_list &Paths)
 
static std::string DetectLibcxxIncludePath (StringRef base)
 

Enumeration Type Documentation

enum Distro

Distribution (very bare-bones at the moment).

Enumerator
ArchLinux 
DebianLenny 
DebianSqueeze 
DebianWheezy 
DebianJessie 
DebianStretch 
Exherbo 
RHEL5 
RHEL6 
RHEL7 
Fedora 
OpenSUSE 
UbuntuHardy 
UbuntuIntrepid 
UbuntuJaunty 
UbuntuKarmic 
UbuntuLucid 
UbuntuMaverick 
UbuntuNatty 
UbuntuOneiric 
UbuntuPrecise 
UbuntuQuantal 
UbuntuRaring 
UbuntuSaucy 
UbuntuTrusty 
UbuntuUtopic 
UbuntuVivid 
UbuntuWily 
UbuntuXenial 
UnknownDistro 

Definition at line 3714 of file ToolChains.cpp.

Function Documentation

static void addMultilibFlag ( bool  Enabled,
const char *const  Flag,
std::vector< std::string > &  Flags 
)
static
static void addMultilibsFilePaths ( const Driver D,
const MultilibSet Multilibs,
const Multilib Multilib,
StringRef  InstallPath,
ToolChain::path_list Paths 
)
static
static void addPathIfExists ( const Driver D,
const Twine &  Path,
ToolChain::path_list Paths 
)
static
static const char* ArmMachOArchName ( StringRef  Arch)
static

Definition at line 106 of file ToolChains.cpp.

Referenced by clang::driver::toolchains::MachO::getMachOArchName().

static const char* ArmMachOArchNameCPU ( StringRef  CPU)
static

Definition at line 123 of file ToolChains.cpp.

Referenced by clang::driver::toolchains::MachO::getMachOArchName().

static Distro DetectDistro ( const Driver D,
llvm::Triple::ArchType  Arch 
)
static
static std::string DetectLibcxxIncludePath ( StringRef  base)
static
static void findAndroidArmMultilibs ( const Driver D,
const llvm::Triple &  TargetTriple,
StringRef  Path,
const ArgList &  Args,
DetectedMultilibs &  Result 
)
static
static bool findBiarchMultilibs ( const Driver D,
const llvm::Triple &  TargetTriple,
StringRef  Path,
const ArgList &  Args,
bool  NeedsBiarchSuffix,
DetectedMultilibs &  Result 
)
static
static bool findMipsAndroidMultilibs ( const Multilib::flags_list Flags,
FilterNonExistent &  NonExistent,
DetectedMultilibs &  Result 
)
static
static bool findMipsCsMultilibs ( const Multilib::flags_list Flags,
FilterNonExistent &  NonExistent,
DetectedMultilibs &  Result 
)
static
static bool findMipsImgMultilibs ( const Multilib::flags_list Flags,
FilterNonExistent &  NonExistent,
DetectedMultilibs &  Result 
)
static
static bool findMipsMtiMultilibs ( const Multilib::flags_list Flags,
FilterNonExistent &  NonExistent,
DetectedMultilibs &  Result 
)
static
static bool findMIPSMultilibs ( const Driver D,
const llvm::Triple &  TargetTriple,
StringRef  Path,
const ArgList &  Args,
DetectedMultilibs &  Result 
)
static
static bool findMipsMuslMultilibs ( const Multilib::flags_list Flags,
FilterNonExistent &  NonExistent,
DetectedMultilibs &  Result 
)
static
static llvm::StringRef getGCCToolchainDir ( const ArgList &  Args)
static
static std::string getMultiarchTriple ( const Driver D,
const llvm::Triple &  TargetTriple,
StringRef  SysRoot 
)
static

Get our best guess at the multiarch triple for a target.

Debian-based systems are starting to use a multiarch setup where they use a target-triple directory in the library and header search paths. Unfortunately, this triple does not align with the vanilla target triple, so we provide a rough mapping here.

Definition at line 3849 of file ToolChains.cpp.

References clang::vfs::FileSystem::exists(), and clang::driver::Driver::getVFS().

Referenced by clang::driver::toolchains::Linux::AddClangCXXStdlibIncludeArgs(), and clang::driver::toolchains::Linux::Linux().

static StringRef getOSLibDir ( const llvm::Triple &  Triple,
const ArgList &  Args 
)
static
static bool isArmOrThumbArch ( llvm::Triple::ArchType  Arch)
static

Definition at line 1848 of file ToolChains.cpp.

static bool IsDebian ( enum Distro  Distro)
static

Definition at line 3756 of file ToolChains.cpp.

References DebianLenny, and DebianStretch.

Referenced by clang::driver::toolchains::Linux::Linux().

static bool isMicroMips ( const ArgList &  Args)
static

Definition at line 1874 of file ToolChains.cpp.

Referenced by findMIPSMultilibs().

static bool isMips16 ( const ArgList &  Args)
static

Definition at line 1869 of file ToolChains.cpp.

Referenced by findMIPSMultilibs().

static bool isMips32 ( llvm::Triple::ArchType  Arch)
static

Definition at line 1857 of file ToolChains.cpp.

Referenced by findMIPSMultilibs().

static bool isMips64 ( llvm::Triple::ArchType  Arch)
static

Definition at line 1861 of file ToolChains.cpp.

Referenced by findMIPSMultilibs().

static bool isMipsArch ( llvm::Triple::ArchType  Arch)
static
static bool isMipsEL ( llvm::Triple::ArchType  Arch)
static

Definition at line 1865 of file ToolChains.cpp.

Referenced by findMIPSMultilibs().

static bool isObjCAutoRefCount ( const ArgList &  Args)
static

Determine whether Objective-C automated reference counting is enabled.

Definition at line 258 of file ToolChains.cpp.

Referenced by clang::driver::toolchains::DarwinClang::AddLinkARCArgs().

static bool IsOpenSUSE ( enum Distro  Distro)
static

Definition at line 3754 of file ToolChains.cpp.

References OpenSUSE.

Referenced by clang::driver::toolchains::Linux::Linux().

static bool IsRedhat ( enum Distro  Distro)
static

Definition at line 3750 of file ToolChains.cpp.

References Fedora, RHEL5, and RHEL7.

Referenced by clang::driver::toolchains::Linux::Linux().

static bool isSoftFloatABI ( const ArgList &  Args)
static

Definition at line 142 of file ToolChains.cpp.

Referenced by findMIPSMultilibs().

static bool IsUbuntu ( enum Distro  Distro)
static

Definition at line 3760 of file ToolChains.cpp.

References UbuntuHardy, and UbuntuXenial.

Referenced by clang::driver::toolchains::Linux::Linux().

static Multilib makeMultilib ( StringRef  commonSuffix)
static
static CudaVersion ParseCudaVersionFile ( llvm::StringRef  V)
static