Skip to content

Commit

Permalink
build: sort sources to build in a more deterministic way
Browse files Browse the repository at this point in the history
It has been observed that binaries contents
are depending on the order of linked objects.

This order is caused by GNU make's wildcard function
and the position of sources on filesystem.

This change tries to prevent this kind of randomness.

Also consider building using -j1 flag
to make it even more reproductible.

Change-Id: Ie8eee7f336e6f1fa2863c4150d967afd15519f1d
Bug: http://bugzilla.syslinux.org/show_bug.cgi?id=57#related
Signed-off-by: Philippe Coval <philippe.coval at open.eurogiciel.org>
  • Loading branch information
rzr authored and geneC committed Jan 6, 2015
1 parent 5932f12 commit be645d7
Show file tree
Hide file tree
Showing 15 changed files with 27 additions and 27 deletions.
2 changes: 1 addition & 1 deletion codepage/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
VPATH = $(SRC)
PERL = perl
CPSRC = $(wildcard $(SRC)/*.txt)
CPSRC = $(sort $(wildcard $(SRC)/*.txt))
CPOBJ = $(notdir $(CPSRC))
GENFILES = $(patsubst %.txt,%.cp,$(CPOBJ))

Expand Down
6 changes: 3 additions & 3 deletions com32/cmenu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ LIBMENU = libmenu/syslnx.o libmenu/com32io.o libmenu/tui.o \
libmenu/menu.o libmenu/passwords.o libmenu/des.o libmenu/help.o \
$(objdir)/com32/libutil/libutil.c32 $(objdir)/com32/lib/libcom32.c32

CMENUS = $(patsubst %.c,%.c32,$(wildcard $(SRC)/*.c))
IMENUS = $(patsubst %.menu,%.c32,$(wildcard $(SRC)/*.menu))
CMENUS = $(patsubst %.c,%.c32,$(sort $(wildcard $(SRC)/*.c)))
IMENUS = $(patsubst %.menu,%.c32,$(sort $(wildcard $(SRC)/*.menu)))

MENUS = $(LIBS) $(subst $(SRC)/,,$(CMENUS) $(IMENUS))

Expand Down Expand Up @@ -62,7 +62,7 @@ clean: tidy menuclean
rm -f *.lss *.com

menuclean:
rm -f $(patsubst %.menu,%.c,$(wildcard *.menu))
rm -f $(patsubst %.menu,%.c,$(sort $(wildcard *.menu)))

spotless: clean libclean menuclean
rm -f *~ \#* *.c32
Expand Down
2 changes: 1 addition & 1 deletion com32/gpllib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ include $(MAKEDIR)/lib.mk
REQFLAGS += -I$(SRC)/../gplinclude -I$(SRC)/../gplinclude/zzjson

GPLDIRS := $(SRC) $(addprefix $(SRC)/,disk dmi vpd acpi zzjson)
LIBOBJS := $(subst $(SRC)/,,$(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c))))
LIBOBJS := $(subst $(SRC)/,,$(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(sort $(wildcard $(dir)/*.c)))))

BINDIR = /usr/bin
LIBDIR = /usr/lib
Expand Down
2 changes: 1 addition & 1 deletion com32/hdt/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ CFLAGS += -I$(com32)/cmenu/libmenu -I$(com32)
MODULES = hdt.c32
TESTFILES =

OBJS = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(wildcard $(SRC)/*.c)))
OBJS = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(sort $(wildcard $(SRC)/*.c))))
VERSION = $(shell $(SED) -n 's/\#define VERSION \"\(.*\)\"/\1/p' hdt.h)
CODENAME = $(shell $(SED) -n 's/\#define CODENAME \"\(.*\)\"/\1/p' hdt.h)
NODASH_VERSION = $(shell echo $(VERSION) | $(SED) -e 's/-/_/g' | $(SED) -e 's/\./_/g')
Expand Down
2 changes: 1 addition & 1 deletion com32/libupload/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ include $(MAKEDIR)/com32.mk

REQFLAGS += -I$(SRC)

LIBOBJS := $(notdir $(patsubst %.c,%.o,$(wildcard $(SRC)/*.c)))
LIBOBJS := $(notdir $(patsubst %.c,%.o,$(sort $(wildcard $(SRC)/*.c))))

BINDIR = /usr/bin
LIBDIR = /usr/lib
Expand Down
2 changes: 1 addition & 1 deletion com32/rosh/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ include $(MAKEDIR)/rosh.mk
# official release. Otherwise, substitute a hex string that is pretty much
# guaranteed to be unique to be unique from build to build.
ifndef HEXDATE
HEXDATE := $(shell $(PERL) $(topdir)/now.pl $(SRCS) $(wildcard *.h))
HEXDATE := $(shell $(PERL) $(topdir)/now.pl $(SRCS) $(sort $(wildcard *.h)))
endif
ifndef DATE
DATE := $(shell sh $(topdir)/gen-id.sh $(VERSION) $(HEXDATE))
Expand Down
4 changes: 2 additions & 2 deletions com32/sysdump/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ CFLAGS += -I$(com32) -I$(topdir)
MODULES = sysdump.c32
TESTFILES =

SRCS = $(wildcard $(SRC)/*.c)
SRCS = $(sort $(wildcard $(SRC)/*.c))
OBJS = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(SRCS)))

# The DATE is set on the make command line when building binaries for
# official release. Otherwise, substitute a hex string that is pretty much
# guaranteed to be unique to be unique from build to build.
ifndef HEXDATE
HEXDATE := $(shell $(PERL) $(topdir)/now.pl $(SRCS) $(wildcard *.h))
HEXDATE := $(shell $(PERL) $(topdir)/now.pl $(SRCS) $(sort $(wildcard *.h)))
endif
ifndef DATE
DATE := $(shell sh $(topdir)/gen-id.sh $(VERSION) $(HEXDATE))
Expand Down
10 changes: 5 additions & 5 deletions core/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ BTARGET = kwdhash.gen \
isolinux.bin isolinux-debug.bin pxelinux.0 lpxelinux.0

# All primary source files for the main syslinux files
NASMSRC := $(wildcard $(SRC)/*.asm)
NASMHDR := $(wildcard $(SRC)/*.inc)
NASMSRC := $(sort $(wildcard $(SRC)/*.asm))
NASMHDR := $(sort $(wildcard $(SRC)/*.inc))
CSRC := $(shell find $(SRC) -name '*.c' -print)
SSRC := $(shell find $(SRC) -name '*.S' -print)
CHDR := $(shell find $(SRC) -name '*.h' -print)
Expand Down Expand Up @@ -80,9 +80,9 @@ FILTER_OBJS = %rawcon.o %plaincon.o %pxelinux-c.o %ldlinux-c.o \
ifdef EFI_BUILD
# EFI is single-threaded, and doesn't use the LZO assembly decoder
FILTER_OBJS += $(subst $(SRC)/,, \
$(patsubst %.S,%.o, $(wildcard $(SRC)/lzo/*.S)) \
$(patsubst %.c,%.o, $(wildcard $(SRC)/thread/*.c)) \
$(patsubst %.S,%.o, $(wildcard $(SRC)/thread/*.S)))
$(patsubst %.S,%.o, $(sort $(wildcard $(SRC)/lzo/*.S))) \
$(patsubst %.c,%.o, $(sort $(wildcard $(SRC)/thread/*.c))) \
$(patsubst %.S,%.o, $(sort $(wildcard $(SRC)/thread/*.S))))
endif

COBJS = $(filter-out $(FILTER_OBJS),$(COBJ))
Expand Down
2 changes: 1 addition & 1 deletion dos/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ SRCS = syslinux.c \
../libinstaller/getopt/getopt_long.c \
../libinstaller/bootsect_bin.c \
../libinstaller/mbr_bin.c \
$(wildcard $(SRC)/../libfat/*.c)
$(sort $(wildcard $(SRC)/../libfat/*.c))
OBJS = header.o crt0.o ldlinux.o \
$(patsubst %.c,%.o,$(notdir $(SRCS)))
LIBOBJS = int2526.o conio.o memcpy.o memset.o memmove.o skipatou.o atou.o \
Expand Down
12 changes: 6 additions & 6 deletions gpxe/src/Makefile.housekeeping
Original file line number Diff line number Diff line change
Expand Up @@ -246,9 +246,9 @@ endif
#
# BIN has the form bin[-[arch-]platform]

ARCHS := $(patsubst arch/%,%,$(wildcard arch/*))
ARCHS := $(patsubst arch/%,%,$(sort $(wildcard arch/*)))
PLATFORMS := $(patsubst config/defaults/%.h,%,\
$(wildcard config/defaults/*.h))
$(sort $(wildcard config/defaults/*.h)))
archs :
@$(ECHO) $(ARCHS)

Expand Down Expand Up @@ -307,8 +307,8 @@ srcdirs :

# SRCS lists all .c or .S files found in any SRCDIR
#
SRCS += $(wildcard $(patsubst %,%/*.c,$(SRCDIRS)))
SRCS += $(wildcard $(patsubst %,%/*.S,$(SRCDIRS)))
SRCS += $(sort $(wildcard $(patsubst %,%/*.c,$(SRCDIRS))))
SRCS += $(sort $(wildcard $(patsubst %,%/*.S,$(SRCDIRS))))
srcs :
@$(ECHO) $(SRCS)

Expand Down Expand Up @@ -677,7 +677,7 @@ endef
$(BIN)/%.objs : $(BIN)/%.tmp
$(Q)$(ECHO) $(call objs_list,$<)
$(BIN)/%.sizes : $(BIN)/%.tmp
$(Q)$(SIZE) -t $(foreach OBJ,$(call objs_list,$<),$(wildcard $(BIN)/$(subst _,?,$(OBJ)).o)) | \
$(Q)$(SIZE) -t $(foreach OBJ,$(call objs_list,$<),$(sort $(wildcard $(BIN)/$(subst _,?,$(OBJ)).o))) | \
sort -g

# Get dependency list for the specified target
Expand Down Expand Up @@ -807,7 +807,7 @@ $(BIN)/%.o : payload/%.img
$(Q)$(LD) -b binary -r -o $@ $< --undefined obj_payload \
--defsym obj_$*=0

BOBJS += $(patsubst payload/%.img,$(BIN)/%.o,$(wildcard payload/*.img))
BOBJS += $(patsubst payload/%.img,$(BIN)/%.o,$(sort $(wildcard payload/*.img)))

# The "allXXXs" targets for each suffix
#
Expand Down
2 changes: 1 addition & 1 deletion lzo/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ include $(MAKEDIR)/build.mk

INCLUDES += -I$(SRC)/include

LIBOBJS = $(patsubst %.c,%.o,$(subst $(SRC)/,,$(wildcard $(SRC)/src/*.c)))
LIBOBJS = $(patsubst %.c,%.o,$(subst $(SRC)/,,$(sort $(wildcard $(SRC)/src/*.c))))
LIB = lzo.a
BINS = prepcore

Expand Down
2 changes: 1 addition & 1 deletion memdisk/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ NFLAGS = -dDATE='"$(DATE)"'
NINCLUDE = -I$(SRC)/

VPATH = $(SRC)
SRCS = $(wildcard *.asm *.c *.h)
SRCS = $(sort $(wildcard *.asm *.c *.h))

# The DATE is set on the make command line when building binaries for
# official release. Otherwise, substitute a hex string that is pretty much
Expand Down
2 changes: 1 addition & 1 deletion mtools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ SRCS = syslinux.c \
../libinstaller/bootsect_bin.c \
../libinstaller/ldlinux_bin.c \
../libinstaller/ldlinuxc32_bin.c \
$(wildcard $(SRC)/../libfat/*.c)
$(sort $(wildcard $(SRC)/../libfat/*.c))
OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS)))

.SUFFIXES: .c .o .i .s .S
Expand Down
2 changes: 1 addition & 1 deletion win32/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ LIBSRC = ../libinstaller/fs.c \
../libinstaller/ldlinux_bin.c \
../libinstaller/ldlinuxc32_bin.c \
../libinstaller/mbr_bin.c \
$(wildcard $(SRC)/../libfat/*.c)
$(sort $(wildcard $(SRC)/../libfat/*.c))
LIBOBJS = $(patsubst %.c,%.obj,$(notdir $(LIBSRC)))

LIB = syslinux.lib
Expand Down
2 changes: 1 addition & 1 deletion win64/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ LIBSRC = ../libinstaller/fs.c \
../libinstaller/ldlinux_bin.c \
../libinstaller/ldlinuxc32_bin.c \
../libinstaller/mbr_bin.c \
$(wildcard $(SRC)/../libfat/*.c)
$(sort $(wildcard $(SRC)/../libfat/*.c))
LIBOBJS = $(patsubst %.c,%.obj,$(notdir $(LIBSRC)))

LIB = syslinux.lib
Expand Down

0 comments on commit be645d7

Please sign in to comment.