forked from OSchip/llvm-project
Driver: alter the getARMFloatABI signature
This changes getARMFloatABI to use the ToolChain and Args instead of Driver, Args, Triple. Although this pushes the Triple calculation/parsing into the function itself, it enables the use of the function for a future change. The reason to sink the triple calculation here is to avoid threading the Triple through multiple layers in a future change. llvm-svn: 248095
This commit is contained in:
parent
ce63ce947e
commit
06f6f995a1
|
@ -855,10 +855,10 @@ void MachO::AddLinkRuntimeLibArgs(const ArgList &Args,
|
||||||
// with different libraries for each member of the product { static, PIC } x
|
// with different libraries for each member of the product { static, PIC } x
|
||||||
// { hard-float, soft-float }
|
// { hard-float, soft-float }
|
||||||
llvm::SmallString<32> CompilerRT = StringRef("libclang_rt.");
|
llvm::SmallString<32> CompilerRT = StringRef("libclang_rt.");
|
||||||
CompilerRT += (tools::arm::getARMFloatABI(getDriver(), Args, getTriple()) ==
|
CompilerRT +=
|
||||||
tools::arm::FloatABI::Hard)
|
(tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)
|
||||||
? "hard"
|
? "hard"
|
||||||
: "soft";
|
: "soft";
|
||||||
CompilerRT += Args.hasArg(options::OPT_fPIC) ? "_pic.a" : "_static.a";
|
CompilerRT += Args.hasArg(options::OPT_fPIC) ? "_pic.a" : "_static.a";
|
||||||
|
|
||||||
AddLinkRuntimeLib(Args, CmdArgs, CompilerRT, false, true);
|
AddLinkRuntimeLib(Args, CmdArgs, CompilerRT, false, true);
|
||||||
|
|
|
@ -574,8 +574,9 @@ static bool useAAPCSForMachO(const llvm::Triple &T) {
|
||||||
|
|
||||||
// Select the float ABI as determined by -msoft-float, -mhard-float, and
|
// Select the float ABI as determined by -msoft-float, -mhard-float, and
|
||||||
// -mfloat-abi=.
|
// -mfloat-abi=.
|
||||||
arm::FloatABI arm::getARMFloatABI(const Driver &D, const ArgList &Args,
|
arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) {
|
||||||
const llvm::Triple &Triple) {
|
const Driver &D = TC.getDriver();
|
||||||
|
const llvm::Triple Triple(TC.ComputeEffectiveClangTriple(Args));
|
||||||
auto SubArch = getARMSubArchVersionNumber(Triple);
|
auto SubArch = getARMSubArchVersionNumber(Triple);
|
||||||
arm::FloatABI ABI = FloatABI::Invalid;
|
arm::FloatABI ABI = FloatABI::Invalid;
|
||||||
if (Arg *A =
|
if (Arg *A =
|
||||||
|
@ -663,13 +664,16 @@ arm::FloatABI arm::getARMFloatABI(const Driver &D, const ArgList &Args,
|
||||||
return ABI;
|
return ABI;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
static void getARMTargetFeatures(const ToolChain &TC,
|
||||||
|
const llvm::Triple &Triple,
|
||||||
const ArgList &Args,
|
const ArgList &Args,
|
||||||
std::vector<const char *> &Features,
|
std::vector<const char *> &Features,
|
||||||
bool ForAS) {
|
bool ForAS) {
|
||||||
|
const Driver &D = TC.getDriver();
|
||||||
|
|
||||||
bool KernelOrKext =
|
bool KernelOrKext =
|
||||||
Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext);
|
Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext);
|
||||||
arm::FloatABI ABI = arm::getARMFloatABI(D, Args, Triple);
|
arm::FloatABI ABI = arm::getARMFloatABI(TC, Args);
|
||||||
const Arg *WaCPU = nullptr, *WaFPU = nullptr;
|
const Arg *WaCPU = nullptr, *WaFPU = nullptr;
|
||||||
const Arg *WaHDiv = nullptr, *WaArch = nullptr;
|
const Arg *WaHDiv = nullptr, *WaArch = nullptr;
|
||||||
|
|
||||||
|
@ -892,8 +896,7 @@ void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,
|
||||||
CmdArgs.push_back(ABIName);
|
CmdArgs.push_back(ABIName);
|
||||||
|
|
||||||
// Determine floating point ABI from the options & target defaults.
|
// Determine floating point ABI from the options & target defaults.
|
||||||
arm::FloatABI ABI =
|
arm::FloatABI ABI = arm::getARMFloatABI(getToolChain(), Args);
|
||||||
arm::getARMFloatABI(getToolChain().getDriver(), Args, Triple);
|
|
||||||
if (ABI == arm::FloatABI::Soft) {
|
if (ABI == arm::FloatABI::Soft) {
|
||||||
// Floating point operations and argument passing are soft.
|
// Floating point operations and argument passing are soft.
|
||||||
// FIXME: This changes CPP defines, we need -target-soft-float.
|
// FIXME: This changes CPP defines, we need -target-soft-float.
|
||||||
|
@ -2108,9 +2111,10 @@ static void getWebAssemblyTargetFeatures(const ArgList &Args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
static void getTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple,
|
||||||
const ArgList &Args, ArgStringList &CmdArgs,
|
const ArgList &Args, ArgStringList &CmdArgs,
|
||||||
bool ForAS) {
|
bool ForAS) {
|
||||||
|
const Driver &D = TC.getDriver();
|
||||||
std::vector<const char *> Features;
|
std::vector<const char *> Features;
|
||||||
switch (Triple.getArch()) {
|
switch (Triple.getArch()) {
|
||||||
default:
|
default:
|
||||||
|
@ -2126,7 +2130,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||||
case llvm::Triple::armeb:
|
case llvm::Triple::armeb:
|
||||||
case llvm::Triple::thumb:
|
case llvm::Triple::thumb:
|
||||||
case llvm::Triple::thumbeb:
|
case llvm::Triple::thumbeb:
|
||||||
getARMTargetFeatures(D, Triple, Args, Features, ForAS);
|
getARMTargetFeatures(TC, Triple, Args, Features, ForAS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case llvm::Triple::ppc:
|
case llvm::Triple::ppc:
|
||||||
|
@ -3660,7 +3664,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the target features
|
// Add the target features
|
||||||
getTargetFeatures(D, Triple, Args, CmdArgs, false);
|
getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, false);
|
||||||
|
|
||||||
// Add target specific flags.
|
// Add target specific flags.
|
||||||
switch (getToolChain().getArch()) {
|
switch (getToolChain().getArch()) {
|
||||||
|
@ -5525,8 +5529,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the target features
|
// Add the target features
|
||||||
const Driver &D = getToolChain().getDriver();
|
getTargetFeatures(getToolChain(), Triple, Args, CmdArgs, true);
|
||||||
getTargetFeatures(D, Triple, Args, CmdArgs, true);
|
|
||||||
|
|
||||||
// Ignore explicit -force_cpusubtype_ALL option.
|
// Ignore explicit -force_cpusubtype_ALL option.
|
||||||
(void)Args.hasArg(options::OPT_force__cpusubtype__ALL);
|
(void)Args.hasArg(options::OPT_force__cpusubtype__ALL);
|
||||||
|
@ -7343,9 +7346,7 @@ void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
getToolChain().getArch() == llvm::Triple::armeb ||
|
getToolChain().getArch() == llvm::Triple::armeb ||
|
||||||
getToolChain().getArch() == llvm::Triple::thumb ||
|
getToolChain().getArch() == llvm::Triple::thumb ||
|
||||||
getToolChain().getArch() == llvm::Triple::thumbeb) {
|
getToolChain().getArch() == llvm::Triple::thumbeb) {
|
||||||
const Driver &D = getToolChain().getDriver();
|
arm::FloatABI ABI = arm::getARMFloatABI(getToolChain(), Args);
|
||||||
const llvm::Triple &Triple = getToolChain().getTriple();
|
|
||||||
arm::FloatABI ABI = arm::getARMFloatABI(D, Args, Triple);
|
|
||||||
|
|
||||||
if (ABI == arm::FloatABI::Hard)
|
if (ABI == arm::FloatABI::Hard)
|
||||||
CmdArgs.push_back("-mfpu=vfp");
|
CmdArgs.push_back("-mfpu=vfp");
|
||||||
|
@ -7932,7 +7933,7 @@ void gnutools::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (arm::getARMFloatABI(getToolChain().getDriver(), Args, Triple)) {
|
switch (arm::getARMFloatABI(getToolChain(), Args)) {
|
||||||
case arm::FloatABI::Invalid: llvm_unreachable("must have an ABI!");
|
case arm::FloatABI::Invalid: llvm_unreachable("must have an ABI!");
|
||||||
case arm::FloatABI::Soft:
|
case arm::FloatABI::Soft:
|
||||||
CmdArgs.push_back(Args.MakeArgString("-mfloat-abi=soft"));
|
CmdArgs.push_back(Args.MakeArgString("-mfloat-abi=soft"));
|
||||||
|
@ -8128,16 +8129,14 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
|
||||||
return "/lib/ld-linux-aarch64_be.so.1";
|
return "/lib/ld-linux-aarch64_be.so.1";
|
||||||
else if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb) {
|
else if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb) {
|
||||||
if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF ||
|
if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF ||
|
||||||
arm::getARMFloatABI(ToolChain.getDriver(), Args,
|
arm::getARMFloatABI(ToolChain, Args) == arm::FloatABI::Hard)
|
||||||
ToolChain.getTriple()) == arm::FloatABI::Hard)
|
|
||||||
return "/lib/ld-linux-armhf.so.3";
|
return "/lib/ld-linux-armhf.so.3";
|
||||||
else
|
else
|
||||||
return "/lib/ld-linux.so.3";
|
return "/lib/ld-linux.so.3";
|
||||||
} else if (Arch == llvm::Triple::armeb || Arch == llvm::Triple::thumbeb) {
|
} else if (Arch == llvm::Triple::armeb || Arch == llvm::Triple::thumbeb) {
|
||||||
// TODO: check which dynamic linker name.
|
// TODO: check which dynamic linker name.
|
||||||
if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF ||
|
if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF ||
|
||||||
arm::getARMFloatABI(ToolChain.getDriver(), Args,
|
arm::getARMFloatABI(ToolChain, Args) == arm::FloatABI::Hard)
|
||||||
ToolChain.getTriple()) == arm::FloatABI::Hard)
|
|
||||||
return "/lib/ld-linux-armhf.so.3";
|
return "/lib/ld-linux-armhf.so.3";
|
||||||
else
|
else
|
||||||
return "/lib/ld-linux.so.3";
|
return "/lib/ld-linux.so.3";
|
||||||
|
|
|
@ -724,8 +724,7 @@ enum class FloatABI {
|
||||||
Hard,
|
Hard,
|
||||||
};
|
};
|
||||||
|
|
||||||
FloatABI getARMFloatABI(const Driver &D, const llvm::opt::ArgList &Args,
|
FloatABI getARMFloatABI(const ToolChain &TC, const llvm::opt::ArgList &Args);
|
||||||
const llvm::Triple &Triple);
|
|
||||||
}
|
}
|
||||||
namespace XCore {
|
namespace XCore {
|
||||||
// For XCore, we do not need to instantiate tools for PreProcess, PreCompile and
|
// For XCore, we do not need to instantiate tools for PreProcess, PreCompile and
|
||||||
|
|
Loading…
Reference in New Issue