From 3cde3251edc0323ea91f2d8a110737c90722c7e8 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 14 Jan 2009 19:42:31 +0000 Subject: [PATCH] ccc: Finish main clang compiler argument translation. - Still missing some odds and ends like -M. - Also, we still need to do some translation and forwarding of codegen options. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62241 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/ccc/ccclib/Arguments.py | 54 +++++++++++++++++++++++++---------- tools/ccc/ccclib/Tools.py | 28 +++++++++++++----- 2 files changed, 60 insertions(+), 22 deletions(-) diff --git a/tools/ccc/ccclib/Arguments.py b/tools/ccc/ccclib/Arguments.py index 103bc70fe7..97564558a6 100644 --- a/tools/ccc/ccclib/Arguments.py +++ b/tools/ccc/ccclib/Arguments.py @@ -50,8 +50,8 @@ class OptionGroup(Option): """OptionGroup - A fake option class used to group options so that the driver can efficiently refer to an entire set of options.""" - def __init__(self, name): - super(OptionGroup, self).__init__(name) + def __init__(self, name, group=None): + super(OptionGroup, self).__init__(name, group) def accept(self, index, arg, it): raise RuntimeError,"accept() should never be called on an OptionGroup" @@ -671,6 +671,8 @@ class OptionParser: # C options for testing + self.trigraphsOption = self.addOption(FlagOption('-trigraphs')) + # FIXME: This is broken, we need -A as a single option to send # stuff to cc1, but the way the ld spec is constructed it # wants to see -A options but only as a separate arg. @@ -718,33 +720,42 @@ class OptionParser: self.g3Option = self.addOption(JoinedOption('-g3', self.gGroup)) self.gOption = self.addOption(JoinedOption('-g', self.gGroup)) + # FIXME: How should we handle clang specific options? Do we + # want to avoid passing them to gcc/cc1 (which will generally + # not eat them), or should we let the user sort it out. + self.fGroup = OptionGroup('-f') self.fastOption = self.addOption(FlagOption('-fast', self.fGroup)) self.fastfOption = self.addOption(FlagOption('-fastf', self.fGroup)) self.fastcpOption = self.addOption(FlagOption('-fastcp', self.fGroup)) self.f_appleKextOption = self.addOption(FlagOption('-fapple-kext', self.fGroup)) - self.f_noEliminateUnusedDebugSymbolsOption = self.addOption(FlagOption('-fno-eliminate-unused-debug-symbols', self.fGroup)) + self.f_constantCfstringsOption = self.addOption(FlagOption('-fconstant-cfstrings', self.fGroup)) + self.f_createProfileOption = self.addOption(FlagOption('-fcreate-profile', 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)) - self.f_noPascalStringsOption = self.addOption(FlagOption('-fno-pascal-strings', self.fGroup)) self.f_gnuRuntimeOption = self.addOption(FlagOption('-fgnu-runtime', self.fGroup)) + self.f_laxVectorConversionsOption = self.addOption(FlagOption('-flax-vector-conversions', self.fGroup)) + self.f_msExtensionsOption = self.addOption(FlagOption('-fms-extensions', self.fGroup)) self.f_mudflapOption = self.addOption(FlagOption('-fmudflap', self.fGroup)) self.f_mudflapthOption = self.addOption(FlagOption('-fmudflapth', self.fGroup)) self.f_nestedFunctionsOption = self.addOption(FlagOption('-fnested-functions', self.fGroup)) + self.f_nextRuntimeOption = self.addOption(FlagOption('-fnext-runtime', self.fGroup)) + self.f_noCaretDiagnosticsOption = self.addOption(FlagOption('-fno-caret-diagnostics', self.fGroup)) + self.f_noConstantCfstringsOption = self.addOption(FlagOption('-fno-constant-cfstrings', self.fGroup)) + self.f_noEliminateUnusedDebugSymbolsOption = self.addOption(FlagOption('-fno-eliminate-unused-debug-symbols', self.fGroup)) + self.f_noPascalStringsOption = self.addOption(FlagOption('-fno-pascal-strings', self.fGroup)) + self.f_noShowColumnOption = self.addOption(FlagOption('-fno-show-column', self.fGroup)) + self.f_objcGcOnlyOption = self.addOption(FlagOption('-fobjc-gc-only', self.fGroup)) + self.f_objcGcOption = self.addOption(FlagOption('-fobjc-gc', self.fGroup)) + self.f_objcOption = self.addOption(FlagOption('-fobjc', self.fGroup)) + self.f_openmpOption = self.addOption(FlagOption('-fopenmp', self.fGroup)) + self.f_pascalStringsOption = self.addOption(FlagOption('-fpascal-strings', self.fGroup)) self.f_pieOption = self.addOption(FlagOption('-fpie', self.fGroup)) self.f_profileArcsOption = self.addOption(FlagOption('-fprofile-arcs', self.fGroup)) self.f_profileGenerateOption = self.addOption(FlagOption('-fprofile-generate', self.fGroup)) - self.f_createProfileOption = self.addOption(FlagOption('-fcreate-profile', self.fGroup)) self.f_traditionalOption = self.addOption(FlagOption('-ftraditional', self.fGroup)) + self.f_writableStringsOption = self.addOption(FlagOption('-fwritable-strings', self.fGroup)) self.addOption(JoinedOption('-f', self.fGroup)) self.coverageOption = self.addOption(FlagOption('-coverage')) @@ -776,13 +787,26 @@ class OptionParser: self.ansiOption = self.addOption(FlagOption('-ansi', self.aGroup)) self.aOption = self.addOption(JoinedOption('-a', self.aGroup)) - self.trigraphsOption = self.addOption(FlagOption('-trigraphs')) - self.pedanticOption = self.addOption(FlagOption('-pedantic')) + self.pedanticGroup = OptionGroup('-pedantic') + self.pedanticOption = self.addOption(FlagOption('-pedantic', self.pedanticGroup)) + self.pedanticErrorsOption = self.addOption(FlagOption('-pedantic-errors', self.pedanticGroup)) self.OOption = self.addOption(JoinedOption('-O')) + self.WGroup = OptionGroup('-W') + self.ClangWGroup = OptionGroup('-W', self.WGroup) + + self.addOption(JoinedOption('-Wunused-macros', self.ClangWGroup)) + self.addOption(JoinedOption('-Wfloat-equal', self.ClangWGroup)) + self.addOption(JoinedOption('-Wreadonly-setter-attrs', self.ClangWGroup)) + self.addOption(JoinedOption('-Wno-format-nonliteral', self.ClangWGroup)) + self.addOption(JoinedOption('-Wundef', self.ClangWGroup)) + self.addOption(JoinedOption('-Wimplicit-function-declaration', self.ClangWGroup)) + self.addOption(JoinedOption('-Wno-strict-selector-match', self.ClangWGroup)) + self.WnonportableCfstringsOption = self.addOption(JoinedOption('-Wnonportable-cfstrings', self.WGroup)) self.WnoNonportableCfstringsOption = self.addOption(JoinedOption('-Wno-nonportable-cfstrings', self.WGroup)) self.WOption = self.addOption(JoinedOption('-W', self.WGroup)) + # FIXME: Weird. This option isn't really separate, --param=a=b # works. There is something else going on which interprets the # '='. diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py index 90723069a3..3341287a85 100644 --- a/tools/ccc/ccclib/Tools.py +++ b/tools/ccc/ccclib/Tools.py @@ -191,13 +191,8 @@ class Clang_CompileTool(Tool): 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 @@ -205,12 +200,31 @@ class Clang_CompileTool(Tool): if arglist.getLastArg(arglist.parser.gGroup): cmd_args.append('-g') + arglist.addLastArg(cmd_args, arglist.parser.nostdincOption) + # FIXME: Clang isn't going to accept just anything here. arglist.addAllArgs(cmd_args, arglist.parser.iGroup) # FIXME: Dehardcode this. cmd_args.append('-fblocks') + arglist.addAllArgs(cmd_args, arglist.parser.OOption) + arglist.addAllArgs2(cmd_args, arglist.parser.ClangWGroup, arglist.parser.pedanticGroup) + arglist.addLastArg(cmd_args, arglist.parser.wOption) + arglist.addAllArgs3(cmd_args, arglist.parser.stdOption, arglist.parser.ansiOption, arglist.parser.trigraphsOption) + + 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.addLastArg(cmd_args, arglist.parser.f_exceptionsOption) + arglist.addLastArg(cmd_args, arglist.parser.f_laxVectorConversionsOption) + arglist.addLastArg(cmd_args, arglist.parser.f_msExtensionsOption) + arglist.addLastArg(cmd_args, arglist.parser.f_noCaretDiagnosticsOption) + arglist.addLastArg(cmd_args, arglist.parser.f_noShowColumnOption) + arglist.addLastArg(cmd_args, arglist.parser.f_pascalStringsOption) + arglist.addLastArg(cmd_args, arglist.parser.f_writableStringsOption) + if arch is not None: cmd_args.extend(arglist.render(arch)) @@ -474,10 +488,10 @@ class Darwin_X86_CompileTool(Tool): cmd_args.append(self.getBaseInputStem(inputs, arglist)) arglist.addAllArgs(cmd_args, arglist.parser.gGroup) - + arglist.addAllArgs(cmd_args, arglist.parser.OOption) # FIXME: -Wall is getting some special treatment. Investigate. - arglist.addAllArgs2(cmd_args, arglist.parser.WGroup, arglist.parser.pedanticOption) + arglist.addAllArgs2(cmd_args, arglist.parser.WGroup, arglist.parser.pedanticGroup) arglist.addLastArg(cmd_args, arglist.parser.wOption) arglist.addAllArgs3(cmd_args, arglist.parser.stdOption, arglist.parser.ansiOption, arglist.parser.trigraphsOption) if arglist.getLastArg(arglist.parser.vOption): -- 2.40.0