build: add checksum target
authorJo-Philipp Wich <jo@mein.io>
Tue, 26 Jul 2016 13:05:35 +0000 (15:05 +0200)
committerJo-Philipp Wich <jo@mein.io>
Mon, 1 Aug 2016 16:11:21 +0000 (18:11 +0200)
Add a new "checksum" make target which generates an sha256sums file over the
image files produced in bin/targets/ and automatically call it during make
world after the package index generation.

The advantage of this new target is that it is guaranteed to run after the
images, the SDK and the ImageBuilder archives have been generated to ensure
that they all end up in the checksum file. Fixes FS#51.

Uses sed to postprocess the OpenSSL digest output into an sha256sum command
compatible format.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Makefile
rules.mk
target/imagebuilder/files/Makefile

index c3e1ed77076feec19eeb171a780fa895a5dca6d8..5bd4fb2ca71a3b6d83702d52cf26b64b4c70500b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -83,9 +83,13 @@ prereq: $(target/stamp-prereq) tmp/.prereq_packages
                exit 1; \
        fi
 
                exit 1; \
        fi
 
+checksum: FORCE
+       $(call sha256sums,$(BIN_DIR))
+
 prepare: .config $(tools/stamp-install) $(toolchain/stamp-install)
 world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE
        $(_SINGLE)$(SUBMAKE) -r package/index
 prepare: .config $(tools/stamp-install) $(toolchain/stamp-install)
 world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE
        $(_SINGLE)$(SUBMAKE) -r package/index
+       $(_SINGLE)$(SUBMAKE) -r checksum
 
 .PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean
 
 
 .PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean
 
index 12a79ba30c21daecd321ed6f23ad26d6d50ddb06..de24778614214ebd62796fcd3cc2de7b68fd7f70 100644 (file)
--- a/rules.mk
+++ b/rules.mk
@@ -371,6 +371,13 @@ define file_copy
        $(CP) $(1) $(2)
 endef
 
        $(CP) $(1) $(2)
 endef
 
+# Calculate sha256sum of any plain file within a given directory
+# $(1) => Input directory
+define sha256sums
+       (cd $(1); find . -maxdepth 1 -type f -not -name 'sha256sums' -printf "%P\n" | sort | \
+               xargs openssl dgst -sha256 | sed -ne 's!^SHA256(\(.*\))= \(.*\)$$!\2 *\1!p' > sha256sums)
+endef
+
 # file extension
 ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
 
 # file extension
 ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
 
index 44439854d696b4ef2325dbcf2cd88c40a3aae40d..493012ff7205c22b1d2303851de8ed67794c1c30 100644 (file)
@@ -125,6 +125,7 @@ ifneq ($(USER_FILES),)
 endif
        $(MAKE) package_postinst
        $(MAKE) build_image
 endif
        $(MAKE) package_postinst
        $(MAKE) build_image
+       $(MAKE) checksum
 
 package_index: FORCE
        @echo
 
 package_index: FORCE
        @echo
@@ -170,6 +171,11 @@ build_image: FORCE
        $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \
                $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)")
 
        $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \
                $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)")
 
+checksum: FORCE
+       @echo
+       @echo Calculating checksums...
+       @$(call sha256sums,$(BIN_DIR))
+
 clean:
        rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)
 
 clean:
        rm -rf $(TMP_DIR) $(DL_DIR) $(TARGET_DIR) $(BIN_DIR)