[PATCH] powerpc/boot: Copy serial.c in Makefile

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE2835d

5 messages, 3 authors, 2018-11-29 · open the first message on its own page

[PATCH] powerpc/boot: Copy serial.c in Makefile

From: Daniel Axtens <hidden>
Date: 2018-11-28 04:37:12

A couple of weeks ago, I found my powerpc64e builds were broken
when building out-of-tree with make O=../destination:

  BOOTCC  arch/powerpc/boot/serial.o
powerpc64-linux-gnu-gcc: error: arch/powerpc/boot/serial.c: No such file or directory
powerpc64-linux-gnu-gcc: fatal error: no input files

This is because 5e9dcb6188a4 ("powerpc/boot: Expose Kconfig symbols
to wrapper") adds a more specific rule for serial.c which doesn't
include a copy command. Add it.

Cc: Joel Stanley <joel@jms.id.au>
Fixes: 5e9dcb6188a4 ("powerpc/boot: Expose Kconfig symbols to wrapper")
Signed-off-by: Daniel Axtens <redacted>
---
 arch/powerpc/boot/Makefile | 1 +
 1 file changed, 1 insertion(+)
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 111f97b1ccec..3d5b24b02228 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -203,6 +203,7 @@ $(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
 	$(Q)cp $< $@
 
 $(obj)/serial.c: $(obj)/autoconf.h
+	$(Q)cp $< $@
 
 $(obj)/autoconf.h: $(obj)/%: $(objtree)/include/generated/%
 	$(Q)cp $< $@
-- 
2.17.1

Re: [PATCH] powerpc/boot: Copy serial.c in Makefile

From: kbuild test robot <hidden>
Date: 2018-11-28 21:26:06

Hi Daniel,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on v4.20-rc4 next-20181128]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Daniel-Axtens/powerpc-boot-Copy-serial-c-in-Makefile/20181129-025021
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: powerpc-defconfig (attached as .config)
compiler: powerpc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=powerpc 

All errors (new ones prefixed by >>):

   arch/powerpc/boot/epapr.o: In function `epapr_platform_init':
quoted
epapr.c:(.text+0x184): undefined reference to `serial_console_init'
---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Re: [PATCH] powerpc/boot: Copy serial.c in Makefile

From: Daniel Axtens <hidden>
Date: 2018-11-29 04:48:39

Right, so as both 0-day and snowpatch tell me, this patch is wrong.

It turns out that this:
 $(obj)/serial.c: $(obj)/autoconf.h
+	$(Q)cp $< $@
is identical to:
cp arch/powerpc/boot/autoconf.h arch/powerpc/boot/serial.c

(Clearly my make mastery is inadequate.)

Amusingly this which works for my 64e uImage but obviously not for
anything that actually needs code from serial.c.

Further analysis suggests that making with -j1 triggers the issue, but
everything works with -j2 and above. That would make sense with the
timeline of when I discovered the issue because I changed my build
script to not build in parallel.

Regards,
Daniel

Re: [PATCH] powerpc/boot: Copy serial.c in Makefile

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2018-11-29 11:07:58

Hi dja,

Daniel Axtens [off-list ref] writes:
Right, so as both 0-day and snowpatch tell me, this patch is wrong.

It turns out that this:
quoted
 $(obj)/serial.c: $(obj)/autoconf.h
+	$(Q)cp $< $@
is identical to:
cp arch/powerpc/boot/autoconf.h arch/powerpc/boot/serial.c

(Clearly my make mastery is inadequate.)

Amusingly this which works for my 64e uImage but obviously not for
anything that actually needs code from serial.c.

Further analysis suggests that making with -j1 triggers the issue, but
everything works with -j2 and above. That would make sense with the
timeline of when I discovered the issue because I changed my build
script to not build in parallel.
I don't get why -j makes a difference, but that does explain why we
haven't seen it, none of my tests use -j 1 :)

I don't think we actually want to copy serial.c, we just want to specify
a dependency, does this work for you?

cheers
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 39354365f54a..ed9883169190 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -197,7 +197,7 @@ $(addprefix $(obj)/,$(libfdt) $(libfdtheader)): $(obj)/%: $(srctree)/scripts/dtc
 $(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
 	$(Q)cp $< $@
 
-$(obj)/serial.c: $(obj)/autoconf.h
+$(srctree)/$(src)/serial.c: $(obj)/autoconf.h
 
 $(obj)/autoconf.h: $(obj)/%: $(objtree)/include/generated/%
 	$(Q)cp $< $@

Re: [PATCH] powerpc/boot: Copy serial.c in Makefile

From: Daniel Axtens <hidden>
Date: 2018-11-29 11:44:45

Hi mpe,
quoted
Further analysis suggests that making with -j1 triggers the issue, but
everything works with -j2 and above. That would make sense with the
timeline of when I discovered the issue because I changed my build
script to not build in parallel.
I don't get why -j makes a difference, but that does explain why we
haven't seen it, none of my tests use -j 1 :)
I don't understand either - only that with -j1 V=1 I get

  powerpc64le-linux-gnu-gcc ... -c -o arch/powerpc/boot/serial.o arch/powerpc/boot/serial.c

and with -j2 I get:

  powerpc64le-linux-gnu-gcc ... -c -o arch/powerpc/boot/serial.o /home/dja/dev/linux/linux/arch/powerpc/boot/serial.c

So for some reason j2 is getting the absolute path and j1 is getting a
relative path. I have absolutely no idea why this would be.
I don't think we actually want to copy serial.c, we just want to specify
a dependency, does this work for you?
Yeah I think you're right, I misunderstood the boot wrapper.

That patch works for me - it causes the full path to be used.

Thanks heaps!

Regards,
Daniel
quoted hunk
cheers
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 39354365f54a..ed9883169190 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -197,7 +197,7 @@ $(addprefix $(obj)/,$(libfdt) $(libfdtheader)): $(obj)/%: $(srctree)/scripts/dtc
 $(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
 	$(Q)cp $< $@
 
-$(obj)/serial.c: $(obj)/autoconf.h
+$(srctree)/$(src)/serial.c: $(obj)/autoconf.h
 
 $(obj)/autoconf.h: $(obj)/%: $(objtree)/include/generated/%
 	$(Q)cp $< $@
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help