summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rwxr-xr-xpy/py-version.sh16
-rw-r--r--py/py.mk10
2 files changed, 25 insertions, 1 deletions
diff --git a/py/py-version.sh b/py/py-version.sh
new file mode 100755
index 0000000000..f574b574f4
--- /dev/null
+++ b/py/py-version.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+git_hash="$(git rev-parse --short HEAD 2> /dev/null || echo unknown)"
+git_files_are_clean=1
+# Check if there are any modified files.
+git diff --no-ext-diff --quiet --exit-code 2> /dev/null || git_files_are_clean=0
+# Check if there are any staged files.
+git diff-index --cached --quiet HEAD -- 2> /dev/null || git_files_are_clean=0
+if [ "${git_files_are_clean}" != "1" ]; then
+ git_hash="${git_hash}-dirty"
+fi
+cat <<EOF
+// This file was generated by py/py-version.sh
+#define MICROPY_GIT_HASH "${git_hash}"
+#define MICROPY_BUILD_DATE "$(date '+%Y-%m-%d')"
+EOF
diff --git a/py/py.mk b/py/py.mk
index 059029274e..6a331fedcb 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -90,6 +90,14 @@ PY_O_BASENAME = \
# prepend the build destination prefix to the py object files
PY_O = $(addprefix $(PY_BUILD)/, $(PY_O_BASENAME))
+# Anything that depends on FORCE will be considered out-of-date
+FORCE:
+.PHONY: FORCE
+
+$(PY_BUILD)/py-version.h: FORCE
+ $(Q)$(PY_SRC)/py-version.sh > $@.tmp
+ $(Q)if [ -f "$@" ] && cmp -s $@ $@.tmp; then rm $@.tmp; else echo "Generating $@"; mv $@.tmp $@; fi
+
# qstr data
# Adding an order only dependency on $(PY_BUILD) causes $(PY_BUILD) to get
@@ -104,7 +112,7 @@ $(PY_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(PY_SRC)/makeqst
# the right .o's to get recompiled if the generated.h file changes. Adding
# an order-only dependendency to all of the .o's will cause the generated .h
# to get built before we try to compile any of them.
-$(PY_O): | $(PY_BUILD)/qstrdefs.generated.h
+$(PY_O): | $(PY_BUILD)/qstrdefs.generated.h $(PY_BUILD)/py-version.h
# emitters