aboutsummaryrefslogtreecommitdiff
path: root/scripts/build-shadow-tree.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build-shadow-tree.py')
-rwxr-xr-xscripts/build-shadow-tree.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/scripts/build-shadow-tree.py b/scripts/build-shadow-tree.py
new file mode 100755
index 0000000..378797f
--- /dev/null
+++ b/scripts/build-shadow-tree.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+
+# Create a symlink build tree like the old X11 project "lndir" program.
+#
+# Reason for this is simple: synthesizing the Alpha RTL code takes a
+# looong time, so we don't want to do it unnecessarily, but we also
+# don't want to include all of the intermediate files from the
+# synthesis in the source tarball. So we symlink a shadow build tree
+# off to the side, do the synthesis there.
+#
+# We could construct this symlink tree by hand, but that's fragile, so
+# we'd probably write a script to do it anyway, so we might as well
+# just use the script to build the shadow tree and have done with it.
+
+import os
+
+source_root = "source"
+build_root = "build"
+
+if not os.path.isdir(build_root):
+ os.mkdir(build_root)
+
+for source_head, dirs, files in os.walk(source_root):
+ build_head = build_root + source_head[len(source_root):]
+
+ for dn in dirs:
+ d = os.path.join(build_head, dn)
+ if not os.path.isdir(d):
+ os.mkdir(d)
+
+ for fn in files:
+ if fn == ".git":
+ continue
+ d = os.path.join(build_head, fn)
+ s = os.path.join(source_head, fn)
+ s = os.path.abspath(s)
+ s = os.path.relpath(s, build_head)
+ if not os.path.islink(d):
+ os.symlink(s, d)
+
+ for extra in set(os.listdir(build_head)) - set(dirs) - set(files):
+ d = os.path.join(build_head, extra)
+ if os.path.islink(d):
+ os.unlink(d)
+ elif os.path.isdir(d) and not os.listdir(d):
+ os.rmdir(d)