mirror of https://gitlab.com/ita1024/waf.git
Add a dependency scanner for gas/yasm and nasm (incomplete)
This commit is contained in:
parent
bdb4dd90f6
commit
2e9954e087
|
@ -34,9 +34,22 @@ Support for pure asm programs and libraries should also work::
|
|||
target = 'asmtest')
|
||||
"""
|
||||
|
||||
from waflib import Task
|
||||
import re
|
||||
from waflib import Errors, Logs, Task
|
||||
from waflib.Tools.ccroot import link_task, stlink_task
|
||||
from waflib.TaskGen import extension
|
||||
from waflib.Tools import c_preproc
|
||||
|
||||
re_lines = re.compile(
|
||||
'^[ \t]*(?:%)[ \t]*(ifdef|ifndef|if|else|elif|endif|include|import|define|undef)[ \t]*(.*)\r*$',
|
||||
re.IGNORECASE | re.MULTILINE)
|
||||
|
||||
class asm_parser(c_preproc.c_parser):
|
||||
def filter_comments(self, node):
|
||||
code = node.read()
|
||||
code = c_preproc.re_nl.sub('', code)
|
||||
code = c_preproc.re_cpp.sub(c_preproc.repl, code)
|
||||
return re_lines.findall(code)
|
||||
|
||||
class asm(Task.Task):
|
||||
"""
|
||||
|
@ -45,6 +58,28 @@ class asm(Task.Task):
|
|||
color = 'BLUE'
|
||||
run_str = '${AS} ${ASFLAGS} ${ASMPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${AS_SRC_F}${SRC} ${AS_TGT_F}${TGT}'
|
||||
|
||||
def scan(self):
|
||||
if self.env.ASM_NAME == 'gas':
|
||||
return c_preproc.scan(self)
|
||||
Logs.warn('There is no dependency scanner for Nasm!')
|
||||
return [[], []]
|
||||
elif self.env.ASM_NAME == 'nasm':
|
||||
Logs.warn('The Nasm dependency scanner is incomplete!')
|
||||
|
||||
try:
|
||||
incn = self.generator.includes_nodes
|
||||
except AttributeError:
|
||||
raise Errors.WafError('%r is missing the "asm" feature' % self.generator)
|
||||
|
||||
if c_preproc.go_absolute:
|
||||
nodepaths = incn
|
||||
else:
|
||||
nodepaths = [x for x in incn if x.is_child_of(x.ctx.srcnode) or x.is_child_of(x.ctx.bldnode)]
|
||||
|
||||
tmp = asm_parser(nodepaths)
|
||||
tmp.start(self.inputs[0], self.env)
|
||||
return (tmp.nodes, tmp.names)
|
||||
|
||||
@extension('.s', '.S', '.asm', '.ASM', '.spp', '.SPP')
|
||||
def asm_hook(self, node):
|
||||
"""
|
||||
|
|
|
@ -16,3 +16,4 @@ def configure(conf):
|
|||
conf.env.ASLNK_TGT_F = ['-o']
|
||||
conf.find_ar()
|
||||
conf.load('asm')
|
||||
conf.env.ASM_NAME = 'gas'
|
||||
|
|
|
@ -24,3 +24,8 @@ def configure(conf):
|
|||
conf.env.ASLNK_TGT_F = ['-o']
|
||||
conf.load('asm')
|
||||
conf.env.ASMPATH_ST = '-I%s' + os.sep
|
||||
txt = conf.cmd_and_log(conf.env.AS + ['--version'])
|
||||
if 'yasm' in txt.lower():
|
||||
conf.env.ASM_NAME = 'yasm'
|
||||
else:
|
||||
conf.env.ASM_NAME = 'nasm'
|
||||
|
|
Loading…
Reference in New Issue