aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcopy-diff.py72
-rw-r--r--llvm-device-build.mk4
-rw-r--r--llvm-host-build.mk4
3 files changed, 78 insertions, 2 deletions
diff --git a/copy-diff.py b/copy-diff.py
new file mode 100755
index 0000000..e66ec2c
--- /dev/null
+++ b/copy-diff.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+from __future__ import with_statement
+
+import os
+import shutil
+import sys
+
+BUFFER_SIZE = 1024
+
+def is_file_different(a, b):
+ if os.path.getsize(a) != os.path.getsize(b):
+ # If the file size is different, the content must be different.
+ return True
+
+ # Read the content of the files, and compare them.
+ with open(a, 'rb') as fa:
+ with open(b, 'rb') as fb:
+ while True:
+ buff_a = fa.read(BUFFER_SIZE)
+ buff_b = fb.read(BUFFER_SIZE)
+
+ if buff_a != buff_b:
+ # File is different in this block.
+ return True
+
+ if len(buff_a) < BUFFER_SIZE:
+ # Finished
+ break
+
+ # File is the same.
+ return False
+
+def copyfile(src, dest):
+ if not os.path.exists(src):
+ raise ValueError('Source file not found')
+
+ # Make parent directory (if necessary)
+ destdir = os.path.dirname(dest)
+ if not os.path.exists(destdir):
+ try:
+ os.makedirs(destdir)
+ except os.error as e:
+ raise ValueError('Unable to create directory ' + destdir)
+ elif not os.path.isdir(destdir):
+ raise ValueError(destdir + ' is not a directory')
+
+ if not os.path.exists(dest) or is_file_different(src, dest):
+ # If the destination file does not exist or the source file is
+ # different from the destination file, then we copy the file.
+ shutil.copyfile(src, dest)
+
+def main():
+ if len(sys.argv) < 3:
+ print('USAGE:', sys.argv[0], '<srcfile> <destfile>', file=sys.stderr)
+ sys.exit(1)
+
+ srcfile = os.path.abspath(sys.argv[1])
+ destfile = os.path.abspath(sys.argv[2])
+
+ if srcfile == destfile:
+ print('WARNING: <srcfile> is equal to <destfile>', file=sys.stderr)
+ else:
+ try:
+ copyfile(srcfile, destfile)
+ except ValueError as e:
+ print('ERROR:', e, file=sys.stderr)
+ sys.exit(1)
+
+if __name__ == '__main__':
+ main()
diff --git a/llvm-device-build.mk b/llvm-device-build.mk
index 83fc5ef..00f089d 100644
--- a/llvm-device-build.mk
+++ b/llvm-device-build.mk
@@ -73,5 +73,7 @@ $(hide) $(TBLGEN) \
-I $(LLVM_ROOT_PATH)/device/include \
-I $(LLVM_ROOT_PATH)/lib/Target \
-gen-$(strip $(1)) \
- -o $@ $<
+ -o $@.tmp $<
+$(hide) $(LLVM_ROOT_PATH)/copy-diff.py $@.tmp $@
+$(hide) $(RM) $@.tmp
endef
diff --git a/llvm-host-build.mk b/llvm-host-build.mk
index d7ef682..fe68934 100644
--- a/llvm-host-build.mk
+++ b/llvm-host-build.mk
@@ -63,5 +63,7 @@ $(hide) $(TBLGEN) \
-I $(LLVM_ROOT_PATH)/lib/Target \
$(if $(strip $(CLANG_ROOT_PATH)),-I $(CLANG_ROOT_PATH)/include,) \
-gen-$(strip $(1)) \
- -o $@ $<
+ -o $@.tmp $<
+$(hide) $(LLVM_ROOT_PATH)/copy-diff.py $@.tmp $@
+$(hide) $(RM) $@.tmp
endef