
On Mon, 28 Aug 2006 23:15:32 +0200 Wolfgang Denk wd@denx.de wrote:
In message 1defaf580608281323n6ff6a04fh9369b68264374c1c@mail.gmail.com you wrote:
Anyway, I can make a new patch that assign the ELF, SREC and BIN explicitly. Would that be acceptable?
You're trying to tenderize me, aren't you? ;-) Yes, probably I'd give in.
No, I'm trying to solve a problem. You said you were having a problem with that particular aspect of the patch, so I'm offering to fix it.
The real problem I'm trying to fix is that make 3.81 fails to build u-boot. I don't know whether that is caused by a bug in make or a bug in the Makefile, but I think my patch has merit either way, as catch-all rules may do unexpected things with earlier versions of make as well.
Updated patch below. I messed up the blackfin case in the previous patch, so that has been fixed. I've also added $(ELF) to the list of prerequisites for "all", as it was previously part of $(BIN).
When executing make, this is what happens (same result with make 3.80 and 3.81):
Yes, and IMHO you can easily show more problems with make. To me it's really frightening to see so many issues with a tool in so wide use like GNU make.
IMHO many of the problems with GNU make are caused by the built-in rules. That's probably part of the old make legacy, and is not possible to fix without breaking lots of old Makefiles...
I'll send a mail to the make mailinglist tomorrow to see if anyone can give an explanation.
I'll let you know when I receive a reply.
Haavard
From dec97c9028c2fd62d6c39af97ae45ac640fcc2fc Mon Sep 17 00:00:00 2001 From: Haavard Skinnemoen hskinnemoen@atmel.com Date: Mon, 28 Aug 2006 16:17:58 +0200 Subject: [PATCH] Fix/workaround broken dependency handling with make 3.81
This patch fixes the following problem:
make[1]: *** No rule to make target `hello_world.srec', needed by `all'.
The problem has been reported several times before, but so far no patches have been accepted and no one has fixed make. In fact, I can't even find any relevant bug reports against make.
This patch takes a slightly different approach than the other patches I've seen on the mailing list, as it lists the targets explicitly before each of the pattern rules for the elf-, srec- and bin-files. The dependencies for each target are correctly specified, so we don't end up depending on the build order (i.e. the ordering of prerequisites for the `all' rule)
Signed-off-by: Haavard Skinnemoen hskinnemoen@atmel.com --- examples/Makefile | 32 ++++++++++++++++++++------------ 1 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/examples/Makefile b/examples/Makefile index a342d75..5f57761 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -59,45 +59,53 @@ endif
include $(TOPDIR)/config.mk
+ELF = hello_world SREC = hello_world.srec -BIN = hello_world.bin hello_world +BIN = hello_world.bin
ifeq ($(CPU),mpc8xx) +ELF = test_burst SREC = test_burst.srec -BIN = test_burst.bin test_burst +BIN = test_burst.bin endif
ifeq ($(ARCH),i386) +ELF += 82559_eeprom SREC += 82559_eeprom.srec -BIN += 82559_eeprom.bin 82559_eeprom +BIN += 82559_eeprom.bin endif
ifeq ($(ARCH),ppc) +ELF += sched SREC += sched.srec -BIN += sched.bin sched +BIN += sched.bin endif
ifeq ($(ARCH),blackfin) +ELF += smc91111_eeprom SREC += smc91111_eeprom.srec -BIN += smc91111_eeprom.bin smc91111_eeprom +BIN += smc91111_eeprom.bin endif
# The following example is pretty 8xx specific... ifeq ($(CPU),mpc8xx) +ELF += timer SREC += timer.srec -BIN += timer.bin timer +BIN += timer.bin endif
# The following example is 8260 specific... ifeq ($(CPU),mpc8260) +ELF += mem_to_mem_idma2intr SREC += mem_to_mem_idma2intr.srec -BIN += mem_to_mem_idma2intr.bin mem_to_mem_idma2intr +BIN += mem_to_mem_idma2intr.bin endif
# Utility for resetting i82559 EEPROM ifeq ($(BOARD),oxc) +ELF += eepro100_eeprom SREC += eepro100_eeprom.srec -BIN += eepro100_eeprom.bin eepro100_eeprom +BIN += eepro100_eeprom.bin endif
ifeq ($(BIG_ENDIAN),y) @@ -122,20 +130,20 @@ clibdir := $(shell dirname `$(CC) $(CFLA
CPPFLAGS += -I..
-all: .depend $(OBJS) $(LIB) $(SREC) $(BIN) +all: .depend $(OBJS) $(LIB) $(SREC) $(BIN) $(ELF)
######################################################################### $(LIB): .depend $(LIBOBJS) $(AR) crv $@ $(LIBOBJS)
-%: %.o $(LIB) +$(ELF): %: %.o $(LIB) $(LD) -g $(EX_LDFLAGS) -Ttext $(LOAD_ADDR) \ -o $@ -e $(<:.o=) $< $(LIB) \ -L$(gcclibdir) -lgcc -%.srec: % +$(SREC): %.srec: % $(OBJCOPY) -O srec $< $@ 2>/dev/null
-%.bin: % +$(BIN): %.bin: % $(OBJCOPY) -O binary $< $@ 2>/dev/null
#########################################################################