forked from OSchip/llvm-project
add driver support for minix, patch by Kees van Reeuwijk
from PR7583 llvm-svn: 107788
This commit is contained in:
parent
e784616fbb
commit
3e2ee147d0
|
@ -76,6 +76,8 @@ const HostInfo *createOpenBSDHostInfo(const Driver &D,
|
|||
const llvm::Triple& Triple);
|
||||
const HostInfo *createFreeBSDHostInfo(const Driver &D,
|
||||
const llvm::Triple& Triple);
|
||||
const HostInfo *createMinixHostInfo(const Driver &D,
|
||||
const llvm::Triple& Triple);
|
||||
const HostInfo *createDragonFlyHostInfo(const Driver &D,
|
||||
const llvm::Triple& Triple);
|
||||
const HostInfo *createLinuxHostInfo(const Driver &D,
|
||||
|
|
|
@ -212,6 +212,30 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
// Minix Target
|
||||
template<typename Target>
|
||||
class MinixTargetInfo : public OSTargetInfo<Target> {
|
||||
protected:
|
||||
virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
|
||||
MacroBuilder &Builder) const {
|
||||
// Minix defines
|
||||
|
||||
Builder.defineMacro("__minix", "3");
|
||||
Builder.defineMacro("_EM_WSIZE", "4");
|
||||
Builder.defineMacro("_EM_PSIZE", "4");
|
||||
Builder.defineMacro("_EM_SSIZE", "2");
|
||||
Builder.defineMacro("_EM_LSIZE", "4");
|
||||
Builder.defineMacro("_EM_FSIZE", "4");
|
||||
Builder.defineMacro("_EM_DSIZE", "8");
|
||||
DefineStd(Builder, "unix", Opts);
|
||||
}
|
||||
public:
|
||||
MinixTargetInfo(const std::string &triple)
|
||||
: OSTargetInfo<Target>(triple) {
|
||||
this->UserLabelPrefix = "";
|
||||
}
|
||||
};
|
||||
|
||||
// Linux target
|
||||
template<typename Target>
|
||||
class LinuxTargetInfo : public OSTargetInfo<Target> {
|
||||
|
@ -2501,6 +2525,8 @@ static TargetInfo *AllocateTarget(const std::string &T) {
|
|||
return new OpenBSDI386TargetInfo(T);
|
||||
case llvm::Triple::FreeBSD:
|
||||
return new FreeBSDTargetInfo<X86_32TargetInfo>(T);
|
||||
case llvm::Triple::Minix:
|
||||
return new MinixTargetInfo<X86_32TargetInfo>(T);
|
||||
case llvm::Triple::Solaris:
|
||||
return new SolarisTargetInfo<X86_32TargetInfo>(T);
|
||||
case llvm::Triple::Cygwin:
|
||||
|
|
|
@ -2365,6 +2365,7 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() const {
|
|||
case llvm::Triple::DragonFly:
|
||||
case llvm::Triple::FreeBSD:
|
||||
case llvm::Triple::OpenBSD:
|
||||
case llvm::Triple::Minix:
|
||||
return *(TheTargetCodeGenInfo =
|
||||
new X86_32TargetCodeGenInfo(Context, false, true));
|
||||
|
||||
|
|
|
@ -1298,6 +1298,8 @@ const HostInfo *Driver::GetHostInfo(const char *TripleStr) const {
|
|||
return createOpenBSDHostInfo(*this, Triple);
|
||||
case llvm::Triple::FreeBSD:
|
||||
return createFreeBSDHostInfo(*this, Triple);
|
||||
case llvm::Triple::Minix:
|
||||
return createMinixHostInfo(*this, Triple);
|
||||
case llvm::Triple::Linux:
|
||||
return createLinuxHostInfo(*this, Triple);
|
||||
default:
|
||||
|
|
|
@ -425,6 +425,58 @@ ToolChain *FreeBSDHostInfo::CreateToolChain(const ArgList &Args,
|
|||
return TC;
|
||||
}
|
||||
|
||||
// Minix Host Info
|
||||
|
||||
/// MinixHostInfo - Minix host information implementation.
|
||||
class MinixHostInfo : public HostInfo {
|
||||
/// Cache of tool chains we have created.
|
||||
mutable llvm::StringMap<ToolChain*> ToolChains;
|
||||
|
||||
public:
|
||||
MinixHostInfo(const Driver &D, const llvm::Triple& Triple)
|
||||
: HostInfo(D, Triple) {}
|
||||
~MinixHostInfo();
|
||||
|
||||
virtual bool useDriverDriver() const;
|
||||
|
||||
virtual types::ID lookupTypeForExtension(const char *Ext) const {
|
||||
return types::lookupTypeForExtension(Ext);
|
||||
}
|
||||
|
||||
virtual ToolChain *CreateToolChain(const ArgList &Args,
|
||||
const char *ArchName) const;
|
||||
};
|
||||
|
||||
MinixHostInfo::~MinixHostInfo() {
|
||||
for (llvm::StringMap<ToolChain*>::iterator
|
||||
it = ToolChains.begin(), ie = ToolChains.end(); it != ie; ++it){
|
||||
delete it->second;
|
||||
}
|
||||
}
|
||||
|
||||
bool MinixHostInfo::useDriverDriver() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
ToolChain *MinixHostInfo::CreateToolChain(const ArgList &Args,
|
||||
const char *ArchName) const {
|
||||
assert(!ArchName &&
|
||||
"Unexpected arch name on platform without driver driver support.");
|
||||
|
||||
std::string Arch = getArchName();
|
||||
ArchName = Arch.c_str();
|
||||
|
||||
ToolChain *&TC = ToolChains[ArchName];
|
||||
if (!TC) {
|
||||
llvm::Triple TCTriple(getTriple());
|
||||
TCTriple.setArchName(ArchName);
|
||||
|
||||
TC = new toolchains::Minix(*this, TCTriple);
|
||||
}
|
||||
|
||||
return TC;
|
||||
}
|
||||
|
||||
// DragonFly Host Info
|
||||
|
||||
/// DragonFlyHostInfo - DragonFly host information implementation.
|
||||
|
@ -565,6 +617,12 @@ clang::driver::createFreeBSDHostInfo(const Driver &D,
|
|||
return new FreeBSDHostInfo(D, Triple);
|
||||
}
|
||||
|
||||
const HostInfo *
|
||||
clang::driver::createMinixHostInfo(const Driver &D,
|
||||
const llvm::Triple& Triple) {
|
||||
return new MinixHostInfo(D, Triple);
|
||||
}
|
||||
|
||||
const HostInfo *
|
||||
clang::driver::createDragonFlyHostInfo(const Driver &D,
|
||||
const llvm::Triple& Triple) {
|
||||
|
|
|
@ -908,6 +908,38 @@ Tool &FreeBSD::SelectTool(const Compilation &C, const JobAction &JA) const {
|
|||
return *T;
|
||||
}
|
||||
|
||||
/// Minix - Minix tool chain which can call as(1) and ld(1) directly.
|
||||
|
||||
Minix::Minix(const HostInfo &Host, const llvm::Triple& Triple)
|
||||
: Generic_GCC(Host, Triple) {
|
||||
getFilePaths().push_back(getDriver().Dir + "/../lib");
|
||||
getFilePaths().push_back("/usr/lib");
|
||||
getFilePaths().push_back("/usr/gnu/lib");
|
||||
getFilePaths().push_back("/usr/gnu/lib/gcc/i686-pc-minix/4.4.3");
|
||||
}
|
||||
|
||||
Tool &Minix::SelectTool(const Compilation &C, const JobAction &JA) const {
|
||||
Action::ActionClass Key;
|
||||
if (getDriver().ShouldUseClangCompiler(C, JA, getTriple()))
|
||||
Key = Action::AnalyzeJobClass;
|
||||
else
|
||||
Key = JA.getKind();
|
||||
|
||||
Tool *&T = Tools[Key];
|
||||
if (!T) {
|
||||
switch (Key) {
|
||||
case Action::AssembleJobClass:
|
||||
T = new tools::minix::Assemble(*this); break;
|
||||
case Action::LinkJobClass:
|
||||
T = new tools::minix::Link(*this); break;
|
||||
default:
|
||||
T = &Generic_GCC::SelectTool(C, JA);
|
||||
}
|
||||
}
|
||||
|
||||
return *T;
|
||||
}
|
||||
|
||||
/// AuroraUX - AuroraUX tool chain which can call as(1) and ld(1) directly.
|
||||
|
||||
AuroraUX::AuroraUX(const HostInfo &Host, const llvm::Triple& Triple)
|
||||
|
|
|
@ -271,6 +271,13 @@ public:
|
|||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY Minix : public Generic_GCC {
|
||||
public:
|
||||
Minix(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
||||
virtual Tool &SelectTool(const Compilation &C, const JobAction &JA) const;
|
||||
};
|
||||
|
||||
class LLVM_LIBRARY_VISIBILITY DragonFly : public Generic_GCC {
|
||||
public:
|
||||
DragonFly(const HostInfo &Host, const llvm::Triple& Triple);
|
||||
|
|
|
@ -2680,13 +2680,18 @@ void auroraux::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(C, "crt1.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crt1.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
} else {
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crti.o")));
|
||||
}
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtn.o")));
|
||||
}
|
||||
|
||||
CmdArgs.push_back(Args.MakeArgString("-L/opt/gcc4/lib/gcc/"
|
||||
|
@ -2731,9 +2736,8 @@ void auroraux::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(C, "crtend.o")));
|
||||
// else
|
||||
// CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtend.o")));
|
||||
}
|
||||
|
||||
const char *Exec =
|
||||
|
@ -2811,10 +2815,13 @@ void openbsd::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(C, "crt0.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crt0.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
} else {
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbeginS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtbeginS.o")));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2862,9 +2869,11 @@ void openbsd::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(C, "crtend.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtend.o")));
|
||||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtendS.o")));
|
||||
}
|
||||
|
||||
const char *Exec =
|
||||
|
@ -2954,12 +2963,17 @@ void freebsd::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(C, "crt1.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crt1.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
} else {
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbeginS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtbeginS.o")));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3019,10 +3033,13 @@ void freebsd::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(C, "crtend.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C,
|
||||
"crtend.o")));
|
||||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C,
|
||||
"crtendS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C,
|
||||
"crtn.o")));
|
||||
}
|
||||
|
||||
const char *Exec =
|
||||
|
@ -3030,6 +3047,109 @@ void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
|
||||
}
|
||||
|
||||
void minix::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
Job &Dest, const InputInfo &Output,
|
||||
const InputInfoList &Inputs,
|
||||
const ArgList &Args,
|
||||
const char *LinkingOutput) const {
|
||||
ArgStringList CmdArgs;
|
||||
|
||||
Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,
|
||||
options::OPT_Xassembler);
|
||||
|
||||
CmdArgs.push_back("-o");
|
||||
if (Output.isPipe())
|
||||
CmdArgs.push_back("-");
|
||||
else
|
||||
CmdArgs.push_back(Output.getFilename());
|
||||
|
||||
for (InputInfoList::const_iterator
|
||||
it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) {
|
||||
const InputInfo &II = *it;
|
||||
if (II.isPipe())
|
||||
CmdArgs.push_back("-");
|
||||
else
|
||||
CmdArgs.push_back(II.getFilename());
|
||||
}
|
||||
|
||||
const char *Exec =
|
||||
Args.MakeArgString(getToolChain().GetProgramPath(C, "gas"));
|
||||
Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
|
||||
}
|
||||
|
||||
void minix::Link::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
Job &Dest, const InputInfo &Output,
|
||||
const InputInfoList &Inputs,
|
||||
const ArgList &Args,
|
||||
const char *LinkingOutput) const {
|
||||
const Driver &D = getToolChain().getDriver();
|
||||
ArgStringList CmdArgs;
|
||||
|
||||
if (Output.isPipe()) {
|
||||
CmdArgs.push_back("-o");
|
||||
CmdArgs.push_back("-");
|
||||
} else if (Output.isFilename()) {
|
||||
CmdArgs.push_back("-o");
|
||||
CmdArgs.push_back(Output.getFilename());
|
||||
} else {
|
||||
assert(Output.isNothing() && "Invalid output.");
|
||||
}
|
||||
|
||||
if (!Args.hasArg(options::OPT_nostdlib) &&
|
||||
!Args.hasArg(options::OPT_nostartfiles))
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C,
|
||||
"/usr/gnu/lib/crtso.o")));
|
||||
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_L);
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_e);
|
||||
|
||||
for (InputInfoList::const_iterator
|
||||
it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) {
|
||||
const InputInfo &II = *it;
|
||||
|
||||
// Don't try to pass LLVM inputs to a generic gcc.
|
||||
if (II.getType() == types::TY_LLVM_IR || II.getType() == types::TY_LTO_IR ||
|
||||
II.getType() == types::TY_LLVM_BC || II.getType() == types::TY_LTO_BC)
|
||||
D.Diag(clang::diag::err_drv_no_linker_llvm_support)
|
||||
<< getToolChain().getTripleString();
|
||||
|
||||
if (II.isPipe())
|
||||
CmdArgs.push_back("-");
|
||||
else if (II.isFilename())
|
||||
CmdArgs.push_back(II.getFilename());
|
||||
else
|
||||
II.getInputArg().renderAsInput(Args, CmdArgs);
|
||||
}
|
||||
|
||||
if (!Args.hasArg(options::OPT_nostdlib) &&
|
||||
!Args.hasArg(options::OPT_nodefaultlibs)) {
|
||||
if (D.CCCIsCXX) {
|
||||
CmdArgs.push_back("-lstdc++");
|
||||
CmdArgs.push_back("-lm");
|
||||
}
|
||||
|
||||
if (Args.hasArg(options::OPT_pthread))
|
||||
CmdArgs.push_back("-lpthread");
|
||||
CmdArgs.push_back("-lc");
|
||||
CmdArgs.push_back("-lgcc");
|
||||
CmdArgs.push_back("-L/usr/gnu/lib");
|
||||
// FIXME: fill in the correct search path for the final
|
||||
// support libraries.
|
||||
CmdArgs.push_back("-L/usr/gnu/lib/gcc/i686-pc-minix/4.4.3");
|
||||
}
|
||||
|
||||
if (!Args.hasArg(options::OPT_nostdlib) &&
|
||||
!Args.hasArg(options::OPT_nostartfiles)) {
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C,
|
||||
"/usr/gnu/lib/libend.a")));
|
||||
}
|
||||
|
||||
const char *Exec =
|
||||
Args.MakeArgString(getToolChain().GetProgramPath(C, "/usr/gnu/bin/gld"));
|
||||
Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
|
||||
}
|
||||
|
||||
/// DragonFly Tools
|
||||
|
||||
// For now, DragonFly Assemble does just about the same as for
|
||||
|
@ -3108,12 +3228,17 @@ 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(C, "crt1.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath(C, "crt1.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o")));
|
||||
} else {
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbeginS.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath(C, "crti.o")));
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString(getToolChain().GetFilePath(C, "crtbeginS.o")));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3183,10 +3308,13 @@ 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(C, "crtend.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtend.o")));
|
||||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtendS.o")));
|
||||
CmdArgs.push_back(Args.MakeArgString(
|
||||
getToolChain().GetFilePath(C, "crtn.o")));
|
||||
}
|
||||
|
||||
const char *Exec =
|
||||
|
|
|
@ -377,6 +377,41 @@ namespace freebsd {
|
|||
};
|
||||
} // end namespace freebsd
|
||||
|
||||
/// minix -- Directly call GNU Binutils assembler and linker
|
||||
namespace minix {
|
||||
class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
|
||||
public:
|
||||
Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
|
||||
TC) {}
|
||||
|
||||
virtual bool acceptsPipedInput() const { return true; }
|
||||
virtual bool canPipeOutput() const { return true; }
|
||||
virtual bool hasIntegratedCPP() const { return false; }
|
||||
|
||||
virtual void ConstructJob(Compilation &C, const JobAction &JA,
|
||||
Job &Dest,
|
||||
const InputInfo &Output,
|
||||
const InputInfoList &Inputs,
|
||||
const ArgList &TCArgs,
|
||||
const char *LinkingOutput) const;
|
||||
};
|
||||
class LLVM_LIBRARY_VISIBILITY Link : public Tool {
|
||||
public:
|
||||
Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
|
||||
|
||||
virtual bool acceptsPipedInput() const { return true; }
|
||||
virtual bool canPipeOutput() const { return true; }
|
||||
virtual bool hasIntegratedCPP() const { return false; }
|
||||
|
||||
virtual void ConstructJob(Compilation &C, const JobAction &JA,
|
||||
Job &Dest,
|
||||
const InputInfo &Output,
|
||||
const InputInfoList &Inputs,
|
||||
const ArgList &TCArgs,
|
||||
const char *LinkingOutput) const;
|
||||
};
|
||||
} // end namespace minix
|
||||
|
||||
/// auroraux -- Directly call GNU Binutils assembler and linker
|
||||
namespace auroraux {
|
||||
class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
|
||||
|
|
|
@ -723,6 +723,10 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple) {
|
|||
// FreeBSD 7.3
|
||||
AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2", "", "", "", triple);
|
||||
break;
|
||||
case llvm::Triple::Minix:
|
||||
AddGnuCPlusPlusIncludePaths("/usr/gnu/include/c++/4.4.3",
|
||||
"", "", "", triple);
|
||||
break;
|
||||
case llvm::Triple::Solaris:
|
||||
// Solaris - Fall though..
|
||||
case llvm::Triple::AuroraUX:
|
||||
|
|
Loading…
Reference in New Issue