Message ID | AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com |
---|---|
State | Accepted |
Headers | show |
Dear Che-liang Chiou, In message <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com> you wrote: > GNU Makefile have two flavors of variables, recursively expanded that is > defined by using '=', and simply expanded that is defined by using ':='. > > The bug is caused by using recursively expanded flavor for BIN and SREC. You wrote "The bug". How does this bug manifest in U-Boot? For which configuration do you see issues? Best regards, Wolfgang Denk
Dear Wolfgang Denk, On Tue, Feb 22, 2011 at 3:33 PM, Wolfgang Denk <wd@denx.de> wrote: > In message <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com> you wrote: >> The bug is caused by using recursively expanded flavor for BIN and SREC. > You wrote "The bug". How does this bug manifest in U-Boot? For which > configuration do you see issues? The bug I refer to is that hello_world.bin and hello_world.srec are not built. I can reproduce this bug in versatile_config, but I believe it is generally applicable to other configures as well since it is caused by Makefile syntax. Here is how I found the bug: ------------------------------------------------------------ $ make O=/tmp/build distclean $ make O=/tmp/build versatile_config $ make O=/tmp/build -j8 $ ls /tmp/build/examples/standalone/ hello_world hello_world.o libstubs.o smc91111_eeprom smc91111_eeprom.o stubs.o ------------------------------------------------------------ Notice that hello_world.bin and hello_world.srec are not found. Regards, Che-Liang
Dear Che-liang Chiou, In message <AANLkTikEyV2+sNNMgjw=4ytLXgN2d7in6usdwE3Eedz2@mail.gmail.com> you wrote: > > On Tue, Feb 22, 2011 at 3:33 PM, Wolfgang Denk <wd@denx.de> wrote: > > In message <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com>> you wrote: > >> The bug is caused by using recursively expanded flavor for BIN and SREC. > > You wrote "The bug". How does this bug manifest in U-Boot? For which > > configuration do you see issues? > > The bug I refer to is that hello_world.bin and hello_world.srec are not built. > > I can reproduce this bug in versatile_config, but I believe it is generally > applicable to other configures as well since it is caused by Makefile > syntax. > > Here is how I found the bug: > ------------------------------------------------------------ > $ make O=/tmp/build distclean > $ make O=/tmp/build versatile_config > $ make O=/tmp/build -j8 > $ ls /tmp/build/examples/standalone/ > hello_world hello_world.o libstubs.o smc91111_eeprom > smc91111_eeprom.o stubs.o > ------------------------------------------------------------ > Notice that hello_world.bin and hello_world.srec are not found. Hm... which U-Boot version are you referring to? Because for some time "versatile" is broken and does not build at all... Best regards, Wolfgang Denk
Dear Wolfgang Denk, I checked out the master of the git repo of that time (Feb 22?). Regards, Che-Liang On Thu, Apr 14, 2011 at 4:45 AM, Wolfgang Denk <wd@denx.de> wrote: > Dear Che-liang Chiou, > > In message <AANLkTikEyV2+sNNMgjw=4ytLXgN2d7in6usdwE3Eedz2@mail.gmail.com> you wrote: >> >> On Tue, Feb 22, 2011 at 3:33 PM, Wolfgang Denk <wd@denx.de> wrote: >> > In message <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com>> you wrote: >> >> The bug is caused by using recursively expanded flavor for BIN and SREC. >> > You wrote "The bug". How does this bug manifest in U-Boot? For which >> > configuration do you see issues? >> >> The bug I refer to is that hello_world.bin and hello_world.srec are not built. >> >> I can reproduce this bug in versatile_config, but I believe it is generally >> applicable to other configures as well since it is caused by Makefile >> syntax. >> >> Here is how I found the bug: >> ------------------------------------------------------------ >> $ make O=/tmp/build distclean >> $ make O=/tmp/build versatile_config >> $ make O=/tmp/build -j8 >> $ ls /tmp/build/examples/standalone/ >> hello_world hello_world.o libstubs.o smc91111_eeprom >> smc91111_eeprom.o stubs.o >> ------------------------------------------------------------ >> Notice that hello_world.bin and hello_world.srec are not found. > > Hm... which U-Boot version are you referring to? Because for some > time "versatile" is broken and does not build at all... > > Best regards, > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de > One possible reason that things aren't going according to plan is > that there never was a plan in the first place. >
Dear Che-liang Chiou, In message <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com> you wrote: > GNU Makefile have two flavors of variables, recursively expanded that is > defined by using '=', and simply expanded that is defined by using ':='. > > The bug is caused by using recursively expanded flavor for BIN and SREC. > As you can see below, they are prepended by $(obj) twice. > > We can reproduce this bug with a simplified version of this Makefile: > $ cat > Makefile <<EOF > obj := /path/to/obj/ > ELF := hello_world > > BIN_rec = $(addsuffix .bin,$(ELF)) # recursively expanded > BIN_sim := $(addsuffix .bin,$(ELF)) # simply expanded > > ELF := $(addprefix $(obj),$(ELF)) > BIN_rec := $(addprefix $(obj),$(BIN_rec)) > BIN_sim := $(addprefix $(obj),$(BIN_sim)) > > show: > @echo BIN_rec=$(BIN_rec) > @echo BIN_sim=$(BIN_sim) > > .PHONY: show > EOF > $ make show > BIN_rec=/path/to/obj//path/to/obj/hello_world.bin > BIN_sim=/path/to/obj/hello_world.bin > > Signed-off-by: Che-Liang Chiou <clchiou@chromium.org> > --- > > examples/standalone/Makefile | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) Applied, thanks. Best regards, Wolfgang Denk
Thanks, Wolfgang. On Fri, May 13, 2011 at 4:30 AM, Wolfgang Denk <wd@denx.de> wrote: > Dear Che-liang Chiou, > > In message <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com> you wrote: >> GNU Makefile have two flavors of variables, recursively expanded that is >> defined by using '=', and simply expanded that is defined by using ':='. >> >> The bug is caused by using recursively expanded flavor for BIN and SREC. >> As you can see below, they are prepended by $(obj) twice. >> >> We can reproduce this bug with a simplified version of this Makefile: >> $ cat > Makefile <<EOF >> obj := /path/to/obj/ >> ELF := hello_world >> >> BIN_rec = $(addsuffix .bin,$(ELF)) # recursively expanded >> BIN_sim := $(addsuffix .bin,$(ELF)) # simply expanded >> >> ELF := $(addprefix $(obj),$(ELF)) >> BIN_rec := $(addprefix $(obj),$(BIN_rec)) >> BIN_sim := $(addprefix $(obj),$(BIN_sim)) >> >> show: >> @echo BIN_rec=$(BIN_rec) >> @echo BIN_sim=$(BIN_sim) >> >> .PHONY: show >> EOF >> $ make show >> BIN_rec=/path/to/obj//path/to/obj/hello_world.bin >> BIN_sim=/path/to/obj/hello_world.bin >> >> Signed-off-by: Che-Liang Chiou <clchiou@chromium.org> >> --- >> >> examples/standalone/Makefile | 4 ++-- >> 1 files changed, 2 insertions(+), 2 deletions(-) > > Applied, thanks. > > Best regards, > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de > It all seemed, he thought, to be rather a lot of trouble to go to > just sharpen a razor blade. - Terry Pratchett, _The Light Fantastic_ >
diff --git a/examples/standalone/Makefile b/examples/standalone/Makefile index c1dfdce..6fd9f5d 100644 --- a/examples/standalone/Makefile +++ b/examples/standalone/Makefile @@ -45,8 +45,8 @@ ELF-oxc += eepro100_eeprom # ELF := $(strip $(ELF-y) $(ELF-$(ARCH)) $(ELF-$(BOARD)) $(ELF-$(CPU))) -SREC = $(addsuffix .srec,$(ELF)) -BIN = $(addsuffix .bin,$(ELF)) +SREC := $(addsuffix .srec,$(ELF)) +BIN := $(addsuffix .bin,$(ELF)) COBJS := $(ELF:=.o)
GNU Makefile have two flavors of variables, recursively expanded that is defined by using '=', and simply expanded that is defined by using ':='. The bug is caused by using recursively expanded flavor for BIN and SREC. As you can see below, they are prepended by $(obj) twice. We can reproduce this bug with a simplified version of this Makefile: $ cat > Makefile <<EOF obj := /path/to/obj/ ELF := hello_world BIN_rec = $(addsuffix .bin,$(ELF)) # recursively expanded BIN_sim := $(addsuffix .bin,$(ELF)) # simply expanded ELF := $(addprefix $(obj),$(ELF)) BIN_rec := $(addprefix $(obj),$(BIN_rec)) BIN_sim := $(addprefix $(obj),$(BIN_sim)) show: @echo BIN_rec=$(BIN_rec) @echo BIN_sim=$(BIN_sim) .PHONY: show EOF $ make show BIN_rec=/path/to/obj//path/to/obj/hello_world.bin BIN_sim=/path/to/obj/hello_world.bin Signed-off-by: Che-Liang Chiou <clchiou@chromium.org> --- examples/standalone/Makefile | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)