From: Daniel Dunbar Date: Wed, 14 Jan 2009 01:50:15 +0000 (+0000) Subject: ccc: Implement argument translation for clang. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bfcbc90938ad002af50445f78984d202e103465c;p=clang ccc: Implement argument translation for clang. - This is what ccc (old) currently handles. - Clang accepts some more things that aren't getting forwarded... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62210 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/ccc/ccclib/Arguments.py b/tools/ccc/ccclib/Arguments.py index 9471e4fced..103bc70fe7 100644 --- a/tools/ccc/ccclib/Arguments.py +++ b/tools/ccc/ccclib/Arguments.py @@ -727,7 +727,11 @@ class OptionParser: self.f_noEliminateUnusedDebugSymbolsOption = self.addOption(FlagOption('-fno-eliminate-unused-debug-symbols', self.fGroup)) self.f_exceptionsOption = self.addOption(FlagOption('-fexceptions', self.fGroup)) self.f_objcOption = self.addOption(FlagOption('-fobjc', self.fGroup)) + self.f_objcGcOption = self.addOption(FlagOption('-fobjc-gc', self.fGroup)) + self.f_objcGcOnlyOption = self.addOption(FlagOption('-fobjc-gc-only', self.fGroup)) self.f_openmpOption = self.addOption(FlagOption('-fopenmp', self.fGroup)) + self.f_gnuRuntimeOption = self.addOption(FlagOption('-fgnu-runtime', self.fGroup)) + self.f_nextRuntimeOption = self.addOption(FlagOption('-fnext-runtime', self.fGroup)) self.f_constantCfstringsOption = self.addOption(FlagOption('-fconstant-cfstrings', self.fGroup)) self.f_noConstantCfstringsOption = self.addOption(FlagOption('-fno-constant-cfstrings', self.fGroup)) self.f_pascalStringsOption = self.addOption(FlagOption('-fpascal-strings', self.fGroup)) diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py index f47d3aa6a5..26200f1b9f 100644 --- a/tools/ccc/ccclib/Tools.py +++ b/tools/ccc/ccclib/Tools.py @@ -172,18 +172,60 @@ class GCC_LinkTool(GCC_Common_Tool): output, outputType, arglist, []) -class Clang_CompileTool(GCC_Common_Tool): +class Clang_CompileTool(Tool): def __init__(self): super(Clang_CompileTool, self).__init__('clang', - (Tool.eFlagsPipedInput | - Tool.eFlagsPipedOutput | - Tool.eFlagsIntegratedCPP)) + (Tool.eFlagsPipedInput | + Tool.eFlagsPipedOutput | + Tool.eFlagsIntegratedCPP)) def constructJob(self, phase, arch, jobs, inputs, output, outputType, arglist): - return super(Clang_CompileTool, self).constructJob(phase, arch, jobs, inputs, - output, outputType, arglist, - ['-S']) + cmd_args = [] + + if output is None: + cmd_args.append('-fsyntax-only') + elif outputType is Types.AsmTypeNoPP: + cmd_args.append('-S') + else: + raise ValueError,"Unexpected output type for clang tool." + + arglist.addAllArgs(cmd_args, arglist.parser.vOption) + arglist.addAllArgs(cmd_args, arglist.parser.f_objcGcOption) + arglist.addAllArgs(cmd_args, arglist.parser.f_objcGcOnlyOption) + arglist.addAllArgs(cmd_args, arglist.parser.f_nextRuntimeOption) + arglist.addAllArgs(cmd_args, arglist.parser.f_gnuRuntimeOption) + arglist.addAllArgs2(cmd_args, arglist.parser.DOption, arglist.parser.UOption) + arglist.addAllArgs2(cmd_args, arglist.parser.IOption, arglist.parser.FOption) + arglist.addAllArgs(cmd_args, arglist.parser.stdOption) + arglist.addAllArgs(cmd_args, arglist.parser.m_macosxVersionMinOption) + + # Special case debug options to only pass -g to clang. This is + # wrong. + if arglist.getLastArg(arglist.parser.gGroup): + cmd_args.append('-g') + + # FIXME: Clang isn't going to accept just anything here. + arglist.addAllArgs(cmd_args, arglist.parser.iGroup) + + # FIXME: Dehardcode this. + cmd_args.append('-fblocks') + + if arch is not None: + cmd_args.extend(arglist.render(arch)) + + cmd_args.extend(arglist.render(output)) + + for input in inputs: + cmd_args.append('-x') + cmd_args.append(input.type.name) + if isinstance(input.source, Jobs.PipedJob): + cmd_args.append('-') + else: + cmd_args.extend(arglist.renderAsInput(input.source)) + + jobs.addJob(Jobs.Command('clang', cmd_args)) + class Darwin_X86_CompileTool(Tool): def __init__(self, toolChain):