From df49b7cf2f0c6fc01509446e72181efca2a28023 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 29 Jan 2009 06:12:22 +0000 Subject: [PATCH] ccc: Honor -ccc-clang for generic GCC toolchain. llvm-svn: 63277 --- clang/tools/ccc/ccclib/ToolChain.py | 17 ++++++++++++++++- 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 564b6173facc..73b0127e1448 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 62720624cb1c..a24255c652f6 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')