On Thu, Feb 6, 2014 at 11:26 AM, Bruce Ashfield <[email protected]> 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 <[email protected]> >> --- >> 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}" >> + >> > _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
