[build] Generate random build identifier
authorMichael Brown <mcb30@ipxe.org>
Sat, 24 Apr 2010 18:15:51 +0000 (19:15 +0100)
committerStefan Hajnoczi <stefanha@gmail.com>
Wed, 7 Jul 2010 19:14:36 +0000 (20:14 +0100)
Randomly generate a 32-bit build identifier that can be used to
identify identical gPXE ROMs when multiple such ROMs are present in a
system (e.g. when a multi-function NIC exposes the same gPXE ROM image
via each function's expansion ROM BAR).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
src/Makefile.housekeeping
src/arch/i386/prefix/romprefix.S

index 637a6aa..fc5402e 100644 (file)
@@ -688,13 +688,18 @@ $(BLIB) : $(BLIB_OBJS) $(BLIB_LIST) $(MAKEDEPS)
        $(Q)$(RANLIB) $@
 blib : $(BLIB)
 
+# Command to generate build ID.  Must be unique for each $(BIN)/%.tmp,
+# even within the same build run.
+#
+BUILD_ID_CMD   := perl -e 'printf "0x%08x", int ( rand ( 0xffffffff ) );'
+
 # Build an intermediate object file from the objects required for the
 # specified target.
 #
-$(BIN)/%.tmp : $(BLIB) $(MAKEDEPS) $(LDSCRIPT) 
+$(BIN)/%.tmp : $(BLIB) $(MAKEDEPS) $(LDSCRIPT)
        $(QM)$(ECHO) "  [LD] $@"
        $(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT) $(TGT_LD_FLAGS) $(BLIB) -o $@ \
-               -Map $(BIN)/$*.tmp.map
+               --defsym _build_id=`$(BUILD_ID_CMD)` -Map $(BIN)/$*.tmp.map
        $(Q)$(OBJDUMP) -ht $@ | $(SORTOBJDUMP) >> $(BIN)/$*.tmp.map
 
 # Keep intermediate object file (useful for debugging)
index 21da163..7f22a70 100644 (file)
@@ -52,6 +52,9 @@ checksum:
        .long   0
        .previous
 
+build_id:
+       .long   _build_id               /* Randomly-generated build ID */
+
 pciheader:
        .ascii  "PCIR"                  /* Signature */
        .word   pci_vendor_id           /* Vendor identification */