diff options
author | Joel Sherrill <joel.sherrill@oarcorp.com> | 2012-03-09 09:04:44 -0600 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@oarcorp.com> | 2012-03-09 09:04:44 -0600 |
commit | 9df96097b38a1d3bde191518bdf9dad59333fb3e (patch) | |
tree | f53e4a9ce36d03fcd1e01cce5a642ed254eb964d /freebsd-to-rtems.py | |
parent | ohci_lpc3250.c - Removed duplicate include line (diff) | |
download | rtems-libbsd-9df96097b38a1d3bde191518bdf9dad59333fb3e.tar.bz2 |
Initial addition of target specific files
+ This was needed for in_cksum.c.
+ Generic in_cksum.c does not include all needed methods.
+ generic in_cksum.c is generally sub-optimal.
+ Only PowerPC support merged.
Diffstat (limited to 'freebsd-to-rtems.py')
-rwxr-xr-x | freebsd-to-rtems.py | 185 |
1 files changed, 153 insertions, 32 deletions
diff --git a/freebsd-to-rtems.py b/freebsd-to-rtems.py index 8f809714..87091c57 100755 --- a/freebsd-to-rtems.py +++ b/freebsd-to-rtems.py @@ -48,6 +48,7 @@ isDryRun = False isEarlyExit = False isOnlyMakefile = False tempFile = "/tmp/tmp_FBRT" +filesChanged = 0 def usage(): print "freebsd-to-rtems.py [args]" @@ -150,6 +151,21 @@ def mapContribPath(path): path = m.group(1) + m.group(3) + m.group(2) + m.group(4) return path +# Move target dependent files under a machine directory +def mapCPUDependentPath(path): + return path.replace("include/", "include/freebsd/machine/") + +# compare and overwrite destination file only if different +def copyIfDifferent(new, old): + global filesChanged + if not os.path.exists(old) or \ + filecmp.cmp(new, old, shallow=False) == False: + shutil.move(new, old) + filesChanged += 1 + # print "Move " + new + " to " + old + return True + return False + # generate an empty file as a place holder def installEmptyFile(src): global tempFile @@ -185,21 +201,14 @@ def revertFixIncludes(data): data = re.sub('#([ \t]*)include <' + PREFIX + '/', '#\\1include <', data) return data -# compare and overwrite destination file only if different -def copyIfDifferent(new, old): - if filecmp.cmp(new, old, shallow=False) == False: - shutil.move(new, old) - # print "Move " + new + " to " + old - return True - return False - - # Copy a header file from FreeBSD to the RTEMS BSD tree -def installHeaderFile(org): +def installHeaderFile(org, target): global tempFile src = FreeBSD_DIR + '/' + org dst = RTEMS_DIR + '/' + PREFIX + '/' + org # + org.replace('rtems/', '') dst = mapContribPath(dst) + if target != "generic": + dst = mapCPUDependentPath(dst) if isDryRun == True: if isVerbose == True: print "Install Header - " + src + " => " + dst @@ -245,7 +254,7 @@ def installSourceFile(org): print "Install Source - " + src + " => " + dst # Revert a header file from the RTEMS BSD tree to the FreeBSD tree -def revertHeaderFile(org): +def revertHeaderFile(org, target): src = RTEMS_DIR + '/' + PREFIX + '/' + org.replace('rtems/', '') src = mapContribPath(src) dst = FreeBSD_DIR + '/' + org @@ -257,6 +266,9 @@ def revertHeaderFile(org): os.makedirs(os.path.dirname(dst)) except OSError: pass + if target != "generic": + print "Do not yet know how to revert target dependent files" + sys.exit(1) data = open(src).read() out = open(dst, 'w') if org.find('rtems') == -1: @@ -292,7 +304,8 @@ def deleteOutputDirectory(): if isDryRun == True: return try: - shutil.rmtree(RTEMS_DIR) + print "Deleting output directory needs to be more precise" + #shutil.rmtree(RTEMS_DIR) except OSError: pass @@ -313,21 +326,22 @@ class ModuleManager: installEmptyFile(f) for m in self.modules: for f in m.headerFiles: - installHeaderFile(f) + installHeaderFile(f, m.target) for f in m.sourceFiles: installSourceFile(f) def revertFiles(self): for m in self.modules: for f in m.headerFiles: - revertHeaderFile(f) + revertHeaderFile(f, m.target) for f in m.sourceFiles: revertSourceFile(f) def createMakefile(self): - if isVerbose == True: - print "Create Makefile" + global tempFile if isDryRun == True: + if isVerbose == True: + print "Create Makefile" return data = 'include config.inc\n' \ '\n' \ @@ -338,6 +352,7 @@ class ModuleManager: 'CFLAGS += -ffreestanding \n' \ 'CFLAGS += -I . \n' \ 'CFLAGS += -I rtemsbsd \n' \ + 'CFLAGS += -I freebsd/$(RTEMS_CPU)/include \n' \ 'CFLAGS += -I contrib/altq \n' \ 'CFLAGS += -I contrib/pf \n' \ 'CFLAGS += -B $(INSTALL_BASE) \n' \ @@ -346,15 +361,32 @@ class ModuleManager: '\n' data += 'C_FILES =' for m in self.modules: - for f in m.sourceFiles: - f = PREFIX + '/' + f - f = mapContribPath(f) - data += ' \\\n\t' + f + if m.target == "generic": + for f in m.sourceFiles: + f = PREFIX + '/' + f + f = mapContribPath(f) + data += ' \\\n\t' + f + data += '\n' + data += '# RTEMS Project Owned Files\n' + data += 'C_FILES +=' for f in rtems_sourceFiles: - f = 'rtemsbsd/' + f - data += ' \\\n\t' + f - - data += '\nC_O_FILES = $(C_FILES:%.c=%.o)\n' \ + data += ' \\\n\trtemsbsd/' + f + data += '\n' + data += '\n' + for m in self.modules: + if m.target != "generic": + data += "ifeq ($(RTEMS_CPU)," + m.target + ")\n" + data += "C_FILES +=" + for f in m.sourceFiles: + f = PREFIX + '/' + f + f = mapContribPath(f) + data += ' \\\n\t' + f + data += '\n' + data += 'endif\n' + + + data += '\n' \ + 'C_O_FILES = $(C_FILES:%.c=%.o)\n' \ 'C_DEP_FILES = $(C_FILES:%.c=%.dep)\n' \ '\n' \ 'LIB = libbsd.a\n' \ @@ -380,18 +412,26 @@ class ModuleManager: '\trm -f $(LIB) $(C_O_FILES) $(C_DEP_FILES)\n' \ '\n' \ '-include $(C_DEP_FILES)\n' - out = open(RTEMS_DIR + '/Makefile', 'w') + out = open(tempFile, 'w') out.write(data) out.close() + makefile = RTEMS_DIR + '/Makefile' + if copyIfDifferent(tempFile, makefile) == True: + if isVerbose == True: + print "Create Makefile" # Module - logical group of related files we can perform actions on class Module: def __init__(self, name): self.name = name + self.target = "generic" self.headerFiles = [] self.sourceFiles = [] self.dependencies = [] + def setTarget(self, value): + self.target = value + def addHeaderFiles(self, files): self.headerFiles.extend(files) for file in files: @@ -403,7 +443,8 @@ class Module: def addSourceFiles(self, files): self.sourceFiles.extend(files) for file in files: - if file[-2] != '.' or file[-1] != 'c': + if file[-2] != '.' or \ + (file[-1] != 'c' and file[-1] != 'S'): print "*** " + file + " does not end in .c" print "*** Move it to a header file list" sys.exit(2) @@ -417,7 +458,6 @@ class Module: mm = ModuleManager() rtems_headerFiles = [ - 'rtems/machine/in_cksum.h', # logically a net file 'rtems/machine/atomic.h', 'rtems/machine/_bus.h', 'rtems/machine/bus.h', @@ -996,7 +1036,6 @@ devUsbBase.addSourceFiles( #'kern/kern_mib.c', 'kern/kern_mbuf.c', 'kern/kern_module.c', - 'kern/kern_subr.c', 'kern/kern_sysctl.c', 'kern/subr_bus.c', 'kern/subr_kobj.c', @@ -1059,7 +1098,6 @@ devNet.addSourceFiles( ) netDeps = Module('netDeps') -# logically machine/in_cksum.h is part of this group but RTEMS provides its own netDeps.addHeaderFiles( [ 'security/mac/mac_framework.h', @@ -1147,6 +1185,7 @@ net.addHeaderFiles( ) net.addSourceFiles( [ + 'kern/kern_subr.c', 'net/bridgestp.c', 'net/ieee8023ad_lacp.c', 'net/if_atmsubr.c', @@ -1271,6 +1310,7 @@ netinet.addHeaderFiles( 'netinet/libalias/alias_sctp.h', ] ) +# in_cksum.c is architecture dependent netinet.addSourceFiles( [ 'netinet/accf_data.c', @@ -1280,7 +1320,6 @@ netinet.addSourceFiles( 'netinet/if_ether.c', 'netinet/igmp.c', 'netinet/in.c', - 'netinet/in_cksum.c', 'netinet/in_gif.c', 'netinet/in_mcast.c', 'netinet/in_pcb.c', @@ -1639,6 +1678,7 @@ altq.addSourceFiles( ] ) +# contrib/pf Module pf = Module('pf') pf.addHeaderFiles( [ @@ -1664,6 +1704,78 @@ pf.addSourceFiles( ] ) +# ARM Architecture Specific Files Module +armDependent = Module('armDependent') +armDependent.setTarget("arm") +armDependent.addHeaderFiles( + [ + 'arm/include/in_cksum.h', + ] +) +armDependent.addSourceFiles( + [ + 'arm/arm/in_cksum.c', + 'arm/arm/in_cksum_arm.S', + ] +) + +# i386 Architecture Specific Files Module +i386Dependent = Module('i386Dependent') +i386Dependent.setTarget("i386") +i386Dependent.addHeaderFiles( + [ + 'i386/include/in_cksum.h', + ] +) +i386Dependent.addSourceFiles( + [ + 'i386/i386/in_cksum.c', + ] +) + +# MIPS Architecture Specific Files Module +mipsDependent = Module('mipsDependent') +mipsDependent.setTarget("mips") +mipsDependent.addHeaderFiles( + [ + 'mips/include/in_cksum.h', + ] +) +mipsDependent.addSourceFiles( + [ + 'mips/mips/in_cksum.c', + ] +) + +# PowerPC Architecture Specific Files Module +powerpcDependent = Module('powerpcDependent') +powerpcDependent.setTarget("powerpc") +powerpcDependent.addHeaderFiles( + [ + 'powerpc/include/in_cksum.h', + ] +) +powerpcDependent.addSourceFiles( + [ + 'powerpc/powerpc/in_cksum.c', + ] +) + +# SPARC64 Architecture Specific Files Module +sparc64Dependent = Module('cpu_dependent') +sparc64Dependent.setTarget("powerpc") +sparc64Dependent.addHeaderFiles( + [ + 'sparc64/include/in_cksum.h', + ] +) +sparc64Dependent.addSourceFiles( + [ + 'sparc64/sparc64/in_cksum.c', + ] +) + +# Add Empty Files mm.addEmptyFiles( [ 'cam/cam_queue.h', @@ -1731,7 +1843,6 @@ mm.addModule(altq) mm.addModule(pf) mm.addModule(devNet) -# mm.addModule(rtems) mm.addModule(local) mm.addModule(devUsbBase) mm.addModule(devUsb) @@ -1740,9 +1851,15 @@ mm.addModule(devUsbController) mm.addModule(cam) mm.addModule(devUsbStorage) - #mm.addModule(devUsbNet) +# Now add CPU Architecture Dependent Modules +#mm.addModule(armDependent) +#mm.addModule(i386Dependent) +#mm.addModule(mipsDependent) +mm.addModule(powerpcDependent) +#mm.addModule(sparc64Dependent) + # Perform the actual file manipulation if isForward == True: if isOnlyMakefile == False: @@ -1751,3 +1868,7 @@ if isForward == True: else: mm.revertFiles() +if filesChanged == 1: + print str(filesChanged) + " file was changed." +else: + print str(filesChanged) + " files were changed." |