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

From: Randy Dunlap
Date: Mon Jun 09 2014 - 19:47:53 EST


On 06/09/14 15:39, Michal Marek wrote:
> 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?

sure. I did mkdir /tmp/O then
make ARCH=um SUBARCH=i386 O=/tmp/O defconfig
make ARCH=um SUBARCH=i386 V=1 O=/tmp/O


make -C /tmp/O \
KBUILD_SRC=/local/lnx/next/linux-next-20140606 \
KBUILD_EXTMOD="" -f /local/lnx/next/linux-next-20140606/Makefile \

make -f /local/lnx/next/linux-next-20140606/Makefile silentoldconfig
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
ln -fsn /local/lnx/next/linux-next-20140606 source
/bin/sh /local/lnx/next/linux-next-20140606/scripts/mkmakefile \
/local/lnx/next/linux-next-20140606 . 3 15
GEN ./Makefile
mkdir -p include/linux include/config
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.build obj=scripts/kconfig silentoldconfig
mkdir -p include/generated
scripts/kconfig/conf --silentoldconfig arch/x86/um/Kconfig
set -e; : ' CHK include/generated/uapi/linux/version.h'; mkdir -p include/generated/uapi/linux/; (echo \#define LINUX_VERSION_CODE 200448; echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';) < /local/lnx/next/linux-next-20140606/Makefile > include/generated/uapi/linux/version.h.tmp; if [ -r include/generated/uapi/linux/version.h ] && cmp -s include/generated/uapi/linux/version.h include/generated/uapi/linux/version.h.tmp; then rm -f include/generated/uapi/linux/version.h.tmp; else : ' UPD include/generated/uapi/linux/version.h'; mv -f include/generated/uapi/linux/version.h.tmp include/generated/uapi/linux/version.h; fi
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.build obj=scripts/basic
(cat /dev/null; ) > scripts/basic/modules.order
rm -f .tmp_quiet_recordmcount
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.asm-generic \
src=asm obj=arch/um/include/generated/asm
echo "#include <asm-generic/barrier.h>" >arch/um/include/generated/asm/barrier.h
echo "#include <asm-generic/bug.h>" >arch/um/include/generated/asm/bug.h
echo "#include <asm-generic/clkdev.h>" >arch/um/include/generated/asm/clkdev.h
echo "#include <asm-generic/cputime.h>" >arch/um/include/generated/asm/cputime.h
echo "#include <asm-generic/current.h>" >arch/um/include/generated/asm/current.h
echo "#include <asm-generic/delay.h>" >arch/um/include/generated/asm/delay.h
echo "#include <asm-generic/device.h>" >arch/um/include/generated/asm/device.h
echo "#include <asm-generic/emergency-restart.h>" >arch/um/include/generated/asm/emergency-restart.h
echo "#include <asm-generic/exec.h>" >arch/um/include/generated/asm/exec.h
echo "#include <asm-generic/ftrace.h>" >arch/um/include/generated/asm/ftrace.h
echo "#include <asm-generic/futex.h>" >arch/um/include/generated/asm/futex.h
echo "#include <asm-generic/hardirq.h>" >arch/um/include/generated/asm/hardirq.h
echo "#include <asm-generic/hash.h>" >arch/um/include/generated/asm/hash.h
echo "#include <asm-generic/hw_irq.h>" >arch/um/include/generated/asm/hw_irq.h
echo "#include <asm-generic/io.h>" >arch/um/include/generated/asm/io.h
echo "#include <asm-generic/irq_regs.h>" >arch/um/include/generated/asm/irq_regs.h
echo "#include <asm-generic/kdebug.h>" >arch/um/include/generated/asm/kdebug.h
echo "#include <asm-generic/mcs_spinlock.h>" >arch/um/include/generated/asm/mcs_spinlock.h
echo "#include <asm-generic/mutex.h>" >arch/um/include/generated/asm/mutex.h
echo "#include <asm-generic/param.h>" >arch/um/include/generated/asm/param.h
echo "#include <asm-generic/pci.h>" >arch/um/include/generated/asm/pci.h
echo "#include <asm-generic/percpu.h>" >arch/um/include/generated/asm/percpu.h
echo "#include <asm-generic/preempt.h>" >arch/um/include/generated/asm/preempt.h
echo "#include <asm-generic/scatterlist.h>" >arch/um/include/generated/asm/scatterlist.h
echo "#include <asm-generic/sections.h>" >arch/um/include/generated/asm/sections.h
echo "#include <asm-generic/switch_to.h>" >arch/um/include/generated/asm/switch_to.h
echo "#include <asm-generic/topology.h>" >arch/um/include/generated/asm/topology.h
echo "#include <asm-generic/trace_clock.h>" >arch/um/include/generated/asm/trace_clock.h
echo "#include <asm-generic/xor.h>" >arch/um/include/generated/asm/xor.h
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.asm-generic \
src=uapi/asm obj=arch/um/include/generated/uapi/asm
make KBUILD_SRC= ARCH=x86 archheaders
make -C /local/lnx/next/linux-next-20140606 O=/tmp/O/. archheaders
make -C /tmp/O \
KBUILD_SRC=/local/lnx/next/linux-next-20140606 \
KBUILD_EXTMOD="" -f /local/lnx/next/linux-next-20140606/Makefile \
archheaders
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.build obj=arch/x86/syscalls all
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.build obj=scripts build_unifdef
gcc -Wp,-MD,scripts/.unifdef.d -Iscripts -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -I/local/lnx/next/linux-next-20140606/tools/include -o scripts/unifdef /local/lnx/next/linux-next-20140606/scripts/unifdef.c
make -f /local/lnx/next/linux-next-20140606/scripts/Makefile.build obj=arch/x86/um arch/x86/um/user-offsets.s
gcc -Wp,-MD,arch/x86/um/.user-offsets.s.d -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -Wno-maybe-uninitialized -m32 -funit-at-a-time -march=i686 -Wa,-mtune=generic32 -mpreferred-stack-boundary=2 -ffreestanding -D__arch_um__ -Dvmap=kernel_vmap -Din6addr_loopback=kernel_in6addr_loopback -Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr -D_LARGEFILE64_SOURCE -Wframe-larger-than=1024 -fno-stack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DCC_HAVE_ASM_GOTO -I/local/lnx/next/linux-next-20140606/arch/um/include/shared -I/local/lnx/next/linux-next-20140606/arch/x86/um/shared -I/local/lnx/next/linux-next-20140606/arch/um/include/shared/skas -D_FILE_OFFSET_BITS=64 -idira
fter include -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -Iarch/x86/include/generated -fverbose-asm -S -o arch/x86/um/user-offsets.s /local/lnx/next/linux-next-20140606/arch/x86/um/user-offsets.c
/local/lnx/next/linux-next-20140606/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
make[1]: *** [arch/x86/um/user-offsets.s] Error 2
make: *** [sub-make] Error 2



>
>>> 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.


--
~Randy
--
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/