From 26d482a1a966ae57d59b2f5ea66b860551f8ab59 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Fri, 18 Sep 2009 08:15:03 +0000 Subject: [PATCH] Lift AddLinkRuntimeLibArgs into Darwin tool chain. llvm-svn: 82212 --- clang/lib/Driver/ToolChains.cpp | 46 +++++++++++++++++++++++++++++++++ clang/lib/Driver/ToolChains.h | 4 +++ clang/lib/Driver/Tools.cpp | 45 ++------------------------------ 3 files changed, 52 insertions(+), 43 deletions(-) diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index ce4fc1eea3d9..5db58c1691ff 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -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)) { diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index 845be6a95514..91e5750dd63b 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -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; } /// } diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index f1535d8dc432..66053178e1c3 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -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) &&