On 3/30/2018 7:23 PM, Scott Branden wrote: > Hi Ferruh, > > > On 18-03-30 03:35 AM, Ferruh Yigit wrote: >> On 3/21/2018 6:06 PM, Ajit Khaparde wrote: >>> From: Scott Branden <scott.bran...@broadcom.com> >>> >>> Allow kernel artifacts to be located in output directory specific >>> by RTE_KERNELDIR_OUT. >> How to use this variable, I tried following but kernel modules are still in >> same >> place: > export RTE_KERNELDIR and RTE_KERNELDIR_OUT and it works fine. > RTE_KERNELDIR already exists in Makefile. Are you able to override it?
Please help me a little more, can you please list your commands? Before your patch, what I do: export RTE_KERNELDIR=~/development/linux/linux make defconfig make <--- After this kernel modules in ./build/kmod/*.ko make DESTDIR=/tmp/for-scott install kernel modules are installed into /tmp/for-scott/lib/modules/`uname -r`/extra/dpdk/*.ko Here `uname -r` is wrong but your patch is not related this. I am using RTE_KERNELDIR a lot since I am compiling with various kernel versions, not seen .ko files goes into source folder, what is your command line? Or _after_ your patch: export RTE_KERNELDIR=~/development/linux/linux export RTE_KERNELDIR_OUT=/tmp/kmod make defconfig make <--- After this kernel modules in ./build/kmod/*.ko Getting following build error: /bin/sh: scripts/mod/modpost: No such file or directory make[7]: *** [.../development/linux/linux/scripts/Makefile.modpost:92: __modpost] Error 127 make[6]: *** [.../development/linux/linux/Makefile:1558: modules] Error 2 make[5]: *** [Makefile:146: sub-make] Error 2 make[4]: *** [../mk/rte.module.mk:54: igb_uio.ko] Error 2 Can you please describe how this variable intended to be used? >> - make RTE_KERNELDIR_OUT=/tmp/kmod O=ferruh DESTDIR=/tmp/ferruh >> - make RTE_KERNELDIR_OUT=/tmp/kmod O=ferruh DESTDIR=/tmp/ferruh install >> - make RTE_KERNELDIR_OUT=/tmp/kmod O=ferruh DESTDIR=/tmp/ferruh >> modules_install >> >> /tmp/kmod not created. >> >> And what we are fixing here, what was wrong with old code? > Old code puts the intermediate object files in the kernel source > directory. This doesn't work when building an external module in > openembedded recipes. We need the Makefile change to be able to able to > specify the kernel and output directories separately. >> >>> If RTE_KERNELDIR_OUT not specified than >>> source directory RTE_KERNEL is used. >> ${RTE_KERNELDIR} is used as external Linux kernel source folder, why we are >> want >> to put artifacts into kernel source? > I just kept the default behaviour the same as what it does today. >> >>> Signed-off-by: Scott Branden <scott.bran...@broadcom.com> >>> Signed-off-by: Ajit Khaparde <ajit.khapa...@broadcom.com> >>> --- >>> mk/rte.module.mk | 9 ++++++--- >>> 1 file changed, 6 insertions(+), 3 deletions(-) >>> >>> diff --git a/mk/rte.module.mk b/mk/rte.module.mk >>> index 1ada528a0..e2e1af716 100644 >>> --- a/mk/rte.module.mk >>> +++ b/mk/rte.module.mk >>> @@ -39,6 +39,9 @@ _postinstall: build >>> .PHONY: build >>> build: _postbuild >>> >>> +# Allow kernel artifacts to be located in a different location that source >>> +RTE_KERNELDIR_OUT ?= ${RTE_KERNELDIR} >>> + >>> # Link all sources in build directory >>> %_link: FORCE >>> $(if $(call compare,$(notdir $*),$*),\ >>> @@ -48,7 +51,7 @@ build: _postbuild >>> # build module >>> $(MODULE).ko: $(SRCS_LINKS) >>> @if [ ! -f $(notdir Makefile) ]; then ln -nfs $(SRCDIR)/Makefile . ; fi >>> - @$(MAKE) -C $(RTE_KERNELDIR) M=$(CURDIR) O=$(RTE_KERNELDIR) \ >>> + @$(MAKE) -C $(RTE_KERNELDIR) M=$(CURDIR) O=$(RTE_KERNELDIR_OUT) \ >>> CC="$(KERNELCC)" CROSS_COMPILE=$(CROSS) V=$(if $V,1,0) >>> >>> # install module in $(RTE_OUTPUT)/kmod >>> @@ -59,7 +62,7 @@ $(RTE_OUTPUT)/kmod/$(MODULE).ko: $(MODULE).ko >>> >>> # install module >>> modules_install: >>> - @$(MAKE) -C $(RTE_KERNELDIR) M=$(CURDIR) O=$(RTE_KERNELDIR) \ >>> + @$(MAKE) -C $(RTE_KERNELDIR) M=$(CURDIR) O=$(RTE_KERNELDIR_OUT) \ >>> modules_install >>> >>> .PHONY: clean >>> @@ -69,7 +72,7 @@ clean: _postclean >>> .PHONY: doclean >>> doclean: >>> @if [ ! -f $(notdir Makefile) ]; then ln -nfs $(SRCDIR)/Makefile . ; fi >>> - $(Q)$(MAKE) -C $(RTE_KERNELDIR) M=$(CURDIR) O=$(RTE_KERNELDIR) clean >>> + $(Q)$(MAKE) -C $(RTE_KERNELDIR) M=$(CURDIR) O=$(RTE_KERNELDIR_OUT) clean >>> @$(foreach FILE,$(SRCS-y) $(SRCS-n) $(SRCS-),\ >>> if [ -h $(notdir $(FILE)) ]; then rm -f $(notdir $(FILE)) ; fi >>> ;) >>> @if [ -h $(notdir Makefile) ]; then rm -f $(notdir Makefile) ; fi >>> > Regards, > Scott >