]> granicus.if.org Git - clang/commitdiff
ccc: (Darwin) Move path resolution into ToolChain.
authorDaniel Dunbar <daniel@zuster.org>
Mon, 12 Jan 2009 07:45:49 +0000 (07:45 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Mon, 12 Jan 2009 07:45:49 +0000 (07:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62082 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/ToolChain.py
tools/ccc/ccclib/Tools.py

index db8dd0e414aa5ab6a753e731af1cb89f288a4ed2..2447b67052564ef234befba0a4cc80e2284bcfe1 100644 (file)
@@ -17,16 +17,28 @@ class ToolChain(object):
 class Darwin_X86_ToolChain(ToolChain):
     def __init__(self, driver, darwinVersion, gccVersion):
         super(Darwin_X86_ToolChain, self).__init__(driver)
+        assert isinstance(darwinVersion, tuple) and len(darwinVersion) == 3
+        assert isinstance(gccVersion, tuple) and len(gccVersion) == 3
+        self.darwinVersion = darwinVersion
+        self.gccVersion = gccVersion
+
         self.toolMap = {
             Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
             Phases.CompilePhase : Tools.GCC_CompileTool(),
             Phases.PrecompilePhase : Tools.GCC_PrecompileTool(),
-            Phases.AssemblePhase : Tools.DarwinAssembleTool(),
-            Phases.LinkPhase : Tools.Darwin_X86_LinkTool(darwinVersion,
-                                                         gccVersion),
+            Phases.AssemblePhase : Tools.Darwin_AssembleTool(self),
+            Phases.LinkPhase : Tools.Darwin_X86_LinkTool(self),
             Phases.LipoPhase : Tools.LipoTool(),
             }
 
+    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 selectTool(self, action):
         assert isinstance(action, Phases.JobAction)
         return self.toolMap[action.phase.__class__]
index a9209821488851117a1c7be9af7e9d27327e0d42..c850ef1a03603e11e32e4d27fb03f0205090108d 100644 (file)
@@ -99,10 +99,11 @@ class GCC_PrecompileTool(GCC_Common_Tool):
                                                             output, outputType, args, arglist,
                                                             [])
 
-class DarwinAssembleTool(Tool):
-    def __init__(self):
-        super(DarwinAssembleTool, self).__init__('as',
-                                                 Tool.eFlagsPipedInput)
+class Darwin_AssembleTool(Tool):
+    def __init__(self, toolChain):
+        super(Darwin_AssembleTool, self).__init__('as',
+                                                  Tool.eFlagsPipedInput)
+        self.toolChain = toolChain
 
     def constructJob(self, phase, arch, jobs, inputs, 
                      output, outputType, args, arglist):
@@ -120,7 +121,6 @@ class DarwinAssembleTool(Tool):
         if arch:
             cmd_args.extend(arglist.render(arch))
         cmd_args.append('-force_cpusubtype_ALL')
-        cmd_args.extend(arglist.render(output))
         if (arglist.getLastArg(arglist.parser.m_kernelOption) or
             arglist.getLastArg(arglist.parser.staticOption) or
             arglist.getLastArg(arglist.parser.f_appleKextOption)):
@@ -131,6 +131,7 @@ class DarwinAssembleTool(Tool):
                                     arglist.parser.XassemblerOption):
             cmd_args.extend(arglist.getValues(arg))
 
+        cmd_args.extend(arglist.render(output))
         if isinstance(input.source, Jobs.PipedJob):
             cmd_args.append('-')
         else:
@@ -138,7 +139,8 @@ class DarwinAssembleTool(Tool):
             
         # asm_final spec is empty.
 
-        jobs.addJob(Jobs.Command('as', cmd_args))
+        jobs.addJob(Jobs.Command(self.toolChain.getProgramPath('as'), 
+                                 cmd_args))
 
 class GCC_AssembleTool(GCC_Common_Tool):
     def __init__(self):
@@ -163,22 +165,12 @@ class GCC_LinkTool(GCC_Common_Tool):
                                                       [])
 
 class Darwin_X86_LinkTool(Tool):
-    def __init__(self, darwinVersion, gccVersion):
+    def __init__(self, toolChain):
         super(Darwin_X86_LinkTool, self).__init__('collect2')
-        assert isinstance(darwinVersion, tuple) and len(darwinVersion) == 3
-        assert isinstance(gccVersion, tuple) and len(gccVersion) == 3
-        self.darwinVersion = darwinVersion
-        self.gccVersion = gccVersion
-
-    def getCollect2Path(self):
-        return '/usr/libexec/gcc/%s/collect2' % self.getToolChainDir()
-        
-    def getToolChainDir(self):
-        return 'i686-apple-darwin%d/%s' % (self.darwinVersion[0],
-                                           '.'.join(map(str,self.gccVersion)))
+        self.toolChain = toolChain
 
     def getMacosxVersionMin(self):
-        major,minor,minorminor = self.darwinVersion
+        major,minor,minorminor = self.toolChain.darwinVersion
         return '%d.%d.%d' % (10, major-4, minor)
 
     def getMacosxVersionTuple(self, arglist):
@@ -191,7 +183,7 @@ class Darwin_X86_LinkTool(Tool):
             except:
                 raise ArgumentError,"invalid version number %r" % version
         else:
-            major,minor,minorminor = self.darwinVersion
+            major,minor,minorminor = self.toolChain.darwinVersion
             return (10, major-4, minor)
 
     def addDarwinArch(self, cmd_args, arch, arglist):
@@ -511,7 +503,7 @@ class Darwin_X86_LinkTool(Tool):
             cmd_args.append('-lgomp')
 
         # FIXME: Derive these correctly.
-        tcDir = self.getToolChainDir()
+        tcDir = self.toolChain.getToolChainDir()
         if arglist.getValue(arch) == 'x86_64':            
             cmd_args.extend(["-L/usr/lib/gcc/%s/x86_64" % tcDir,
                              "-L/usr/lib/gcc/%s/x86_64" % tcDir])
@@ -575,7 +567,8 @@ class Darwin_X86_LinkTool(Tool):
         arglist.addAllArgs(cmd_args, arglist.parser.TOption)
         arglist.addAllArgs(cmd_args, arglist.parser.FOption)
 
-        jobs.addJob(Jobs.Command(self.getCollect2Path(), cmd_args))
+        jobs.addJob(Jobs.Command(self.toolChain.getProgramPath('collect2'), 
+                                 cmd_args))
 
         # FIXME: We need to add a dsymutil job here in some particular
         # cases (basically whenever we have a c-family input we are