Lift AddLinkRuntimeLibArgs into Darwin tool chain.

llvm-svn: 82212
This commit is contained in:
Daniel Dunbar 2009-09-18 08:15:03 +00:00
parent d5bd81e869
commit 26d482a1a9
3 changed files with 52 additions and 43 deletions

View File

@ -154,6 +154,52 @@ void Darwin::AddLinkSearchPathArgs(const ArgList &Args,
"/../../.."));
}
void Darwin::AddLinkRuntimeLibArgs(const ArgList &Args,
ArgStringList &CmdArgs) const {
unsigned MacosxVersionMin[3];
getMacosxVersionMin(Args, MacosxVersionMin);
// Derived from libgcc and lib specs but refactored.
if (Args.hasArg(options::OPT_static)) {
CmdArgs.push_back("-lgcc_static");
} else {
if (Args.hasArg(options::OPT_static_libgcc)) {
CmdArgs.push_back("-lgcc_eh");
} else if (Args.hasArg(options::OPT_miphoneos_version_min_EQ)) {
// Derived from darwin_iphoneos_libgcc spec.
if (isIPhone()) {
CmdArgs.push_back("-lgcc_s.1");
} else {
CmdArgs.push_back("-lgcc_s.10.5");
}
} else if (Args.hasArg(options::OPT_shared_libgcc) ||
// FIXME: -fexceptions -fno-exceptions means no exceptions
Args.hasArg(options::OPT_fexceptions) ||
Args.hasArg(options::OPT_fgnu_runtime)) {
// FIXME: This is probably broken on 10.3?
if (isMacosxVersionLT(MacosxVersionMin, 10, 5))
CmdArgs.push_back("-lgcc_s.10.4");
else if (isMacosxVersionLT(MacosxVersionMin, 10, 6))
CmdArgs.push_back("-lgcc_s.10.5");
} else {
if (isMacosxVersionLT(MacosxVersionMin, 10, 3, 9))
; // Do nothing.
else if (isMacosxVersionLT(MacosxVersionMin, 10, 5))
CmdArgs.push_back("-lgcc_s.10.4");
else if (isMacosxVersionLT(MacosxVersionMin, 10, 6))
CmdArgs.push_back("-lgcc_s.10.5");
}
if (isIPhone() || isMacosxVersionLT(MacosxVersionMin, 10, 6)) {
CmdArgs.push_back("-lgcc");
CmdArgs.push_back("-lSystem");
} else {
CmdArgs.push_back("-lSystem");
CmdArgs.push_back("-lgcc");
}
}
}
void Darwin::getMacosxVersionMin(const ArgList &Args,
unsigned (&Res)[3]) const {
if (Arg *A = Args.getLastArg(options::OPT_mmacosx_version_min_EQ)) {

View File

@ -124,6 +124,10 @@ public:
/// (prefixed by -L) to.
void AddLinkSearchPathArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
/// AddLinkRuntimeLibArgs - Add the linker arguments to link the compiler
/// runtime library.
void AddLinkRuntimeLibArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
bool isIPhone() const { return IsIPhone; }
/// }

View File

@ -2020,49 +2020,8 @@ void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
// link_ssp spec is empty.
// Derived from libgcc and lib specs but refactored.
if (Args.hasArg(options::OPT_static)) {
CmdArgs.push_back("-lgcc_static");
} else {
if (Args.hasArg(options::OPT_static_libgcc)) {
CmdArgs.push_back("-lgcc_eh");
} else if (Args.hasArg(options::OPT_miphoneos_version_min_EQ)) {
// Derived from darwin_iphoneos_libgcc spec.
if (getDarwinToolChain().isIPhone()) {
CmdArgs.push_back("-lgcc_s.1");
} else {
CmdArgs.push_back("-lgcc_s.10.5");
}
} else if (Args.hasArg(options::OPT_shared_libgcc) ||
// FIXME: -fexceptions -fno-exceptions means no exceptions
Args.hasArg(options::OPT_fexceptions) ||
Args.hasArg(options::OPT_fgnu_runtime)) {
// FIXME: This is probably broken on 10.3?
if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin, 10, 5))
CmdArgs.push_back("-lgcc_s.10.4");
else if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin,
10, 6))
CmdArgs.push_back("-lgcc_s.10.5");
} else {
if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin, 10, 3, 9))
; // Do nothing.
else if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin,
10, 5))
CmdArgs.push_back("-lgcc_s.10.4");
else if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin,
10, 6))
CmdArgs.push_back("-lgcc_s.10.5");
}
if (getDarwinToolChain().isIPhone() ||
getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin, 10, 6)) {
CmdArgs.push_back("-lgcc");
CmdArgs.push_back("-lSystem");
} else {
CmdArgs.push_back("-lSystem");
CmdArgs.push_back("-lgcc");
}
}
// Let the tool chain choose which runtime library to link.
getDarwinToolChain().AddLinkRuntimeLibArgs(Args, CmdArgs);
}
if (!Args.hasArg(options::OPT_A) &&