diff options
Diffstat (limited to 'clang/tools/ccc')
| -rw-r--r-- | clang/tools/ccc/ccclib/ToolChain.py | 17 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/Tools.py | 14 | 
2 files changed, 24 insertions, 7 deletions
| diff --git a/clang/tools/ccc/ccclib/ToolChain.py b/clang/tools/ccc/ccclib/ToolChain.py index 564b6173fac..73b0127e144 100644 --- a/clang/tools/ccc/ccclib/ToolChain.py +++ b/clang/tools/ccc/ccclib/ToolChain.py @@ -205,9 +205,10 @@ class Generic_GCC_ToolChain(ToolChain):      def __init__(self, driver):          super(Generic_GCC_ToolChain, self).__init__(driver)          cc = Tools.GCC_CompileTool() +        self.clangTool = Tools.Clang_CompileTool(self)          self.toolMap = {              Phases.PreprocessPhase : Tools.GCC_PreprocessTool(), -            Phases.AnalyzePhase : Tools.Clang_CompileTool(self), +            Phases.AnalyzePhase : self.clangTool,              Phases.SyntaxOnlyPhase : cc,              Phases.EmitLLVMPhase : cc,              Phases.CompilePhase : cc, @@ -218,4 +219,18 @@ class Generic_GCC_ToolChain(ToolChain):      def selectTool(self, action):          assert isinstance(action, Phases.JobAction) + +        if self.driver.cccClang: +            if (action.inputs[0].type in (Types.CType, Types.CTypeNoPP, +                                          Types.ObjCType, Types.ObjCTypeNoPP) and +                (isinstance(action.phase, Phases.PreprocessPhase) or +                 isinstance(action.phase, Phases.CompilePhase) or +                 isinstance(action.phase, Phases.SyntaxOnlyPhase) or +                 isinstance(action.phase, Phases.EmitLLVMPhase))): +                return self.clangTool +            elif (action.inputs[0].type in (Types.CHeaderType, Types.CHeaderNoPPType, +                                            Types.ObjCHeaderType, Types.ObjCHeaderNoPPType) and +                  isinstance(action.phase, Phases.PrecompilePhase)): +                return self.clangTool +          return self.toolMap[action.phase.__class__] diff --git a/clang/tools/ccc/ccclib/Tools.py b/clang/tools/ccc/ccclib/Tools.py index 62720624cb1..a24255c652f 100644 --- a/clang/tools/ccc/ccclib/Tools.py +++ b/clang/tools/ccc/ccclib/Tools.py @@ -247,12 +247,14 @@ class Clang_CompileTool(Tool):                            not arglist.getLastArg(arglist.parser.staticOption) and                            not arglist.getLastArg(arglist.parser.m_dynamicNoPicOption))) -            archName = arglist.getValue(arch) -            if (archName == 'x86_64' or  -                picEnabled): -                cmd_args.append('--relocation-model=pic') -            elif not arglist.getLastArg(arglist.parser.m_dynamicNoPicOption): -                cmd_args.append('--relocation-model=static') +            # FIXME: This needs to tie into a platform hook. +            if arch: +                archName = arglist.getValue(arch) +                if (archName == 'x86_64' or  +                    picEnabled): +                    cmd_args.append('--relocation-model=pic') +                elif not arglist.getLastArg(arglist.parser.m_dynamicNoPicOption): +                    cmd_args.append('--relocation-model=static')              if arglist.getLastArg(arglist.parser.f_timeReportOption):                  cmd_args.append('--time-passes') | 

