waf: Change the test configure check for libdebugger to it's lib

- Add support for a 'test-if-library'

- Use rtems_waf's 'test_application()' fragment in the check_cc
  call

Closes #3948
This commit is contained in:
Chris Johns 2020-03-05 21:18:05 +11:00
parent 2b9172c9d4
commit 3cc039cdac
3 changed files with 50 additions and 12 deletions

View File

@ -502,15 +502,17 @@ class SourceFileIfHeaderComposer(SourceFileFragmentComposer):
class TestFragementComposer(BuildSystemFragmentComposer): class TestFragementComposer(BuildSystemFragmentComposer):
def __init__(self, testName, fileFragments, runTest = True, netTest = False, extraLibs = []): def __init__(self, testName, fileFragments, configTest = None, runTest = True, netTest = False, extraLibs = []):
self.testName = testName self.testName = testName
self.fileFragments = fileFragments self.fileFragments = fileFragments
self.configTest = configTest
self.runTest = runTest self.runTest = runTest
self.netTest = netTest self.netTest = netTest
self.extraLibs = extraLibs self.extraLibs = extraLibs
def compose(self, path): def compose(self, path):
return ['tests', self.testName, ('default', None)], { 'files': self.fileFragments, return ['tests', self.testName, ('default', None)], { 'configTest': self.configTest,
'files': self.fileFragments,
'run': self.runTest, 'run': self.runTest,
'net': self.netTest, 'net': self.netTest,
'libs': self.extraLibs} 'libs': self.extraLibs}
@ -521,7 +523,7 @@ class TestIfHeaderComposer(TestFragementComposer):
if headers is not list: if headers is not list:
headers = [headers] headers = [headers]
self.headers = headers self.headers = headers
super(TestIfHeaderComposer, self).__init__(testName, fileFragments, super(TestIfHeaderComposer, self).__init__(testName, fileFragments, 'header',
runTest = runTest, netTest = netTest, runTest = runTest, netTest = netTest,
extraLibs = extraLibs) extraLibs = extraLibs)
@ -536,6 +538,27 @@ class TestIfHeaderComposer(TestFragementComposer):
r[0][2] = (define_keys.strip(), self.headers) r[0][2] = (define_keys.strip(), self.headers)
return r return r
class TestIfLibraryComposer(TestFragementComposer):
def __init__(self, testName, libraries, fileFragments, runTest = True, netTest = False, extraLibs = []):
if libraries is not list:
libraries = [libraries]
self.libraries = libraries
super(TestIfLibraryComposer, self).__init__(testName, fileFragments, 'library',
runTest = runTest, netTest = netTest,
extraLibs = extraLibs)
def compose(self, path):
r = TestFragementComposer.compose(self, path)
define_keys = ''
for l in self.libraries:
l = l.upper()
for c in '\/-.':
l = l.replace(c, '_')
define_keys += ' ' + l
r[0][2] = (define_keys.strip(), self.libraries)
return r
class KVMSymbolsFragmentComposer(BuildSystemFragmentComposer): class KVMSymbolsFragmentComposer(BuildSystemFragmentComposer):
def compose(self, path): def compose(self, path):
@ -849,3 +872,4 @@ class ModuleManager(object):
self.generator['source-if-header'] = SourceFileIfHeaderComposer self.generator['source-if-header'] = SourceFileIfHeaderComposer
self.generator['test-if-header'] = TestIfHeaderComposer self.generator['test-if-header'] = TestIfHeaderComposer
self.generator['test-if-library'] = TestIfLibraryComposer

View File

@ -5105,8 +5105,8 @@ class tests(builder.Module):
self.addTest(mm.generator['test']('termios06', ['test_main', self.addTest(mm.generator['test']('termios06', ['test_main',
'../termios/test_termios_driver', '../termios/test_termios_driver',
'../termios/test_termios_utilities'])) '../termios/test_termios_utilities']))
self.addTest(mm.generator['test-if-header']('debugger01', 'rtems/rtems-debugger.h', self.addTest(mm.generator['test-if-library']('debugger01', 'debugger',
['test_main'], runTest = False, netTest = True, ['test_main'], runTest = False, netTest = True,
extraLibs = ['debugger'])) extraLibs = ['debugger']))
self.addTest(mm.generator['test']('crypto01', ['test_main'])) self.addTest(mm.generator['test']('crypto01', ['test_main']))
self.addTest(mm.generator['test']('ipsec01', ['test_main'])) self.addTest(mm.generator['test']('ipsec01', ['test_main']))

View File

@ -109,7 +109,10 @@ class Builder(builder.ModuleManager):
if config != 'default': if config != 'default':
if 'configure' not in data: if 'configure' not in data:
data['configure'] = { } data['configure'] = { }
data['configure'][config] = frag[0][2][1] configTest = frag[1]['configTest']
if configTest not in data['configure']:
data['configure'][configTest] = { }
data['configure'][configTest][config] = frag[0][2][1]
if type(frag[1]) is list: if type(frag[1]) is list:
if config not in d[cpu]: if config not in d[cpu]:
d[cpu][config] = [] d[cpu][config] = []
@ -149,12 +152,23 @@ class Builder(builder.ModuleManager):
def bsp_configure(self, conf, arch_bsp): def bsp_configure(self, conf, arch_bsp):
if 'configure' in self.data: if 'configure' in self.data:
for cfg in self.data['configure']: for configTest in self.data['configure']:
for h in self.data['configure'][cfg]: for cfg in self.data['configure'][configTest]:
conf.check(header_name = h, if configTest == 'header':
features = "c", for h in self.data['configure'][configTest][cfg]:
includes = conf.env.IFLAGS, conf.check(header_name = h,
mandatory = False) features = "c",
includes = conf.env.IFLAGS,
mandatory = False)
elif configTest == 'library':
for l in self.data['configure'][configTest][cfg]:
conf.check_cc(lib = l,
fragment = rtems.test_application(),
execute = False,
mandatory = False)
else:
bld.fatal('invalid config test: %s' % (configTest))
def build(self, bld): def build(self, bld):
# #