From 799730ed9aef5f1f9e83cd216310462469ae156f Mon Sep 17 00:00:00 2001
From: Avi Kivity <avi.kivity@gmail.com>
Date: Sun, 2 Dec 2012 17:55:00 +0200
Subject: [PATCH] Add script for creating boot filesystem

---
 scripts/mkbootfs.py | 66 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100755 scripts/mkbootfs.py

diff --git a/scripts/mkbootfs.py b/scripts/mkbootfs.py
new file mode 100755
index 000000000..ebbcc8f83
--- /dev/null
+++ b/scripts/mkbootfs.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+
+import os, sys, struct, optparse, StringIO, ConfigParser
+
+make_option = optparse.make_option
+
+defines = {}
+def add_var(option, opt, value, parser):
+    var, val = value.split('=')
+    defines[var] = val
+
+opt = optparse.OptionParser(option_list = [
+        make_option('-o',
+                    dest = 'output',
+                    help = 'write to FILE',
+                    metavar = 'FILE'),
+        make_option('-d',
+                    dest = 'depends',
+                    help = 'write dependencies to FILE',
+                    metavar = 'FILE',
+                    default = None),
+        make_option('-m',
+                    dest = 'manifest',
+                    help = 'read manifest from FILE',
+                    metavar = 'FILE'),
+        make_option('-D',
+                    type = 'string',
+                    help = 'define VAR=DATA',
+                    metavar = 'VAR=DATA',
+                    action = 'callback',
+                    callback = add_var),
+])
+
+(options, args) = opt.parse_args()
+
+metadata_size = 128
+depends = StringIO.StringIO()
+if options.depends:
+    depends = file(options.depends, 'w')
+out = file(options.output, 'w')
+print defines
+manifest = ConfigParser.SafeConfigParser()
+manifest.read(options.manifest)
+
+depends.write('%s: \\\n' % (options.output,))
+
+files = dict([(f, manifest.get('manifest', f, vars = defines))
+              for f in manifest.options('manifest')])
+pos = (len(files) + 1) * metadata_size
+
+for name, hostname in files.items():
+    size = os.stat(hostname).st_size
+    metadata = struct.pack('QQ112s', size, pos, name)
+    out.write(metadata)
+    pos += size
+    depends.write('\t%s \\\n' % (hostname,))
+
+out.write(struct.pack('128s', ''))
+
+for name, hostname in files.items():
+    out.write(file(hostname).read())
+
+depends.write('\n\n')
+
+out.close()
+depends.close()
-- 
GitLab