On 2023-08-04 23:52:18+0800, Zhangjin Wu wrote:
On 2023-08-04 15:43:42+0800, Zhangjin Wu wrote:
Hi, Thomas
On 2023-08-03 22:45:52+0800, Zhangjin Wu wrote:
To avoid pollute the source code tree and avoid mrproper for every architecture switch, the O= argument must be supported.
Both IMAGE and .config are from the building directory, let's use objtree instead of srctree for them.
If no O= option specified, means building kernel in source code tree, objtree should be srctree in such case.
Suggested-by: Willy Tarreau w@1wt.eu Link: https://lore.kernel.org/lkml/ZK0AB1OXH1s2xYsh@1wt.eu/ Signed-off-by: Zhangjin Wu falcon@tinylab.org
tools/testing/selftests/nolibc/Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 51fef5e6a152..af590aee063a 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -9,6 +9,9 @@ ifeq ($(srctree),) srctree := $(patsubst %/tools/testing/selftests/,%,$(dir $(CURDIR))) endif +# add objtree for O= argument, required by IMAGE and .config +objtree ?= $(srctree)
Isn't this already set by the included tools/scripts/Makefile.include?
Good question, but it is empty if no O= specified, checked it several times before ;-)
For me it is not empty when I am in tools/testing/selftests/nolibc/.
Interesting, here is the code I added to check the value:
diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile index 22f1e1d73fa8..1ae19e896e24 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -12,6 +12,8 @@ include $(srctree)/scripts/subarch.include ARCH = $(SUBARCH) endif
+$(error objtree=$(objtree), srctree=$(srctree)) +
Whenever I do defconfig or run,
$ make help Makefile:15: *** objtree=, srctree=/labs/linux-lab/src/linux-stable. Stop.
It is only not empty when we pass O explicitly:
$ mkdir out $ make help O=out Makefile:15: *** objtree=out, srctree=/labs/linux-lab/src/linux-stable. Stop. $ make help O=$PWD/out Makefile:15: *** objtree=/labs/linux-lab/src/linux-stable/tools/testing/selftests/nolibc/out, srctree=/labs/linux-lab/src/linux-stable. Stop.
Welp, now it's the same for me. I guess I messed it up before, maybe I forgot to remove your changes while testing?
Anyways instead of having to manually do stuff with $(objtree) we could also use $(OUTPUT)$(IMAGE) to always get the correct image.
Do you mean here?
# kernel image names by architecture IMAGE_i386 = arch/x86/boot/bzImage IMAGE_x86 = arch/x86/boot/bzImage IMAGE_arm64 = arch/arm64/boot/Image IMAGE_arm = arch/arm/boot/zImage IMAGE_mips = vmlinuz IMAGE_riscv = arch/riscv/boot/Image IMAGE = $(IMAGE_$(ARCH)) IMAGE_NAME = $(notdir $(IMAGE))
It does save another KERNEL_IMAGE macro in my future patch ;-)
But without O=, OUTPUT is also empty like objtree and when empty, it is assigned as $(CURDIR), not $(srctree) as we expected for IMAGE and .config. To be cleaner, objtree should also be used:
- IMAGE = $(IMAGE_$(ARCH)) + IMAGE = $(objtree)/$(IMAGE_$(ARCH))
Is this what you want?
Thanks! Zhangjin
[..]
After align the empty objtree value with you, will renew this patch.
Thanks! Thomas