diff options
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)) | 

