Patchwork [RFC] kernel: Enable externalsrc on kernels which instantiate kernel.bbclass

login
register
mail settings
Submitter Khem Raj
Date Feb. 6, 2014, 10:05 a.m.
Message ID <1391681105-8896-1-git-send-email-raj.khem@gmail.com>
Download mbox | patch
Permalink /patch/66361/
State New
Headers show

Comments

Khem Raj - Feb. 6, 2014, 10:05 a.m.
This also make a change where for kernel
S != B, this is done because when S = B
and we use O= option or set KBUILD_OUTPUT
to point to objectdir, kernel build system
ends up denoting itself dirty and asking for
running mrproper during later build steps
after do_configure but works perfectly
for when S != B

Additional fixes make sure that we do not
assume directory paths when accessing files

Move exporting KBUILD_OUTPUT from kernel-yocto
into kernel class

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 meta/classes/kernel-yocto.bbclass |  3 +-
 meta/classes/kernel.bbclass       | 71 ++++++++++++++++++++++-----------------
 2 files changed, 41 insertions(+), 33 deletions(-)
Bruce Ashfield - Feb. 6, 2014, 1:38 p.m.
On 14-02-06 05:05 AM, Khem Raj wrote:
> This also make a change where for kernel
> S != B, this is done because when S = B
> and we use O= option or set KBUILD_OUTPUT
> to point to objectdir, kernel build system
> ends up denoting itself dirty and asking for
> running mrproper during later build steps
> after do_configure but works perfectly
> for when S != B
>
> Additional fixes make sure that we do not
> assume directory paths when accessing files
>
> Move exporting KBUILD_OUTPUT from kernel-yocto
> into kernel class
>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
>   meta/classes/kernel-yocto.bbclass |  3 +-
>   meta/classes/kernel.bbclass       | 71 ++++++++++++++++++++++-----------------
>   2 files changed, 41 insertions(+), 33 deletions(-)
>
> diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
> index 8f79932..73257e1 100644
> --- a/meta/classes/kernel-yocto.bbclass
> +++ b/meta/classes/kernel-yocto.bbclass
> @@ -408,6 +408,5 @@ do_kernel_link_vmlinux() {
>   	ln -sf ../../../vmlinux
>   }
>
> -OE_TERMINAL_EXPORTS += "GUILT_BASE KBUILD_OUTPUT"
> +OE_TERMINAL_EXPORTS += "GUILT_BASE"
>   GUILT_BASE = "meta"
> -KBUILD_OUTPUT = "${B}"
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 51626b0..b000147 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -10,6 +10,7 @@ KERNEL_IMAGETYPE ?= "zImage"
>   INITRAMFS_IMAGE ?= ""
>   INITRAMFS_TASK ?= ""
>   INITRAMFS_IMAGE_BUNDLE ?= ""
> +B = "${WORKDIR}/build"

We shouldn't be enforcing "${WORKDIR}/build" here, the name needs to be
variable .. for instance all my kernel recipes already set it to
something else.

As for the rest, I don't get it. I've been doing split source and
kernel builds for 4 years no, with no issues, so we shouldn't need
all the directory shuffling and changing that is happening in this
patch.

Let me do some test builds and see what I can find.

Bruce

>
>   python __anonymous () {
>       kerneltype = d.getVar('KERNEL_IMAGETYPE', True) or ''
> @@ -157,6 +158,7 @@ kernel_do_compile() {
>   	# different initramfs image.  The way to do that in the kernel
>   	# is to specify:
>   	# make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
> +	cd ${S}
>   	if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
>   		# The old style way of copying an prebuilt image and building it
>   		# is turned on via INTIRAMFS_TASK != ""
> @@ -165,13 +167,14 @@ kernel_do_compile() {
>   	fi
>   	oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
>   	if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
> -		gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
> +		gzip -9c < "${B}/${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
>   	fi
>   }
>
>   do_compile_kernelmodules() {
>   	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
> -	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> +	cd ${S}
> +	if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>   		oe_runmake ${PARALLEL_MAKE} modules CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
>   	else
>   		bbnote "no modules to compile"
> @@ -184,7 +187,8 @@ kernel_do_install() {
>   	# First install the modules
>   	#
>   	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
> -	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> +	cd ${S}
> +	if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>   		oe_runmake DEPMOD=echo INSTALL_MOD_PATH="${D}" modules_install
>   		rm "${D}/lib/modules/${KERNEL_VERSION}/build"
>   		rm "${D}/lib/modules/${KERNEL_VERSION}/source"
> @@ -200,10 +204,10 @@ kernel_do_install() {
>   	install -d ${D}/${KERNEL_IMAGEDEST}
>   	install -d ${D}/boot
>   	install -m 0644 ${KERNEL_OUTPUT} ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}
> -	install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}
> -	install -m 0644 .config ${D}/boot/config-${KERNEL_VERSION}
> -	install -m 0644 vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
> -	[ -e Module.symvers ] && install -m 0644 Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
> +	install -m 0644 ${B}/System.map ${D}/boot/System.map-${KERNEL_VERSION}
> +	install -m 0644 ${B}/.config ${D}/boot/config-${KERNEL_VERSION}
> +	install -m 0644 ${B}/vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
> +	[ -e ${B}/Module.symvers ] && install -m 0644 ${B}/Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
>   	install -d ${D}${sysconfdir}/modules-load.d
>   	install -d ${D}${sysconfdir}/modprobe.d
>
> @@ -232,20 +236,21 @@ kernel_do_install() {
>   	# dir. This ensures the original Makefiles are used and not the
>   	# redirecting Makefiles in the build directory.
>   	#
> +	pwd="$PWD"
> +	cd "${B}"
>   	find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
> -	cp .config $kerneldir
> +	cp ${B}/.config $kerneldir
>   	if [ "${S}" != "${B}" ]; then
> -		pwd="$PWD"
>   		cd "${S}"
>   		find . -depth -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
> -		cd "$pwd"
>   	fi
> +	cd "$pwd"
>
>   	# Test to ensure that the output file and image type are not actually
>   	# the same file. If hardlinking is used, they will be the same, and there's
>   	# no need to install.
>   	! [ ${KERNEL_OUTPUT} -ef $kerneldir/${KERNEL_IMAGETYPE} ] && install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE}
> -	install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION}
> +	install -m 0644 ${B}/System.map $kerneldir/System.map-${KERNEL_VERSION}
>
>   	# Dummy Makefile so the clean below works
>           mkdir $kerneldir/Documentation
> @@ -260,24 +265,24 @@ kernel_do_install() {
>   	# we clean the scripts dir while leaving the generated config
>   	# and include files.
>   	#
> -	oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
> -	make -C $kerneldir _mrproper_scripts
> +	oe_runmake KBUILD_OUTPUT= -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
> +	make KBUILD_OUTPUT= -C $kerneldir _mrproper_scripts
>   	find $kerneldir -path $kerneldir/lib -prune -o -path $kerneldir/tools -prune -o -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \;
>
>   	# As of Linux kernel version 3.0.1, the clean target removes
>   	# arch/powerpc/lib/crtsavres.o which is present in
>   	# KBUILD_LDFLAGS_MODULE, making it required to build external modules.
>   	if [ ${ARCH} = "powerpc" ]; then
> -		cp -l arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
> +		cp -l ${B}/arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
>   	fi
>
>   	# Necessary for building modules like compat-wireless.
> -	if [ -f include/generated/bounds.h ]; then
> -		cp -l include/generated/bounds.h $kerneldir/include/generated/bounds.h
> +	if [ -f ${B}/include/generated/bounds.h ]; then
> +		cp -l ${B}/include/generated/bounds.h $kerneldir/include/generated/bounds.h
>   	fi
> -	if [ -d arch/${ARCH}/include/generated ]; then
> +	if [ -d ${B}/arch/${ARCH}/include/generated ]; then
>   		mkdir -p $kerneldir/arch/${ARCH}/include/generated/
> -		cp -flR arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
> +		cp -flR ${B}/arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
>   	fi
>
>   	# Remove the following binaries which cause strip or arch QA errors
> @@ -302,6 +307,7 @@ python sysroot_stage_all () {
>   }
>
>   kernel_do_configure() {
> +	cd ${S}
>   	# fixes extra + in /lib/modules/2.6.37+
>   	# $ scripts/setlocalversion . => +
>   	# $ make kernelversion => 2.6.37
> @@ -313,7 +319,7 @@ kernel_do_configure() {
>   	if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
>   		cp "${WORKDIR}/defconfig" "${B}/.config"
>   	fi
> -	yes '' | oe_runmake oldconfig
> +	oe_runmake olddefconfig
>   }
>
>   do_savedefconfig() {
> @@ -432,19 +438,19 @@ do_uboot_mkimage() {
>   		if test "x${KEEPUIMAGE}" != "xyes" ; then
>   			ENTRYPOINT=${UBOOT_ENTRYPOINT}
>   			if test -n "${UBOOT_ENTRYSYMBOL}"; then
> -				ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
> +				ENTRYPOINT=`${HOST_PREFIX}nm ${B}/vmlinux | \
>   					awk '$3=="${UBOOT_ENTRYSYMBOL}" {print $1}'`
>   			fi
> -			if test -e arch/${ARCH}/boot/compressed/vmlinux ; then
> -				${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin
> -				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage
> -				rm -f linux.bin
> +			if test -e ${B}/arch/${ARCH}/boot/compressed/vmlinux ; then
> +				${OBJCOPY} -O binary -R .note -R .comment -S ${B}/arch/${ARCH}/boot/compressed/vmlinux ${B}/linux.bin
> +				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin ${B}/arch/${ARCH}/boot/uImage
> +				rm -f ${B}/linux.bin
>   			else
> -				${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
> -				rm -f linux.bin.gz
> -				gzip -9 linux.bin
> -				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage
> -				rm -f linux.bin.gz
> +				${OBJCOPY} -O binary -R .note -R .comment -S ${B}/vmlinux ${B}/linux.bin
> +				rm -f ${B}/linux.bin.gz
> +				gzip -9 ${B}/linux.bin > ${B}/linux.bin.gz
> +				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin.gz ${B}/arch/${ARCH}/boot/uImage
> +				rm -f ${B}/linux.bin.gz
>   			fi
>   		fi
>   	fi
> @@ -453,8 +459,8 @@ do_uboot_mkimage() {
>   addtask uboot_mkimage before do_install after do_compile
>
>   kernel_do_deploy() {
> -	install -m 0644 ${KERNEL_OUTPUT} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
> -	if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> +	install -m 0644 ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
> +	if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>   		mkdir -p ${D}/lib
>   		tar -cvzf ${DEPLOYDIR}/${MODULE_TARBALL_BASE_NAME} -C ${D} lib
>   		ln -sf ${MODULE_TARBALL_BASE_NAME} ${DEPLOYDIR}/${MODULE_TARBALL_SYMLINK_NAME}
> @@ -483,3 +489,6 @@ addtask deploy before do_build after do_install
>
>   EXPORT_FUNCTIONS do_deploy
>
> +OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
> +export KBUILD_OUTPUT = "${B}"
> +
>
Bruce Ashfield - Feb. 6, 2014, 7:26 p.m.
On 14-02-06 05:05 AM, Khem Raj wrote:
> This also make a change where for kernel
> S != B, this is done because when S = B
> and we use O= option or set KBUILD_OUTPUT
> to point to objectdir, kernel build system
> ends up denoting itself dirty and asking for
> running mrproper during later build steps
> after do_configure but works perfectly
> for when S != B
>
> Additional fixes make sure that we do not
> assume directory paths when accessing files
>
> Move exporting KBUILD_OUTPUT from kernel-yocto
> into kernel class

I worked through an external SRC build with B == S and B != S
and came up with a smaller, but similar set of changes.

I'd prefer to split the patch into a few smaller chunks, just
in case something goes wrong, or there are other missed use cases.

If you want to continue with the patch, it looks like it is going in
the right direction. Also, if you want, I can do some splits here
and soak it for a bit .. completely up to you.

Cheers,

Bryce

>
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
>   meta/classes/kernel-yocto.bbclass |  3 +-
>   meta/classes/kernel.bbclass       | 71 ++++++++++++++++++++++-----------------
>   2 files changed, 41 insertions(+), 33 deletions(-)
>
> diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
> index 8f79932..73257e1 100644
> --- a/meta/classes/kernel-yocto.bbclass
> +++ b/meta/classes/kernel-yocto.bbclass
> @@ -408,6 +408,5 @@ do_kernel_link_vmlinux() {
>   	ln -sf ../../../vmlinux
>   }
>
> -OE_TERMINAL_EXPORTS += "GUILT_BASE KBUILD_OUTPUT"
> +OE_TERMINAL_EXPORTS += "GUILT_BASE"
>   GUILT_BASE = "meta"
> -KBUILD_OUTPUT = "${B}"
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 51626b0..b000147 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -10,6 +10,7 @@ KERNEL_IMAGETYPE ?= "zImage"
>   INITRAMFS_IMAGE ?= ""
>   INITRAMFS_TASK ?= ""
>   INITRAMFS_IMAGE_BUNDLE ?= ""
> +B = "${WORKDIR}/build"
>
>   python __anonymous () {
>       kerneltype = d.getVar('KERNEL_IMAGETYPE', True) or ''
> @@ -157,6 +158,7 @@ kernel_do_compile() {
>   	# different initramfs image.  The way to do that in the kernel
>   	# is to specify:
>   	# make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
> +	cd ${S}
>   	if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
>   		# The old style way of copying an prebuilt image and building it
>   		# is turned on via INTIRAMFS_TASK != ""
> @@ -165,13 +167,14 @@ kernel_do_compile() {
>   	fi
>   	oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
>   	if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
> -		gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
> +		gzip -9c < "${B}/${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
>   	fi
>   }
>
>   do_compile_kernelmodules() {
>   	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
> -	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> +	cd ${S}
> +	if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>   		oe_runmake ${PARALLEL_MAKE} modules CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
>   	else
>   		bbnote "no modules to compile"
> @@ -184,7 +187,8 @@ kernel_do_install() {
>   	# First install the modules
>   	#
>   	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
> -	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> +	cd ${S}
> +	if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>   		oe_runmake DEPMOD=echo INSTALL_MOD_PATH="${D}" modules_install
>   		rm "${D}/lib/modules/${KERNEL_VERSION}/build"
>   		rm "${D}/lib/modules/${KERNEL_VERSION}/source"
> @@ -200,10 +204,10 @@ kernel_do_install() {
>   	install -d ${D}/${KERNEL_IMAGEDEST}
>   	install -d ${D}/boot
>   	install -m 0644 ${KERNEL_OUTPUT} ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}
> -	install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}
> -	install -m 0644 .config ${D}/boot/config-${KERNEL_VERSION}
> -	install -m 0644 vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
> -	[ -e Module.symvers ] && install -m 0644 Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
> +	install -m 0644 ${B}/System.map ${D}/boot/System.map-${KERNEL_VERSION}
> +	install -m 0644 ${B}/.config ${D}/boot/config-${KERNEL_VERSION}
> +	install -m 0644 ${B}/vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
> +	[ -e ${B}/Module.symvers ] && install -m 0644 ${B}/Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
>   	install -d ${D}${sysconfdir}/modules-load.d
>   	install -d ${D}${sysconfdir}/modprobe.d
>
> @@ -232,20 +236,21 @@ kernel_do_install() {
>   	# dir. This ensures the original Makefiles are used and not the
>   	# redirecting Makefiles in the build directory.
>   	#
> +	pwd="$PWD"
> +	cd "${B}"
>   	find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
> -	cp .config $kerneldir
> +	cp ${B}/.config $kerneldir
>   	if [ "${S}" != "${B}" ]; then
> -		pwd="$PWD"
>   		cd "${S}"
>   		find . -depth -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
> -		cd "$pwd"
>   	fi
> +	cd "$pwd"
>
>   	# Test to ensure that the output file and image type are not actually
>   	# the same file. If hardlinking is used, they will be the same, and there's
>   	# no need to install.
>   	! [ ${KERNEL_OUTPUT} -ef $kerneldir/${KERNEL_IMAGETYPE} ] && install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE}
> -	install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION}
> +	install -m 0644 ${B}/System.map $kerneldir/System.map-${KERNEL_VERSION}
>
>   	# Dummy Makefile so the clean below works
>           mkdir $kerneldir/Documentation
> @@ -260,24 +265,24 @@ kernel_do_install() {
>   	# we clean the scripts dir while leaving the generated config
>   	# and include files.
>   	#
> -	oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
> -	make -C $kerneldir _mrproper_scripts
> +	oe_runmake KBUILD_OUTPUT= -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
> +	make KBUILD_OUTPUT= -C $kerneldir _mrproper_scripts
>   	find $kerneldir -path $kerneldir/lib -prune -o -path $kerneldir/tools -prune -o -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \;
>
>   	# As of Linux kernel version 3.0.1, the clean target removes
>   	# arch/powerpc/lib/crtsavres.o which is present in
>   	# KBUILD_LDFLAGS_MODULE, making it required to build external modules.
>   	if [ ${ARCH} = "powerpc" ]; then
> -		cp -l arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
> +		cp -l ${B}/arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
>   	fi
>
>   	# Necessary for building modules like compat-wireless.
> -	if [ -f include/generated/bounds.h ]; then
> -		cp -l include/generated/bounds.h $kerneldir/include/generated/bounds.h
> +	if [ -f ${B}/include/generated/bounds.h ]; then
> +		cp -l ${B}/include/generated/bounds.h $kerneldir/include/generated/bounds.h
>   	fi
> -	if [ -d arch/${ARCH}/include/generated ]; then
> +	if [ -d ${B}/arch/${ARCH}/include/generated ]; then
>   		mkdir -p $kerneldir/arch/${ARCH}/include/generated/
> -		cp -flR arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
> +		cp -flR ${B}/arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
>   	fi
>
>   	# Remove the following binaries which cause strip or arch QA errors
> @@ -302,6 +307,7 @@ python sysroot_stage_all () {
>   }
>
>   kernel_do_configure() {
> +	cd ${S}
>   	# fixes extra + in /lib/modules/2.6.37+
>   	# $ scripts/setlocalversion . => +
>   	# $ make kernelversion => 2.6.37
> @@ -313,7 +319,7 @@ kernel_do_configure() {
>   	if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
>   		cp "${WORKDIR}/defconfig" "${B}/.config"
>   	fi
> -	yes '' | oe_runmake oldconfig
> +	oe_runmake olddefconfig
>   }
>
>   do_savedefconfig() {
> @@ -432,19 +438,19 @@ do_uboot_mkimage() {
>   		if test "x${KEEPUIMAGE}" != "xyes" ; then
>   			ENTRYPOINT=${UBOOT_ENTRYPOINT}
>   			if test -n "${UBOOT_ENTRYSYMBOL}"; then
> -				ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
> +				ENTRYPOINT=`${HOST_PREFIX}nm ${B}/vmlinux | \
>   					awk '$3=="${UBOOT_ENTRYSYMBOL}" {print $1}'`
>   			fi
> -			if test -e arch/${ARCH}/boot/compressed/vmlinux ; then
> -				${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin
> -				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage
> -				rm -f linux.bin
> +			if test -e ${B}/arch/${ARCH}/boot/compressed/vmlinux ; then
> +				${OBJCOPY} -O binary -R .note -R .comment -S ${B}/arch/${ARCH}/boot/compressed/vmlinux ${B}/linux.bin
> +				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin ${B}/arch/${ARCH}/boot/uImage
> +				rm -f ${B}/linux.bin
>   			else
> -				${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
> -				rm -f linux.bin.gz
> -				gzip -9 linux.bin
> -				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage
> -				rm -f linux.bin.gz
> +				${OBJCOPY} -O binary -R .note -R .comment -S ${B}/vmlinux ${B}/linux.bin
> +				rm -f ${B}/linux.bin.gz
> +				gzip -9 ${B}/linux.bin > ${B}/linux.bin.gz
> +				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin.gz ${B}/arch/${ARCH}/boot/uImage
> +				rm -f ${B}/linux.bin.gz
>   			fi
>   		fi
>   	fi
> @@ -453,8 +459,8 @@ do_uboot_mkimage() {
>   addtask uboot_mkimage before do_install after do_compile
>
>   kernel_do_deploy() {
> -	install -m 0644 ${KERNEL_OUTPUT} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
> -	if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> +	install -m 0644 ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
> +	if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>   		mkdir -p ${D}/lib
>   		tar -cvzf ${DEPLOYDIR}/${MODULE_TARBALL_BASE_NAME} -C ${D} lib
>   		ln -sf ${MODULE_TARBALL_BASE_NAME} ${DEPLOYDIR}/${MODULE_TARBALL_SYMLINK_NAME}
> @@ -483,3 +489,6 @@ addtask deploy before do_build after do_install
>
>   EXPORT_FUNCTIONS do_deploy
>
> +OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
> +export KBUILD_OUTPUT = "${B}"
> +
>
Khem Raj - Feb. 6, 2014, 7:36 p.m.
On Thu, Feb 6, 2014 at 11:26 AM, Bruce Ashfield
<bruce.ashfield@windriver.com> wrote:
> On 14-02-06 05:05 AM, Khem Raj wrote:
>>
>> This also make a change where for kernel
>> S != B, this is done because when S = B
>> and we use O= option or set KBUILD_OUTPUT
>> to point to objectdir, kernel build system
>> ends up denoting itself dirty and asking for
>> running mrproper during later build steps
>> after do_configure but works perfectly
>> for when S != B
>>
>> Additional fixes make sure that we do not
>> assume directory paths when accessing files
>>
>> Move exporting KBUILD_OUTPUT from kernel-yocto
>> into kernel class
>
>
> I worked through an external SRC build with B == S and B != S
> and came up with a smaller, but similar set of changes.
>
> I'd prefer to split the patch into a few smaller chunks, just
> in case something goes wrong, or there are other missed use cases.
>

OK sure.

> If you want to continue with the patch, it looks like it is going in
> the right direction. Also, if you want, I can do some splits here
> and soak it for a bit .. completely up to you.
>

soak it no problems.

> Cheers,
>
> Bryce
>
>
>>
>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> ---
>>   meta/classes/kernel-yocto.bbclass |  3 +-
>>   meta/classes/kernel.bbclass       | 71
>> ++++++++++++++++++++++-----------------
>>   2 files changed, 41 insertions(+), 33 deletions(-)
>>
>> diff --git a/meta/classes/kernel-yocto.bbclass
>> b/meta/classes/kernel-yocto.bbclass
>> index 8f79932..73257e1 100644
>> --- a/meta/classes/kernel-yocto.bbclass
>> +++ b/meta/classes/kernel-yocto.bbclass
>> @@ -408,6 +408,5 @@ do_kernel_link_vmlinux() {
>>         ln -sf ../../../vmlinux
>>   }
>>
>> -OE_TERMINAL_EXPORTS += "GUILT_BASE KBUILD_OUTPUT"
>> +OE_TERMINAL_EXPORTS += "GUILT_BASE"
>>   GUILT_BASE = "meta"
>> -KBUILD_OUTPUT = "${B}"
>> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
>> index 51626b0..b000147 100644
>> --- a/meta/classes/kernel.bbclass
>> +++ b/meta/classes/kernel.bbclass
>> @@ -10,6 +10,7 @@ KERNEL_IMAGETYPE ?= "zImage"
>>   INITRAMFS_IMAGE ?= ""
>>   INITRAMFS_TASK ?= ""
>>   INITRAMFS_IMAGE_BUNDLE ?= ""
>> +B = "${WORKDIR}/build"
>>
>>   python __anonymous () {
>>       kerneltype = d.getVar('KERNEL_IMAGETYPE', True) or ''
>> @@ -157,6 +158,7 @@ kernel_do_compile() {
>>         # different initramfs image.  The way to do that in the kernel
>>         # is to specify:
>>         # make ...args...
>> CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
>> +       cd ${S}
>>         if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != ""
>> ] ; then
>>                 # The old style way of copying an prebuilt image and
>> building it
>>                 # is turned on via INTIRAMFS_TASK != ""
>> @@ -165,13 +167,14 @@ kernel_do_compile() {
>>         fi
>>         oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE}
>> CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
>> $use_alternate_initrd
>>         if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}";
>> then
>> -               gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" >
>> "${KERNEL_OUTPUT}"
>> +               gzip -9c < "${B}/${KERNEL_IMAGETYPE_FOR_MAKE}" >
>> "${KERNEL_OUTPUT}"
>>         fi
>>   }
>>
>>   do_compile_kernelmodules() {
>>         unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
>> -       if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
>> +       cd ${S}
>> +       if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>>                 oe_runmake ${PARALLEL_MAKE} modules CC="${KERNEL_CC}"
>> LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
>>         else
>>                 bbnote "no modules to compile"
>> @@ -184,7 +187,8 @@ kernel_do_install() {
>>         # First install the modules
>>         #
>>         unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
>> -       if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
>> +       cd ${S}
>> +       if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
>>                 oe_runmake DEPMOD=echo INSTALL_MOD_PATH="${D}"
>> modules_install
>>                 rm "${D}/lib/modules/${KERNEL_VERSION}/build"
>>                 rm "${D}/lib/modules/${KERNEL_VERSION}/source"
>> @@ -200,10 +204,10 @@ kernel_do_install() {
>>         install -d ${D}/${KERNEL_IMAGEDEST}
>>         install -d ${D}/boot
>>         install -m 0644 ${KERNEL_OUTPUT}
>> ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}
>> -       install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}
>> -       install -m 0644 .config ${D}/boot/config-${KERNEL_VERSION}
>> -       install -m 0644 vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
>> -       [ -e Module.symvers ] && install -m 0644 Module.symvers
>> ${D}/boot/Module.symvers-${KERNEL_VERSION}
>> +       install -m 0644 ${B}/System.map
>> ${D}/boot/System.map-${KERNEL_VERSION}
>> +       install -m 0644 ${B}/.config ${D}/boot/config-${KERNEL_VERSION}
>> +       install -m 0644 ${B}/vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
>> +       [ -e ${B}/Module.symvers ] && install -m 0644 ${B}/Module.symvers
>> ${D}/boot/Module.symvers-${KERNEL_VERSION}
>>         install -d ${D}${sysconfdir}/modules-load.d
>>         install -d ${D}${sysconfdir}/modprobe.d
>>
>> @@ -232,20 +236,21 @@ kernel_do_install() {
>>         # dir. This ensures the original Makefiles are used and not the
>>         # redirecting Makefiles in the build directory.
>>         #
>> +       pwd="$PWD"
>> +       cd "${B}"
>>         find . -depth -not -name "*.cmd" -not -name "*.o" -not -path
>> "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
>> -       cp .config $kerneldir
>> +       cp ${B}/.config $kerneldir
>>         if [ "${S}" != "${B}" ]; then
>> -               pwd="$PWD"
>>                 cd "${S}"
>>                 find . -depth -not -path "./Documentation*" -not -path
>> "./.*" -print0 | cpio --null -pdlu $kerneldir
>> -               cd "$pwd"
>>         fi
>> +       cd "$pwd"
>>
>>         # Test to ensure that the output file and image type are not
>> actually
>>         # the same file. If hardlinking is used, they will be the same,
>> and there's
>>         # no need to install.
>>         ! [ ${KERNEL_OUTPUT} -ef $kerneldir/${KERNEL_IMAGETYPE} ] &&
>> install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE}
>> -       install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION}
>> +       install -m 0644 ${B}/System.map
>> $kerneldir/System.map-${KERNEL_VERSION}
>>
>>         # Dummy Makefile so the clean below works
>>           mkdir $kerneldir/Documentation
>> @@ -260,24 +265,24 @@ kernel_do_install() {
>>         # we clean the scripts dir while leaving the generated config
>>         # and include files.
>>         #
>> -       oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
>> -       make -C $kerneldir _mrproper_scripts
>> +       oe_runmake KBUILD_OUTPUT= -C $kerneldir CC="${KERNEL_CC}"
>> LD="${KERNEL_LD}" clean
>> +       make KBUILD_OUTPUT= -C $kerneldir _mrproper_scripts
>>         find $kerneldir -path $kerneldir/lib -prune -o -path
>> $kerneldir/tools -prune -o -path $kerneldir/scripts -prune -o -name
>> "*.[csS]" -exec rm '{}' \;
>>
>>         # As of Linux kernel version 3.0.1, the clean target removes
>>         # arch/powerpc/lib/crtsavres.o which is present in
>>         # KBUILD_LDFLAGS_MODULE, making it required to build external
>> modules.
>>         if [ ${ARCH} = "powerpc" ]; then
>> -               cp -l arch/powerpc/lib/crtsavres.o
>> $kerneldir/arch/powerpc/lib/crtsavres.o
>> +               cp -l ${B}/arch/powerpc/lib/crtsavres.o
>> $kerneldir/arch/powerpc/lib/crtsavres.o
>>         fi
>>
>>         # Necessary for building modules like compat-wireless.
>> -       if [ -f include/generated/bounds.h ]; then
>> -               cp -l include/generated/bounds.h
>> $kerneldir/include/generated/bounds.h
>> +       if [ -f ${B}/include/generated/bounds.h ]; then
>> +               cp -l ${B}/include/generated/bounds.h
>> $kerneldir/include/generated/bounds.h
>>         fi
>> -       if [ -d arch/${ARCH}/include/generated ]; then
>> +       if [ -d ${B}/arch/${ARCH}/include/generated ]; then
>>                 mkdir -p $kerneldir/arch/${ARCH}/include/generated/
>> -               cp -flR arch/${ARCH}/include/generated/*
>> $kerneldir/arch/${ARCH}/include/generated/
>> +               cp -flR ${B}/arch/${ARCH}/include/generated/*
>> $kerneldir/arch/${ARCH}/include/generated/
>>         fi
>>
>>         # Remove the following binaries which cause strip or arch QA
>> errors
>> @@ -302,6 +307,7 @@ python sysroot_stage_all () {
>>   }
>>
>>   kernel_do_configure() {
>> +       cd ${S}
>>         # fixes extra + in /lib/modules/2.6.37+
>>         # $ scripts/setlocalversion . => +
>>         # $ make kernelversion => 2.6.37
>> @@ -313,7 +319,7 @@ kernel_do_configure() {
>>         if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
>>                 cp "${WORKDIR}/defconfig" "${B}/.config"
>>         fi
>> -       yes '' | oe_runmake oldconfig
>> +       oe_runmake olddefconfig
>>   }
>>
>>   do_savedefconfig() {
>> @@ -432,19 +438,19 @@ do_uboot_mkimage() {
>>                 if test "x${KEEPUIMAGE}" != "xyes" ; then
>>                         ENTRYPOINT=${UBOOT_ENTRYPOINT}
>>                         if test -n "${UBOOT_ENTRYSYMBOL}"; then
>> -                               ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux
>> | \
>> +                               ENTRYPOINT=`${HOST_PREFIX}nm ${B}/vmlinux
>> | \
>>                                         awk '$3=="${UBOOT_ENTRYSYMBOL}"
>> {print $1}'`
>>                         fi
>> -                       if test -e arch/${ARCH}/boot/compressed/vmlinux ;
>> then
>> -                               ${OBJCOPY} -O binary -R .note -R .comment
>> -S arch/${ARCH}/boot/compressed/vmlinux linux.bin
>> -                               uboot-mkimage -A ${UBOOT_ARCH} -O linux -T
>> kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n
>> "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage
>> -                               rm -f linux.bin
>> +                       if test -e
>> ${B}/arch/${ARCH}/boot/compressed/vmlinux ; then
>> +                               ${OBJCOPY} -O binary -R .note -R .comment
>> -S ${B}/arch/${ARCH}/boot/compressed/vmlinux ${B}/linux.bin
>> +                               uboot-mkimage -A ${UBOOT_ARCH} -O linux -T
>> kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n
>> "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin
>> ${B}/arch/${ARCH}/boot/uImage
>> +                               rm -f ${B}/linux.bin
>>                         else
>> -                               ${OBJCOPY} -O binary -R .note -R .comment
>> -S vmlinux linux.bin
>> -                               rm -f linux.bin.gz
>> -                               gzip -9 linux.bin
>> -                               uboot-mkimage -A ${UBOOT_ARCH} -O linux -T
>> kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n
>> "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage
>> -                               rm -f linux.bin.gz
>> +                               ${OBJCOPY} -O binary -R .note -R .comment
>> -S ${B}/vmlinux ${B}/linux.bin
>> +                               rm -f ${B}/linux.bin.gz
>> +                               gzip -9 ${B}/linux.bin > ${B}/linux.bin.gz
>> +                               uboot-mkimage -A ${UBOOT_ARCH} -O linux -T
>> kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n
>> "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin.gz
>> ${B}/arch/${ARCH}/boot/uImage
>> +                               rm -f ${B}/linux.bin.gz
>>                         fi
>>                 fi
>>         fi
>> @@ -453,8 +459,8 @@ do_uboot_mkimage() {
>>   addtask uboot_mkimage before do_install after do_compile
>>
>>   kernel_do_deploy() {
>> -       install -m 0644 ${KERNEL_OUTPUT}
>> ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
>> -       if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e
>> '^CONFIG_MODULES=y$' .config); then
>> +       install -m 0644
>> ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}
>> ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
>> +       if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e
>> '^CONFIG_MODULES=y$' ${B}/.config); then
>>                 mkdir -p ${D}/lib
>>                 tar -cvzf ${DEPLOYDIR}/${MODULE_TARBALL_BASE_NAME} -C ${D}
>> lib
>>                 ln -sf ${MODULE_TARBALL_BASE_NAME}
>> ${DEPLOYDIR}/${MODULE_TARBALL_SYMLINK_NAME}
>> @@ -483,3 +489,6 @@ addtask deploy before do_build after do_install
>>
>>   EXPORT_FUNCTIONS do_deploy
>>
>> +OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
>> +export KBUILD_OUTPUT = "${B}"
>> +
>>
>
Paul Eggleton - Sept. 22, 2014, 3:24 p.m.
On Thursday 06 February 2014 02:05:05 Khem Raj wrote:
> This also make a change where for kernel
> S != B, this is done because when S = B
> and we use O= option or set KBUILD_OUTPUT
> to point to objectdir, kernel build system
> ends up denoting itself dirty and asking for
> running mrproper during later build steps
> after do_configure but works perfectly
> for when S != B
> 
> Additional fixes make sure that we do not
> assume directory paths when accessing files
> 
> Move exporting KBUILD_OUTPUT from kernel-yocto
> into kernel class
> 
> Signed-off-by: Khem Raj <raj.khem@gmail.com>

So discussion on this patch seems to have stalled - did you guys make any 
progress offline?

Looking over the patch I'd guess we'd want to try to avoid cd'ing and instead 
be explicit about the path where needed.

Cheers,
Paul
Bruce Ashfield - Sept. 22, 2014, 3:27 p.m.
On 14-09-22 11:24 AM, Paul Eggleton wrote:
> On Thursday 06 February 2014 02:05:05 Khem Raj wrote:
>> This also make a change where for kernel
>> S != B, this is done because when S = B
>> and we use O= option or set KBUILD_OUTPUT
>> to point to objectdir, kernel build system
>> ends up denoting itself dirty and asking for
>> running mrproper during later build steps
>> after do_configure but works perfectly
>> for when S != B
>>
>> Additional fixes make sure that we do not
>> assume directory paths when accessing files
>>
>> Move exporting KBUILD_OUTPUT from kernel-yocto
>> into kernel class
>>
>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>
> So discussion on this patch seems to have stalled - did you guys make any
> progress offline?

I have an updated patch that I've been carrying in my tree ever
since.

>
> Looking over the patch I'd guess we'd want to try to avoid cd'ing and instead
> be explicit about the path where needed.

I have some more cleanups to this effect, and will send them post
1.7.

But the reports we've been getting have been that externalsrc
builds are working for kernels, and linux-yocto without the change
in place, so I'm looking to reduce the patch footprint and re-submit.

Bruce

>
> Cheers,
> Paul
>
Khem Raj - Sept. 22, 2014, 5:03 p.m.
On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
<bruce.ashfield@windriver.com> wrote:
> But the reports we've been getting have been that externalsrc
> builds are working for kernels, and linux-yocto without the change
> in place, so I'm looking to reduce the patch footprint and re-submit.

no, it cant work if folks were trying the usecase I have mentioned.
The fix is infact for
non linux-yocto kernels.
Bruce Ashfield - Sept. 22, 2014, 5:04 p.m.
On 14-09-22 01:03 PM, Khem Raj wrote:
> On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
> <bruce.ashfield@windriver.com> wrote:
>> But the reports we've been getting have been that externalsrc
>> builds are working for kernels, and linux-yocto without the change
>> in place, so I'm looking to reduce the patch footprint and re-submit.
>
> no, it cant work if folks were trying the usecase I have mentioned.
> The fix is infact for
> non linux-yocto kernels.

I'll send out my updated patch shortly, it should fix both cases.

Bruce

>
Paul Eggleton - Dec. 3, 2014, noon
On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
> On 14-09-22 01:03 PM, Khem Raj wrote:
> > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
> > 
> > <bruce.ashfield@windriver.com> wrote:
> >> But the reports we've been getting have been that externalsrc
> >> builds are working for kernels, and linux-yocto without the change
> >> in place, so I'm looking to reduce the patch footprint and re-submit.
> > 
> > no, it cant work if folks were trying the usecase I have mentioned.
> > The fix is infact for
> > non linux-yocto kernels.
> 
> I'll send out my updated patch shortly, it should fix both cases.

Bruce, did you get around to doing this?

At the moment I am trying to make my workflow tool ("devtool modify") work with 
linux-yocto. I've at least got to the point where I can extract the 
appropriate source from the recipe, but when I use externalsrc to point to it 
and then try to build it, it doesn't even get past do_configure, so something 
must be missing (make complains about missing targets, presumably because it's 
running in ${B} and there's nothing in that directory).

Do you expect linux-yocto + externalsrc to work at the moment in master? If 
so, are there any special steps I need to do with respect to preparing the 
external source tree that my tool might not be performing?

Cheers,
Paul
Laurentiu Palcu - Dec. 3, 2014, 12:23 p.m.
Hi Paul,

On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
> > On 14-09-22 01:03 PM, Khem Raj wrote:
> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
> > > 
> > > <bruce.ashfield@windriver.com> wrote:
> > >> But the reports we've been getting have been that externalsrc
> > >> builds are working for kernels, and linux-yocto without the change
> > >> in place, so I'm looking to reduce the patch footprint and re-submit.
> > > 
> > > no, it cant work if folks were trying the usecase I have mentioned.
> > > The fix is infact for
> > > non linux-yocto kernels.
> > 
> > I'll send out my updated patch shortly, it should fix both cases.
> 
> Bruce, did you get around to doing this?
> 
> At the moment I am trying to make my workflow tool ("devtool modify") work with 
> linux-yocto. I've at least got to the point where I can extract the 
> appropriate source from the recipe, but when I use externalsrc to point to it 
> and then try to build it, it doesn't even get past do_configure, so something 
> must be missing (make complains about missing targets, presumably because it's 
> running in ${B} and there's nothing in that directory).
> 
> Do you expect linux-yocto + externalsrc to work at the moment in master? If 
> so, are there any special steps I need to do with respect to preparing the 
> external source tree that my tool might not be performing?
FWIW, I'm using externalsrc to build non linux-yocto kernels but, to make it
work, I had to overwrite the KERNEL_CONFIG_COMMAND:

KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig || yes '' | oe_runmake -C ${S} O=${B} oldconfig"

This might be the reason of your do_configure failure...

I hope it helps,
laurentiu
Bruce Ashfield - Dec. 3, 2014, 1:12 p.m.
On Wed, Dec 3, 2014 at 7:00 AM, Paul Eggleton
<paul.eggleton@linux.intel.com> wrote:
> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
>> On 14-09-22 01:03 PM, Khem Raj wrote:
>> > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
>> >
>> > <bruce.ashfield@windriver.com> wrote:
>> >> But the reports we've been getting have been that externalsrc
>> >> builds are working for kernels, and linux-yocto without the change
>> >> in place, so I'm looking to reduce the patch footprint and re-submit.
>> >
>> > no, it cant work if folks were trying the usecase I have mentioned.
>> > The fix is infact for
>> > non linux-yocto kernels.
>>
>> I'll send out my updated patch shortly, it should fix both cases.
>
> Bruce, did you get around to doing this?
>
> At the moment I am trying to make my workflow tool ("devtool modify") work with
> linux-yocto. I've at least got to the point where I can extract the
> appropriate source from the recipe, but when I use externalsrc to point to it
> and then try to build it, it doesn't even get past do_configure, so something
> must be missing (make complains about missing targets, presumably because it's
> running in ${B} and there's nothing in that directory).

I do have an updated patch that I've been carrying in my tree, but it
still is too
large, with too  many touches to be ready. Finishing it was in my 1.8 tasks, and
I've been working with it as part of my kernel developer changes. I can probably
fire something out by end of week (I haven't tested it in over a week, so it is
likely broken again).

>
> Do you expect linux-yocto + externalsrc to work at the moment in master? If
> so, are there any special steps I need to do with respect to preparing the
> external source tree that my tool might not be performing?

Let me check, and get back to you on that.

Bruce

>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
Bruce Ashfield - Dec. 3, 2014, 1:14 p.m.
On Wed, Dec 3, 2014 at 7:23 AM, Laurentiu Palcu
<laurentiu.palcu@intel.com> wrote:
> Hi Paul,
>
> On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
>> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
>> > On 14-09-22 01:03 PM, Khem Raj wrote:
>> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
>> > >
>> > > <bruce.ashfield@windriver.com> wrote:
>> > >> But the reports we've been getting have been that externalsrc
>> > >> builds are working for kernels, and linux-yocto without the change
>> > >> in place, so I'm looking to reduce the patch footprint and re-submit.
>> > >
>> > > no, it cant work if folks were trying the usecase I have mentioned.
>> > > The fix is infact for
>> > > non linux-yocto kernels.
>> >
>> > I'll send out my updated patch shortly, it should fix both cases.
>>
>> Bruce, did you get around to doing this?
>>
>> At the moment I am trying to make my workflow tool ("devtool modify") work with
>> linux-yocto. I've at least got to the point where I can extract the
>> appropriate source from the recipe, but when I use externalsrc to point to it
>> and then try to build it, it doesn't even get past do_configure, so something
>> must be missing (make complains about missing targets, presumably because it's
>> running in ${B} and there's nothing in that directory).
>>
>> Do you expect linux-yocto + externalsrc to work at the moment in master? If
>> so, are there any special steps I need to do with respect to preparing the
>> external source tree that my tool might not be performing?
> FWIW, I'm using externalsrc to build non linux-yocto kernels but, to make it
> work, I had to overwrite the KERNEL_CONFIG_COMMAND:
>
> KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig || yes '' | oe_runmake -C ${S} O=${B} oldconfig"
>

For an externalsrc kernel, we've always skipped configure* completely.
If the user is
providing the kernel, it should also be configured. We don't want the
build system
changing anything at all,  including the config that is in place.

Bruce

> This might be the reason of your do_configure failure...
>
> I hope it helps,
> laurentiu
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
Paul Eggleton - Dec. 3, 2014, 2:36 p.m.
On Wednesday 03 December 2014 08:14:44 Bruce Ashfield wrote:
> On Wed, Dec 3, 2014 at 7:23 AM, Laurentiu Palcu
> 
> <laurentiu.palcu@intel.com> wrote:
> > Hi Paul,
> > 
> > On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
> >> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
> >> > On 14-09-22 01:03 PM, Khem Raj wrote:
> >> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
> >> > > 
> >> > > <bruce.ashfield@windriver.com> wrote:
> >> > >> But the reports we've been getting have been that externalsrc
> >> > >> builds are working for kernels, and linux-yocto without the change
> >> > >> in place, so I'm looking to reduce the patch footprint and
> >> > >> re-submit.
> >> > > 
> >> > > no, it cant work if folks were trying the usecase I have mentioned.
> >> > > The fix is infact for
> >> > > non linux-yocto kernels.
> >> > 
> >> > I'll send out my updated patch shortly, it should fix both cases.
> >> 
> >> Bruce, did you get around to doing this?
> >> 
> >> At the moment I am trying to make my workflow tool ("devtool modify")
> >> work with linux-yocto. I've at least got to the point where I can
> >> extract the appropriate source from the recipe, but when I use
> >> externalsrc to point to it and then try to build it, it doesn't even get
> >> past do_configure, so something must be missing (make complains about
> >> missing targets, presumably because it's running in ${B} and there's
> >> nothing in that directory).
> >> 
> >> Do you expect linux-yocto + externalsrc to work at the moment in master?
> >> If
> >> so, are there any special steps I need to do with respect to preparing
> >> the
> >> external source tree that my tool might not be performing?
> > 
> > FWIW, I'm using externalsrc to build non linux-yocto kernels but, to make
> > it work, I had to overwrite the KERNEL_CONFIG_COMMAND:
> > 
> > KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig || yes
> > '' | oe_runmake -C ${S} O=${B} oldconfig"
>
> For an externalsrc kernel, we've always skipped configure* completely.
> If the user is providing the kernel, it should also be configured. We don't
> want the build system changing anything at all,  including the config that is
> in place.

OK, that makes sense - but all I'm doing is enabling externalsrc for the 
kernel, and do_configure is still being executed. Perhaps that's something that 
shouldn't be happening (needs to be added to SRCTREECOVEREDTASKS? We don't 
normally cover do_configure for other recipes.)

Cheers,
Paul
Bruce Ashfield - Dec. 3, 2014, 4:50 p.m.
On Wed, Dec 3, 2014 at 9:36 AM, Paul Eggleton
<paul.eggleton@linux.intel.com> wrote:
> On Wednesday 03 December 2014 08:14:44 Bruce Ashfield wrote:
>> On Wed, Dec 3, 2014 at 7:23 AM, Laurentiu Palcu
>>
>> <laurentiu.palcu@intel.com> wrote:
>> > Hi Paul,
>> >
>> > On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
>> >> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
>> >> > On 14-09-22 01:03 PM, Khem Raj wrote:
>> >> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
>> >> > >
>> >> > > <bruce.ashfield@windriver.com> wrote:
>> >> > >> But the reports we've been getting have been that externalsrc
>> >> > >> builds are working for kernels, and linux-yocto without the change
>> >> > >> in place, so I'm looking to reduce the patch footprint and
>> >> > >> re-submit.
>> >> > >
>> >> > > no, it cant work if folks were trying the usecase I have mentioned.
>> >> > > The fix is infact for
>> >> > > non linux-yocto kernels.
>> >> >
>> >> > I'll send out my updated patch shortly, it should fix both cases.
>> >>
>> >> Bruce, did you get around to doing this?
>> >>
>> >> At the moment I am trying to make my workflow tool ("devtool modify")
>> >> work with linux-yocto. I've at least got to the point where I can
>> >> extract the appropriate source from the recipe, but when I use
>> >> externalsrc to point to it and then try to build it, it doesn't even get
>> >> past do_configure, so something must be missing (make complains about
>> >> missing targets, presumably because it's running in ${B} and there's
>> >> nothing in that directory).
>> >>
>> >> Do you expect linux-yocto + externalsrc to work at the moment in master?
>> >> If
>> >> so, are there any special steps I need to do with respect to preparing
>> >> the
>> >> external source tree that my tool might not be performing?
>> >
>> > FWIW, I'm using externalsrc to build non linux-yocto kernels but, to make
>> > it work, I had to overwrite the KERNEL_CONFIG_COMMAND:
>> >
>> > KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig || yes
>> > '' | oe_runmake -C ${S} O=${B} oldconfig"
>>
>> For an externalsrc kernel, we've always skipped configure* completely.
>> If the user is providing the kernel, it should also be configured. We don't
>> want the build system changing anything at all,  including the config that is
>> in place.
>
> OK, that makes sense - but all I'm doing is enabling externalsrc for the
> kernel, and do_configure is still being executed. Perhaps that's something that
> shouldn't be happening (needs to be added to SRCTREECOVEREDTASKS? We don't
> normally cover do_configure for other recipes.)

IMHO it should be, I have it inhibited here.

Still trying to get my 1.8 work cleaned up for a RFC, and I'll send
you what I have for
this shortly as well.

Bruce

>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre
Bruce Ashfield - Dec. 4, 2014, 5:28 a.m.
On Wed, Dec 3, 2014 at 11:50 AM, Bruce Ashfield
<bruce.ashfield@gmail.com> wrote:
> On Wed, Dec 3, 2014 at 9:36 AM, Paul Eggleton
> <paul.eggleton@linux.intel.com> wrote:
>> On Wednesday 03 December 2014 08:14:44 Bruce Ashfield wrote:
>>> On Wed, Dec 3, 2014 at 7:23 AM, Laurentiu Palcu
>>>
>>> <laurentiu.palcu@intel.com> wrote:
>>> > Hi Paul,
>>> >
>>> > On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
>>> >> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
>>> >> > On 14-09-22 01:03 PM, Khem Raj wrote:
>>> >> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
>>> >> > >
>>> >> > > <bruce.ashfield@windriver.com> wrote:
>>> >> > >> But the reports we've been getting have been that externalsrc
>>> >> > >> builds are working for kernels, and linux-yocto without the change
>>> >> > >> in place, so I'm looking to reduce the patch footprint and
>>> >> > >> re-submit.
>>> >> > >
>>> >> > > no, it cant work if folks were trying the usecase I have mentioned.
>>> >> > > The fix is infact for
>>> >> > > non linux-yocto kernels.
>>> >> >
>>> >> > I'll send out my updated patch shortly, it should fix both cases.
>>> >>
>>> >> Bruce, did you get around to doing this?
>>> >>
>>> >> At the moment I am trying to make my workflow tool ("devtool modify")
>>> >> work with linux-yocto. I've at least got to the point where I can
>>> >> extract the appropriate source from the recipe, but when I use
>>> >> externalsrc to point to it and then try to build it, it doesn't even get
>>> >> past do_configure, so something must be missing (make complains about
>>> >> missing targets, presumably because it's running in ${B} and there's
>>> >> nothing in that directory).
>>> >>
>>> >> Do you expect linux-yocto + externalsrc to work at the moment in master?
>>> >> If
>>> >> so, are there any special steps I need to do with respect to preparing
>>> >> the
>>> >> external source tree that my tool might not be performing?
>>> >
>>> > FWIW, I'm using externalsrc to build non linux-yocto kernels but, to make
>>> > it work, I had to overwrite the KERNEL_CONFIG_COMMAND:
>>> >
>>> > KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig || yes
>>> > '' | oe_runmake -C ${S} O=${B} oldconfig"
>>>
>>> For an externalsrc kernel, we've always skipped configure* completely.
>>> If the user is providing the kernel, it should also be configured. We don't
>>> want the build system changing anything at all,  including the config that is
>>> in place.
>>
>> OK, that makes sense - but all I'm doing is enabling externalsrc for the
>> kernel, and do_configure is still being executed. Perhaps that's something that
>> shouldn't be happening (needs to be added to SRCTREECOVEREDTASKS? We don't
>> normally cover do_configure for other recipes.)
>
> IMHO it should be, I have it inhibited here.
>
> Still trying to get my 1.8 work cleaned up for a RFC, and I'll send
> you what I have for
> this shortly as well.

I did manage to launch and build a 3.14 kernel externalsrc against master using
the WIP progress patches.

.. and it worked :)

I've just finished my other developer experience patches (initial
version), so this is
the next thing on my list to finish on for 1.8.

The patch that I currently have is broken as part of a rebase to
account for other
changes, but I did have the original patch, that has too large a
footprint (i.e. lots
of extra ${S} and ${B} manipulations that aren't all required. So I
tested using it.

That being said,  I pushed the working patch to poky-contrib
zedd/kernel-externalsrc,
so you can see what the baseline is.

I'm interested to hear if this hobbles along for you, and if not, what
breaks. I'm
building an externalsrc recipe that I put together some time ago .. so
if yours isn't
working, that could be the difference.

Bruce

>
> Bruce
>
>>
>> Cheers,
>> Paul
>>
>> --
>>
>> Paul Eggleton
>> Intel Open Source Technology Centre
>
>
>
> --
> "Thou shalt not follow the NULL pointer, for chaos and madness await
> thee at its end"
Paul Eggleton - Dec. 8, 2014, 12:10 p.m.
On Thursday 04 December 2014 00:28:24 Bruce Ashfield wrote:
> On Wed, Dec 3, 2014 at 11:50 AM, Bruce Ashfield
> 
> <bruce.ashfield@gmail.com> wrote:
> > On Wed, Dec 3, 2014 at 9:36 AM, Paul Eggleton
> > 
> > <paul.eggleton@linux.intel.com> wrote:
> >> On Wednesday 03 December 2014 08:14:44 Bruce Ashfield wrote:
> >>> On Wed, Dec 3, 2014 at 7:23 AM, Laurentiu Palcu
> >>> 
> >>> <laurentiu.palcu@intel.com> wrote:
> >>> > Hi Paul,
> >>> > 
> >>> > On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
> >>> >> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
> >>> >> > On 14-09-22 01:03 PM, Khem Raj wrote:
> >>> >> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
> >>> >> > > 
> >>> >> > > <bruce.ashfield@windriver.com> wrote:
> >>> >> > >> But the reports we've been getting have been that externalsrc
> >>> >> > >> builds are working for kernels, and linux-yocto without the
> >>> >> > >> change
> >>> >> > >> in place, so I'm looking to reduce the patch footprint and
> >>> >> > >> re-submit.
> >>> >> > > 
> >>> >> > > no, it cant work if folks were trying the usecase I have
> >>> >> > > mentioned.
> >>> >> > > The fix is infact for
> >>> >> > > non linux-yocto kernels.
> >>> >> > 
> >>> >> > I'll send out my updated patch shortly, it should fix both cases.
> >>> >> 
> >>> >> Bruce, did you get around to doing this?
> >>> >> 
> >>> >> At the moment I am trying to make my workflow tool ("devtool modify")
> >>> >> work with linux-yocto. I've at least got to the point where I can
> >>> >> extract the appropriate source from the recipe, but when I use
> >>> >> externalsrc to point to it and then try to build it, it doesn't even
> >>> >> get
> >>> >> past do_configure, so something must be missing (make complains about
> >>> >> missing targets, presumably because it's running in ${B} and there's
> >>> >> nothing in that directory).
> >>> >> 
> >>> >> Do you expect linux-yocto + externalsrc to work at the moment in
> >>> >> master?
> >>> >> If
> >>> >> so, are there any special steps I need to do with respect to
> >>> >> preparing
> >>> >> the
> >>> >> external source tree that my tool might not be performing?
> >>> > 
> >>> > FWIW, I'm using externalsrc to build non linux-yocto kernels but, to
> >>> > make
> >>> > it work, I had to overwrite the KERNEL_CONFIG_COMMAND:
> >>> > 
> >>> > KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig ||
> >>> > yes
> >>> > '' | oe_runmake -C ${S} O=${B} oldconfig"
> >>> 
> >>> For an externalsrc kernel, we've always skipped configure* completely.
> >>> If the user is providing the kernel, it should also be configured. We
> >>> don't
> >>> want the build system changing anything at all,  including the config
> >>> that is in place.
> >> 
> >> OK, that makes sense - but all I'm doing is enabling externalsrc for the
> >> kernel, and do_configure is still being executed. Perhaps that's
> >> something that shouldn't be happening (needs to be added to
> >> SRCTREECOVEREDTASKS? We don't normally cover do_configure for other
> >> recipes.)
> > 
> > IMHO it should be, I have it inhibited here.
> > 
> > Still trying to get my 1.8 work cleaned up for a RFC, and I'll send
> > you what I have for
> > this shortly as well.
> 
> I did manage to launch and build a 3.14 kernel externalsrc against master
> using the WIP progress patches.
> 
> .. and it worked :)
> 
> I've just finished my other developer experience patches (initial
> version), so this is
> the next thing on my list to finish on for 1.8.
> 
> The patch that I currently have is broken as part of a rebase to
> account for other
> changes, but I did have the original patch, that has too large a
> footprint (i.e. lots
> of extra ${S} and ${B} manipulations that aren't all required. So I
> tested using it.
> 
> That being said,  I pushed the working patch to poky-contrib
> zedd/kernel-externalsrc,
> so you can see what the baseline is.
> 
> I'm interested to hear if this hobbles along for you, and if not, what
> breaks. I'm building an externalsrc recipe that I put together some time ago
> .. so if yours isn't working, that could be the difference.

I can't get this to work; at least what I was going to attempt was a build of
just the kernel first and then extract the source to try externalsrc. I can't
even do that however:

------------- snip -------------
$ bitbake virtual/kernel
Parsing recipes: 100%
Parsing of 897 .bb files complete (0 cached, 897 parsed). 1296 targets, 41 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION        = "1.25.0"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "Fedora-20"
TARGET_SYS        = "x86_64-poky-linux"
MACHINE           = "qemux86-64"
DISTRO            = "poky"
DISTRO_VERSION    = "1.7"
TUNE_FEATURES     = "m64 core2"
TARGET_FPU        = ""
meta              
meta-yocto        
meta-yocto-bsp    
workspace         = "paule/devtool-kerneltest:24b6a5242546ad5e6b6c9413d1eeb2465f79a91b"

NOTE: Preparing RunQueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
WARNING: Failed to fetch URL git://git.yoctoproject.org/linux-yocto-3.14.git;bareclone=1;branch=standard/common-pc-64/base,meta;name=machine,meta, attempting MIRRORS if available
ERROR: Fetcher failure: Unable to find revision c100e8665052051487a17169748c457829d3f88c in branch standard/common-pc-64/base even from upstream
ERROR: Function failed: Fetcher failure for URL: 'git://git.yoctoproject.org/linux-yocto-3.14.git;bareclone=1;branch=standard/common-pc-64/base,meta;name=machine,meta'. Unable to fetch URL from any source.
ERROR: Logfile of failure stored in: /home/paul/poky/poky/build/tmp/work/qemux86_64-poky-linux/linux-yocto/3.14.24+gitAUTOINC+fba2d0cdb7_c100e86650-r0/temp/log.do_fetch.26831
ERROR: Task 6 (/home/paul/poky/poky/meta/recipes-kernel/linux/linux-yocto_3.14.bb, do_fetch) failed with exit code '1'
------------- snip -------------

Cheers,
Paul
Bruce Ashfield - Dec. 8, 2014, 2:32 p.m.
On Mon, Dec 8, 2014 at 7:10 AM, Paul Eggleton
<paul.eggleton@linux.intel.com> wrote:
> On Thursday 04 December 2014 00:28:24 Bruce Ashfield wrote:
>> On Wed, Dec 3, 2014 at 11:50 AM, Bruce Ashfield
>>
>> <bruce.ashfield@gmail.com> wrote:
>> > On Wed, Dec 3, 2014 at 9:36 AM, Paul Eggleton
>> >
>> > <paul.eggleton@linux.intel.com> wrote:
>> >> On Wednesday 03 December 2014 08:14:44 Bruce Ashfield wrote:
>> >>> On Wed, Dec 3, 2014 at 7:23 AM, Laurentiu Palcu
>> >>>
>> >>> <laurentiu.palcu@intel.com> wrote:
>> >>> > Hi Paul,
>> >>> >
>> >>> > On Wed, Dec 03, 2014 at 12:00:31PM +0000, Paul Eggleton wrote:
>> >>> >> On Monday 22 September 2014 13:04:47 Bruce Ashfield wrote:
>> >>> >> > On 14-09-22 01:03 PM, Khem Raj wrote:
>> >>> >> > > On Mon, Sep 22, 2014 at 8:27 AM, Bruce Ashfield
>> >>> >> > >
>> >>> >> > > <bruce.ashfield@windriver.com> wrote:
>> >>> >> > >> But the reports we've been getting have been that externalsrc
>> >>> >> > >> builds are working for kernels, and linux-yocto without the
>> >>> >> > >> change
>> >>> >> > >> in place, so I'm looking to reduce the patch footprint and
>> >>> >> > >> re-submit.
>> >>> >> > >
>> >>> >> > > no, it cant work if folks were trying the usecase I have
>> >>> >> > > mentioned.
>> >>> >> > > The fix is infact for
>> >>> >> > > non linux-yocto kernels.
>> >>> >> >
>> >>> >> > I'll send out my updated patch shortly, it should fix both cases.
>> >>> >>
>> >>> >> Bruce, did you get around to doing this?
>> >>> >>
>> >>> >> At the moment I am trying to make my workflow tool ("devtool modify")
>> >>> >> work with linux-yocto. I've at least got to the point where I can
>> >>> >> extract the appropriate source from the recipe, but when I use
>> >>> >> externalsrc to point to it and then try to build it, it doesn't even
>> >>> >> get
>> >>> >> past do_configure, so something must be missing (make complains about
>> >>> >> missing targets, presumably because it's running in ${B} and there's
>> >>> >> nothing in that directory).
>> >>> >>
>> >>> >> Do you expect linux-yocto + externalsrc to work at the moment in
>> >>> >> master?
>> >>> >> If
>> >>> >> so, are there any special steps I need to do with respect to
>> >>> >> preparing
>> >>> >> the
>> >>> >> external source tree that my tool might not be performing?
>> >>> >
>> >>> > FWIW, I'm using externalsrc to build non linux-yocto kernels but, to
>> >>> > make
>> >>> > it work, I had to overwrite the KERNEL_CONFIG_COMMAND:
>> >>> >
>> >>> > KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} oldnoconfig ||
>> >>> > yes
>> >>> > '' | oe_runmake -C ${S} O=${B} oldconfig"
>> >>>
>> >>> For an externalsrc kernel, we've always skipped configure* completely.
>> >>> If the user is providing the kernel, it should also be configured. We
>> >>> don't
>> >>> want the build system changing anything at all,  including the config
>> >>> that is in place.
>> >>
>> >> OK, that makes sense - but all I'm doing is enabling externalsrc for the
>> >> kernel, and do_configure is still being executed. Perhaps that's
>> >> something that shouldn't be happening (needs to be added to
>> >> SRCTREECOVEREDTASKS? We don't normally cover do_configure for other
>> >> recipes.)
>> >
>> > IMHO it should be, I have it inhibited here.
>> >
>> > Still trying to get my 1.8 work cleaned up for a RFC, and I'll send
>> > you what I have for
>> > this shortly as well.
>>
>> I did manage to launch and build a 3.14 kernel externalsrc against master
>> using the WIP progress patches.
>>
>> .. and it worked :)
>>
>> I've just finished my other developer experience patches (initial
>> version), so this is
>> the next thing on my list to finish on for 1.8.
>>
>> The patch that I currently have is broken as part of a rebase to
>> account for other
>> changes, but I did have the original patch, that has too large a
>> footprint (i.e. lots
>> of extra ${S} and ${B} manipulations that aren't all required. So I
>> tested using it.
>>
>> That being said,  I pushed the working patch to poky-contrib
>> zedd/kernel-externalsrc,
>> so you can see what the baseline is.
>>
>> I'm interested to hear if this hobbles along for you, and if not, what
>> breaks. I'm building an externalsrc recipe that I put together some time ago
>> .. so if yours isn't working, that could be the difference.
>
> I can't get this to work; at least what I was going to attempt was a build of
> just the kernel first and then extract the source to try externalsrc. I can't
> even do that however:

Mine definitely built (and booted), let me send you the externalsrc recipe
I was using as well.

That being said, I'm also about to send a series that re-works that parts
of kernel.bbclass that this touches, so I'm also fixing and rebasing that
externalsrc support now. So poking at it makes sense, but doing any
significant work should wait until I have that update done.

Bruce

>
> ------------- snip -------------
> $ bitbake virtual/kernel
> Parsing recipes: 100%
> Parsing of 897 .bb files complete (0 cached, 897 parsed). 1296 targets, 41 skipped, 0 masked, 0 errors.
> NOTE: Resolving any missing task queue dependencies
>
> Build Configuration:
> BB_VERSION        = "1.25.0"
> BUILD_SYS         = "x86_64-linux"
> NATIVELSBSTRING   = "Fedora-20"
> TARGET_SYS        = "x86_64-poky-linux"
> MACHINE           = "qemux86-64"
> DISTRO            = "poky"
> DISTRO_VERSION    = "1.7"
> TUNE_FEATURES     = "m64 core2"
> TARGET_FPU        = ""
> meta
> meta-yocto
> meta-yocto-bsp
> workspace         = "paule/devtool-kerneltest:24b6a5242546ad5e6b6c9413d1eeb2465f79a91b"
>
> NOTE: Preparing RunQueue
> NOTE: Executing SetScene Tasks
> NOTE: Executing RunQueue Tasks
> WARNING: Failed to fetch URL git://git.yoctoproject.org/linux-yocto-3.14.git;bareclone=1;branch=standard/common-pc-64/base,meta;name=machine,meta, attempting MIRRORS if available
> ERROR: Fetcher failure: Unable to find revision c100e8665052051487a17169748c457829d3f88c in branch standard/common-pc-64/base even from upstream
> ERROR: Function failed: Fetcher failure for URL: 'git://git.yoctoproject.org/linux-yocto-3.14.git;bareclone=1;branch=standard/common-pc-64/base,meta;name=machine,meta'. Unable to fetch URL from any source.
> ERROR: Logfile of failure stored in: /home/paul/poky/poky/build/tmp/work/qemux86_64-poky-linux/linux-yocto/3.14.24+gitAUTOINC+fba2d0cdb7_c100e86650-r0/temp/log.do_fetch.26831
> ERROR: Task 6 (/home/paul/poky/poky/meta/recipes-kernel/linux/linux-yocto_3.14.bb, do_fetch) failed with exit code '1'
> ------------- snip -------------
>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre

Patch

diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
index 8f79932..73257e1 100644
--- a/meta/classes/kernel-yocto.bbclass
+++ b/meta/classes/kernel-yocto.bbclass
@@ -408,6 +408,5 @@  do_kernel_link_vmlinux() {
 	ln -sf ../../../vmlinux
 }
 
-OE_TERMINAL_EXPORTS += "GUILT_BASE KBUILD_OUTPUT"
+OE_TERMINAL_EXPORTS += "GUILT_BASE"
 GUILT_BASE = "meta"
-KBUILD_OUTPUT = "${B}"
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 51626b0..b000147 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -10,6 +10,7 @@  KERNEL_IMAGETYPE ?= "zImage"
 INITRAMFS_IMAGE ?= ""
 INITRAMFS_TASK ?= ""
 INITRAMFS_IMAGE_BUNDLE ?= ""
+B = "${WORKDIR}/build"
 
 python __anonymous () {
     kerneltype = d.getVar('KERNEL_IMAGETYPE', True) or ''
@@ -157,6 +158,7 @@  kernel_do_compile() {
 	# different initramfs image.  The way to do that in the kernel
 	# is to specify:
 	# make ...args... CONFIG_INITRAMFS_SOURCE=some_other_initramfs.cpio
+	cd ${S}
 	if [ "$use_alternate_initrd" = "" ] && [ "${INITRAMFS_TASK}" != "" ] ; then
 		# The old style way of copying an prebuilt image and building it
 		# is turned on via INTIRAMFS_TASK != ""
@@ -165,13 +167,14 @@  kernel_do_compile() {
 	fi
 	oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd
 	if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
-		gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
+		gzip -9c < "${B}/${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
 	fi
 }
 
 do_compile_kernelmodules() {
 	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
-	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
+	cd ${S}
+	if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
 		oe_runmake ${PARALLEL_MAKE} modules CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
 	else
 		bbnote "no modules to compile"
@@ -184,7 +187,8 @@  kernel_do_install() {
 	# First install the modules
 	#
 	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
-	if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
+	cd ${S}
+	if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
 		oe_runmake DEPMOD=echo INSTALL_MOD_PATH="${D}" modules_install
 		rm "${D}/lib/modules/${KERNEL_VERSION}/build"
 		rm "${D}/lib/modules/${KERNEL_VERSION}/source"
@@ -200,10 +204,10 @@  kernel_do_install() {
 	install -d ${D}/${KERNEL_IMAGEDEST}
 	install -d ${D}/boot
 	install -m 0644 ${KERNEL_OUTPUT} ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}
-	install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}
-	install -m 0644 .config ${D}/boot/config-${KERNEL_VERSION}
-	install -m 0644 vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
-	[ -e Module.symvers ] && install -m 0644 Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
+	install -m 0644 ${B}/System.map ${D}/boot/System.map-${KERNEL_VERSION}
+	install -m 0644 ${B}/.config ${D}/boot/config-${KERNEL_VERSION}
+	install -m 0644 ${B}/vmlinux ${D}/boot/vmlinux-${KERNEL_VERSION}
+	[ -e ${B}/Module.symvers ] && install -m 0644 ${B}/Module.symvers ${D}/boot/Module.symvers-${KERNEL_VERSION}
 	install -d ${D}${sysconfdir}/modules-load.d
 	install -d ${D}${sysconfdir}/modprobe.d
 
@@ -232,20 +236,21 @@  kernel_do_install() {
 	# dir. This ensures the original Makefiles are used and not the
 	# redirecting Makefiles in the build directory.
 	#
+	pwd="$PWD"
+	cd "${B}"
 	find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
-	cp .config $kerneldir
+	cp ${B}/.config $kerneldir
 	if [ "${S}" != "${B}" ]; then
-		pwd="$PWD"
 		cd "${S}"
 		find . -depth -not -path "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
-		cd "$pwd"
 	fi
+	cd "$pwd"
 
 	# Test to ensure that the output file and image type are not actually
 	# the same file. If hardlinking is used, they will be the same, and there's
 	# no need to install.
 	! [ ${KERNEL_OUTPUT} -ef $kerneldir/${KERNEL_IMAGETYPE} ] && install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE}
-	install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION}
+	install -m 0644 ${B}/System.map $kerneldir/System.map-${KERNEL_VERSION}
 
 	# Dummy Makefile so the clean below works
         mkdir $kerneldir/Documentation
@@ -260,24 +265,24 @@  kernel_do_install() {
 	# we clean the scripts dir while leaving the generated config
 	# and include files.
 	#
-	oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
-	make -C $kerneldir _mrproper_scripts
+	oe_runmake KBUILD_OUTPUT= -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
+	make KBUILD_OUTPUT= -C $kerneldir _mrproper_scripts
 	find $kerneldir -path $kerneldir/lib -prune -o -path $kerneldir/tools -prune -o -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \;
 
 	# As of Linux kernel version 3.0.1, the clean target removes
 	# arch/powerpc/lib/crtsavres.o which is present in
 	# KBUILD_LDFLAGS_MODULE, making it required to build external modules.
 	if [ ${ARCH} = "powerpc" ]; then
-		cp -l arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
+		cp -l ${B}/arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
 	fi
 
 	# Necessary for building modules like compat-wireless.
-	if [ -f include/generated/bounds.h ]; then
-		cp -l include/generated/bounds.h $kerneldir/include/generated/bounds.h
+	if [ -f ${B}/include/generated/bounds.h ]; then
+		cp -l ${B}/include/generated/bounds.h $kerneldir/include/generated/bounds.h
 	fi
-	if [ -d arch/${ARCH}/include/generated ]; then
+	if [ -d ${B}/arch/${ARCH}/include/generated ]; then
 		mkdir -p $kerneldir/arch/${ARCH}/include/generated/
-		cp -flR arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
+		cp -flR ${B}/arch/${ARCH}/include/generated/* $kerneldir/arch/${ARCH}/include/generated/
 	fi
 
 	# Remove the following binaries which cause strip or arch QA errors
@@ -302,6 +307,7 @@  python sysroot_stage_all () {
 }
 
 kernel_do_configure() {
+	cd ${S}
 	# fixes extra + in /lib/modules/2.6.37+
 	# $ scripts/setlocalversion . => +
 	# $ make kernelversion => 2.6.37
@@ -313,7 +319,7 @@  kernel_do_configure() {
 	if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then
 		cp "${WORKDIR}/defconfig" "${B}/.config"
 	fi
-	yes '' | oe_runmake oldconfig
+	oe_runmake olddefconfig
 }
 
 do_savedefconfig() {
@@ -432,19 +438,19 @@  do_uboot_mkimage() {
 		if test "x${KEEPUIMAGE}" != "xyes" ; then
 			ENTRYPOINT=${UBOOT_ENTRYPOINT}
 			if test -n "${UBOOT_ENTRYSYMBOL}"; then
-				ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
+				ENTRYPOINT=`${HOST_PREFIX}nm ${B}/vmlinux | \
 					awk '$3=="${UBOOT_ENTRYSYMBOL}" {print $1}'`
 			fi
-			if test -e arch/${ARCH}/boot/compressed/vmlinux ; then
-				${OBJCOPY} -O binary -R .note -R .comment -S arch/${ARCH}/boot/compressed/vmlinux linux.bin
-				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin arch/${ARCH}/boot/uImage
-				rm -f linux.bin
+			if test -e ${B}/arch/${ARCH}/boot/compressed/vmlinux ; then
+				${OBJCOPY} -O binary -R .note -R .comment -S ${B}/arch/${ARCH}/boot/compressed/vmlinux ${B}/linux.bin
+				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C none -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin ${B}/arch/${ARCH}/boot/uImage
+				rm -f ${B}/linux.bin
 			else
-				${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
-				rm -f linux.bin.gz
-				gzip -9 linux.bin
-				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin.gz arch/${ARCH}/boot/uImage
-				rm -f linux.bin.gz
+				${OBJCOPY} -O binary -R .note -R .comment -S ${B}/vmlinux ${B}/linux.bin
+				rm -f ${B}/linux.bin.gz
+				gzip -9 ${B}/linux.bin > ${B}/linux.bin.gz
+				uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d ${B}/linux.bin.gz ${B}/arch/${ARCH}/boot/uImage
+				rm -f ${B}/linux.bin.gz
 			fi
 		fi
 	fi
@@ -453,8 +459,8 @@  do_uboot_mkimage() {
 addtask uboot_mkimage before do_install after do_compile
 
 kernel_do_deploy() {
-	install -m 0644 ${KERNEL_OUTPUT} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
-	if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
+	install -m 0644 ${D}/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION} ${DEPLOYDIR}/${KERNEL_IMAGE_BASE_NAME}.bin
+	if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then
 		mkdir -p ${D}/lib
 		tar -cvzf ${DEPLOYDIR}/${MODULE_TARBALL_BASE_NAME} -C ${D} lib
 		ln -sf ${MODULE_TARBALL_BASE_NAME} ${DEPLOYDIR}/${MODULE_TARBALL_SYMLINK_NAME}
@@ -483,3 +489,6 @@  addtask deploy before do_build after do_install
 
 EXPORT_FUNCTIONS do_deploy
 
+OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT"
+export KBUILD_OUTPUT = "${B}"
+