summaryrefslogtreecommitdiffstats
path: root/clang/tools/ccc/ccclib/ToolChain.py
diff options
context:
space:
mode:
Diffstat (limited to 'clang/tools/ccc/ccclib/ToolChain.py')
-rw-r--r--clang/tools/ccc/ccclib/ToolChain.py36
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))
OpenPOWER on IntegriCloud