diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-31 17:45:15 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-31 17:45:15 +0000 |
commit | 68a31d406c6dc4382c700d1199b062de2aa7e1da (patch) | |
tree | 6ffa3e719975d6fa067bba8ca5e160191fd9c4cf /lib/Driver/Tools.cpp | |
parent | af07f936b698575f2c91f1c1134c116f1ef0dedd (diff) |
Driver: Call 'as' directly on FreeBSD.
- Patch by Ed Schouten!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68121 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Tools.cpp')
-rw-r--r-- | lib/Driver/Tools.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index cae0766873..2f8bc2f4ce 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1451,3 +1451,39 @@ void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA, Args.MakeArgString(getToolChain().GetProgramPath(C, "lipo").c_str()); Dest.addCommand(new Command(Exec, CmdArgs)); } + +void freebsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA, + Job &Dest, const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const +{ + ArgStringList CmdArgs; + + // Conceptually, i386 on x86_64 is a separate tool chain, but for + // now we just detect this situation by looking for -m32. + if (Args.hasArg(options::OPT_m32)) + CmdArgs.push_back("--32"); + + 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, "as").c_str()); + Dest.addCommand(new Command(Exec, CmdArgs)); +} |