Re: [PATCH v2 3/5] kbuild: Use relative path for $(objtree)

From: Michal Marek
Date: Mon Jun 09 2014 - 18:39:35 EST


On Mon, Jun 09, 2014 at 03:24:11PM -0700, Randy Dunlap wrote:
> On 06/09/14 15:14, Michal Marek wrote:
> > Dne 9.6.2014 23:23, Randy Dunlap napsal(a):
> >> On 06/05/14 08:56, Michal Marek wrote:
> >>> From d4bc590f8716f7dde6b7bca319097ac30a8cb0b4 Mon Sep 17 00:00:00 2001
> >>> From: Michal Marek <mmarek@xxxxxxx>
> >>> Date: Thu, 5 Jun 2014 17:44:44 +0200
> >>> Subject: [PATCH] um: Fix for relative objtree when generating x86 headers
> >>>
> >>> In an O= build, rely on the generated Makefile to call the main Makefile
> >>> properly. When building in the source tree, we do not need to specify
> >>> the -C and O= either. This fixes the problem when $(objtree) is a
> >>> relative path and the -C changes the directory.
> >>>
> >>> Reported-by: Richard Weinberger <richard.weinberger@xxxxxxxxx>
> >>> Signed-off-by: Michal Marek <mmarek@xxxxxxx>
> >>> ---
> >>> arch/um/Makefile | 3 +--
> >>> 1 file changed, 1 insertion(+), 2 deletions(-)
> >>>
> >>> diff --git a/arch/um/Makefile b/arch/um/Makefile
> >>> index 36e658a..e4b1a96 100644
> >>> --- a/arch/um/Makefile
> >>> +++ b/arch/um/Makefile
> >>> @@ -111,8 +111,7 @@ endef
> >>> KBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig
> >>>
> >>> archheaders:
> >>> - $(Q)$(MAKE) -C '$(srctree)' KBUILD_SRC= \
> >>> - ARCH=$(HEADER_ARCH) O='$(objtree)' archheaders
> >>> + $(Q)$(MAKE) KBUILD_SRC= ARCH=$(HEADER_ARCH) archheaders
> >>>
> >>> archprepare: include/generated/user_constants.h
> >>>
> >>>
> >>
> >> I still get this build error when building uml for i386:
> >>
> >> CC arch/x86/um/user-offsets.s
> >> ../arch/x86/um/user-offsets.c:14:29: fatal error: asm/syscalls_32.h: No such file or directory
> >> compilation terminated.
> >> make[2]: *** [arch/x86/um/user-offsets.s] Error 1
> >
> > Thanks for testing the patch. I cannot reproduce it though:
> >
> > make ARCH=um SUBARCH=i386 O=/dev/shm/li defconfig
> > make ARCH=um SUBARCH=i386 O=/dev/shm/li
>
> That doesn't work for me either. Must be a difference somewhere else.
> I am using linux-next of 20140606 (latest that I know of) with only your
> recent patch applied to it.

I checked out next-20140606 and added the fix on top:

$ git cherry-pick d4bc590f8716f7dde6b7bca319097ac30a8cb0b4
[test cfc8100] um: Fix for relative objtree when generating x86 headers
1 file changed, 1 insertion(+), 2 deletions(-)
$ git rev-parse HEAD^{tree}
8fad860b10c2abc86b1ca820a1b9f2a9267e669b

The resulting tree id should be identical to yours (the commit id
depends on time). It still works for me, however:

$ make mrproper
...
$ make ARCH=um SUBARCH=i386 O=/dev/shm/li defconfig
GEN ./Makefile
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
$ make ARCH=um SUBARCH=i386 O=/dev/shm/li
GEN ./Makefile
scripts/kconfig/conf --silentoldconfig arch/x86/um/Kconfig
CHK include/generated/uapi/linux/version.h
WRAP arch/um/include/generated/asm/scatterlist.h
SYSTBL arch/x86/syscalls/../include/generated/asm/syscalls_32.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h
CC arch/x86/um/user-offsets.s
CHK include/generated/user_constants.h
UPD include/generated/user_constants.h
CHK include/config/kernel.release
UPD include/config/kernel.release
Using /labs/mmarek/linux-2.6 as source for kernel
GEN ./Makefile
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
CC kernel/bounds.s
GEN include/generated/bounds.h
CC arch/um/kernel/asm-offsets.s
GEN include/generated/asm-offsets.h
CALL /labs/mmarek/linux-2.6/scripts/checksyscalls.sh
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
CC scripts/mod/devicetable-offsets.s
GEN scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
CC init/main.o

... and so on. Can you please post the whole make V=1 log leading to the
failure?


> > Also, you pointed out i386 -- Does it mean that the fix worked for you
> > on x86_64?
>
> Yes, it did work on x86_64 for some reason.

That's great. I will push the fix, since at least on scenario is confirmed to
work.

Thanks,
Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/