Skip to content
Snippets Groups Projects
Commit 736a8a8a authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

zephyr: Make sure that generated prj.conf is updated only on content changes.

This is a typical problem with make: we want to trigger rebuilds only
if file actually changed, not if its timestamp changed. In this case,
it's aggravated by the fact that prj.conf depends on the value of
BOARD variable, so we need to do some tricks anyway. We still don't
try to detect if just BOARD changed, just try to generate new
prj.conf.tmp every time (quick), but do actual replacement of prj.conf
only if its content changed.
parent 3e321f17
Branches
No related tags found
No related merge requests found
...@@ -102,5 +102,4 @@ z_clean: ...@@ -102,5 +102,4 @@ z_clean:
.PHONY: prj.conf .PHONY: prj.conf
prj.conf: prj_base.conf prj.conf: prj_base.conf
cat $< >$@ $(PYTHON) makeprj.py prj_base.conf prj_$(BOARD).conf $@
if [ -f prj_$(BOARD).conf ]; then cat prj_$(BOARD).conf >>$@; fi
#!/usr/bin/env python3
import sys
import os
import hashlib
def hash_file(fname):
if not os.path.exists(fname):
return b""
hasher = hashlib.md5()
with open(fname, "rb") as f:
hasher.update(f.read())
return hasher.digest()
old_digest = hash_file(sys.argv[3])
with open(sys.argv[3] + ".tmp", "wb") as f:
f.write(open(sys.argv[1], "rb").read())
if os.path.exists(sys.argv[2]):
f.write(open(sys.argv[2], "rb").read())
new_digest = hash_file(sys.argv[3] + ".tmp")
if new_digest != old_digest:
print("Replacing")
os.rename(sys.argv[3] + ".tmp", sys.argv[3])
else:
os.remove(sys.argv[3] + ".tmp")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment