Makefile: allow boards to check file size limits
authorMike Frysinger <vapier@gentoo.org>
Thu, 14 Oct 2010 02:58:23 +0000 (22:58 -0400)
committerWolfgang Denk <wd@denx.de>
Tue, 19 Oct 2010 21:28:53 +0000 (23:28 +0200)
Boards often have a reserved size limit on the flash where they're stored.
Sometimes during upgrades or config changes, those limits are exceeded,
but no one notices until they try to upgrade and the limit screws things
up.  Either not enough of U-Boot is written to flash (and so the reboot
fails), or too much is written (and so things after it get clobbered).

So allow boards to declare a size limit (in bytes) and have the build
system check it while building.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Makefile

index 30a564d3cbd67988cdfd904f4fdb851727948ce6..e9c069d3fae3bcf14c9b40f4940766d46393df25 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -304,6 +304,21 @@ __LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
 #########################################################################
 #########################################################################
 
+ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
+BOARD_SIZE_CHECK = \
+       @actual=`wc -c $@ | awk '{print $$1}'`; \
+       limit=$(CONFIG_BOARD_SIZE_LIMIT); \
+       if test $$actual -gt $$limit; then \
+               echo "$@ exceeds file size limit:"; \
+               echo "  limit:  $$limit bytes"; \
+               echo "  actual: $$actual bytes"; \
+               echo "  excess: $$((actual - limit)) bytes"; \
+               exit 1; \
+       fi
+else
+BOARD_SIZE_CHECK =
+endif
+
 # Always append ALL so that arch config.mk's can add custom ones
 ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND)
 
@@ -317,10 +332,12 @@ $(obj)u-boot.srec:        $(obj)u-boot
 
 $(obj)u-boot.bin:      $(obj)u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+               $(BOARD_SIZE_CHECK)
 
 $(obj)u-boot.ldr:      $(obj)u-boot
                $(CREATE_LDR_ENV)
                $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
+               $(BOARD_SIZE_CHECK)
 
 $(obj)u-boot.ldr.hex:  $(obj)u-boot.ldr
                $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary