clang 22.0.0git
Driver.cpp File Reference
#include "clang/Driver/Driver.h"
#include "ToolChains/AIX.h"
#include "ToolChains/AMDGPU.h"
#include "ToolChains/AMDGPUOpenMP.h"
#include "ToolChains/AVR.h"
#include "ToolChains/Arch/RISCV.h"
#include "ToolChains/BareMetal.h"
#include "ToolChains/CSKYToolChain.h"
#include "ToolChains/Clang.h"
#include "ToolChains/CrossWindows.h"
#include "ToolChains/Cuda.h"
#include "ToolChains/Cygwin.h"
#include "ToolChains/Darwin.h"
#include "ToolChains/DragonFly.h"
#include "ToolChains/FreeBSD.h"
#include "ToolChains/Fuchsia.h"
#include "ToolChains/Gnu.h"
#include "ToolChains/HIPAMD.h"
#include "ToolChains/HIPSPV.h"
#include "ToolChains/HLSL.h"
#include "ToolChains/Haiku.h"
#include "ToolChains/Hexagon.h"
#include "ToolChains/Hurd.h"
#include "ToolChains/Lanai.h"
#include "ToolChains/Linux.h"
#include "ToolChains/MSP430.h"
#include "ToolChains/MSVC.h"
#include "ToolChains/Managarm.h"
#include "ToolChains/MinGW.h"
#include "ToolChains/MipsLinux.h"
#include "ToolChains/NetBSD.h"
#include "ToolChains/OHOS.h"
#include "ToolChains/OpenBSD.h"
#include "ToolChains/PPCFreeBSD.h"
#include "ToolChains/PPCLinux.h"
#include "ToolChains/PS4CPU.h"
#include "ToolChains/SPIRV.h"
#include "ToolChains/SPIRVOpenMP.h"
#include "ToolChains/SYCL.h"
#include "ToolChains/Solaris.h"
#include "ToolChains/TCE.h"
#include "ToolChains/UEFI.h"
#include "ToolChains/VEToolchain.h"
#include "ToolChains/WebAssembly.h"
#include "ToolChains/XCore.h"
#include "ToolChains/ZOS.h"
#include "clang/Basic/DiagnosticDriver.h"
#include "clang/Basic/TargetID.h"
#include "clang/Basic/Version.h"
#include "clang/Config/config.h"
#include "clang/Driver/Action.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/InputInfo.h"
#include "clang/Driver/Job.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/Phases.h"
#include "clang/Driver/SanitizerArgs.h"
#include "clang/Driver/Tool.h"
#include "clang/Driver/ToolChain.h"
#include "clang/Driver/Types.h"
#include "clang/Lex/DependencyDirectivesScanner.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Option/OptSpecifier.h"
#include "llvm/Option/OptTable.h"
#include "llvm/Option/Option.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ExitCodes.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FileUtilities.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/MD5.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/Regex.h"
#include "llvm/Support/StringSaver.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/TargetParser/Host.h"
#include "llvm/TargetParser/RISCVISAInfo.h"
#include <cstdlib>
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <utility>

Go to the source code of this file.

Enumerations

enum  { TopLevelAction = 0 , HeadSibAction = 1 , OtherSibAction = 2 }

Functions

template<typename F>
static bool usesInput (const ArgList &Args, F &&Fn)
static Arg * MakeInputArg (DerivedArgList &Args, const OptTable &Opts, StringRef Value, bool Claim=true)
static void setZosTargetVersion (const Driver &D, llvm::Triple &Target, StringRef ArgTarget)
static llvm::Triple computeTargetTriple (const Driver &D, StringRef TargetTriple, const ArgList &Args, StringRef DarwinArchName="")
 Compute target triple from args.
static driver::LTOKind parseLTOMode (Driver &D, const llvm::opt::ArgList &Args, OptSpecifier OptEq, OptSpecifier OptNeg)
static llvm::SmallVector< std::string > getSystemOffloadArchs (Compilation &C, Action::OffloadKind Kind)
static llvm::DenseSet< llvm::StringRef > inferOffloadToolchains (Compilation &C, Action::OffloadKind Kind)
static void appendOneArg (InputArgList &Args, const Arg *Opt)
static bool findTripleConfigFile (llvm::cl::ExpansionContext &ExpCtx, SmallString< 128 > &ConfigFilePath, llvm::Triple Triple, std::string Suffix)
static void printArgList (raw_ostream &OS, const llvm::opt::ArgList &Args)
static void PrintDiagnosticCategories (raw_ostream &OS)
 PrintDiagnosticCategories - Implement the –print-diagnostic-categories option.
static unsigned PrintActions1 (const Compilation &C, Action *A, std::map< Action *, unsigned > &Ids, Twine Indent={}, int Kind=TopLevelAction)
static bool ContainsCompileOrAssembleAction (const Action *A)
 Check whether the given input tree contains any compilation or assembly actions.
static types::ID CXXHeaderUnitType (ModuleHeaderMode HM)
static bool hasCXXModuleInputType (const Driver::InputList &Inputs)
static StringRef getCanonicalArchString (Compilation &C, const llvm::opt::DerivedArgList &Args, StringRef ArchStr, const llvm::Triple &Triple)
 Returns the canonical name for the offloading architecture when using a HIP or CUDA architecture.
static std::optional< std::pair< llvm::StringRef, llvm::StringRef > > getConflictOffloadArchCombination (const llvm::DenseSet< StringRef > &Archs, llvm::Triple Triple)
 Checks if the set offloading architectures does not conflict.
static std::string GetTriplePlusArchString (const ToolChain *TC, StringRef BoundArch, Action::OffloadKind OffloadKind)
 Return a string that uniquely identifies the result of a job.
static void handleTimeTrace (Compilation &C, const ArgList &Args, const JobAction *JA, const char *BaseInput, const InputInfo &Result)
static const char * MakeCLOutputFilename (const ArgList &Args, StringRef ArgValue, StringRef BaseName, types::ID FileType)
 Create output filename based on ArgValue, which could either be a full filename, filename without extension, or a directory.
static bool HasPreprocessOutput (const Action &JA)
static const char * GetModuleOutputPath (Compilation &C, const JobAction &JA, const char *BaseInput)
static bool ScanDirForExecutable (SmallString< 128 > &Dir, StringRef Name)
static const char * GetStableCStr (llvm::StringSet<> &SavedStrings, StringRef S)
static void applyOneOverrideOption (raw_ostream &OS, SmallVectorImpl< const char * > &Args, StringRef Edit, llvm::StringSet<> &SavedStrings)
 Apply a list of edits to the input argument lists.

Variables

static const char BugReporMsg []

Enumeration Type Documentation

β—† anonymous enum

anonymous enum
Enumerator
TopLevelAction 
HeadSibAction 
OtherSibAction 

Definition at line 2645 of file Driver.cpp.

Function Documentation

β—† appendOneArg()

void appendOneArg ( InputArgList & Args,
const Arg * Opt )
static

Definition at line 1197 of file Driver.cpp.

References clang::Copy.

Referenced by clang::driver::Driver::BuildCompilation().

β—† applyOneOverrideOption()

void applyOneOverrideOption ( raw_ostream & OS,
SmallVectorImpl< const char * > & Args,
StringRef Edit,
llvm::StringSet<> & SavedStrings )
static

Apply a list of edits to the input argument lists.

The input string is a space separated list of edits to perform, they are applied in order to the input argument lists. Edits should be one of the following forms:

'#': Silence information about the changes to the command line arguments.

'^FOO': Add FOO as a new argument at the beginning of the command line right after the name of the compiler executable.

'+FOO': Add FOO as a new argument at the end of the command line.

's/XXX/YYY/': Substitute the regular expression XXX with YYY in the command line.

'xOPTION': Removes all instances of the literal argument OPTION.

'XOPTION': Removes all instances of the literal argument OPTION, and the following argument.

'Ox': Removes all flags matching 'O' or 'O[sz0-9]' and adds 'Ox' at the end of the command line.

Parameters
OS- The stream to write edit information to.
Args- The vector of command line arguments.
Edit- The override command to perform.
SavedStrings- Set to use for storing string representations.

Definition at line 7247 of file Driver.cpp.

References GetStableCStr().

Referenced by clang::driver::applyOverrideOptions().

β—† computeTargetTriple()

llvm::Triple computeTargetTriple ( const Driver & D,
StringRef TargetTriple,
const ArgList & Args,
StringRef DarwinArchName = "" )
static

Compute target triple from args.

This routine provides the logic to compute a target triple from various args passed to the driver and the default triple string.

Definition at line 632 of file Driver.cpp.

References clang::driver::Driver::Diag(), clang::driver::toolchains::MinGW::fixTripleArch(), clang::driver::tools::riscv::getRISCVArch(), clang::driver::Driver::IsFlangMode(), clang::driver::tools::darwin::setTripleTypeForMachOArchName(), setZosTargetVersion(), clang::T, and clang::Target.

Referenced by clang::driver::Driver::BuildCompilation().

β—† ContainsCompileOrAssembleAction()

bool ContainsCompileOrAssembleAction ( const Action * A)
static

Check whether the given input tree contains any compilation or assembly actions.

Definition at line 2749 of file Driver.cpp.

References ContainsCompileOrAssembleAction(), clang::driver::Action::inputs(), and clang::isa().

Referenced by clang::driver::Driver::BuildUniversalActions(), and ContainsCompileOrAssembleAction().

β—† CXXHeaderUnitType()

β—† findTripleConfigFile()

bool findTripleConfigFile ( llvm::cl::ExpansionContext & ExpCtx,
SmallString< 128 > & ConfigFilePath,
llvm::Triple Triple,
std::string Suffix )
static

Definition at line 1364 of file Driver.cpp.

β—† getCanonicalArchString()

StringRef getCanonicalArchString ( Compilation & C,
const llvm::opt::DerivedArgList & Args,
StringRef ArchStr,
const llvm::Triple & Triple )
static

β—† getConflictOffloadArchCombination()

std::optional< std::pair< llvm::StringRef, llvm::StringRef > > getConflictOffloadArchCombination ( const llvm::DenseSet< StringRef > & Archs,
llvm::Triple Triple )
static

Checks if the set offloading architectures does not conflict.

Returns the incompatible pair if a conflict occurs.

Definition at line 4731 of file Driver.cpp.

References clang::getConflictTargetIDCombination().

Referenced by clang::driver::Driver::getOffloadArchs().

β—† GetModuleOutputPath()

const char * GetModuleOutputPath ( Compilation & C,
const JobAction & JA,
const char * BaseInput )
static

β—† GetStableCStr()

const char * GetStableCStr ( llvm::StringSet<> & SavedStrings,
StringRef S )
static

Definition at line 7215 of file Driver.cpp.

Referenced by applyOneOverrideOption().

β—† getSystemOffloadArchs()

llvm::SmallVector< std::string > getSystemOffloadArchs ( Compilation & C,
Action::OffloadKind Kind )
static

β—† GetTriplePlusArchString()

std::string GetTriplePlusArchString ( const ToolChain * TC,
StringRef BoundArch,
Action::OffloadKind OffloadKind )
static

Return a string that uniquely identifies the result of a job.

The bound arch is not necessarily represented in the toolchain's triple – for example, armv7 and armv7s both map to the same triple – so we need both in our map. Also, we need to add the offloading device kind, as the same tool chain can be used for host and device for some programming models, e.g. OpenMP.

Definition at line 5758 of file Driver.cpp.

References clang::driver::Action::GetOffloadKindName(), and clang::driver::ToolChain::getTriple().

Referenced by clang::driver::Driver::BuildJobsForAction().

β—† handleTimeTrace()

void handleTimeTrace ( Compilation & C,
const ArgList & Args,
const JobAction * JA,
const char * BaseInput,
const InputInfo & Result )
static

Definition at line 5790 of file Driver.cpp.

References clang::C.

β—† hasCXXModuleInputType()

bool hasCXXModuleInputType ( const Driver::InputList & Inputs)
static

Definition at line 4323 of file Driver.cpp.

Referenced by clang::driver::Driver::BuildActions().

β—† HasPreprocessOutput()

bool HasPreprocessOutput ( const Action & JA)
static

β—† inferOffloadToolchains()

β—† MakeCLOutputFilename()

const char * MakeCLOutputFilename ( const ArgList & Args,
StringRef ArgValue,
StringRef BaseName,
types::ID FileType )
static

Create output filename based on ArgValue, which could either be a full filename, filename without extension, or a directory.

If ArgValue does not provide a filename, then use BaseName, and use the extension suitable for FileType.

Definition at line 6113 of file Driver.cpp.

References clang::driver::types::getTypeTempSuffix().

Referenced by clang::driver::Driver::GetNamedOutputPath().

β—† MakeInputArg()

Arg * MakeInputArg ( DerivedArgList & Args,
const OptTable & Opts,
StringRef Value,
bool Claim = true )
static

Definition at line 443 of file Driver.cpp.

Referenced by clang::driver::Driver::BuildInputs().

β—† parseLTOMode()

driver::LTOKind parseLTOMode ( Driver & D,
const llvm::opt::ArgList & Args,
OptSpecifier OptEq,
OptSpecifier OptNeg )
static

β—† PrintActions1()

unsigned PrintActions1 ( const Compilation & C,
Action * A,
std::map< Action *, unsigned > & Ids,
Twine Indent = {},
int Kind = TopLevelAction )
static

Definition at line 2654 of file Driver.cpp.

References clang::C, and clang::Indent().

Referenced by clang::driver::Driver::PrintActions().

β—† printArgList()

void printArgList ( raw_ostream & OS,
const llvm::opt::ArgList & Args )
static

Definition at line 1849 of file Driver.cpp.

Referenced by clang::driver::Driver::generateCompilationDiagnostics().

β—† PrintDiagnosticCategories()

void PrintDiagnosticCategories ( raw_ostream & OS)
static

PrintDiagnosticCategories - Implement the –print-diagnostic-categories option.

Definition at line 2338 of file Driver.cpp.

References clang::DiagnosticIDs::getCategoryNameFromID(), clang::DiagnosticIDs::getNumberOfCategories(), and max().

Referenced by clang::driver::Driver::HandleImmediateArgs().

β—† ScanDirForExecutable()

bool ScanDirForExecutable ( SmallString< 128 > & Dir,
StringRef Name )
static

Definition at line 6562 of file Driver.cpp.

Referenced by clang::driver::Driver::GetProgramPath().

β—† setZosTargetVersion()

void setZosTargetVersion ( const Driver & D,
llvm::Triple & Target,
StringRef ArgTarget )
static

Definition at line 562 of file Driver.cpp.

References clang::driver::Driver::Diag(), and V.

Referenced by computeTargetTriple().

β—† usesInput()

template<typename F>
bool usesInput ( const ArgList & Args,
F && Fn )
static

Variable Documentation

β—† BugReporMsg

const char BugReporMsg[]
static
Initial value:
=
"\n********************\n\n"
"PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:\n"
"Preprocessed source(s) and associated run script(s) are located at:"

Definition at line 1957 of file Driver.cpp.

Referenced by clang::driver::Driver::generateCompilationDiagnostics().