aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2011-11-17 00:36:57 +0000
committerDaniel Dunbar <daniel@zuster.org>2011-11-17 00:36:57 +0000
commitf471487ff1e673531543576bc170898c2ab19f41 (patch)
tree409c13c546ec7eefbb3795b33781b3e1a4bad88f
parent643ffaa3a2cf619c048305680bda1a337ed4b7bd (diff)
clang/Darwin: Use the compiler-rt provided profile library.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144869 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Driver/ToolChains.cpp13
-rw-r--r--lib/Driver/Tools.cpp9
-rw-r--r--runtime/compiler-rt/Makefile4
3 files changed, 16 insertions, 10 deletions
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index b232bc0584..f4209ad08a 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -454,6 +454,19 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,
return;
}
+ // If we are building profile support, link that library in.
+ if (Args.hasArg(options::OPT_fprofile_arcs) ||
+ Args.hasArg(options::OPT_fprofile_generate) ||
+ Args.hasArg(options::OPT_fcreate_profile) ||
+ Args.hasArg(options::OPT_coverage)) {
+ // Select the appropriate runtime library for the target.
+ if (isTargetIPhoneOS()) {
+ AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.profile_ios.a");
+ } else {
+ AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.profile_osx.a");
+ }
+ }
+
// Otherwise link libSystem, then the dynamic runtime library, and finally any
// target specific static runtime library.
CmdArgs.push_back("-lSystem");
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 52438cc34d..906f2ae0db 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -160,13 +160,6 @@ static void addProfileRT(const ToolChain &TC, const ArgList &Args,
std::string ProfileRT =
std::string(TC.getDriver().Dir) + "/../lib/libprofile_rt.a";
- if (Triple.isOSDarwin()) {
- // On Darwin, if the static library doesn't exist try the dylib.
- bool Exists;
- if (llvm::sys::fs::exists(ProfileRT, Exists) || !Exists)
- ProfileRT.replace(ProfileRT.size() - 1, 1, "dylib");
- }
-
CmdArgs.push_back(Args.MakeArgString(ProfileRT));
}
@@ -3589,8 +3582,6 @@ void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
// endfile_spec is empty.
}
- addProfileRT(getToolChain(), Args, CmdArgs, getToolChain().getTriple());
-
Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
Args.AddAllArgs(CmdArgs, options::OPT_F);
diff --git a/runtime/compiler-rt/Makefile b/runtime/compiler-rt/Makefile
index 8963c393f3..bba8fb3048 100644
--- a/runtime/compiler-rt/Makefile
+++ b/runtime/compiler-rt/Makefile
@@ -76,7 +76,9 @@ ifeq ($(shell test -d $(COMPILERRT_SRC_ROOT) && echo OK),OK)
RuntimeDirs :=
ifeq ($(OS),Darwin)
RuntimeDirs += darwin
-RuntimeLibrary.darwin.Configs := eprintf 10.4 osx ios cc_kext
+RuntimeLibrary.darwin.Configs := \
+ eprintf 10.4 osx ios cc_kext \
+ profile_osx profile_ios
# On Darwin, fake Clang into using the iOS assembler (since compiler-rt wants to
# build ARM bits).