class Generic_GCC::GCCInstallationDetector

Declaration

class Generic_GCC::GCCInstallationDetector { /* full declaration omitted */ };

Description

This is a class to find a viable GCC installation for Clang to use. This class tries to find a GCC installation on the system, and report information about it. It starts from the host information provided to the Driver, and has logic for fuzzing that where appropriate.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:191

Member Variables

private bool IsValid
private llvm::Triple GCCTriple
private const clang::driver::Driver& D
private std::string GCCInstallPath
private std::string GCCParentLibPath
private clang::driver::Multilib SelectedMultilib
The primary multilib appropriate for the given flags.
private llvm::Optional<Multilib> BiarchSibling
On Biarch systems, this corresponds to the default multilib when targeting the non-default multilib. Otherwise, it is empty.
private clang::driver::toolchains::Generic_GCC::GCCVersion Version
private std::set<std::string> CandidateGCCInstallPaths
private clang::driver::MultilibSet Multilibs
The set of multilibs that the detected installation supports.
private const std::string GentooConfigDir = "/etc/env.d/gcc"

Method Overview

  • private void AddDefaultGCCPrefixes(const llvm::Triple & TargetTriple, SmallVectorImpl<std::string> & Prefixes, llvm::StringRef SysRoot)
  • private static void CollectLibDirsAndTriples(const llvm::Triple & TargetTriple, const llvm::Triple & BiarchTriple, SmallVectorImpl<llvm::StringRef> & LibDirs, SmallVectorImpl<llvm::StringRef> & TripleAliases, SmallVectorImpl<llvm::StringRef> & BiarchLibDirs, SmallVectorImpl<llvm::StringRef> & BiarchTripleAliases)
  • public GCCInstallationDetector(const clang::driver::Driver & D)
  • private bool ScanGCCForMultilibs(const llvm::Triple & TargetTriple, const llvm::opt::ArgList & Args, llvm::StringRef Path, bool NeedsBiarchSuffix = false)
  • private bool ScanGentooConfigs(const llvm::Triple & TargetTriple, const llvm::opt::ArgList & Args, const SmallVectorImpl<llvm::StringRef> & CandidateTriples, const SmallVectorImpl<llvm::StringRef> & BiarchTriples)
  • private bool ScanGentooGccConfig(const llvm::Triple & TargetTriple, const llvm::opt::ArgList & Args, llvm::StringRef CandidateTriple, bool NeedsBiarchSuffix = false)
  • private void ScanLibDirForGCCTriple(const llvm::Triple & TargetArch, const llvm::opt::ArgList & Args, const std::string & LibDir, llvm::StringRef CandidateTriple, bool NeedsBiarchSuffix, bool GCCDirExists, bool GCCCrossDirExists)
  • public bool getBiarchSibling(clang::driver::Multilib & M) const
  • public llvm::StringRef getInstallPath() const
  • public const clang::driver::Multilib & getMultilib() const
  • public const clang::driver::MultilibSet & getMultilibs() const
  • public llvm::StringRef getParentLibPath() const
  • public const llvm::Triple & getTriple() const
  • public const clang::driver::toolchains::Generic_GCC::GCCVersion & getVersion() const
  • public void init(const llvm::Triple & TargetTriple, const llvm::opt::ArgList & Args, ArrayRef<std::string> ExtraTripleAliases = None)
  • public bool isValid() const
  • public void print(llvm::raw_ostream & OS) const

Methods

void AddDefaultGCCPrefixes(
    const llvm::Triple& TargetTriple,
    SmallVectorImpl<std::string>& Prefixes,
    llvm::StringRef SysRoot)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:260

Parameters

const llvm::Triple& TargetTriple
SmallVectorImpl<std::string>& Prefixes
llvm::StringRef SysRoot

static void CollectLibDirsAndTriples(
    const llvm::Triple& TargetTriple,
    const llvm::Triple& BiarchTriple,
    SmallVectorImpl<llvm::StringRef>& LibDirs,
    SmallVectorImpl<llvm::StringRef>&
        TripleAliases,
    SmallVectorImpl<llvm::StringRef>&
        BiarchLibDirs,
    SmallVectorImpl<llvm::StringRef>&
        BiarchTripleAliases)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:253

Parameters

const llvm::Triple& TargetTriple
const llvm::Triple& BiarchTriple
SmallVectorImpl<llvm::StringRef>& LibDirs
SmallVectorImpl<llvm::StringRef>& TripleAliases
SmallVectorImpl<llvm::StringRef>& BiarchLibDirs
SmallVectorImpl<llvm::StringRef>& BiarchTripleAliases

GCCInstallationDetector(
    const clang::driver::Driver& D)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:219

Parameters

const clang::driver::Driver& D

bool ScanGCCForMultilibs(
    const llvm::Triple& TargetTriple,
    const llvm::opt::ArgList& Args,
    llvm::StringRef Path,
    bool NeedsBiarchSuffix = false)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:264

Parameters

const llvm::Triple& TargetTriple
const llvm::opt::ArgList& Args
llvm::StringRef Path
bool NeedsBiarchSuffix = false

bool ScanGentooConfigs(
    const llvm::Triple& TargetTriple,
    const llvm::opt::ArgList& Args,
    const SmallVectorImpl<llvm::StringRef>&
        CandidateTriples,
    const SmallVectorImpl<llvm::StringRef>&
        BiarchTriples)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:276

Parameters

const llvm::Triple& TargetTriple
const llvm::opt::ArgList& Args
const SmallVectorImpl<llvm::StringRef>& CandidateTriples
const SmallVectorImpl<llvm::StringRef>& BiarchTriples

bool ScanGentooGccConfig(
    const llvm::Triple& TargetTriple,
    const llvm::opt::ArgList& Args,
    llvm::StringRef CandidateTriple,
    bool NeedsBiarchSuffix = false)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:281

Parameters

const llvm::Triple& TargetTriple
const llvm::opt::ArgList& Args
llvm::StringRef CandidateTriple
bool NeedsBiarchSuffix = false

void ScanLibDirForGCCTriple(
    const llvm::Triple& TargetArch,
    const llvm::opt::ArgList& Args,
    const std::string& LibDir,
    llvm::StringRef CandidateTriple,
    bool NeedsBiarchSuffix,
    bool GCCDirExists,
    bool GCCCrossDirExists)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:269

Parameters

const llvm::Triple& TargetArch
const llvm::opt::ArgList& Args
const std::string& LibDir
llvm::StringRef CandidateTriple
bool NeedsBiarchSuffix
bool GCCDirExists
bool GCCCrossDirExists

bool getBiarchSibling(
    clang::driver::Multilib& M) const

Description

Get the biarch sibling multilib (if it exists).

Declared at: clang/lib/Driver/ToolChains/Gnu.h:243

Parameters

clang::driver::Multilib& M

Returns

true iff such a sibling exists

llvm::StringRef getInstallPath() const

Description

Get the detected GCC installation path.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:230

const clang::driver::Multilib& getMultilib() const

Description

Get the detected Multilib

Declared at: clang/lib/Driver/ToolChains/Gnu.h:236

const clang::driver::MultilibSet& getMultilibs()
    const

Description

Get the whole MultilibSet

Declared at: clang/lib/Driver/ToolChains/Gnu.h:239

llvm::StringRef getParentLibPath() const

Description

Get the detected GCC parent lib path.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:233

const llvm::Triple& getTriple() const

Description

Get the GCC triple for the detected install.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:227

const clang::driver::toolchains::Generic_GCC::
    GCCVersion&
    getVersion() const

Description

Get the detected GCC version string.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:246

void init(const llvm::Triple& TargetTriple,
          const llvm::opt::ArgList& Args,
          ArrayRef<std::string>
              ExtraTripleAliases = None)

Declared at: clang/lib/Driver/ToolChains/Gnu.h:220

Parameters

const llvm::Triple& TargetTriple
const llvm::opt::ArgList& Args
ArrayRef<std::string> ExtraTripleAliases = None

bool isValid() const

Description

Check whether we detected a valid GCC install.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:224

void print(llvm::raw_ostream& OS) const

Description

Print information about the detected GCC installation.

Declared at: clang/lib/Driver/ToolChains/Gnu.h:249

Parameters

llvm::raw_ostream& OS