diff options
| author | Robert Lytton <robert@xmos.com> | 2013-10-11 10:29:40 +0000 |
|---|---|---|
| committer | Robert Lytton <robert@xmos.com> | 2013-10-11 10:29:40 +0000 |
| commit | cf1dd692ae9ea626f08aada7e64c30a6f4354542 (patch) | |
| tree | 21de039083e9b49fe072170ea7eac902cf528711 /clang/lib/Driver/Tools.cpp | |
| parent | 2d1969584a85772e5e91c57339f1b9a87b8b5234 (diff) | |
| download | bcm5719-llvm-cf1dd692ae9ea626f08aada7e64c30a6f4354542.tar.gz bcm5719-llvm-cf1dd692ae9ea626f08aada7e64c30a6f4354542.zip | |
XCore target: add an xcore toolchain implementation
llvm-svn: 192437
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index e849186d75c..f85ba80301f 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -6781,3 +6781,58 @@ Command *visualstudio::Compile::GetCommand(Compilation &C, const JobAction &JA, return new Command(JA, *this, Args.MakeArgString(Exec), CmdArgs); } + + +/// XCore Tools +// We pass assemble and link construction to the xcc tool. + +void XCore::Assemble::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + ArgStringList CmdArgs; + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + CmdArgs.push_back("-c"); + + if (Args.hasArg(options::OPT_g_Group)) { + CmdArgs.push_back("-g"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, + options::OPT_Xassembler); + + for (InputInfoList::const_iterator + it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) { + const InputInfo &II = *it; + CmdArgs.push_back(II.getFilename()); + } + + const char *Exec = + Args.MakeArgString(getToolChain().GetProgramPath("xcc")); + C.addCommand(new Command(JA, *this, Exec, CmdArgs)); +} + +void XCore::Link::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + ArgStringList CmdArgs; + + if (Output.isFilename()) { + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + } else { + assert(Output.isNothing() && "Invalid output."); + } + + AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs); + + const char *Exec = + Args.MakeArgString(getToolChain().GetProgramPath("xcc")); + C.addCommand(new Command(JA, *this, Exec, CmdArgs)); +} |

