The changes in D122444 caused OpenMP programs built with the LLVM_ENABLE_RUNTIMES options to stop finding the libraries. We generally expect to link against the libraries associated with the clang installation itself but we no longer implicitly included that directory. This patch adds in the include path of the clang installations library to ensure we can find them. Reviewed By: jdoerfert, MaskRay Differential Revision: https://reviews.llvm.org/D122592
203 lines
9.4 KiB
C++
203 lines
9.4 KiB
C++
//===--- CommonArgs.h - Args handling for multiple toolchains ---*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H
|
|
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H
|
|
|
|
#include "clang/Driver/Driver.h"
|
|
#include "clang/Driver/InputInfo.h"
|
|
#include "clang/Driver/Multilib.h"
|
|
#include "clang/Driver/Tool.h"
|
|
#include "clang/Driver/ToolChain.h"
|
|
#include "llvm/Support/CodeGen.h"
|
|
|
|
namespace clang {
|
|
namespace driver {
|
|
namespace tools {
|
|
|
|
void addPathIfExists(const Driver &D, const Twine &Path,
|
|
ToolChain::path_list &Paths);
|
|
|
|
void AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs,
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs, const JobAction &JA);
|
|
|
|
void addLinkerCompressDebugSectionsOption(const ToolChain &TC,
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
void claimNoWarnArgs(const llvm::opt::ArgList &Args);
|
|
|
|
bool addSanitizerRuntimes(const ToolChain &TC, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
void linkSanitizerRuntimeDeps(const ToolChain &TC,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
bool addXRayRuntime(const ToolChain &TC, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
void linkXRayRuntimeDeps(const ToolChain &TC,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
void AddRunTimeLibs(const ToolChain &TC, const Driver &D,
|
|
llvm::opt::ArgStringList &CmdArgs,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
void AddStaticDeviceLibsLinking(Compilation &C, const Tool &T,
|
|
const JobAction &JA,
|
|
const InputInfoList &Inputs,
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CmdArgs,
|
|
StringRef Arch, StringRef Target,
|
|
bool isBitCodeSDL, bool postClangLink);
|
|
void AddStaticDeviceLibsPostLinking(const Driver &D,
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CmdArgs,
|
|
StringRef Arch, StringRef Target,
|
|
bool isBitCodeSDL, bool postClangLink);
|
|
void AddStaticDeviceLibs(Compilation *C, const Tool *T, const JobAction *JA,
|
|
const InputInfoList *Inputs, const Driver &D,
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CmdArgs, StringRef Arch,
|
|
StringRef Target, bool isBitCodeSDL,
|
|
bool postClangLink);
|
|
|
|
bool SDLSearch(const Driver &D, const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CmdArgs,
|
|
SmallVector<std::string, 8> LibraryPaths, std::string Lib,
|
|
StringRef Arch, StringRef Target, bool isBitCodeSDL,
|
|
bool postClangLink);
|
|
|
|
bool GetSDLFromOffloadArchive(Compilation &C, const Driver &D, const Tool &T,
|
|
const JobAction &JA, const InputInfoList &Inputs,
|
|
const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args,
|
|
SmallVector<std::string, 8> LibraryPaths,
|
|
StringRef Lib, StringRef Arch, StringRef Target,
|
|
bool isBitCodeSDL, bool postClangLink);
|
|
|
|
const char *SplitDebugName(const JobAction &JA, const llvm::opt::ArgList &Args,
|
|
const InputInfo &Input, const InputInfo &Output);
|
|
|
|
void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T,
|
|
const JobAction &JA, const llvm::opt::ArgList &Args,
|
|
const InputInfo &Output, const char *OutFile);
|
|
|
|
void addLTOOptions(const ToolChain &ToolChain, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs, const InputInfo &Output,
|
|
const InputInfo &Input, bool IsThinLTO);
|
|
|
|
std::tuple<llvm::Reloc::Model, unsigned, bool>
|
|
ParsePICArgs(const ToolChain &ToolChain, const llvm::opt::ArgList &Args);
|
|
|
|
unsigned ParseFunctionAlignment(const ToolChain &TC,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
unsigned ParseDebugDefaultVersion(const ToolChain &TC,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
void AddAssemblerKPIC(const ToolChain &ToolChain,
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
|
|
void addOpenMPRuntimeSpecificRPath(const ToolChain &TC,
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
void addArchSpecificRPath(const ToolChain &TC, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
void addOpenMPRuntimeLibraryPath(const ToolChain &TC,
|
|
const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs);
|
|
/// Returns true, if an OpenMP runtime has been added.
|
|
bool addOpenMPRuntime(llvm::opt::ArgStringList &CmdArgs, const ToolChain &TC,
|
|
const llvm::opt::ArgList &Args,
|
|
bool ForceStaticHostRuntime = false,
|
|
bool IsOffloadingHost = false, bool GompNeedsRT = false);
|
|
|
|
const char *getAsNeededOption(const ToolChain &TC, bool as_needed);
|
|
|
|
llvm::opt::Arg *getLastProfileUseArg(const llvm::opt::ArgList &Args);
|
|
llvm::opt::Arg *getLastProfileSampleUseArg(const llvm::opt::ArgList &Args);
|
|
|
|
bool isObjCAutoRefCount(const llvm::opt::ArgList &Args);
|
|
|
|
llvm::StringRef getLTOParallelism(const llvm::opt::ArgList &Args,
|
|
const Driver &D);
|
|
|
|
bool areOptimizationsEnabled(const llvm::opt::ArgList &Args);
|
|
|
|
bool isUseSeparateSections(const llvm::Triple &Triple);
|
|
|
|
/// \p EnvVar is split by system delimiter for environment variables.
|
|
/// If \p ArgName is "-I", "-L", or an empty string, each entry from \p EnvVar
|
|
/// is prefixed by \p ArgName then added to \p Args. Otherwise, for each
|
|
/// entry of \p EnvVar, \p ArgName is added to \p Args first, then the entry
|
|
/// itself is added.
|
|
void addDirectoryList(const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs, const char *ArgName,
|
|
const char *EnvVar);
|
|
|
|
void AddTargetFeature(const llvm::opt::ArgList &Args,
|
|
std::vector<StringRef> &Features,
|
|
llvm::opt::OptSpecifier OnOpt,
|
|
llvm::opt::OptSpecifier OffOpt, StringRef FeatureName);
|
|
|
|
std::string getCPUName(const Driver &D, const llvm::opt::ArgList &Args,
|
|
const llvm::Triple &T, bool FromAs = false);
|
|
|
|
/// Iterate \p Args and convert -mxxx to +xxx and -mno-xxx to -xxx and
|
|
/// append it to \p Features.
|
|
///
|
|
/// Note: Since \p Features may contain default values before calling
|
|
/// this function, or may be appended with entries to override arguments,
|
|
/// entries in \p Features are not unique.
|
|
void handleTargetFeaturesGroup(const llvm::opt::ArgList &Args,
|
|
std::vector<StringRef> &Features,
|
|
llvm::opt::OptSpecifier Group);
|
|
|
|
/// If there are multiple +xxx or -xxx features, keep the last one.
|
|
std::vector<StringRef>
|
|
unifyTargetFeatures(const std::vector<StringRef> &Features);
|
|
|
|
/// Handles the -save-stats option and returns the filename to save statistics
|
|
/// to.
|
|
SmallString<128> getStatsFileName(const llvm::opt::ArgList &Args,
|
|
const InputInfo &Output,
|
|
const InputInfo &Input, const Driver &D);
|
|
|
|
/// \p Flag must be a flag accepted by the driver with its leading '-' removed,
|
|
// otherwise '-print-multi-lib' will not emit them correctly.
|
|
void addMultilibFlag(bool Enabled, const char *const Flag,
|
|
Multilib::flags_list &Flags);
|
|
|
|
void addX86AlignBranchArgs(const Driver &D, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs, bool IsLTO);
|
|
|
|
void checkAMDGPUCodeObjectVersion(const Driver &D,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
unsigned getAMDGPUCodeObjectVersion(const Driver &D,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
bool haveAMDGPUCodeObjectVersionArgument(const Driver &D,
|
|
const llvm::opt::ArgList &Args);
|
|
|
|
void addMachineOutlinerArgs(const Driver &D, const llvm::opt::ArgList &Args,
|
|
llvm::opt::ArgStringList &CmdArgs,
|
|
const llvm::Triple &Triple, bool IsLTO);
|
|
|
|
void addOpenMPDeviceRTL(const Driver &D, const llvm::opt::ArgList &DriverArgs,
|
|
llvm::opt::ArgStringList &CC1Args,
|
|
StringRef BitcodeSuffix, const llvm::Triple &Triple);
|
|
} // end namespace tools
|
|
} // end namespace driver
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_COMMONARGS_H
|