diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-05-20 21:48:38 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-20 21:48:38 +0000 |
commit | 6232d347bc1d9b1e04bb06be15abe5e686d296ba (patch) | |
tree | ddd8156228a6a7548e9e04bf03c4fd1b22f46b27 /clang/lib/Driver/ToolChains.cpp | |
parent | 60d215b6fde739b78afd9acb6648cf85f099dc49 (diff) | |
download | bcm5719-llvm-6232d347bc1d9b1e04bb06be15abe5e686d296ba.tar.gz bcm5719-llvm-6232d347bc1d9b1e04bb06be15abe5e686d296ba.zip |
Driver: Switch to using the integrated assembler for standalone assembly jobs
(or -save-temps), when the integrated assembler is enabled.
llvm-svn: 104282
Diffstat (limited to 'clang/lib/Driver/ToolChains.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 1cd8ee186ca..abb55b07d10 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -11,6 +11,7 @@ #include "clang/Driver/Arg.h" #include "clang/Driver/ArgList.h" +#include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/HostInfo.h" @@ -190,6 +191,16 @@ Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA) const { else Key = JA.getKind(); + // FIXME: This doesn't belong here, but ideally we will support static soon + // anyway. + bool HasStatic = (C.getArgs().hasArg(options::OPT_mkernel) || + C.getArgs().hasArg(options::OPT_static) || + C.getArgs().hasArg(options::OPT_fapple_kext)); + bool IsIADefault = IsIntegratedAssemblerDefault() && !HasStatic; + bool UseIntegratedAs = C.getArgs().hasFlag(options::OPT_integrated_as, + options::OPT_no_integrated_as, + IsIADefault); + Tool *&T = Tools[Key]; if (!T) { switch (Key) { @@ -203,8 +214,13 @@ Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA) const { case Action::PrecompileJobClass: case Action::CompileJobClass: T = new tools::darwin::Compile(*this); break; - case Action::AssembleJobClass: - T = new tools::darwin::Assemble(*this); break; + case Action::AssembleJobClass: { + if (UseIntegratedAs) + T = new tools::ClangAs(*this); + else + T = new tools::darwin::Assemble(*this); + break; + } case Action::LinkJobClass: T = new tools::darwin::Link(*this); break; case Action::LipoJobClass: |