1317019Sdim//===--- CommonArgs.h - Args handling for multiple toolchains ---*- C++ -*-===// 2317019Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317019Sdim// 7317019Sdim//===----------------------------------------------------------------------===// 8317019Sdim 9317019Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H 10317019Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H 11317019Sdim 12317019Sdim#include "InputInfo.h" 13317019Sdim#include "clang/Driver/Driver.h" 14353358Sdim#include "clang/Driver/Multilib.h" 15317019Sdim#include "clang/Driver/Tool.h" 16317019Sdim#include "clang/Driver/ToolChain.h" 17317019Sdim#include "llvm/Support/CodeGen.h" 18317019Sdim 19317019Sdimnamespace clang { 20317019Sdimnamespace driver { 21317019Sdimnamespace tools { 22317019Sdim 23317019Sdimvoid addPathIfExists(const Driver &D, const Twine &Path, 24317019Sdim ToolChain::path_list &Paths); 25317019Sdim 26317019Sdimvoid AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs, 27317019Sdim const llvm::opt::ArgList &Args, 28317019Sdim llvm::opt::ArgStringList &CmdArgs, const JobAction &JA); 29317019Sdim 30317019Sdimvoid claimNoWarnArgs(const llvm::opt::ArgList &Args); 31317019Sdim 32317019Sdimbool addSanitizerRuntimes(const ToolChain &TC, const llvm::opt::ArgList &Args, 33317019Sdim llvm::opt::ArgStringList &CmdArgs); 34317019Sdim 35317019Sdimvoid linkSanitizerRuntimeDeps(const ToolChain &TC, 36317019Sdim llvm::opt::ArgStringList &CmdArgs); 37317019Sdim 38341825Sdimbool addXRayRuntime(const ToolChain &TC, const llvm::opt::ArgList &Args, 39341825Sdim llvm::opt::ArgStringList &CmdArgs); 40341825Sdim 41341825Sdimvoid linkXRayRuntimeDeps(const ToolChain &TC, 42341825Sdim llvm::opt::ArgStringList &CmdArgs); 43341825Sdim 44317019Sdimvoid AddRunTimeLibs(const ToolChain &TC, const Driver &D, 45317019Sdim llvm::opt::ArgStringList &CmdArgs, 46317019Sdim const llvm::opt::ArgList &Args); 47317019Sdim 48341825Sdimvoid AddHIPLinkerScript(const ToolChain &TC, Compilation &C, 49341825Sdim const InputInfo &Output, const InputInfoList &Inputs, 50341825Sdim const llvm::opt::ArgList &Args, 51341825Sdim llvm::opt::ArgStringList &CmdArgs, const JobAction &JA, 52341825Sdim const Tool &T); 53341825Sdim 54317019Sdimconst char *SplitDebugName(const llvm::opt::ArgList &Args, 55353358Sdim const InputInfo &Input, const InputInfo &Output); 56317019Sdim 57317019Sdimvoid SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, 58317019Sdim const JobAction &JA, const llvm::opt::ArgList &Args, 59317019Sdim const InputInfo &Output, const char *OutFile); 60317019Sdim 61317019Sdimvoid AddGoldPlugin(const ToolChain &ToolChain, const llvm::opt::ArgList &Args, 62341825Sdim llvm::opt::ArgStringList &CmdArgs, const InputInfo &Output, 63341825Sdim const InputInfo &Input, bool IsThinLTO); 64317019Sdim 65317019Sdimstd::tuple<llvm::Reloc::Model, unsigned, bool> 66317019SdimParsePICArgs(const ToolChain &ToolChain, const llvm::opt::ArgList &Args); 67317019Sdim 68341825Sdimunsigned ParseFunctionAlignment(const ToolChain &TC, 69341825Sdim const llvm::opt::ArgList &Args); 70341825Sdim 71360784Sdimunsigned ParseDebugDefaultVersion(const ToolChain &TC, 72360784Sdim const llvm::opt::ArgList &Args); 73360784Sdim 74317019Sdimvoid AddAssemblerKPIC(const ToolChain &ToolChain, 75317019Sdim const llvm::opt::ArgList &Args, 76317019Sdim llvm::opt::ArgStringList &CmdArgs); 77317019Sdim 78317019Sdimvoid addArchSpecificRPath(const ToolChain &TC, const llvm::opt::ArgList &Args, 79317019Sdim llvm::opt::ArgStringList &CmdArgs); 80317230Sdim/// Returns true, if an OpenMP runtime has been added. 81317230Sdimbool addOpenMPRuntime(llvm::opt::ArgStringList &CmdArgs, const ToolChain &TC, 82317230Sdim const llvm::opt::ArgList &Args, 83360784Sdim bool ForceStaticHostRuntime = false, 84317230Sdim bool IsOffloadingHost = false, bool GompNeedsRT = false); 85317019Sdim 86317019Sdimllvm::opt::Arg *getLastProfileUseArg(const llvm::opt::ArgList &Args); 87317019Sdimllvm::opt::Arg *getLastProfileSampleUseArg(const llvm::opt::ArgList &Args); 88317019Sdim 89317019Sdimbool isObjCAutoRefCount(const llvm::opt::ArgList &Args); 90317019Sdim 91317019Sdimunsigned getLTOParallelism(const llvm::opt::ArgList &Args, const Driver &D); 92317019Sdim 93317019Sdimbool areOptimizationsEnabled(const llvm::opt::ArgList &Args); 94317019Sdim 95317019Sdimbool isUseSeparateSections(const llvm::Triple &Triple); 96317019Sdim 97317019Sdimvoid addDirectoryList(const llvm::opt::ArgList &Args, 98317019Sdim llvm::opt::ArgStringList &CmdArgs, const char *ArgName, 99317019Sdim const char *EnvVar); 100317019Sdim 101317019Sdimvoid AddTargetFeature(const llvm::opt::ArgList &Args, 102317019Sdim std::vector<StringRef> &Features, 103317019Sdim llvm::opt::OptSpecifier OnOpt, 104317019Sdim llvm::opt::OptSpecifier OffOpt, StringRef FeatureName); 105317019Sdim 106317019Sdimstd::string getCPUName(const llvm::opt::ArgList &Args, const llvm::Triple &T, 107317019Sdim bool FromAs = false); 108317019Sdim 109317019Sdimvoid handleTargetFeaturesGroup(const llvm::opt::ArgList &Args, 110317019Sdim std::vector<StringRef> &Features, 111317019Sdim llvm::opt::OptSpecifier Group); 112317019Sdim 113341825Sdim/// Handles the -save-stats option and returns the filename to save statistics 114341825Sdim/// to. 115341825SdimSmallString<128> getStatsFileName(const llvm::opt::ArgList &Args, 116341825Sdim const InputInfo &Output, 117341825Sdim const InputInfo &Input, const Driver &D); 118353358Sdim 119353358Sdim/// \p Flag must be a flag accepted by the driver with its leading '-' removed, 120353358Sdim// otherwise '-print-multi-lib' will not emit them correctly. 121353358Sdimvoid addMultilibFlag(bool Enabled, const char *const Flag, 122353358Sdim Multilib::flags_list &Flags); 123353358Sdim 124317019Sdim} // end namespace tools 125317019Sdim} // end namespace driver 126317019Sdim} // end namespace clang 127317019Sdim 128317019Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H 129