diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-01-16 20:25:36 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-01-16 20:25:36 +0000 |
| commit | 1e3677c907d69208563d08febc7f800969acb8be (patch) | |
| tree | 6eb4f7c90b51e2d66fa98d35f5b8536ecac2a62f /clang/tools/ccc/ccclib/ToolChain.py | |
| parent | 762edbc0748814eb88b1a66b0b54d106cbb02b65 (diff) | |
| download | bcm5719-llvm-1e3677c907d69208563d08febc7f800969acb8be.tar.gz bcm5719-llvm-1e3677c907d69208563d08febc7f800969acb8be.zip | |
ccc: Darwin/X86: Implement remainder of (non -Z...) generic argument
translation.
- As is my general strategy, this is initially pedantically
compatible with gcc and can be cleaned up later. So, for example,
we still pass -static to collect2 4 times if you say '-mkernel
-fapple-kext'. ;)
llvm-svn: 62353
Diffstat (limited to 'clang/tools/ccc/ccclib/ToolChain.py')
| -rw-r--r-- | clang/tools/ccc/ccclib/ToolChain.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/clang/tools/ccc/ccclib/ToolChain.py b/clang/tools/ccc/ccclib/ToolChain.py index 85113285120..7ca1257f496 100644 --- a/clang/tools/ccc/ccclib/ToolChain.py +++ b/clang/tools/ccc/ccclib/ToolChain.py @@ -95,12 +95,46 @@ class Darwin_X86_ToolChain(ToolChain): if not arch: return args + # FIXME: We really want to get out of the tool chain level + # argument translation business, as it makes the driver + # functionality much more opaque. For now, we follow gcc + # closely solely for the purpose of easily achieving feature + # parity & testability. Once we have something that works, we + # should reevaluate each translation and try to push it down + # into tool specific logic. + al = Arguments.DerivedArgList(args) if not args.getLastArg(args.parser.m_macosxVersionMinOption): al.append(al.makeJoinedArg(self.getMacosxVersionMin(), args.parser.m_macosxVersionMinOption)) for arg in args: - if arg.opt is args.parser.f_constantCfstringsOption: + # Sob. These is strictly gcc compatible for the time + # being. Apple gcc translates options twice, which means + # that self-expanding options add duplicates. + if arg.opt is args.parser.m_kernelOption: + al.append(arg) + al.append(al.makeFlagArg(args.parser.staticOption)) + al.append(al.makeFlagArg(args.parser.staticOption)) + elif arg.opt is args.parser.dependencyFileOption: + al.append(al.makeSeparateArg(args.getValue(arg), + args.parser.MFOption)) + elif arg.opt is args.parser.gfullOption: + al.append(al.makeFlagArg(args.parser.gOption)) + al.append(al.makeFlagArg(args.parser.f_noEliminateUnusedDebugSymbolsOption)) + elif arg.opt is args.parser.gusedOption: + al.append(al.makeFlagArg(args.parser.gOption)) + al.append(al.makeFlagArg(args.parser.f_eliminateUnusedDebugSymbolsOption)) + elif arg.opt is args.parser.f_appleKextOption: + al.append(arg) + al.append(al.makeFlagArg(args.parser.staticOption)) + al.append(al.makeFlagArg(args.parser.staticOption)) + elif arg.opt is args.parser.f_terminatedVtablesOption: + al.append(al.makeFlagArg(args.parser.f_appleKextOption)) + al.append(al.makeFlagArg(args.parser.staticOption)) + elif arg.opt is args.parser.f_indirectVirtualCallsOption: + al.append(al.makeFlagArg(args.parser.f_appleKextOption)) + al.append(al.makeFlagArg(args.parser.staticOption)) + elif arg.opt is args.parser.f_constantCfstringsOption: al.append(al.makeFlagArg(args.parser.m_constantCfstringsOption)) elif arg.opt is args.parser.f_noConstantCfstringsOption: al.append(al.makeFlagArg(args.parser.m_noConstantCfstringsOption)) |

