Patchwork [U-Boot] Fix variable flavor in examples/standalone/Makefile

login
register
mail settings
Submitter Che-liang Chiou
Date Feb. 22, 2011, 7:07 a.m.
Message ID <AANLkTimw1vLC8GM_XsdGqGKLUYyzKQoFYFb8-bJVbGBE@mail.gmail.com>
Download mbox | patch
Permalink /patch/83926/
State Accepted
Headers show

Comments

Che-liang Chiou - Feb. 22, 2011, 7:07 a.m.
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(-)
Wolfgang Denk - Feb. 22, 2011, 7:33 a.m.
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
Che-liang Chiou - Feb. 22, 2011, 7:53 a.m.
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
Wolfgang Denk - April 13, 2011, 8:45 p.m.
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
Che-liang Chiou - April 14, 2011, 3:36 a.m.
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.
>
Wolfgang Denk - May 12, 2011, 8:30 p.m.
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
Che-liang Chiou - May 13, 2011, 4:01 a.m.
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_
>

Patch

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)