Path: blob/main/contrib/llvm-project/clang/lib/Driver/ToolChains/CommonArgs.h
35269 views
//===--- CommonArgs.h - Args handling for multiple toolchains ---*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H9#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H1011#include "clang/Basic/CodeGenOptions.h"12#include "clang/Driver/Driver.h"13#include "clang/Driver/InputInfo.h"14#include "clang/Driver/Multilib.h"15#include "clang/Driver/Tool.h"16#include "clang/Driver/ToolChain.h"17#include "llvm/ADT/StringRef.h"18#include "llvm/Option/Arg.h"19#include "llvm/Option/ArgList.h"20#include "llvm/Support/CodeGen.h"2122namespace clang {23namespace driver {24namespace tools {2526void addPathIfExists(const Driver &D, const Twine &Path,27ToolChain::path_list &Paths);2829void AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,30const llvm::opt::ArgList &Args,31llvm::opt::ArgStringList &CmdArgs, const JobAction &JA);3233void addLinkerCompressDebugSectionsOption(const ToolChain &TC,34const llvm::opt::ArgList &Args,35llvm::opt::ArgStringList &CmdArgs);3637void claimNoWarnArgs(const llvm::opt::ArgList &Args);3839bool addSanitizerRuntimes(const ToolChain &TC, const llvm::opt::ArgList &Args,40llvm::opt::ArgStringList &CmdArgs);4142void linkSanitizerRuntimeDeps(const ToolChain &TC,43const llvm::opt::ArgList &Args,44llvm::opt::ArgStringList &CmdArgs);4546bool addXRayRuntime(const ToolChain &TC, const llvm::opt::ArgList &Args,47llvm::opt::ArgStringList &CmdArgs);4849void linkXRayRuntimeDeps(const ToolChain &TC, const llvm::opt::ArgList &Args,50llvm::opt::ArgStringList &CmdArgs);5152void AddRunTimeLibs(const ToolChain &TC, const Driver &D,53llvm::opt::ArgStringList &CmdArgs,54const llvm::opt::ArgList &Args);5556void AddStaticDeviceLibsLinking(Compilation &C, const Tool &T,57const JobAction &JA,58const InputInfoList &Inputs,59const llvm::opt::ArgList &DriverArgs,60llvm::opt::ArgStringList &CmdArgs,61StringRef Arch, StringRef Target,62bool isBitCodeSDL);63void AddStaticDeviceLibs(Compilation *C, const Tool *T, const JobAction *JA,64const InputInfoList *Inputs, const Driver &D,65const llvm::opt::ArgList &DriverArgs,66llvm::opt::ArgStringList &CmdArgs, StringRef Arch,67StringRef Target, bool isBitCodeSDL);6869const char *SplitDebugName(const JobAction &JA, const llvm::opt::ArgList &Args,70const InputInfo &Input, const InputInfo &Output);7172void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T,73const JobAction &JA, const llvm::opt::ArgList &Args,74const InputInfo &Output, const char *OutFile);7576void addLTOOptions(const ToolChain &ToolChain, const llvm::opt::ArgList &Args,77llvm::opt::ArgStringList &CmdArgs, const InputInfo &Output,78const InputInfo &Input, bool IsThinLTO);7980const char *RelocationModelName(llvm::Reloc::Model Model);8182std::tuple<llvm::Reloc::Model, unsigned, bool>83ParsePICArgs(const ToolChain &ToolChain, const llvm::opt::ArgList &Args);8485unsigned ParseFunctionAlignment(const ToolChain &TC,86const llvm::opt::ArgList &Args);8788void addDebugInfoKind(llvm::opt::ArgStringList &CmdArgs,89llvm::codegenoptions::DebugInfoKind DebugInfoKind);9091llvm::codegenoptions::DebugInfoKind92debugLevelToInfoKind(const llvm::opt::Arg &A);9394// Extract the integer N from a string spelled "-dwarf-N", returning 095// on mismatch. The StringRef input (rather than an Arg) allows96// for use by the "-Xassembler" option parser.97unsigned DwarfVersionNum(StringRef ArgValue);98// Find a DWARF format version option.99// This function is a complementary for DwarfVersionNum().100const llvm::opt::Arg *getDwarfNArg(const llvm::opt::ArgList &Args);101unsigned getDwarfVersion(const ToolChain &TC, const llvm::opt::ArgList &Args);102103void AddAssemblerKPIC(const ToolChain &ToolChain,104const llvm::opt::ArgList &Args,105llvm::opt::ArgStringList &CmdArgs);106107void addArchSpecificRPath(const ToolChain &TC, const llvm::opt::ArgList &Args,108llvm::opt::ArgStringList &CmdArgs);109void addOpenMPRuntimeLibraryPath(const ToolChain &TC,110const llvm::opt::ArgList &Args,111llvm::opt::ArgStringList &CmdArgs);112/// Returns true, if an OpenMP runtime has been added.113bool addOpenMPRuntime(const Compilation &C, llvm::opt::ArgStringList &CmdArgs,114const ToolChain &TC, const llvm::opt::ArgList &Args,115bool ForceStaticHostRuntime = false,116bool IsOffloadingHost = false, bool GompNeedsRT = false);117118/// Adds Fortran runtime libraries to \p CmdArgs.119void addFortranRuntimeLibs(const ToolChain &TC, const llvm::opt::ArgList &Args,120llvm::opt::ArgStringList &CmdArgs);121122/// Adds the path for the Fortran runtime libraries to \p CmdArgs.123void addFortranRuntimeLibraryPath(const ToolChain &TC,124const llvm::opt::ArgList &Args,125llvm::opt::ArgStringList &CmdArgs);126127void addHIPRuntimeLibArgs(const ToolChain &TC, Compilation &C,128const llvm::opt::ArgList &Args,129llvm::opt::ArgStringList &CmdArgs);130131void addAsNeededOption(const ToolChain &TC, const llvm::opt::ArgList &Args,132llvm::opt::ArgStringList &CmdArgs, bool as_needed);133134llvm::opt::Arg *getLastCSProfileGenerateArg(const llvm::opt::ArgList &Args);135llvm::opt::Arg *getLastProfileUseArg(const llvm::opt::ArgList &Args);136llvm::opt::Arg *getLastProfileSampleUseArg(const llvm::opt::ArgList &Args);137138bool isObjCAutoRefCount(const llvm::opt::ArgList &Args);139140llvm::StringRef getLTOParallelism(const llvm::opt::ArgList &Args,141const Driver &D);142143bool areOptimizationsEnabled(const llvm::opt::ArgList &Args);144145bool isUseSeparateSections(const llvm::Triple &Triple);146// Parse -mtls-dialect=. Return true if the target supports both general-dynamic147// and TLSDESC, and TLSDESC is requested.148bool isTLSDESCEnabled(const ToolChain &TC, const llvm::opt::ArgList &Args);149150/// \p EnvVar is split by system delimiter for environment variables.151/// If \p ArgName is "-I", "-L", or an empty string, each entry from \p EnvVar152/// is prefixed by \p ArgName then added to \p Args. Otherwise, for each153/// entry of \p EnvVar, \p ArgName is added to \p Args first, then the entry154/// itself is added.155void addDirectoryList(const llvm::opt::ArgList &Args,156llvm::opt::ArgStringList &CmdArgs, const char *ArgName,157const char *EnvVar);158159void AddTargetFeature(const llvm::opt::ArgList &Args,160std::vector<StringRef> &Features,161llvm::opt::OptSpecifier OnOpt,162llvm::opt::OptSpecifier OffOpt, StringRef FeatureName);163164std::string getCPUName(const Driver &D, const llvm::opt::ArgList &Args,165const llvm::Triple &T, bool FromAs = false);166167void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,168const llvm::opt::ArgList &Args,169llvm::opt::ArgStringList &CmdArgs, bool ForAS,170bool IsAux = false);171172/// Iterate \p Args and convert -mxxx to +xxx and -mno-xxx to -xxx and173/// append it to \p Features.174///175/// Note: Since \p Features may contain default values before calling176/// this function, or may be appended with entries to override arguments,177/// entries in \p Features are not unique.178void handleTargetFeaturesGroup(const Driver &D, const llvm::Triple &Triple,179const llvm::opt::ArgList &Args,180std::vector<StringRef> &Features,181llvm::opt::OptSpecifier Group);182183/// If there are multiple +xxx or -xxx features, keep the last one.184SmallVector<StringRef> unifyTargetFeatures(ArrayRef<StringRef> Features);185186/// Handles the -save-stats option and returns the filename to save statistics187/// to.188SmallString<128> getStatsFileName(const llvm::opt::ArgList &Args,189const InputInfo &Output,190const InputInfo &Input, const Driver &D);191192/// \p Flag must be a flag accepted by the driver.193void addMultilibFlag(bool Enabled, const StringRef Flag,194Multilib::flags_list &Flags);195196void addX86AlignBranchArgs(const Driver &D, const llvm::opt::ArgList &Args,197llvm::opt::ArgStringList &CmdArgs, bool IsLTO,198const StringRef PluginOptPrefix = "");199200void checkAMDGPUCodeObjectVersion(const Driver &D,201const llvm::opt::ArgList &Args);202203unsigned getAMDGPUCodeObjectVersion(const Driver &D,204const llvm::opt::ArgList &Args);205206bool haveAMDGPUCodeObjectVersionArgument(const Driver &D,207const llvm::opt::ArgList &Args);208209void addMachineOutlinerArgs(const Driver &D, const llvm::opt::ArgList &Args,210llvm::opt::ArgStringList &CmdArgs,211const llvm::Triple &Triple, bool IsLTO,212const StringRef PluginOptPrefix = "");213214void addOpenMPDeviceRTL(const Driver &D, const llvm::opt::ArgList &DriverArgs,215llvm::opt::ArgStringList &CC1Args,216StringRef BitcodeSuffix, const llvm::Triple &Triple,217const ToolChain &HostTC);218219void addOutlineAtomicsArgs(const Driver &D, const ToolChain &TC,220const llvm::opt::ArgList &Args,221llvm::opt::ArgStringList &CmdArgs,222const llvm::Triple &Triple);223void addOffloadCompressArgs(const llvm::opt::ArgList &TCArgs,224llvm::opt::ArgStringList &CmdArgs);225void addMCModel(const Driver &D, const llvm::opt::ArgList &Args,226const llvm::Triple &Triple,227const llvm::Reloc::Model &RelocationModel,228llvm::opt::ArgStringList &CmdArgs);229230} // end namespace tools231} // end namespace driver232} // end namespace clang233234clang::CodeGenOptions::FramePointerKind235getFramePointerKind(const llvm::opt::ArgList &Args, const llvm::Triple &Triple);236237#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H238239240