mkromfs.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import sys
  2. import os
  3. import string
  4. basename = ''
  5. def mkromfs_output(out):
  6. print '%s' % out,
  7. def mkromfs_file(filename, arrayname):
  8. f = open(filename, "rb")
  9. arrayname = arrayname.replace('.', '_')
  10. mkromfs_output('const static unsigned char %s[] = {\n' % arrayname)
  11. count = 0
  12. while True:
  13. byte = f.read(1)
  14. if not byte:
  15. break
  16. mkromfs_output('0x%02x,' % ord(byte))
  17. count = count + 1
  18. if count == 16:
  19. count = 0
  20. mkromfs_output('\n')
  21. mkromfs_output('};\n\n')
  22. f.close()
  23. def mkromfs_dir(dirname, is_root = False):
  24. list = os.listdir(dirname)
  25. path = os.path.abspath(dirname)
  26. # make for directory
  27. for item in list:
  28. fullpath = os.path.join(path, item)
  29. if os.path.isdir(fullpath):
  30. mkromfs_dir(fullpath)
  31. # make for files
  32. for item in list:
  33. fullpath = os.path.join(path, item)
  34. if os.path.isfile(fullpath):
  35. subpath = fullpath[len(basename):]
  36. array = subpath.split('\\')
  37. arrayname = string.join(array, '_')
  38. mkromfs_file(fullpath, arrayname)
  39. subpath = path[len(basename):]
  40. dir = subpath.split('\\')
  41. direntname = string.join(dir, '_')
  42. if is_root:
  43. mkromfs_output('const struct romfs_dirent romfs_root[] = {\n')
  44. else:
  45. mkromfs_output(('const static struct romfs_dirent %s[] = {\n' % direntname))
  46. for item in list:
  47. fullpath = os.path.join(path, item)
  48. fn = fullpath[len(dirname):]
  49. if fn[0] == '\\':
  50. fn = fn[1:]
  51. fn = fn.replace('\\', '/')
  52. subpath = fullpath[len(basename):]
  53. items = subpath.split('\\')
  54. item_name = string.join(items, '_')
  55. item_name = item_name.replace('.', '_')
  56. subpath = subpath.replace('\\', '/')
  57. if subpath[0] == '/':
  58. subpath = subpath[1:]
  59. if os.path.isfile(fullpath):
  60. mkromfs_output(('\t{ROMFS_DIRENT_FILE, "%s", %s, sizeof(%s)},\n' % (fn, item_name, item_name)))
  61. else:
  62. mkromfs_output(('\t{ROMFS_DIRENT_DIR, "%s", %s, sizeof(%s)/sizeof(%s[0])},\n' % (fn, item_name, item_name, item_name)))
  63. mkromfs_output('};\n\n')
  64. if __name__ == "__main__":
  65. try:
  66. basename = os.path.abspath(sys.argv[1])
  67. filename = os.path.abspath(sys.argv[2])
  68. except IndexError:
  69. print "Usage: %s <dirname> <filename>" % sys.argv[0]
  70. raise SystemExit
  71. mkromfs_output("#include <dfs_romfs.h>\n\n")
  72. mkromfs_dir(basename, is_root = True)