clang 22.0.0git
Gnu.cpp File Reference
#include "Gnu.h"
#include "Arch/ARM.h"
#include "Arch/CSKY.h"
#include "Arch/LoongArch.h"
#include "Arch/Mips.h"
#include "Arch/PPC.h"
#include "Arch/RISCV.h"
#include "Arch/Sparc.h"
#include "Arch/SystemZ.h"
#include "clang/Config/config.h"
#include "clang/Driver/CommonArgs.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/MultilibBuilder.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/Tool.h"
#include "clang/Driver/ToolChain.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/TargetParser/RISCVISAInfo.h"
#include "llvm/TargetParser/TargetParser.h"
#include <system_error>

Go to the source code of this file.

Functions

static bool forwardToGCC (const Option &O)
static void normalizeCPUNamesForAssembler (const ArgList &Args, ArgStringList &CmdArgs)
static bool getStatic (const ArgList &Args)
static bool isSoftFloatABI (const ArgList &Args)
static bool isArmOrThumbArch (llvm::Triple::ArchType Arch)
static bool isMipsEL (llvm::Triple::ArchType Arch)
static bool isMips16 (const ArgList &Args)
static bool isMicroMips (const ArgList &Args)
static bool isMSP430 (llvm::Triple::ArchType Arch)
static bool findMipsCsMultilibs (const Driver &D, const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
static bool findMipsMuslMultilibs (const Driver &D, const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
static bool findMipsMtiMultilibs (const Driver &D, const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
static bool findMipsImgMultilibs (const Driver &D, const Multilib::flags_list &Flags, FilterNonExistent &NonExistent, DetectedMultilibs &Result)
static void findAndroidArmMultilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, DetectedMultilibs &Result)
static bool findMSP430Multilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, DetectedMultilibs &Result)
static void findCSKYMultilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, DetectedMultilibs &Result)
static bool selectRISCVMultilib (const Driver &D, const MultilibSet &RISCVMultilibSet, StringRef Arch, const Multilib::flags_list &Flags, llvm::SmallVectorImpl< Multilib > &SelectedMultilibs)
 Extend the multi-lib re-use selection mechanism for RISC-V.
static void findRISCVBareMetalMultilibs (const Driver &D, const llvm::Triple &TargetTriple, StringRef Path, const ArgList &Args, DetectedMultilibs &Result)
static void findRISCVMultilibs (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 llvm::StringRef getGCCToolchainDir (const ArgList &Args, llvm::StringRef SysRoot)
static bool addLibStdCXXIncludePaths (llvm::vfs::FileSystem &vfs, Twine IncludeDir, StringRef Triple, Twine IncludeSuffix, const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, bool DetectDebian=false)

Function Documentation

◆ addLibStdCXXIncludePaths()

bool addLibStdCXXIncludePaths ( llvm::vfs::FileSystem & vfs,
Twine IncludeDir,
StringRef Triple,
Twine IncludeSuffix,
const llvm::opt::ArgList & DriverArgs,
llvm::opt::ArgStringList & CC1Args,
bool DetectDebian = false )
static

Definition at line 3265 of file Gnu.cpp.

References clang::driver::ToolChain::addSystemInclude().

◆ findAndroidArmMultilibs()

◆ findBiarchMultilibs()

bool findBiarchMultilibs ( const Driver & D,
const llvm::Triple & TargetTriple,
StringRef Path,
const ArgList & Args,
bool NeedsBiarchSuffix,
DetectedMultilibs & Result )
static

◆ findCSKYMultilibs()

◆ findMipsCsMultilibs()

◆ findMipsImgMultilibs()

◆ findMipsMtiMultilibs()

◆ findMipsMuslMultilibs()

◆ findMSP430Multilibs()

bool findMSP430Multilibs ( const Driver & D,
const llvm::Triple & TargetTriple,
StringRef Path,
const ArgList & Args,
DetectedMultilibs & Result )
static

◆ findRISCVBareMetalMultilibs()

◆ findRISCVMultilibs()

◆ forwardToGCC()

bool forwardToGCC ( const Option & O)
static

◆ getGCCToolchainDir()

llvm::StringRef getGCCToolchainDir ( const ArgList & Args,
llvm::StringRef SysRoot )
static

◆ getStatic()

bool getStatic ( const ArgList & Args)
static

Definition at line 222 of file Gnu.cpp.

Referenced by clang::driver::tools::gnutools::Linker::ConstructJob().

◆ isArmOrThumbArch()

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

Definition at line 930 of file Gnu.cpp.

References Arch.

◆ isMicroMips()

bool isMicroMips ( const ArgList & Args)
static

Definition at line 943 of file Gnu.cpp.

◆ isMips16()

bool isMips16 ( const ArgList & Args)
static

Definition at line 938 of file Gnu.cpp.

◆ isMipsEL()

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

Definition at line 934 of file Gnu.cpp.

References Arch.

◆ isMSP430()

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

Definition at line 948 of file Gnu.cpp.

References Arch.

◆ isSoftFloatABI()

bool isSoftFloatABI ( const ArgList & Args)
static

Definition at line 919 of file Gnu.cpp.

◆ normalizeCPUNamesForAssembler()

void normalizeCPUNamesForAssembler ( const ArgList & Args,
ArgStringList & CmdArgs )
static

Definition at line 54 of file Gnu.cpp.

Referenced by clang::driver::tools::gnutools::Assembler::ConstructJob().

◆ selectRISCVMultilib()

bool selectRISCVMultilib ( const Driver & D,
const MultilibSet & RISCVMultilibSet,
StringRef Arch,
const Multilib::flags_list & Flags,
llvm::SmallVectorImpl< Multilib > & SelectedMultilibs )
static

Extend the multi-lib re-use selection mechanism for RISC-V.

This function will try to re-use multi-lib if they are compatible. Definition of compatible:

  • ABI must be the same.
  • multi-lib is a subset of current arch, e.g. multi-lib=march=rv32im is a subset of march=rv32imc.
  • march that contains atomic extension can't reuse multi-lib that doesn't have atomic, vice versa. e.g. multi-lib=march=rv32im and march=rv32ima are not compatible, because software and hardware atomic operation can't work together correctly.

Definition at line 1604 of file Gnu.cpp.

References clang::driver::tools::addMultilibFlag(), Arch, clang::driver::MultilibSetBuilder::Either(), clang::driver::MultilibBuilder::flag(), clang::driver::MultilibSetBuilder::makeMultilibSet(), clang::driver::MultilibSet::select(), and clang::sema::Skip.

Referenced by findRISCVBareMetalMultilibs().