forked from OSchip/llvm-project
Fix the driver logic for recent versions of DragonFly.
Patch by John Marino. llvm-svn: 179334
This commit is contained in:
parent
a0f9512cb1
commit
65b8da0623
|
@ -2452,7 +2452,10 @@ DragonFly::DragonFly(const Driver &D, const llvm::Triple& Triple, const ArgList
|
|||
|
||||
getFilePaths().push_back(getDriver().Dir + "/../lib");
|
||||
getFilePaths().push_back("/usr/lib");
|
||||
getFilePaths().push_back("/usr/lib/gcc41");
|
||||
if (llvm::sys::fs::exists("/usr/lib/gcc47"))
|
||||
getFilePaths().push_back("/usr/lib/gcc47");
|
||||
else
|
||||
getFilePaths().push_back("/usr/lib/gcc44");
|
||||
}
|
||||
|
||||
Tool *DragonFly::buildAssembler() const {
|
||||
|
|
|
@ -6172,21 +6172,29 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
const InputInfoList &Inputs,
|
||||
const ArgList &Args,
|
||||
const char *LinkingOutput) const {
|
||||
bool UseGCC47 = false;
|
||||
const Driver &D = getToolChain().getDriver();
|
||||
ArgStringList CmdArgs;
|
||||
|
||||
if (llvm::sys::fs::exists("/usr/lib/gcc47", UseGCC47))
|
||||
UseGCC47 = false;
|
||||
|
||||
if (!D.SysRoot.empty())
|
||||
CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
|
||||
|
||||
CmdArgs.push_back("--eh-frame-hdr");
|
||||
if (Args.hasArg(options::OPT_static)) {
|
||||
CmdArgs.push_back("-Bstatic");
|
||||
} else {
|
||||
if (Args.hasArg(options::OPT_rdynamic))
|
||||
CmdArgs.push_back("-export-dynamic");
|
||||
if (Args.hasArg(options::OPT_shared))
|
||||
CmdArgs.push_back("-Bshareable");
|
||||
else {
|
||||
CmdArgs.push_back("-dynamic-linker");
|
||||
CmdArgs.push_back("/usr/libexec/ld-elf.so.2");
|
||||
}
|
||||
CmdArgs.push_back("--hash-style=both");
|
||||
}
|
||||
|
||||
// When building 32-bit code on DragonFly/pc64, we have to explicitly
|
||||
|
@ -6206,18 +6214,26 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
if (!Args.hasArg(options::OPT_nostdlib) &&
|
||||
!Args.hasArg(options::OPT_nostartfiles)) {
|
||||
if (!Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath("crt1.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath("crti.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
|
||||
} else {
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath("crti.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath("crtbeginS.o")));
|
||||
if (Args.hasArg(options::OPT_pg))
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("gcrt1.o")));
|
||||
else {
|
||||
if (Args.hasArg(options::OPT_pie))
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("Scrt1.o")));
|
||||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crt1.o")));
|
||||
}
|
||||
}
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crti.o")));
|
||||
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crtbeginS.o")));
|
||||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crtbegin.o")));
|
||||
}
|
||||
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_L);
|
||||
|
@ -6230,20 +6246,19 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
!Args.hasArg(options::OPT_nodefaultlibs)) {
|
||||
// FIXME: GCC passes on -lgcc, -lgcc_pic and a whole lot of
|
||||
// rpaths
|
||||
CmdArgs.push_back("-L/usr/lib/gcc41");
|
||||
if (UseGCC47)
|
||||
CmdArgs.push_back("-L/usr/lib/gcc47");
|
||||
else
|
||||
CmdArgs.push_back("-L/usr/lib/gcc44");
|
||||
|
||||
if (!Args.hasArg(options::OPT_static)) {
|
||||
CmdArgs.push_back("-rpath");
|
||||
CmdArgs.push_back("/usr/lib/gcc41");
|
||||
|
||||
CmdArgs.push_back("-rpath-link");
|
||||
CmdArgs.push_back("/usr/lib/gcc41");
|
||||
|
||||
CmdArgs.push_back("-rpath");
|
||||
CmdArgs.push_back("/usr/lib");
|
||||
|
||||
CmdArgs.push_back("-rpath-link");
|
||||
CmdArgs.push_back("/usr/lib");
|
||||
if (UseGCC47) {
|
||||
CmdArgs.push_back("-rpath");
|
||||
CmdArgs.push_back("/usr/lib/gcc47");
|
||||
} else {
|
||||
CmdArgs.push_back("-rpath");
|
||||
CmdArgs.push_back("/usr/lib/gcc44");
|
||||
}
|
||||
}
|
||||
|
||||
if (D.CCCIsCXX) {
|
||||
|
@ -6251,13 +6266,6 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-lm");
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-lgcc_pic");
|
||||
} else {
|
||||
CmdArgs.push_back("-lgcc");
|
||||
}
|
||||
|
||||
|
||||
if (Args.hasArg(options::OPT_pthread))
|
||||
CmdArgs.push_back("-lpthread");
|
||||
|
||||
|
@ -6265,23 +6273,42 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-lc");
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-lgcc_pic");
|
||||
if (UseGCC47) {
|
||||
if (Args.hasArg(options::OPT_static) ||
|
||||
Args.hasArg(options::OPT_static_libgcc)) {
|
||||
CmdArgs.push_back("-lgcc");
|
||||
CmdArgs.push_back("-lgcc_eh");
|
||||
} else {
|
||||
if (Args.hasArg(options::OPT_shared_libgcc)) {
|
||||
CmdArgs.push_back("-lgcc_pic");
|
||||
if (!Args.hasArg(options::OPT_shared))
|
||||
CmdArgs.push_back("-lgcc");
|
||||
} else {
|
||||
CmdArgs.push_back("-lgcc");
|
||||
CmdArgs.push_back("--as-needed");
|
||||
CmdArgs.push_back("-lgcc_pic");
|
||||
CmdArgs.push_back("--no-as-needed");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CmdArgs.push_back("-lgcc");
|
||||
if (Args.hasArg(options::OPT_shared)) {
|
||||
CmdArgs.push_back("-lgcc_pic");
|
||||
} else {
|
||||
CmdArgs.push_back("-lgcc");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!Args.hasArg(options::OPT_nostdlib) &&
|
||||
!Args.hasArg(options::OPT_nostartfiles)) {
|
||||
if (!Args.hasArg(options::OPT_shared))
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crtend.o")));
|
||||
else
|
||||
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crtendS.o")));
|
||||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crtend.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath("crtn.o")));
|
||||
getToolChain().GetFilePath("crtn.o")));
|
||||
}
|
||||
|
||||
addProfileRT(getToolChain(), Args, CmdArgs, getToolChain().getTriple());
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
|
@ -410,7 +411,10 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOp
|
|||
#endif
|
||||
break;
|
||||
case llvm::Triple::DragonFly:
|
||||
AddPath("/usr/include/c++/4.1", CXXSystem, false);
|
||||
if (llvm::sys::fs::exists("/usr/lib/gcc47"))
|
||||
AddPath("/usr/include/c++/4.7", CXXSystem, false);
|
||||
else
|
||||
AddPath("/usr/include/c++/4.4", CXXSystem, false);
|
||||
break;
|
||||
case llvm::Triple::FreeBSD:
|
||||
// FreeBSD 8.0
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang -no-canonical-prefixes -target amd64-pc-dragonfly %s -### 2> %t.log
|
||||
// RUN: %clang -no-canonical-prefixes -target x86_64-pc-dragonfly %s -### 2> %t.log
|
||||
// RUN: FileCheck -input-file %t.log %s
|
||||
|
||||
// CHECK: clang{{.*}}" "-cc1" "-triple" "amd64-pc-dragonfly"
|
||||
// CHECK: ld{{.*}}" "-dynamic-linker" "{{.*}}ld-elf.{{.*}}" "-o" "a.out" "{{.*}}crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-L{{.*}}/gcc{{.*}}" {{.*}} "-lc" "-lgcc" "{{.*}}crtend.o" "{{.*}}crtn.o"
|
||||
// CHECK: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-dragonfly"
|
||||
// CHECK: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/usr/libexec/ld-elf.so.{{.*}}" "--hash-style=both" "-o" "a.out" "/usr/lib/crt1.o" "{{.*}}crti.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-L/usr/lib/gcc4{{.*}}" "-rpath" "/usr/lib/gcc4{{.*}}" "-lc" "-lgcc" "{{.*}}crtend.o" "{{.*}}crtn.o"
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue