waf: Add warnings and auto-regen options.

This commit is contained in:
Chris Johns
2015-05-20 21:59:15 +10:00
parent 32bbd337ae
commit e9aa953789
2 changed files with 48 additions and 22 deletions

View File

@@ -73,7 +73,7 @@ def common_warnings():
'-Wno-format']
def common_no_warnings():
return ['-Wno-implicit-function-declaration']
return ['-w']
def includes():
return ['-Irtemsbsd/include',

View File

@@ -204,7 +204,11 @@ class ModuleManager(builder.ModuleManager):
self.restart()
self.add('#')
self.add('# Generated waf script.')
self.add('# RTEMS Project (https://www.rtems.org)')
self.add('#')
self.add('# Generated waf script. Do not edit, run ./freebsd-to-rtems.py -m')
self.add('#')
self.add('# To use see README.waf shipped with this file.')
self.add('#')
self.add('')
self.add('try:')
@@ -219,11 +223,24 @@ class ModuleManager(builder.ModuleManager):
self.add('')
self.add('def options(opt):')
self.add(' rtems.options(opt)')
self.add(' opt.add_option("--enable-auto-regen",')
self.add(' action = "store_true",')
self.add(' default = False,')
self.add(' dest = "auto_regen",')
self.add(' help = "Enable auto-regeneration of LEX, RPC and YACC files.")')
self.add(' opt.add_option("--enable-warnings",')
self.add(' action = "store_true",')
self.add(' default = False,')
self.add(' dest = "warnings",')
self.add(' help = "Enable all warnings. The default is quiet builds.")')
self.add('')
self.add('def configure(conf):')
self.add(' if conf.options.auto_regen:')
self.add(' conf.find_program("lex", mandatory = True)')
self.add(' conf.find_program("rpcgen", mandatory = True)')
self.add(' conf.find_program("yacc", mandatory = True)')
self.add(' conf.env.AUTO_REGEN = conf.options.auto_regen')
self.add(' conf.env.WARNINGS = conf.options.warnings')
self.add(' rtems.configure(conf)')
self.add(' if rtems.check_networking(conf):')
self.add(' conf.fatal("RTEMS kernel contains the old network support; configure RTEMS with --disable-networking")')
@@ -235,6 +252,10 @@ class ModuleManager(builder.ModuleManager):
self.add(' common_flags = []')
for f in builder.common_flags():
self.add(' common_flags += ["%s"]' % (f))
self.add(' if bld.env.WARNINGS:')
for f in builder.common_warnings():
self.add(' common_flags += ["%s"]' % (f))
self.add(' else:')
for f in builder.common_no_warnings():
self.add(' common_flags += ["%s"]' % (f))
self.add(' cflags = %r + common_flags' % (builder.cflags()))
@@ -262,6 +283,7 @@ class ModuleManager(builder.ModuleManager):
if 'KVMSymbols' in data:
kvmsymbols = data['KVMSymbols']
self.add(' # KVM Symbols')
self.add(' if bld.env.AUTO_REGEN:')
self.add(' bld(target = "%s",' % (kvmsymbols['files']['all'][0]))
self.add(' source = "rtemsbsd/rtems/generate_kvm_symbols",')
self.add(' rule = "./${SRC} > ${TGT}")')
@@ -277,6 +299,7 @@ class ModuleManager(builder.ModuleManager):
rpcgen = data['RPCGen']
rpcname = rpcgen['files']['all'][0][:-2]
self.add(' # RPC Generation')
self.add(' if bld.env.AUTO_REGEN:')
self.add(' bld(target = "%s.h",' % (rpcname))
self.add(' source = "%s.x",' % (rpcname))
self.add(' rule = "${RPCGEN} -h -o ${TGT} ${SRC}")')
@@ -286,6 +309,7 @@ class ModuleManager(builder.ModuleManager):
routekw = data['RouteKeywords']
rkwname = routekw['files']['all'][0]
self.add(' # Route keywords')
self.add(' if bld.env.AUTO_REGEN:')
self.add(' rkw_rule = "cat ${SRC} | ' + \
'awk \'BEGIN { r = 0 } { if (NF == 1) ' + \
'printf \\"#define\\\\tK_%%s\\\\t%%d\\\\n\\\\t{\\\\\\"%%s\\\\\\", K_%%s},\\\\n\\", ' + \
@@ -300,6 +324,7 @@ class ModuleManager(builder.ModuleManager):
self.add(' # Lex')
for l in lexes:
lex = lexes[l]['all']
self.add(' if bld.env.AUTO_REGEN:')
self.add(' bld(target = "%s.c",' % (lex['file'][:-2]))
self.add(' source = "%s",' % (lex['file']))
self.add(' rule = "${LEX} -P %s -t ${SRC} | ' % (lex['sym']) + \
@@ -320,6 +345,7 @@ class ModuleManager(builder.ModuleManager):
yacc_file = yacc['file']
yacc_sym = yacc['sym']
yacc_header = '%s/%s' % (os.path.dirname(yacc_file), yacc['header'])
self.add(' if bld.env.AUTO_REGEN:')
self.add(' bld(target = "%s.c",' % (yacc_file[:-2]))
self.add(' source = "%s",' % (yacc_file))
self.add(' rule = "${YACC} -b %s -d -p %s ${SRC} && ' % (yacc_sym, yacc_sym) + \