diff options
-rwxr-xr-x | builder.py | 336 | ||||
-rw-r--r-- | buildset/default.ini | 2 | ||||
-rwxr-xr-x | freebsd-to-rtems.py | 12 | ||||
-rw-r--r-- | libbsd.py | 539 | ||||
-rw-r--r-- | waf_libbsd.py | 167 | ||||
-rw-r--r-- | wscript | 4 |
6 files changed, 618 insertions, 442 deletions
@@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -'''Manage the libbsd build configuration data. -''' +"""Manage the libbsd build configuration data. +""" # Copyright (c) 2015, 2020 Chris Johns <chrisj@rtems.org>. All rights reserved. # @@ -35,15 +35,12 @@ from __future__ import print_function -import shutil +import codecs +import copy +import difflib import os import re import sys -import getopt -import filecmp -import difflib -import codecs -import copy # # Global controls. @@ -67,21 +64,6 @@ verboseMoreDetail = 3 verboseDebug = 4 -def _cflagsIncludes(cflags, includes): - if type(cflags) is not list: - if cflags is not None: - _cflags = cflags.split(' ') - else: - _cflags = [None] - else: - _cflags = cflags - if type(includes) is not list: - _includes = [includes] - else: - _includes = includes - return _cflags, _includes - - def verbose(level=verboseInfo): return verboseLevel >= level @@ -530,7 +512,7 @@ class TargetSourceCPUDependentPathComposer(CPUDependentFreeBSDPathComposer): return path -class BuildSystemFragmentComposer(object): +class BuildSystemComposer(object): def __init__(self, includes=None): if type(includes) is not list: self.includes = [includes] @@ -540,7 +522,7 @@ class BuildSystemFragmentComposer(object): def __str__(self): return '' - def get_includes(self): + def getIncludes(self): if None in self.includes: incs = [] else: @@ -548,52 +530,70 @@ class BuildSystemFragmentComposer(object): return incs def compose(self, path): - return '' + """A None result means there is nothing to build.""" + return None + + @staticmethod + def filesAsDefines(files): + define_keys = '' + for f in files: + f = f.upper() + for c in '\/-.': + f = f.replace(c, '_') + define_keys += ' ' + f + return define_keys.strip() + + @staticmethod + def cflagsIncludes(cflags, includes): + if type(cflags) is not list: + if cflags is not None: + _cflags = cflags.split(' ') + else: + _cflags = [None] + else: + _cflags = cflags + if type(includes) is not list: + _includes = [includes] + else: + _includes = includes + return _cflags, _includes -class SourceFileFragmentComposer(BuildSystemFragmentComposer): +class SourceFileBuildComposer(BuildSystemComposer): def __init__(self, cflags="default", includes=None): - self.cflags, self.includes = _cflagsIncludes(cflags, includes) - - def _get_flags(self): - return self.cflags + self.get_includes() + self.cflags, self.includes = self.cflagsIncludes(cflags, includes) def __str__(self): - return 'SF: ' + ' '.join(self._get_flags()) + return 'SF: ' + ' '.join(self.getFlags()) def compose(self, path): - flags = self._get_flags() - return ['sources', flags, - ('default', None)], [path], self.cflags, self.includes + flags = self.getFlags() + return ['sources', flags, ('default', None)], \ + [path], self.cflags, self.includes + def getFlags(self): + return self.cflags + self.getIncludes() -class SourceFileIfHeaderComposer(SourceFileFragmentComposer): + +class SourceFileIfHeaderComposer(SourceFileBuildComposer): def __init__(self, headers, cflags="default", includes=None): if headers is not list: headers = [headers] self.headers = headers super(SourceFileIfHeaderComposer, self).__init__(cflags=cflags, includes=includes) + def __str__(self): - incs = self.headers + self.get_includes - if len(incs) > 0: - return 'SFIH:' + ' '.join(incs) - else: - return '' + return 'SFIH:' + ' '.join(self.getFlags()) + \ + ' ' + self.filesAsDefines(self.headers) def compose(self, path): - r = SourceFileFragmentComposer.compose(self, path) - define_keys = '' - for h in self.headers: - h = h.upper() - for c in '\/-.': - h = h.replace(c, '_') - define_keys += ' ' + h - r[0][2] = (define_keys.strip(), self.headers) + r = SourceFileBuildComposer.compose(self, path) + r[0][2] = (self.filesAsDefines(self.headers), self.headers) return r -class TestFragementComposer(BuildSystemFragmentComposer): +class TestFragementComposer(BuildSystemComposer): def __init__(self, testName, fileFragments, @@ -641,13 +641,7 @@ class TestIfHeaderComposer(TestFragementComposer): def compose(self, path): r = TestFragementComposer.compose(self, path) - define_keys = '' - for h in self.headers: - h = h.upper() - for c in '\/-.': - h = h.replace(c, '_') - define_keys += ' ' + h - r[0][2] = (define_keys.strip(), self.headers) + r[0][2] = (self.filesAsDefines(self.headers), self.headers) return r @@ -671,37 +665,33 @@ class TestIfLibraryComposer(TestFragementComposer): 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) + r[0][2] = (self.filesAsDefines(self.libraries), self.libraries) return r -class KVMSymbolsFragmentComposer(BuildSystemFragmentComposer): +class KVMSymbolsBuildComposer(BuildSystemComposer): def compose(self, path): - return ['KVMSymbols', 'files', - ('default', None)], [path], self.includes + return ['KVMSymbols', 'files', ('default', None)], \ + [path], self.includes -class RPCGENFragmentComposer(BuildSystemFragmentComposer): +class RPCGENBuildComposer(BuildSystemComposer): def compose(self, path): - return ['RPCGen', 'files', ('default', None)], [path] + return ['RPCGen', 'files', ('default', None)], \ + [path] -class RouteKeywordsFragmentComposer(BuildSystemFragmentComposer): +class RouteKeywordsBuildComposer(BuildSystemComposer): def compose(self, path): - return ['RouteKeywords', 'files', ('default', None)], [path] + return ['RouteKeywords', 'files', ('default', None)], \ + [path] -class LexFragmentComposer(BuildSystemFragmentComposer): +class LexBuildComposer(BuildSystemComposer): def __init__(self, sym, dep, cflags=None, includes=None, build=True): self.sym = sym self.dep = dep - self.cflags, self.includes = _cflagsIncludes(cflags, includes) + self.cflags, self.includes = self.cflagsIncludes(cflags, includes) self.build = build def compose(self, path): @@ -718,11 +708,11 @@ class LexFragmentComposer(BuildSystemFragmentComposer): return ['lex', path, ('default', None)], d -class YaccFragmentComposer(BuildSystemFragmentComposer): +class YaccBuildComposer(BuildSystemComposer): def __init__(self, sym, header, cflags=None, includes=None, build=True): self.sym = sym self.header = header - self.cflags, self.includes = _cflagsIncludes(cflags, includes) + self.cflags, self.includes = self.cflagsIncludes(cflags, includes) self.build = build def compose(self, path): @@ -741,14 +731,14 @@ class YaccFragmentComposer(BuildSystemFragmentComposer): class File(object): '''A file of source we move backwards and forwards and build.''' - - def __init__(self, path, pathComposer, forwardConverter, reverseConverter, - buildSystemComposer): + def __init__(self, space, path, pathComposer, forwardConverter, + reverseConverter, buildSystemComposer): if verbose(verboseMoreDetail): - print("FILE: %-50s F:%-45s R:%-45s" % \ - (path, + print("FILE: %-6s %-50s F:%-45s R:%-45s" % \ + (space, path, forwardConverter.__class__.__name__, reverseConverter.__class__.__name__)) + self.space = space self.path = path self.pathComposer = pathComposer self.originPath = self.pathComposer.composeOriginPath(self.path) @@ -759,12 +749,22 @@ class File(object): self.buildSystemComposer = buildSystemComposer def __str__(self): - out = self.path + out = self.space[0].upper() + ' ' + self.path bsc = str(self.buildSystemComposer) if len(bsc) > 0: out += ' (' + bsc + ')' return out + def __eq__(self, other): + state = self.space == other.space + state = state and (self.path == self.path) + state = state and (self.pathComposer == self.pathComposer) + state = state and (self.originPath == self.originPath) + state = state and (self.forwardConverter == self.forwardConverter) + state = state and (self.self.reverseConverter == self.self.reverseConverter) + state = state and (self.buildSystemComposer == self.buildSystemComposer) + return state + def processSource(self, forward): if forward: if verbose(verboseDetail): @@ -774,17 +774,23 @@ class File(object): else: if verbose(verboseDetail): print("process source: %s => %s converter:%s" % \ - (self.libbsdPath, self.originPath, self.reverseConverter.__class__.__name__)) + (self.libbsdPath, self.originPath, + self.reverseConverter.__class__.__name__)) self.reverseConverter.convert(self.libbsdPath, self.originPath) def getFragment(self): return self.buildSystemComposer.compose( self.pathComposer.composeLibBSDPath(self.path, '')) + def getPath(self): + return self.path + + def getSpace(self): + return self.space + class Module(object): '''Logical group of related files we can perform actions on''' - def __init__(self, manager, name, enabled=True): self.manager = manager self.name = name @@ -794,23 +800,42 @@ class Module(object): self.dependencies = [] def __str__(self): - out = [self.name + ': ' + self.conditionalOn] + out = [self.name + ': conditional-on=' + self.conditionalOn] if len(self.dependencies) > 0: out += [' Deps: ' + str(len(self.dependencies))] out += [' ' + type(d).__name__ for d in self.dependencies] if len(self.files) > 0: - out += [' Files: ' + str(len(self.files))] + counts = {} + for f in self.files: + space = f.getSpace() + if space not in counts: + counts[space] = 0 + counts[space] += 1 + count_str = '' + for space in sorted(counts.keys()): + count_str += '%s:%d ' % (space[0].upper(), counts[space]) + count_str = count_str[:-1] + out += [' Files: %d (%s)' % (len(self.files), count_str)] out += [' ' + str(f) for f in self.files] if len(self.cpuDependentSourceFiles) > 0: out += [' CPU Dep: ' + str(len(self.cpuDependentSourceFiles))] for cpu in self.cpuDependentSourceFiles: - out += [' ' + cpu + ':' + str(f) for f in self.cpuDependentSourceFiles[cpu]] + out += [' ' + cpu + ':'] + out += [ + ' ' + str(f) for f in self.cpuDependentSourceFiles[cpu] + ] return os.linesep.join(out) def initCPUDependencies(self, cpu): if cpu not in self.cpuDependentSourceFiles: self.cpuDependentSourceFiles[cpu] = [] + def getName(self): + return self.name + + def getFiles(self): + return (f for f in self.files) + def processSource(self, direction): if verbose(verboseDetail): print("process module: %s" % (self.name)) @@ -821,57 +846,64 @@ class Module(object): f.processSource(direction) def addFile(self, f): + if not isinstance(f, File): + raise TypeError('invalid type for addFiles: %s' % (type(f))) self.files += [f] def addFiles(self, + space, newFiles, pathComposer, forwardConverter, reverseConverter, assertFile, - buildSystemComposer=BuildSystemFragmentComposer()): + buildSystemComposer=BuildSystemComposer()): files = [] for newFile in newFiles: assertFile(newFile) files += [ - File(newFile, pathComposer, forwardConverter, reverseConverter, - buildSystemComposer) + File(space, newFile, pathComposer, forwardConverter, + reverseConverter, buildSystemComposer) ] return files def addPlainTextFile(self, files): - self.files += self.addFiles(files, + self.files += self.addFiles('user', files, FreeBSDPathComposer(), Converter(), Converter(), assertNothing) def addKernelSpaceHeaderFiles(self, files): - self.files += self.addFiles(files, FreeBSDPathComposer(), + self.files += self.addFiles('kernel', files, FreeBSDPathComposer(), FromFreeBSDToRTEMSHeaderConverter(), FromRTEMSToFreeBSDHeaderConverter(), assertHeaderOrSourceFile) def addUserSpaceHeaderFiles(self, files): self.files += self.addFiles( - files, FreeBSDPathComposer(), + 'user', files, FreeBSDPathComposer(), FromFreeBSDToRTEMSUserSpaceHeaderConverter(), FromRTEMSToFreeBSDHeaderConverter(), assertHeaderFile) def addRTEMSHeaderFiles(self, files): - self.files += self.addFiles(files, RTEMSPathComposer(), NoConverter(), - NoConverter(), assertHeaderFile) + self.files += self.addFiles('user', files, RTEMSPathComposer(), + NoConverter(), NoConverter(), + assertHeaderFile) def addLinuxHeaderFiles(self, files): - self.files += self.addFiles(files, PathComposer(), NoConverter(), - NoConverter(), assertHeaderFile) + self.files += self.addFiles('kernel', files, PathComposer(), + NoConverter(), NoConverter(), + assertHeaderFile) def addCPUDependentFreeBSDHeaderFiles(self, files): - self.files += self.addFiles(files, CPUDependentFreeBSDPathComposer(), + self.files += self.addFiles('kernel', files, + CPUDependentFreeBSDPathComposer(), FromFreeBSDToRTEMSHeaderConverter(), FromRTEMSToFreeBSDHeaderConverter(), assertHeaderFile) def addCPUDependentLinuxHeaderFiles(self, files): - self.files += self.addFiles(files, CPUDependentLinuxPathComposer(), + self.files += self.addFiles('kernel', files, + CPUDependentLinuxPathComposer(), NoConverter(), NoConverter(), assertHeaderFile) @@ -879,73 +911,80 @@ class Module(object): files): for cpu in targetCPUs: self.files += self.addFiles( - files, TargetSourceCPUDependentPathComposer(cpu, sourceCPU), + 'kernel', files, + TargetSourceCPUDependentPathComposer(cpu, sourceCPU), FromFreeBSDToRTEMSHeaderConverter(), NoConverter(), assertHeaderFile) - def addSourceFiles(self, files, sourceFileFragmentComposer): - self.files += self.addFiles(files, PathComposer(), NoConverter(), + def addSourceFiles(self, files, sourceFileBuildComposer): + self.files += self.addFiles('user', + files, PathComposer(), NoConverter(), NoConverter(), assertSourceFile, - sourceFileFragmentComposer) + sourceFileBuildComposer) - def addKernelSpaceSourceFiles(self, files, sourceFileFragmentComposer): - self.files += self.addFiles(files, FreeBSDPathComposer(), + def addKernelSpaceSourceFiles(self, files, sourceFileBuildComposer): + self.files += self.addFiles('kernel', files, FreeBSDPathComposer(), FromFreeBSDToRTEMSSourceConverter(), FromRTEMSToFreeBSDSourceConverter(), - assertSourceFile, - sourceFileFragmentComposer) + assertSourceFile, sourceFileBuildComposer) - def addUserSpaceSourceFiles(self, files, sourceFileFragmentComposer): + def addUserSpaceSourceFiles(self, files, sourceFileBuildComposer): self.files += self.addFiles( - files, FreeBSDPathComposer(), + 'user', files, FreeBSDPathComposer(), FromFreeBSDToRTEMSUserSpaceSourceConverter(), FromRTEMSToFreeBSDSourceConverter(), assertSourceFile, - sourceFileFragmentComposer) + sourceFileBuildComposer) - def addRTEMSSourceFiles(self, files, sourceFileFragmentComposer): - self.files += self.addFiles(files, RTEMSPathComposer(), NoConverter(), - NoConverter(), assertSourceFile, - sourceFileFragmentComposer) + def addRTEMSKernelSourceFiles(self, files, sourceFileBuildComposer): + self.files += self.addFiles('kernel', files, RTEMSPathComposer(), + NoConverter(), NoConverter(), + assertSourceFile, sourceFileBuildComposer) - def addLinuxSourceFiles(self, files, sourceFileFragmentComposer): - self.files += self.addFiles(files, PathComposer(), NoConverter(), - NoConverter(), assertSourceFile, - sourceFileFragmentComposer) + def addRTEMSUserSourceFiles(self, files, sourceFileBuildComposer): + self.files += self.addFiles('user', files, RTEMSPathComposer(), + NoConverter(), NoConverter(), + assertSourceFile, sourceFileBuildComposer) + + def addLinuxSourceFiles(self, files, sourceFileBuildComposer): + self.files += self.addFiles('kernel', files, PathComposer(), + NoConverter(), NoConverter(), + assertSourceFile, sourceFileBuildComposer) def addCPUDependentFreeBSDSourceFiles(self, cpus, files, - sourceFileFragmentComposer): + sourceFileBuildComposer): for cpu in cpus: self.initCPUDependencies(cpu) self.cpuDependentSourceFiles[cpu] += \ - self.addFiles(files, - CPUDependentFreeBSDPathComposer(), FromFreeBSDToRTEMSSourceConverter(), - FromRTEMSToFreeBSDSourceConverter(), assertSourceFile, - sourceFileFragmentComposer) + self.addFiles( + 'kernel', files, + CPUDependentFreeBSDPathComposer(), FromFreeBSDToRTEMSSourceConverter(), + FromRTEMSToFreeBSDSourceConverter(), assertSourceFile, + sourceFileBuildComposer) def addCPUDependentRTEMSSourceFiles(self, cpus, files, - sourceFileFragmentComposer): + sourceFileBuildComposer): for cpu in cpus: self.initCPUDependencies(cpu) self.cpuDependentSourceFiles[cpu] += \ - self.addFiles(files, + self.addFiles('kernel', files, CPUDependentRTEMSPathComposer(), NoConverter(), NoConverter(), assertSourceFile, - sourceFileFragmentComposer) + sourceFileBuildComposer) def addCPUDependentLinuxSourceFiles(self, cpus, files, - sourceFileFragmentComposer): + sourceFileBuildComposer): for cpu in cpus: self.initCPUDependencies(cpu) self.cpuDependentSourceFiles[cpu] += \ - self.addFiles(files, + self.addFiles('kernel', files, CPUDependentLinuxPathComposer(), NoConverter(), NoConverter(), assertSourceFile, - sourceFileFragmentComposer) + sourceFileBuildComposer) def addTest(self, testFragementComposer): self.files += [ - File(testFragementComposer.testName, PathComposer(), NoConverter(), - NoConverter(), testFragementComposer) + File('user', testFragementComposer.testName, PathComposer(), + NoConverter(), NoConverter(), testFragementComposer) ] def addDependency(self, dep): @@ -954,7 +993,6 @@ class Module(object): class ModuleManager(object): '''A manager for a collection of modules.''' - def __init__(self): self.modules = {} self.generator = {} @@ -995,7 +1033,7 @@ class ModuleManager(object): self.configuration = copy.deepcopy(config) def getConfiguration(self): - return self.configuration + return copy.deepcopy(self.configuration) def updateConfiguration(self, config): self.configuration.update(config) @@ -1012,17 +1050,33 @@ class ModuleManager(object): if only_enabled == False: modules_to_process = self.getAllModules() for m in modules_to_process: + if m not in self.modules: + raise KeyError('enabled module not registered: %s' % (m)) self.modules[m].generate() + def duplicateCheck(self): + dups = [] + modules_to_check = sorted(self.getAllModules(), reverse=True) + while len(modules_to_check) > 1: + mod = modules_to_check.pop() + for m in modules_to_check: + if m not in self.modules: + raise KeyError('enabled module not registered: %s' % (m)) + for fmod in self.modules[mod].getFiles(): + for fm in self.modules[m].getFiles(): + if fmod.getPath() == fm.getPath(): + dups += [(m, mod, fm.getPath(), fm.getSpace())] + return dups + def setGenerators(self): self.generator['convert'] = Converter self.generator['no-convert'] = NoConverter self.generator[ - 'from-FreeBSD-to-RTEMS-UserSpaceSourceConverter'] = FromFreeBSDToRTEMSUserSpaceSourceConverter + 'from-FreeBSD-to-RTEMS-UserSpaceSourceConverter'] = \ + FromFreeBSDToRTEMSUserSpaceSourceConverter self.generator[ 'from-RTEMS-To-FreeBSD-SourceConverter'] = FromRTEMSToFreeBSDSourceConverter - self.generator[ - 'buildSystemFragmentComposer'] = BuildSystemFragmentComposer + self.generator['buildSystemComposer'] = BuildSystemComposer self.generator['file'] = File @@ -1033,13 +1087,13 @@ class ModuleManager(object): self.generator[ 'target-src-cpu--path'] = TargetSourceCPUDependentPathComposer - self.generator['source'] = SourceFileFragmentComposer + self.generator['source'] = SourceFileBuildComposer self.generator['test'] = TestFragementComposer - self.generator['kvm-symbols'] = KVMSymbolsFragmentComposer - self.generator['rpc-gen'] = RPCGENFragmentComposer - self.generator['route-keywords'] = RouteKeywordsFragmentComposer - self.generator['lex'] = LexFragmentComposer - self.generator['yacc'] = YaccFragmentComposer + self.generator['kvm-symbols'] = KVMSymbolsBuildComposer + self.generator['rpc-gen'] = RPCGENBuildComposer + self.generator['route-keywords'] = RouteKeywordsBuildComposer + self.generator['lex'] = LexBuildComposer + self.generator['yacc'] = YaccBuildComposer self.generator['source-if-header'] = SourceFileIfHeaderComposer self.generator['test-if-header'] = TestIfHeaderComposer diff --git a/buildset/default.ini b/buildset/default.ini index 741357fb..472c535d 100644 --- a/buildset/default.ini +++ b/buildset/default.ini @@ -53,11 +53,13 @@ net80211 = off netinet = on netinet6 = on netipsec = off +nfsv2 = on nvme = on opencrypto = on pci = on pf = on regulator = on +rpc_user = on rtems = on tests = on tty = on diff --git a/freebsd-to-rtems.py b/freebsd-to-rtems.py index 5710b902..8f66e589 100755 --- a/freebsd-to-rtems.py +++ b/freebsd-to-rtems.py @@ -152,6 +152,18 @@ try: libbsd.load(build) build.generateBuild(only_enabled=False) + dups = build.duplicateCheck() + if len(dups) > 0: + print() + print('Duplicates: %d' % (len(dups))) + mods = list(set([dup[0] for dup in dups])) + max_mod_len = max(len(dup[1]) for dup in dups) + for mod in mods: + print(' %s:' % (mod)) + for dup in [dup for dup in dups if dup[0] == mod]: + print(' %-*s %s %s' % (max_mod_len, dup[1], dup[3][0].upper(), dup[2])) + print() + if isConfig: print() print(build) @@ -1,5 +1,5 @@ # -# Copyright (c) 2015-2016, 2018 Chris Johns <chrisj@rtems.org>. +# Copyright (c) 2015, 2020 Chris Johns <chrisj@rtems.org>. # All rights reserved. # # Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. @@ -56,42 +56,55 @@ _defaults = { # # Includes # - 'include-paths': ['rtemsbsd/include', - 'freebsd/sys', - 'freebsd/sys/contrib/ck/include', - 'freebsd/sys/contrib/libsodium/src/libsodium/include', - 'freebsd/sys/contrib/libsodium/src/libsodium/include/sodium', - 'freebsd/sys/contrib/pf', - 'freebsd/crypto', - 'freebsd/crypto/openssl/include', - 'freebsd/sys/net', - 'freebsd/include', - 'freebsd/lib', - 'freebsd/lib/libbsdstat', - 'freebsd/lib/libcapsicum', - 'freebsd/lib/libcasper', - 'freebsd/lib/libc/include', - 'freebsd/lib/libc/isc/include', - 'freebsd/lib/libc/resolv', - 'freebsd/lib/libutil', - 'freebsd/lib/libkvm', - 'freebsd/lib/libmemstat', - 'freebsd/contrib/expat/lib', - 'freebsd/contrib/libpcap', - 'freebsd/contrib/libxo', - 'ipsec-tools/src/libipsec', - 'linux/include', - 'linux/drivers/net/ethernet/freescale/fman', - 'rtemsbsd/sys', - 'mDNSResponder/mDNSCore', - 'mDNSResponder/mDNSShared', - 'mDNSResponder/mDNSPosix', - 'testsuite/include'], - 'cpu-include-paths': ['rtemsbsd/@CPU@/include', - 'freebsd/sys/@CPU@/include'], - - # The path where headers will be copied during build. - 'build-include-path': ['build-include'], + 'include-paths': { + # The path where headers will be copied during the build. + 'build': ['build-include'], + # Kernel header paths + 'kernel': ['rtemsbsd/include', + 'freebsd/sys', + 'freebsd/sys/contrib/ck/include', + 'freebsd/sys/contrib/libsodium/src/libsodium/include', + 'freebsd/sys/contrib/libsodium/src/libsodium/include/sodium', + 'freebsd/sys/contrib/pf', + 'freebsd/sys/net', + 'ipsec-tools/src/libipsec', + 'linux/include', + 'linux/drivers/net/ethernet/freescale/fman', + 'rtemsbsd/sys'], + # User header paths + 'user': ['freebsd/crypto', + 'freebsd/crypto/openssl/include', + 'freebsd/include', + 'freebsd/lib', + 'freebsd/lib/libbsdstat', + 'freebsd/lib/libcapsicum', + 'freebsd/lib/libcasper', + 'freebsd/lib/libc/include', + 'freebsd/lib/libc/isc/include', + 'freebsd/lib/libc/resolv', + 'freebsd/lib/libutil', + 'freebsd/lib/libkvm', + 'freebsd/lib/libmemstat', + 'freebsd/contrib/expat/lib', + 'freebsd/contrib/libpcap', + 'freebsd/contrib/libxo', + 'mDNSResponder/mDNSCore', + 'mDNSResponder/mDNSShared', + 'mDNSResponder/mDNSPosix', + 'testsuite/include'], + # CPU specific path, assumed to be in the kernel context + 'cpu': ['rtemsbsd/@CPU@/include', + 'freebsd/sys/@CPU@/include'], + }, + + # + # Map paths based on RTEMS naming to FreeBSD naming. + # + 'path-mappings': [ + # (source, [targets..]) + # i386 + ('freebsd/sys/i386/include', ['freebsd/sys/x86/include', 'freebsd/sys/i386/include']), + ], # # Install headers @@ -146,7 +159,7 @@ class rtems(builder.Module): def generate(self): mm = self.manager - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/bus_if.c', 'local/cryptodev_if.c', @@ -162,36 +175,11 @@ class rtems(builder.Module): 'local/mmcbr_if.c', 'local/if_dwc_if.c', 'local/gpio_if.c', - 'rtems/ipsec_get_policylen.c', - 'rtems/rtems-bsd-arp-processor.c', 'rtems/rtems-bsd-allocator-domain-size.c', - 'rtems/rtems-bsd-cxx.cc', 'rtems/rtems-bsd-get-allocator-domain-size.c', - 'rtems/rtems-bsd-get-ethernet-addr.c', 'rtems/rtems-bsd-get-mac-address.c', 'rtems/rtems-bsd-get-task-priority.c', 'rtems/rtems-bsd-get-task-stack-size.c', - 'rtems/rtems-bsd-ifconfig.c', - 'rtems/rtems-bsd-ifconfig-lo0.c', - 'rtems/rtems-bsd-init-dhcp.c', - 'rtems/rtems-bsd-rc-conf-net.c', - 'rtems/rtems-bsd-rc-conf-pf.c', - 'rtems/rtems-bsd-rc-conf.c', - 'rtems/rtems-bsd-set-if-input.c', - 'rtems/rtems-bsd-shell-arp.c', - 'rtems/rtems-bsd-shell-i2c.c', - 'rtems/rtems-bsd-shell-ifconfig.c', - 'rtems/rtems-bsd-shell-ifmcstat.c', - 'rtems/rtems-bsd-shell-netstat.c', - 'rtems/rtems-bsd-shell-nvmecontrol.c', - 'rtems/rtems-bsd-shell-pfctl.c', - 'rtems/rtems-bsd-shell-ping.c', - 'rtems/rtems-bsd-shell-route.c', - 'rtems/rtems-bsd-shell-stty.c', - 'rtems/rtems-bsd-shell-sysctl.c', - 'rtems/rtems-bsd-shell-tcpdump.c', - 'rtems/rtems-bsd-shell-vmstat.c', - 'rtems/rtems-bsd-shell-wlanstats.c', 'rtems/rtems-bsd-syscall-api.c', 'rtems/rtems-kernel-assert.c', 'rtems/rtems-kernel-autoconf.c', @@ -230,16 +218,59 @@ class rtems(builder.Module): 'rtems/rtems-legacy-rtrequest.c', 'rtems/rtems-legacy-newproc.c', 'rtems/rtems-legacy-mii.c', + 'sys/arm/lpc/if_lpe.c', + 'sys/arm/lpc/lpc_pwr.c', + 'sys/dev/atsam/if_atsam.c', + 'sys/dev/atsam/if_atsam_media.c', + 'sys/dev/dw_mmc/dw_mmc.c', + 'sys/dev/ffec/if_ffec_mcf548x.c', + 'sys/dev/ffec/if_ffec_mpc8xx.c', + 'sys/dev/input/touchscreen/tsc_lpc32xx.c', + 'sys/dev/smc/if_smc_nexus.c', + 'sys/dev/tsec/if_tsec_nexus.c', + 'sys/dev/usb/controller/ehci_mpc83xx.c', + 'sys/dev/usb/controller/ohci_lpc32xx.c', + 'sys/dev/usb/controller/ohci_lpc.c', + 'sys/dev/usb/controller/usb_otg_transceiver.c', + 'sys/dev/usb/controller/usb_otg_transceiver_dump.c', + 'sys/fs/devfs/devfs_devs.c', + 'sys/net/if_ppp.c', + 'sys/net/ppp_tty.c', + ], + mm.generator['source']() + ) + self.addRTEMSUserSourceFiles( + [ + 'rtems/ipsec_get_policylen.c', + 'rtems/rtems-bsd-arp-processor.c', + 'rtems/rtems-bsd-cxx.cc', + 'rtems/rtems-bsd-get-ethernet-addr.c', + 'rtems/rtems-bsd-ifconfig.c', + 'rtems/rtems-bsd-ifconfig-lo0.c', + 'rtems/rtems-bsd-init-dhcp.c', + 'rtems/rtems-bsd-rc-conf-net.c', + 'rtems/rtems-bsd-rc-conf-pf.c', + 'rtems/rtems-bsd-rc-conf.c', + 'rtems/rtems-bsd-set-if-input.c', + 'rtems/rtems-bsd-shell-arp.c', + 'rtems/rtems-bsd-shell-ifconfig.c', + 'rtems/rtems-bsd-shell-ifmcstat.c', + 'rtems/rtems-bsd-shell-netstat.c', + 'rtems/rtems-bsd-shell-nvmecontrol.c', + 'rtems/rtems-bsd-shell-pfctl.c', + 'rtems/rtems-bsd-shell-ping.c', + 'rtems/rtems-bsd-shell-route.c', + 'rtems/rtems-bsd-shell-stty.c', + 'rtems/rtems-bsd-shell-sysctl.c', + 'rtems/rtems-bsd-shell-tcpdump.c', + 'rtems/rtems-bsd-shell-vmstat.c', + 'rtems/rtems-bsd-shell-wlanstats.c', 'rtems/rtems-kvm.c', 'rtems/rtems-program.c', 'rtems/rtems-program-socket.c', 'rtems/rtems-routes.c', 'rtems/syslog.c', 'ftpd/ftpd-service.c', - 'nfsclient/mount_prot_xdr.c', - 'nfsclient/nfs.c', - 'nfsclient/nfs_prot_xdr.c', - 'nfsclient/rpcio.c', 'pppd/auth.c', 'pppd/ccp.c', 'pppd/chap.c', @@ -256,39 +287,24 @@ class rtems(builder.Module): 'pppd/sys-rtems.c', 'pppd/upap.c', 'pppd/utils.c', - 'sys/arm/lpc/if_lpe.c', - 'sys/arm/lpc/lpc_pwr.c', - 'sys/dev/atsam/if_atsam.c', - 'sys/dev/atsam/if_atsam_media.c', - 'sys/dev/dw_mmc/dw_mmc.c', - 'sys/dev/ffec/if_ffec_mcf548x.c', - 'sys/dev/ffec/if_ffec_mpc8xx.c', - 'sys/dev/input/touchscreen/tsc_lpc32xx.c', - 'sys/dev/smc/if_smc_nexus.c', - 'sys/dev/tsec/if_tsec_nexus.c', - 'sys/dev/usb/controller/ehci_mpc83xx.c', - 'sys/dev/usb/controller/ohci_lpc32xx.c', - 'sys/dev/usb/controller/ohci_lpc.c', - 'sys/dev/usb/controller/usb_otg_transceiver.c', - 'sys/dev/usb/controller/usb_otg_transceiver_dump.c', - 'sys/fs/devfs/devfs_devs.c', - 'sys/net/if_ppp.c', - 'sys/net/ppp_tty.c', 'telnetd/telnetd-service.c', ], mm.generator['source']() ) - self.addFile(mm.generator['file']('rtems/rtems-kernel-kvm-symbols.c', + self.addFile(mm.generator['file']('kernel', + 'rtems/rtems-kernel-kvm-symbols.c', mm.generator['rtems-path'](), mm.generator['no-convert'](), mm.generator['no-convert'](), mm.generator['kvm-symbols'](includes = 'rtemsbsd/rtems'))) - self.addFile(mm.generator['file']('lib/libc/net/nslexer.l', + self.addFile(mm.generator['file']('user', + 'lib/libc/net/nslexer.l', mm.generator['freebsd-path'](), mm.generator['convert'](), mm.generator['convert'](), mm.generator['lex']('_nsyy', 'nsparser.c'))) - self.addFile(mm.generator['file']('lib/libc/net/nsparser.y', + self.addFile(mm.generator['file']('user', + 'lib/libc/net/nsparser.y', mm.generator['freebsd-path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -339,8 +355,6 @@ class base(builder.Module): 'sys/contrib/ck/include/gcc/x86/ck_f_pr.h', 'sys/contrib/ck/include/gcc/x86/ck_pr.h', 'sys/fs/devfs/devfs_int.h', - 'sys/rpc/netconfig.h', - 'sys/rpc/types.h', 'sys/security/audit/audit.h', 'sys/security/mac/mac_framework.h', 'sys/sys/acl.h', @@ -571,7 +585,7 @@ class fdt(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'rtems/ofw_machdep.c', ], @@ -608,7 +622,7 @@ class tty(builder.Module): ], mm.generator['source']() ) -# self.addRTEMSSourceFiles( +# self.addRTEMSKernelSourceFiles( # [ # 'rtems/ofw_machdep.c', # ], @@ -645,7 +659,7 @@ class mmc(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'sys/arm/at91/at91_mci.c', ], @@ -684,7 +698,7 @@ class mmc_ti(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/sdhci_if.c', 'local/gpiobus_if.c', @@ -774,7 +788,7 @@ class iic(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/iicbus_if.c', 'sys/dev/iicbus/rtems-i2c.c', @@ -828,7 +842,7 @@ class display(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/clknode_if.c', 'local/hdmi_if.c', @@ -862,7 +876,7 @@ class pinmux(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/fdt_pinctrl_if.c', ], @@ -1206,7 +1220,7 @@ class dev_usb_wlan(builder.Module): 'sys/dev/usb/wlan/if_zydreg.h', ] ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/runfw.c', ], @@ -1318,7 +1332,7 @@ class dev_wlan_rtwn(builder.Module): 'sys/dev/rtwn/usb/rtwn_usb_var.h', ] ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/rtwn-rtl8192cfwT.c', 'local/rtwn-rtl8188eufw.c', @@ -1523,7 +1537,7 @@ class dev_net(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'sys/dev/mii/ksz8091rnb_50MHz.c', ], @@ -1822,7 +1836,7 @@ class nvme(builder.Module): ], mm.generator['source']() ) - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'sys/dev/nvd/nvd.c', ], @@ -2231,14 +2245,16 @@ class netipsec(builder.Module): ], mm.generator['source'](libipsec_cflags) ) - self.addFile(mm.generator['file']('ipsec-tools/src/libipsec/policy_token.l', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/libipsec/policy_token.l', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), mm.generator['lex']('__libipsec', 'policy_parse.c', libipsec_cflags))) - self.addFile(mm.generator['file']('ipsec-tools/src/libipsec/policy_parse.y', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/libipsec/policy_parse.y', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2300,7 +2316,8 @@ class netipsec(builder.Module): mm.generator['source'](racoon_cflags, ['freebsd/crypto/openssl']) ) - self.addFile(mm.generator['file']('ipsec-tools/src/racoon/cftoken.l', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/racoon/cftoken.l', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2308,7 +2325,8 @@ class netipsec(builder.Module): 'cftoken.c', racoon_cflags, build=False))) - self.addFile(mm.generator['file']('ipsec-tools/src/racoon/cfparse.y', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/racoon/cfparse.y', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2316,7 +2334,8 @@ class netipsec(builder.Module): 'cfparse.h', racoon_cflags, build=False))) - self.addFile(mm.generator['file']('ipsec-tools/src/racoon/prsa_tok.l', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/racoon/prsa_tok.l', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2324,7 +2343,8 @@ class netipsec(builder.Module): 'prsa_tok.c', racoon_cflags, build=False))) - self.addFile(mm.generator['file']('ipsec-tools/src/racoon/prsa_par.y', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/racoon/prsa_par.y', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2337,7 +2357,7 @@ class netipsec(builder.Module): 'rtems/ipsec.h', ] ) - self.addRTEMSSourceFiles( + self.addRTEMSUserSourceFiles( [ 'rtems/rtems-bsd-racoon.c', 'rtems/rtems-bsd-rc-conf-ipsec.c', @@ -2357,7 +2377,8 @@ class netipsec(builder.Module): ], mm.generator['source'](setkey_cflags) ) - self.addFile(mm.generator['file']('ipsec-tools/src/setkey/token.l', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/setkey/token.l', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2365,7 +2386,8 @@ class netipsec(builder.Module): 'token.c', setkey_cflags, build=False))) - self.addFile(mm.generator['file']('ipsec-tools/src/setkey/parse.y', + self.addFile(mm.generator['file']('user', + 'ipsec-tools/src/setkey/parse.y', mm.generator['path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2373,7 +2395,7 @@ class netipsec(builder.Module): 'parse.h', setkey_cflags, build=False))) - self.addRTEMSSourceFiles( + self.addRTEMSUserSourceFiles( [ 'rtems/rtems-bsd-shell-setkey.c', ], @@ -2716,6 +2738,156 @@ class pf(builder.Module): ) # +# RPC for user space, remove when NFSv2 is removed +# +class rpc_user(builder.Module): + + def __init__(self, manager): + super(rpc_user, self).__init__(manager, type(self).__name__) + + def generate(self): + mm = self.manager + # User space support for legacy nfsv2 client, remove when nfsv2 is removed + self.addUserSpaceHeaderFiles( + [ + 'include/rpc/clnt.h', + 'include/rpc/pmap_rmt.h', + 'include/rpc/svc_soc.h', + 'include/rpc/nettype.h', + 'include/rpc/xdr.h', + 'include/rpc/svc.h', + 'include/rpc/rpc_msg.h', + 'include/rpc/rpcsec_gss.h', + 'include/rpc/raw.h', + 'include/rpc/clnt_stat.h', + 'include/rpc/auth.h', + 'include/rpc/svc_dg.h', + 'include/rpc/auth_kerb.h', + 'include/rpc/auth_des.h', + 'include/rpc/rpcb_clnt.h', + 'include/rpc/rpc.h', + 'include/rpc/des.h', + 'include/rpc/des_crypt.h', + 'include/rpc/svc_auth.h', + 'include/rpc/pmap_clnt.h', + 'include/rpc/clnt_soc.h', + 'include/rpc/pmap_prot.h', + 'include/rpc/auth_unix.h', + 'include/rpc/rpc_com.h', + 'include/rpc/rpcent.h', + 'include/rpcsvc/nis_db.h', + 'include/rpcsvc/nislib.h', + 'include/rpcsvc/nis_tags.h', + 'include/rpcsvc/ypclnt.h', + 'include/rpcsvc/yp_prot.h', + 'lib/libc/rpc/mt_misc.h', + 'lib/libc/rpc/rpc_com.h', + ] + ) + self.addFile(mm.generator['file']('user', + 'include/rpc/rpcb_prot.x', + mm.generator['freebsd-path'](), + mm.generator['convert'](), + mm.generator['convert'](), + mm.generator['rpc-gen']())) + self.addFile(mm.generator['file']('user', + 'include/rpcsvc/nis.x', + mm.generator['freebsd-path'](), + mm.generator['convert'](), + mm.generator['convert'](), + mm.generator['rpc-gen']())) + self.addUserSpaceSourceFiles( + [ + 'lib/libc/rpc/auth_des.c', + 'lib/libc/rpc/authdes_prot.c', + 'lib/libc/rpc/auth_none.c', + 'lib/libc/rpc/auth_time.c', + 'lib/libc/rpc/auth_unix.c', + 'lib/libc/rpc/authunix_prot.c', + 'lib/libc/rpc/bindresvport.c', + 'lib/libc/rpc/clnt_bcast.c', + 'lib/libc/rpc/clnt_dg.c', + 'lib/libc/rpc/clnt_generic.c', + 'lib/libc/rpc/clnt_perror.c', + 'lib/libc/rpc/clnt_raw.c', + 'lib/libc/rpc/clnt_simple.c', + 'lib/libc/rpc/clnt_vc.c', + 'lib/libc/rpc/crypt_client.c', + 'lib/libc/rpc/des_crypt.c', + 'lib/libc/rpc/des_soft.c', + 'lib/libc/rpc/getnetconfig.c', + 'lib/libc/rpc/getnetpath.c', + 'lib/libc/rpc/getpublickey.c', + 'lib/libc/rpc/getrpcent.c', + 'lib/libc/rpc/getrpcport.c', + 'lib/libc/rpc/key_call.c', + 'lib/libc/rpc/key_prot_xdr.c', + 'lib/libc/rpc/mt_misc.c', + 'lib/libc/rpc/netname.c', + 'lib/libc/rpc/netnamer.c', + 'lib/libc/rpc/pmap_clnt.c', + 'lib/libc/rpc/pmap_getmaps.c', + 'lib/libc/rpc/pmap_getport.c', + 'lib/libc/rpc/pmap_prot2.c', + 'lib/libc/rpc/pmap_prot.c', + 'lib/libc/rpc/pmap_rmt.c', + 'lib/libc/rpc/rpcb_clnt.c', + 'lib/libc/rpc/rpcb_prot.c', + 'lib/libc/rpc/rpcb_st_xdr.c', + 'lib/libc/rpc/rpc_callmsg.c', + 'lib/libc/rpc/rpc_commondata.c', + 'lib/libc/rpc/rpcdname.c', + 'lib/libc/rpc/rpc_dtablesize.c', + 'lib/libc/rpc/rpc_generic.c', + 'lib/libc/rpc/rpc_prot.c', + 'lib/libc/rpc/rpcsec_gss_stub.c', + 'lib/libc/rpc/rpc_soc.c', + 'lib/libc/rpc/rtime.c', + 'lib/libc/rpc/svc_auth.c', + 'lib/libc/rpc/svc_auth_des.c', + 'lib/libc/rpc/svc_auth_unix.c', + 'lib/libc/rpc/svc.c', + 'lib/libc/rpc/svc_dg.c', + 'lib/libc/rpc/svc_generic.c', + 'lib/libc/rpc/svc_raw.c', + 'lib/libc/rpc/svc_run.c', + 'lib/libc/rpc/svc_simple.c', + 'lib/libc/rpc/svc_vc.c', + 'lib/libc/xdr/xdr_array.c', + 'lib/libc/xdr/xdr.c', + 'lib/libc/xdr/xdr_float.c', + 'lib/libc/xdr/xdr_mem.c', + 'lib/libc/xdr/xdr_rec.c', + 'lib/libc/xdr/xdr_reference.c', + 'lib/libc/xdr/xdr_sizeof.c', + 'lib/libc/xdr/xdr_stdio.c', + ], + mm.generator['source'](['-DINET']) + ) + +# +# NFSv2 Client +# +class nfsv2(builder.Module): + + def __init__(self, manager): + super(nfsv2, self).__init__(manager, type(self).__name__) + + def generate(self): + mm = self.manager + self.addDependency(mm['rpc_user']) + self.addRTEMSUserSourceFiles( + [ + 'nfsclient/mount_prot_xdr.c', + 'nfsclient/nfs.c', + 'nfsclient/nfs_prot_xdr.c', + 'nfsclient/rpcio.c', + ], + mm.generator['source']() + ) + + +# # PCI # class pci(builder.Module): @@ -2761,6 +2933,7 @@ class pci(builder.Module): mm.generator['source']() ) + # # User space # @@ -2797,36 +2970,6 @@ class user_space(builder.Module): 'include/nsswitch.h', 'include/resolv.h', 'include/res_update.h', - 'include/rpc/clnt.h', - 'include/rpc/pmap_rmt.h', - 'include/rpc/svc_soc.h', - 'include/rpc/nettype.h', - 'include/rpc/xdr.h', - 'include/rpc/svc.h', - 'include/rpc/rpc_msg.h', - 'include/rpc/rpcsec_gss.h', - 'include/rpc/raw.h', - 'include/rpc/clnt_stat.h', - 'include/rpc/auth.h', - 'include/rpc/svc_dg.h', - 'include/rpc/auth_kerb.h', - 'include/rpc/auth_des.h', - 'include/rpc/rpcb_clnt.h', - 'include/rpc/rpc.h', - 'include/rpc/des.h', - 'include/rpc/des_crypt.h', - 'include/rpc/svc_auth.h', - 'include/rpc/pmap_clnt.h', - 'include/rpc/clnt_soc.h', - 'include/rpc/pmap_prot.h', - 'include/rpc/auth_unix.h', - 'include/rpc/rpc_com.h', - 'include/rpc/rpcent.h', - 'include/rpcsvc/nis_db.h', - 'include/rpcsvc/nislib.h', - 'include/rpcsvc/nis_tags.h', - 'include/rpcsvc/ypclnt.h', - 'include/rpcsvc/yp_prot.h', 'include/sysexits.h', 'lib/lib80211/lib80211_ioctl.h', 'lib/lib80211/lib80211_regdomain.h', @@ -2856,8 +2999,6 @@ class user_space(builder.Module): 'lib/libc/net/res_config.h', 'lib/libc/resolv/res_debug.h', 'lib/libc/resolv/res_private.h', - 'lib/libc/rpc/mt_misc.h', - 'lib/libc/rpc/rpc_com.h', 'lib/libc/stdio/local.h', 'lib/libkvm/kvm.h', 'lib/libmemstat/memstat.h', @@ -2873,22 +3014,14 @@ class user_space(builder.Module): 'usr.bin/netstat/netstat.h' ] ) - self.addFile(mm.generator['file']('include/rpc/rpcb_prot.x', - mm.generator['freebsd-path'](), - mm.generator['convert'](), - mm.generator['convert'](), - mm.generator['rpc-gen']())) - self.addFile(mm.generator['file']('include/rpcsvc/nis.x', - mm.generator['freebsd-path'](), - mm.generator['convert'](), - mm.generator['convert'](), - mm.generator['rpc-gen']())) - self.addFile(mm.generator['file']('sbin/route/keywords', + self.addFile(mm.generator['file']('user', + 'sbin/route/keywords', mm.generator['freebsd-path'](), mm.generator['convert'](), mm.generator['convert'](), mm.generator['route-keywords']())) - self.addFile(mm.generator['file']('sbin/pfctl/parse.y', + self.addFile(mm.generator['file']('user', + 'sbin/pfctl/parse.y', mm.generator['freebsd-path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -2928,7 +3061,7 @@ class user_space(builder.Module): 'include/machine/rtems-bsd-regdomain.h', ] ) - self.addRTEMSSourceFiles( + self.addRTEMSUserSourceFiles( [ 'rtems/rtems-bsd-regdomain.c', ], @@ -3023,72 +3156,9 @@ class user_space(builder.Module): 'lib/libc/resolv/res_send.c', 'lib/libc/resolv/res_state.c', 'lib/libc/resolv/res_update.c', - 'lib/libc/rpc/auth_des.c', - 'lib/libc/rpc/authdes_prot.c', - 'lib/libc/rpc/auth_none.c', - 'lib/libc/rpc/auth_time.c', - 'lib/libc/rpc/auth_unix.c', - 'lib/libc/rpc/authunix_prot.c', - 'lib/libc/rpc/bindresvport.c', - 'lib/libc/rpc/clnt_bcast.c', - 'lib/libc/rpc/clnt_dg.c', - 'lib/libc/rpc/clnt_generic.c', - 'lib/libc/rpc/clnt_perror.c', - 'lib/libc/rpc/clnt_raw.c', - 'lib/libc/rpc/clnt_simple.c', - 'lib/libc/rpc/clnt_vc.c', - 'lib/libc/rpc/crypt_client.c', - 'lib/libc/rpc/des_crypt.c', - 'lib/libc/rpc/des_soft.c', - 'lib/libc/rpc/getnetconfig.c', - 'lib/libc/rpc/getnetpath.c', - 'lib/libc/rpc/getpublickey.c', - 'lib/libc/rpc/getrpcent.c', - 'lib/libc/rpc/getrpcport.c', - 'lib/libc/rpc/key_call.c', - 'lib/libc/rpc/key_prot_xdr.c', - 'lib/libc/rpc/mt_misc.c', - 'lib/libc/rpc/netname.c', - 'lib/libc/rpc/netnamer.c', - 'lib/libc/rpc/pmap_clnt.c', - 'lib/libc/rpc/pmap_getmaps.c', - 'lib/libc/rpc/pmap_getport.c', - 'lib/libc/rpc/pmap_prot2.c', - 'lib/libc/rpc/pmap_prot.c', - 'lib/libc/rpc/pmap_rmt.c', - 'lib/libc/rpc/rpcb_clnt.c', - 'lib/libc/rpc/rpcb_prot.c', - 'lib/libc/rpc/rpcb_st_xdr.c', - 'lib/libc/rpc/rpc_callmsg.c', - 'lib/libc/rpc/rpc_commondata.c', - 'lib/libc/rpc/rpcdname.c', - 'lib/libc/rpc/rpc_dtablesize.c', - 'lib/libc/rpc/rpc_generic.c', - 'lib/libc/rpc/rpc_prot.c', - 'lib/libc/rpc/rpcsec_gss_stub.c', - 'lib/libc/rpc/rpc_soc.c', - 'lib/libc/rpc/rtime.c', - 'lib/libc/rpc/svc_auth.c', - 'lib/libc/rpc/svc_auth_des.c', - 'lib/libc/rpc/svc_auth_unix.c', - 'lib/libc/rpc/svc.c', - 'lib/libc/rpc/svc_dg.c', - 'lib/libc/rpc/svc_generic.c', - 'lib/libc/rpc/svc_raw.c', - 'lib/libc/rpc/svc_run.c', - 'lib/libc/rpc/svc_simple.c', - 'lib/libc/rpc/svc_vc.c', 'lib/libc/stdio/fgetln.c', 'lib/libc/stdlib/strtonum.c', 'lib/libc/string/strsep.c', - 'lib/libc/xdr/xdr_array.c', - 'lib/libc/xdr/xdr.c', - 'lib/libc/xdr/xdr_float.c', - 'lib/libc/xdr/xdr_mem.c', - 'lib/libc/xdr/xdr_rec.c', - 'lib/libc/xdr/xdr_reference.c', - 'lib/libc/xdr/xdr_sizeof.c', - 'lib/libc/xdr/xdr_stdio.c', 'lib/libmemstat/memstat_all.c', 'lib/libmemstat/memstat.c', 'lib/libmemstat/memstat_malloc.c', @@ -3206,6 +3276,7 @@ class crypto_openssl(builder.Module): def generate(self): mm = self.manager + self.addDependency(mm['user_space']) self.addUserSpaceHeaderFiles( [ 'crypto/openssl/crypto/aes/aes_locl.h', @@ -4159,16 +4230,18 @@ class crypto_openssl(builder.Module): 'freebsd/crypto/openssl/crypto/ec/curve448', 'freebsd/crypto/openssl/crypto/ec/curve448/arch_32']) ) - self.addFile(mm.generator['file']('crypto/openssl/crypto/LPdir_unix.c', + self.addFile(mm.generator['file']('user', + 'crypto/openssl/crypto/LPdir_unix.c', mm.generator['freebsd-path'](), mm.generator['from-FreeBSD-to-RTEMS-UserSpaceSourceConverter'](), mm.generator['from-RTEMS-To-FreeBSD-SourceConverter'](), - mm.generator['buildSystemFragmentComposer']())) - self.addFile(mm.generator['file']('crypto/openssl/crypto/ec/ecp_nistz256_table.c', + mm.generator['buildSystemComposer']())) + self.addFile(mm.generator['file']('user', + 'crypto/openssl/crypto/ec/ecp_nistz256_table.c', mm.generator['freebsd-path'](), mm.generator['from-FreeBSD-to-RTEMS-UserSpaceSourceConverter'](), mm.generator['from-RTEMS-To-FreeBSD-SourceConverter'](), - mm.generator['buildSystemFragmentComposer']())) + mm.generator['buildSystemComposer']())) self.addPlainTextFile( [ 'crypto/openssl/LICENSE' @@ -4178,7 +4251,6 @@ class crypto_openssl(builder.Module): # # /usr/bin/openssl # -# depends on crypto_openssl, user_space class usr_bin_openssl(builder.Module): def __init__(self, manager): @@ -4186,6 +4258,7 @@ class usr_bin_openssl(builder.Module): def generate(self): mm = self.manager + self.addDependency(mm['crypto_openssl']) self.addUserSpaceHeaderFiles( [ 'crypto/openssl/apps/apps.h', @@ -4258,7 +4331,7 @@ class usr_bin_openssl(builder.Module): ['freebsd/crypto/openssl'] ) ) - self.addRTEMSSourceFiles( + self.addRTEMSUserSourceFiles( [ 'rtems/rtems-bsd-shell-openssl.c', ], @@ -4378,14 +4451,16 @@ class contrib_libpcap(builder.Module): ) gen_cflags = cflags + ['-DNEED_YYPARSE_WRAPPER=1', '-Dyylval=pcap_lval'] - self.addFile(mm.generator['file']('contrib/libpcap/scanner.l', + self.addFile(mm.generator['file']('user', + 'contrib/libpcap/scanner.l', mm.generator['freebsd-path'](), mm.generator['convert'](), mm.generator['convert'](), mm.generator['lex']('pcap', 'scanner.c', gen_cflags))) - self.addFile(mm.generator['file']('contrib/libpcap/grammar.y', + self.addFile(mm.generator['file']('user', + 'contrib/libpcap/grammar.y', mm.generator['freebsd-path'](), mm.generator['convert'](), mm.generator['convert'](), @@ -4966,7 +5041,7 @@ class usr_sbin_wpa_supplicant(builder.Module): 'freebsd/usr.sbin/wpa/wpa_supplicant', 'freebsd/crypto/openssl/crypto']) ) - self.addRTEMSSourceFiles( + self.addRTEMSUserSourceFiles( [ 'rtems/rtems-bsd-shell-wpa_supplicant.c', 'rtems/rtems-wpa_supplicant_mutex.c', @@ -5080,7 +5155,7 @@ class dhcpcd(builder.Module): ], mm.generator['source']('-D__FreeBSD__ -DTHERE_IS_NO_FORK -DMASTER_ONLY -DINET') ) - self.addRTEMSSourceFiles( + self.addRTEMSUserSourceFiles( [ 'rtems/rtems-bsd-shell-dhcpcd.c', ], @@ -5118,6 +5193,7 @@ class mdnsresponder(builder.Module): mm.generator['source']() ) + class dpaa(builder.Module): def __init__(self, manager): @@ -5217,7 +5293,7 @@ class regulator(builder.Module): def generate(self): mm = self.manager - self.addRTEMSSourceFiles( + self.addRTEMSKernelSourceFiles( [ 'local/regdev_if.c', 'local/regnode_if.c', @@ -5386,6 +5462,9 @@ def load(mm): mm.addModule(pf(mm)) mm.addModule(dev_net(mm)) + mm.addModule(rpc_user(mm)) + mm.addModule(nfsv2(mm)) + # Add PCI mm.addModule(pci(mm)) diff --git a/waf_libbsd.py b/waf_libbsd.py index 779aa7b2..c457cbbd 100644 --- a/waf_libbsd.py +++ b/waf_libbsd.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -'''LibBSD build configuration to waf integration module. -''' +"""LibBSD build configuration to waf integration module. +""" # Copyright (c) 2015, 2020 Chris Johns <chrisj@rtems.org>. All rights reserved. # @@ -37,12 +37,6 @@ from __future__ import print_function -# Python 3 does no longer know the basestring class. Catch that. -try: - basestring -except NameError: - basestring = (str, bytes) - import os import sys import tempfile @@ -86,11 +80,11 @@ class Builder(builder.ModuleManager): return sources def generate(self, rtems_version): - def _dataInsert(data, cpu, frag): + def _dataInsert(data, cpu, space, frag): # - # The default handler returns an empty string. Skip it. + # The default handler returns None. Skip it. # - if type(frag) is not str: + if frag is not None: # Start at the top of the tree d = data path = frag[0] @@ -99,6 +93,10 @@ class Builder(builder.ModuleManager): # Select the sub-part of the tree as the compile options # specialise how files are built. d = d[path[0]] + # Group based on the space, ie kernel or user + if space not in d: + d[space] = {} + d = d[space] if type(path[1]) is list: p = ' '.join(path[1]) else: @@ -144,11 +142,14 @@ class Builder(builder.ModuleManager): m = self[mn] if m.conditionalOn == "none": for f in m.files: - _dataInsert(self.data, 'all', f.getFragment()) + _dataInsert(self.data, 'all', f.getSpace(), + f.getFragment()) for cpu, files in sorted(m.cpuDependentSourceFiles.items()): for f in files: - _dataInsert(self.data, cpu, f.getFragment()) + _dataInsert(self.data, cpu, f.getSpace(), + f.getFragment()) + # Start here if you need to understand self.data. Add 'True or' if self.trace: import pprint pprint.pprint(self.data) @@ -206,23 +207,45 @@ class Builder(builder.ModuleManager): defines += ['%s=1' % (o.strip().upper())] # - # Include paths - # - includes = [] - buildinclude = 'build-include' - if 'cpu-include-paths' in config: + # Include paths, maintain paths for each build space. + # + include_paths = config['include-paths'] + if 'build' not in include_paths: + bld.fatal('no build include path found in include-path defaults') + buildinclude = include_paths['build'] + if isinstance(buildinclude, list): + buildinclude = buildinclude[0] + inc_paths = sorted(include_paths) + inc_paths.remove('build') + inc_paths.remove('cpu') + includes = {} + for inc in inc_paths: + includes[inc] = include_paths[inc] + # cpu include paths must be the first searched + if 'cpu' in include_paths: cpu = bld.get_env()['RTEMS_ARCH'] - if cpu == "i386": - includes += ['freebsd/sys/x86/include'] - for i in config['cpu-include-paths']: - includes += [i.replace('@CPU@', cpu)] - if 'include-paths' in config: - includes += config['include-paths'] - if 'build-include-path' in config: - buildinclude = config['build-include-path'] - if not isinstance(buildinclude, basestring): - buildinclude = buildinclude[0] - includes += [buildinclude] + for i in include_paths['cpu']: + includes['kernel'].insert(0, i.replace('@CPU@', cpu)) + includes['kernel'] += [buildinclude] + + # + # Path mappings + # + if 'path-mappings' in config: + for source, target in config['path-mappings']: + for space in includes: + incs = includes[space] + if source in incs: + target = [target] if isinstance(target, + str) else target + i = incs.index(source) + incs.remove(source) + incs[i:i] = target + + # + # Place the kernel include paths after the user paths + # + includes['user'] += includes['kernel'] # # Collect the libbsd uses @@ -316,7 +339,7 @@ class Builder(builder.ModuleManager): # KVM Symbols # if 'KVMSymbols' in self.data: - kvmsymbols = self.data['KVMSymbols'] + kvmsymbols = self.data['KVMSymbols']['kernel'] if 'includes' in kvmsymbols['files']: kvmsymbols_includes = kvmsymbols['files']['includes'] else: @@ -328,7 +351,7 @@ class Builder(builder.ModuleManager): bld.objects(target='kvmsymbols', features='c', cflags=cflags, - includes=kvmsymbols_includes + includes, + includes=kvmsymbols_includes + includes['kernel'], source=kvmsymbols['files']['all']['default'][0]) libbsd_use += ["kvmsymbols"] @@ -339,7 +362,7 @@ class Builder(builder.ModuleManager): # if 'RPCGen' in self.data: if bld.env.AUTO_REGEN: - rpcgen = self.data['RPCGen'] + rpcgen = self.data['RPCGen']['user'] rpcname = rpcgen['files']['all']['default'][0][:-2] bld(target=rpcname + '.h', source=rpcname + '.x', @@ -350,7 +373,7 @@ class Builder(builder.ModuleManager): # if 'RouteKeywords' in self.data: if bld.env.AUTO_REGEN: - routekw = self.data['RouteKeywords'] + routekw = self.data['RouteKeywords']['user'] rkwname = routekw['files']['all']['default'][0] rkw_rule = host_shell + "cat ${SRC} | " + \ "awk 'BEGIN { r = 0 } { if (NF == 1) " + \ @@ -362,7 +385,7 @@ class Builder(builder.ModuleManager): # Lex # if 'lex' in self.data: - lexes = self.data['lex'] + lexes = self.data['lex']['user'] for l in sorted(lexes.keys()): lex = lexes[l]['all']['default'] if 'cflags' in lex: @@ -383,7 +406,7 @@ class Builder(builder.ModuleManager): bld.objects(target='lex_%s' % (lex['sym']), features='c', cflags=cflags, - includes=lexIncludes + includes, + includes=lexIncludes + includes['user'], defines=defines + lexDefines, source=lex['file'][:-2] + '.c') libbsd_use += ['lex_%s' % (lex['sym'])] @@ -392,7 +415,7 @@ class Builder(builder.ModuleManager): # Yacc # if 'yacc' in self.data: - yaccs = self.data['yacc'] + yaccs = self.data['yacc']['user'] for y in sorted(yaccs.keys()): yacc = yaccs[y]['all']['default'] yaccFile = yacc['file'] @@ -423,7 +446,7 @@ class Builder(builder.ModuleManager): bld.objects(target='yacc_%s' % (yaccSym), features='c', cflags=cflags, - includes=yaccIncludes + includes, + includes=yaccIncludes + includes['user'], defines=defines + yaccDefines, source=yaccFile[:-2] + '.c') libbsd_use += ['yacc_%s' % (yaccSym)] @@ -433,34 +456,40 @@ class Builder(builder.ModuleManager): # specific files for those flags. # objs = 0 - sources = sorted(self.data['sources']) - if 'default' in sources: - sources.remove('default') - for flags in sources: - objs += 1 - build = self.data['sources'][flags] - target = 'objs%02d' % (objs) - bld_sources = Builder._sourceList(bld, build['all']) - archs = sorted(build) - for i in ['all', 'cflags', 'includes']: - if i in archs: - archs.remove(i) - for arch in archs: - if bld.get_env()['RTEMS_ARCH'] == arch: - bld_sources += Builder._sourceList(bld, build[arch]) - bld.objects(target=target, - features='c', - cflags=cflags + sorted(build.get('cflags', [])), - includes=sorted(build.get('includes', [])) + includes, - defines=defines, - source=bld_sources) - libbsd_use += [target] - - # - # We hold the 'default' cflags set of files to the end to create the - # static library with. - # - build = self.data['sources']['default'] + for space in sorted(self.data['sources']): + sources = sorted(self.data['sources'][space]) + if space == 'kernel' and 'default' in sources: + sources.remove('default') + for flags in sources: + objs += 1 + build = self.data['sources'][space][flags] + target = 'objs%02d' % (objs) + bld_sources = Builder._sourceList(bld, build['all']) + archs = sorted(build) + for i in ['all', 'cflags', 'includes']: + if i in archs: + archs.remove(i) + for arch in archs: + if bld.get_env()['RTEMS_ARCH'] == arch: + bld_sources += Builder._sourceList(bld, build[arch]) + bld_cflags = sorted(build.get('cflags', [])) + if 'default' in bld_cflags: + bld_cflags.remove('default') + bld.objects(target=target, + features='c cxx', + cflags=cflags + bld_cflags, + cxxflags=cxxflags, + includes=sorted(build.get('includes', [])) + + includes[space], + defines=defines, + source=bld_sources) + libbsd_use += [target] + + # + # We hold the kernel 'default' cflags set of files to the end to + # create the static library with. + # + build = self.data['sources']['kernel']['default'] bld_sources = Builder._sourceList(bld, build['all']) archs = sorted(build) archs.remove('all') @@ -471,7 +500,7 @@ class Builder(builder.ModuleManager): features='c cxx', cflags=cflags, cxxflags=cxxflags, - includes=includes, + includes=includes['kernel'], defines=defines, source=bld_sources, use=libbsd_use) @@ -513,9 +542,9 @@ class Builder(builder.ModuleManager): # tests = [] if 'tests' in self.data: - tests = self.data['tests'] + tests = self.data['tests']['user'] for testName in sorted(tests): - test = self.data['tests'][testName]['all'] + test = tests[testName]['all'] test_source = [] libs = ['bsd', 'm', 'z', 'rtemstest'] for cfg in test: @@ -533,7 +562,7 @@ class Builder(builder.ModuleManager): bld.program(target='%s.exe' % (testName), features='cprogram', cflags=cflags, - includes=includes, + includes=includes['user'], source=test_sources, use=['bsd'], lib=libs, @@ -1,9 +1,9 @@ # SPDX-License-Identifier: BSD-2-Clause -'''RTEMS LibBSD is a transparent source build of the FreeBSD kernel +"""RTEMS LibBSD is a transparent source build of the FreeBSD kernel source for RTEMS. To use see README.waf shipped with this file. -''' +""" # Copyright (c) 2015-2016 Chris Johns <chrisj@rtems.org>. All rights reserved. # |