diff options
Diffstat (limited to 'clang/tools')
| -rw-r--r-- | clang/tools/ccc/ccclib/Arguments.py | 2 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/Driver.py | 66 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/ToolChain.py | 33 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/Tools.py | 3 | 
4 files changed, 64 insertions, 40 deletions
| diff --git a/clang/tools/ccc/ccclib/Arguments.py b/clang/tools/ccc/ccclib/Arguments.py index d9fd11d3897..c79161ebae9 100644 --- a/clang/tools/ccc/ccclib/Arguments.py +++ b/clang/tools/ccc/ccclib/Arguments.py @@ -475,7 +475,7 @@ class OptionParser:          self.dumpversionOption = self.addOption(FlagOption('-dumpversion'))          self.dumpmachineOption = self.addOption(FlagOption('-dumpmachine'))          self.printSearchDirsOption = self.addOption(FlagOption('-print-search-dirs')) -        self.printLibgccFilenameOption = self.addOption(FlagOption('-print-libgcc-file-name')) +        self.printLibgccFileNameOption = self.addOption(FlagOption('-print-libgcc-file-name'))          # FIXME: Hrm, where does this come from? It isn't always true that          # we take both - and --. For example, gcc --S ... ends up sending          # -fS to cc1. Investigate. diff --git a/clang/tools/ccc/ccclib/Driver.py b/clang/tools/ccc/ccclib/Driver.py index de4596bf2c0..7f6082d953c 100644 --- a/clang/tools/ccc/ccclib/Driver.py +++ b/clang/tools/ccc/ccclib/Driver.py @@ -78,6 +78,24 @@ class Driver(object):      ### +    def getFilePath(self, name, toolChain=None): +        tc = toolChain or self.toolChain +        for p in tc.filePathPrefixes: +            path = os.path.join(p, name) +            if os.path.exists(path): +                return path +        return name + +    def getProgramPath(self, name, toolChain=None): +        tc = toolChain or self.toolChain +        for p in tc.programPathPrefixes: +            path = os.path.join(p, name) +            if os.path.exists(path): +                return path +        return name + +    ### +      def run(self, argv):          # FIXME: Things to support from environment: GCC_EXEC_PREFIX,          # COMPILER_PATH, LIBRARY_PATH, LPATH, CC_PRINT_OPTIONS, @@ -287,50 +305,32 @@ class Driver(object):          # FIXME: Do we want to report "argument unused" type errors in the          # presence of things like -dumpmachine and -print-search-dirs?          # Probably not. -        arg = args.getLastArg(self.parser.dumpmachineOption) +        arg = (args.getLastArg(self.parser.dumpmachineOption) or +               args.getLastArg(self.parser.dumpversionOption) or +               args.getLastArg(self.parser.printSearchDirsOption))          if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) +            raise NotImplementedError('%s unsupported' % arg.opt.name) -        arg = args.getLastArg(self.parser.dumpspecsOption) +        arg = (args.getLastArg(self.parser.dumpspecsOption) or +               args.getLastArg(self.parser.printMultiDirectoryOption) or +               args.getLastArg(self.parser.printMultiLibOption))          if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) - -        arg = args.getLastArg(self.parser.dumpversionOption) -        if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) +            raise Arguments.InvalidArgumentsError('%s unsupported by this driver' % arg.opt.name)          arg = args.getLastArg(self.parser.printFileNameOption)          if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) - -        arg = args.getLastArg(self.parser.printMultiDirectoryOption) -        if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) - -        arg = args.getLastArg(self.parser.printMultiLibOption) -        if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) +            print self.getFilePath(args.getValue(arg)) +            sys.exit(0)          arg = args.getLastArg(self.parser.printProgNameOption)          if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) - -        arg = args.getLastArg(self.parser.printLibgccFilenameOption) -        if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) +            print self.getProgramPath(args.getValue(arg)) +            sys.exit(0) -        arg = args.getLastArg(self.parser.printSearchDirsOption) +        arg = args.getLastArg(self.parser.printLibgccFileNameOption)          if arg: -            print 'FIXME: %s' % arg.opt.name -            sys.exit(1) +            print self.getFilePath('libgcc.a') +            sys.exit(0)      def buildNormalPipeline(self, args):          hasAnalyze = args.getLastArg(self.parser.analyzeOption) diff --git a/clang/tools/ccc/ccclib/ToolChain.py b/clang/tools/ccc/ccclib/ToolChain.py index ee244d7ec0b..20582a2b267 100644 --- a/clang/tools/ccc/ccclib/ToolChain.py +++ b/clang/tools/ccc/ccclib/ToolChain.py @@ -1,3 +1,5 @@ +import os +  import Arguments  import Phases  import Tools @@ -8,8 +10,18 @@ import Types  class ToolChain(object):      """ToolChain - Provide mappings of Actions to Tools.""" -    def __init__(self, driver): +    def __init__(self, driver,  +                 filePathPrefixes=[], +                 programPathPrefixes=[]):          self.driver = driver +        self.filePathPrefixes = list(filePathPrefixes) +        self.programPathPrefixes = list(programPathPrefixes) + +    def getFilePath(self, name): +        return self.driver.getFilePath(name, self) +         +    def getProgramPath(self, name): +        return self.driver.getProgramPath(name, self)      def selectTool(self, action):          """selectTool - Return a Tool instance to use for handling @@ -63,14 +75,25 @@ class Darwin_X86_ToolChain(ToolChain):              Phases.LipoPhase : Tools.LipoTool(),              } +        self.filePathPrefixes.append(os.path.join(self.driver.driverDir, +                                                  '../lib/gcc', +                                                  self.getToolChainDir())) +        self.filePathPrefixes.append(os.path.join(self.driver.driverDir, +                                                  '/usr/lib/gcc', +                                                  self.getToolChainDir())) + +        self.programPathPrefixes.append(os.path.join(self.driver.driverDir, +                                                  '../libexec/gcc', +                                                  self.getToolChainDir())) +        self.programPathPrefixes.append(os.path.join(self.driver.driverDir, +                                                  '/usr/libexec/gcc', +                                                  self.getToolChainDir())) +        self.programPathPrefixes.append(self.driver.driverDir) +      def getToolChainDir(self):          return 'i686-apple-darwin%d/%s' % (self.darwinVersion[0],                                             '.'.join(map(str,self.gccVersion))) -    def getProgramPath(self, name): -        # FIXME: Implement proper search. -        return '/usr/libexec/gcc/%s/%s' % (self.getToolChainDir(), name) -      def getMacosxVersionMin(self):          major,minor,minorminor = self.darwinVersion          return '%d.%d.%d' % (10, major-4, minor) diff --git a/clang/tools/ccc/ccclib/Tools.py b/clang/tools/ccc/ccclib/Tools.py index 11a6047182a..ae170d8ac2f 100644 --- a/clang/tools/ccc/ccclib/Tools.py +++ b/clang/tools/ccc/ccclib/Tools.py @@ -285,7 +285,8 @@ class Clang_CompileTool(Tool):              else:                  cmd_args.extend(arglist.renderAsInput(input.source)) -        jobs.addJob(Jobs.Command('clang', cmd_args)) +        jobs.addJob(Jobs.Command(self.toolChain.getProgramPath('clang'),  +                                 cmd_args))  class Darwin_X86_CC1Tool(Tool):      def getCC1Name(self, type): | 

