ccc: Add generic assembler & linker tools which effectively shell out
to gcc. llvm-svn: 62020
This commit is contained in:
parent
96977ae536
commit
eacf5b174d
|
|
@ -24,10 +24,6 @@ class GCC_Common_Tool(Tool):
|
||||||
def constructJob(self, phase, arch, jobs, inputs,
|
def constructJob(self, phase, arch, jobs, inputs,
|
||||||
output, outputType, args, arglist,
|
output, outputType, args, arglist,
|
||||||
extraArgs):
|
extraArgs):
|
||||||
assert len(inputs) == 1
|
|
||||||
|
|
||||||
input = inputs[0]
|
|
||||||
|
|
||||||
cmd_args = sum(map(arglist.render, args),[]) + extraArgs
|
cmd_args = sum(map(arglist.render, args),[]) + extraArgs
|
||||||
if arch:
|
if arch:
|
||||||
cmd_args.extend(arglist.render(arch))
|
cmd_args.extend(arglist.render(arch))
|
||||||
|
|
@ -38,17 +34,27 @@ class GCC_Common_Tool(Tool):
|
||||||
else:
|
else:
|
||||||
cmd_args.extend(arglist.render(output))
|
cmd_args.extend(arglist.render(output))
|
||||||
|
|
||||||
cmd_args.extend(['-x', input.type.name])
|
# Only pass -x if gcc will understand it; otherwise hope gcc
|
||||||
if isinstance(input.source, Jobs.PipedJob):
|
# understands the suffix correctly. The main use case this
|
||||||
cmd_args.append('-')
|
# would go wrong in is for linker inputs, say if the user
|
||||||
else:
|
# tried to make an executable named 'a.c'.
|
||||||
cmd_args.append(arglist.getValue(input.source))
|
#
|
||||||
|
# FIXME: For the linker case specifically, can we safely
|
||||||
|
# convert inputs into '-Wl,' options?
|
||||||
|
for input in inputs:
|
||||||
|
if input.type.canBeUserSpecified:
|
||||||
|
cmd_args.extend(['-x', input.type.name])
|
||||||
|
|
||||||
|
if isinstance(input.source, Jobs.PipedJob):
|
||||||
|
cmd_args.append('-')
|
||||||
|
else:
|
||||||
|
cmd_args.append(arglist.getValue(input.source))
|
||||||
|
|
||||||
jobs.addJob(Jobs.Command('gcc', cmd_args))
|
jobs.addJob(Jobs.Command('gcc', cmd_args))
|
||||||
|
|
||||||
class GCC_PreprocessTool(GCC_Common_Tool):
|
class GCC_PreprocessTool(GCC_Common_Tool):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(GCC_PreprocessTool, self).__init__('gcc',
|
super(GCC_PreprocessTool, self).__init__('gcc (cpp)',
|
||||||
(Tool.eFlagsPipedInput |
|
(Tool.eFlagsPipedInput |
|
||||||
Tool.eFlagsPipedOutput))
|
Tool.eFlagsPipedOutput))
|
||||||
|
|
||||||
|
|
@ -60,7 +66,7 @@ class GCC_PreprocessTool(GCC_Common_Tool):
|
||||||
|
|
||||||
class GCC_CompileTool(GCC_Common_Tool):
|
class GCC_CompileTool(GCC_Common_Tool):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(GCC_CompileTool, self).__init__('gcc',
|
super(GCC_CompileTool, self).__init__('gcc (cc1)',
|
||||||
(Tool.eFlagsPipedInput |
|
(Tool.eFlagsPipedInput |
|
||||||
Tool.eFlagsPipedOutput |
|
Tool.eFlagsPipedOutput |
|
||||||
Tool.eFlagsIntegratedCPP))
|
Tool.eFlagsIntegratedCPP))
|
||||||
|
|
@ -73,7 +79,7 @@ class GCC_CompileTool(GCC_Common_Tool):
|
||||||
|
|
||||||
class GCC_PrecompileTool(GCC_Common_Tool):
|
class GCC_PrecompileTool(GCC_Common_Tool):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(GCC_PrecompileTool, self).__init__('gcc',
|
super(GCC_PrecompileTool, self).__init__('gcc (pch)',
|
||||||
(Tool.eFlagsPipedInput |
|
(Tool.eFlagsPipedInput |
|
||||||
Tool.eFlagsIntegratedCPP))
|
Tool.eFlagsIntegratedCPP))
|
||||||
|
|
||||||
|
|
@ -83,10 +89,10 @@ class GCC_PrecompileTool(GCC_Common_Tool):
|
||||||
output, outputType, args, arglist,
|
output, outputType, args, arglist,
|
||||||
[])
|
[])
|
||||||
|
|
||||||
class DarwinAssemblerTool(Tool):
|
class DarwinAssembleTool(Tool):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(DarwinAssemblerTool, self).__init__('as',
|
super(DarwinAssembleTool, self).__init__('as',
|
||||||
Tool.eFlagsPipedInput)
|
Tool.eFlagsPipedInput)
|
||||||
|
|
||||||
def constructJob(self, phase, arch, jobs, inputs,
|
def constructJob(self, phase, arch, jobs, inputs,
|
||||||
output, outputType, args, arglist):
|
output, outputType, args, arglist):
|
||||||
|
|
@ -106,6 +112,28 @@ class DarwinAssemblerTool(Tool):
|
||||||
cmd_args.append(arglist.getValue(input.source))
|
cmd_args.append(arglist.getValue(input.source))
|
||||||
jobs.addJob(Jobs.Command('as', cmd_args))
|
jobs.addJob(Jobs.Command('as', cmd_args))
|
||||||
|
|
||||||
|
class GCC_AssembleTool(GCC_Common_Tool):
|
||||||
|
def __init__(self):
|
||||||
|
# We can't generally assume the assembler can take or output
|
||||||
|
# on pipes.
|
||||||
|
super(GCC_AssembleTool, self).__init__('gcc (as)')
|
||||||
|
|
||||||
|
def constructJob(self, phase, arch, jobs, inputs,
|
||||||
|
output, outputType, args, arglist):
|
||||||
|
return super(GCC_AssembleTool, self).constructJob(phase, arch, jobs, inputs,
|
||||||
|
output, outputType, args, arglist,
|
||||||
|
['-c'])
|
||||||
|
|
||||||
|
class GCC_LinkTool(GCC_Common_Tool):
|
||||||
|
def __init__(self):
|
||||||
|
super(GCC_LinkTool, self).__init__('gcc (ld)')
|
||||||
|
|
||||||
|
def constructJob(self, phase, arch, jobs, inputs,
|
||||||
|
output, outputType, args, arglist):
|
||||||
|
return super(GCC_LinkTool, self).constructJob(phase, arch, jobs, inputs,
|
||||||
|
output, outputType, args, arglist,
|
||||||
|
[])
|
||||||
|
|
||||||
class Collect2Tool(Tool):
|
class Collect2Tool(Tool):
|
||||||
kCollect2Path = '/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2'
|
kCollect2Path = '/usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2'
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue