diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-20 16:06:39 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-20 16:06:39 +0000 |
commit | 8cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6 (patch) | |
tree | af126a142d8171119413b3be1c4826dd8ea9ac42 /lib/Driver/Tools.cpp | |
parent | ca45cffe5e17f5c2cd2f4d9f631924c704f0f184 (diff) |
Driver: Add and use darwin::Assemble tool.
- Based on patch from Pieter de Bie; thanks!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67379 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Tools.cpp')
-rw-r--r-- | lib/Driver/Tools.cpp | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 9ac20f9c95..9a3930c5be 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -438,10 +438,56 @@ void gcc::Link::RenderExtraToolArgs(ArgStringList &CmdArgs) const { // The types are (hopefully) good enough. } +void darwin::Assemble::ConstructJob(Compilation &C, const JobAction &JA, + Job &Dest, const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + ArgStringList CmdArgs; + + assert(Inputs.size() == 1 && "Unexpected number of inputs."); + const InputInfo &Input = Inputs[0]; + + // Bit of a hack, this is only used for original inputs. + if (Input.isFilename() && + strcmp(Input.getFilename(), Input.getBaseInput()) == 0 && + Args.hasArg(options::OPT_g_Group)) + CmdArgs.push_back("--gstabs"); + + // Derived from asm spec. + CmdArgs.push_back("-arch"); + CmdArgs.push_back(getToolChain().getArchName().c_str()); + + CmdArgs.push_back("-force_cpusubtype_ALL"); + if ((Args.hasArg(options::OPT_mkernel) || + Args.hasArg(options::OPT_static) || + Args.hasArg(options::OPT_fapple_kext)) && + !Args.hasArg(options::OPT_dynamic)) + CmdArgs.push_back("-static"); + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, + options::OPT_Xassembler); + + assert(Output.isFilename() && "Unexpected lipo output."); + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + if (Input.isPipe()) { + CmdArgs.push_back("-"); + } else { + assert(Input.isFilename() && "Invalid input."); + CmdArgs.push_back(Input.getFilename()); + } + + // asm_final spec is empty. + + const char *Exec = + Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str()); + Dest.addCommand(new Command(Exec, CmdArgs)); +} void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA, - Job &Dest, - const InputInfo &Output, + Job &Dest, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const { |