From 1dd37a2a9960ad26e27567d1871d78bec336e1a2 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 19 Dec 2014 17:46:27 +0000 Subject: kernel: Fix non linux-yocto builds After the recent kernel changes, non linux-yocto builds stopped working properly for two reasons: a) ${S} was being reset to ${WORKDIR}/git for example and STAGING_KERNEL_DIR did not contain the source b) Most builds were using ${B} == ${S} This patch adds a fixup to the unpack function to handle the case where ${S} != ${STAGING_KERNEL_DIR} and also set up the infrastrcture so that B != S for kernel builds from now on. The kernel build system is one of the best for supporting this and there is no good reason not to take advantage of it. (From OE-Core rev: 106dab2fd0321e6b4e77b40111e59a3a31d329d4) Signed-off-by: Richard Purdie --- meta/classes/kernel.bbclass | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'meta/classes/kernel.bbclass') diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index c9e1c363e8..5cabc2ce1c 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass @@ -3,9 +3,10 @@ inherit linux-kernel-base kernel-module-split PROVIDES += "virtual/kernel" DEPENDS += "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}gcc kmod-native depmodwrapper-cross bc-native" -S = "${STAGING_DIR_TARGET}/${KERNEL_SRC_PATH}" - -do_unpack[cleandirs] = "${S}" +S = "${STAGING_KERNEL_DIR}" +B = "${WORKDIR}/build" +KBUILD_OUTPUT = "${B}" +OE_TERMINAL_EXPORTS += "KBUILD_OUTPUT" # we include gcc above, we dont need virtual/libc INHIBIT_DEFAULT_DEPS = "1" @@ -35,6 +36,22 @@ python __anonymous () { d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}') } +# Old style kernels may set ${S} = ${WORKDIR}/git for example +# We need to move these over to STAGING_KERNEL_DIR. We can't just +# create the symlink in advance as the git fetcher can't cope with +# the symlink. +do_unpack[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B}" +base_do_unpack_append () { + s = d.getVar("S", True) + kernsrc = d.getVar("STAGING_KERNEL_DIR", True) + if s != kernsrc: + bb.utils.mkdirhier(kernsrc) + bb.utils.remove(kernsrc, recurse=True) + import subprocess + subprocess.call(d.expand("mv ${S} ${STAGING_KERNEL_DIR}"), shell=True) + os.symlink(kernsrc, s) +} + inherit kernel-arch deploy PACKAGES_DYNAMIC += "^kernel-module-.*" @@ -255,7 +272,7 @@ python sysroot_stage_all () { oe.path.copyhardlinktree(d.expand("${D}${KERNEL_SRC_PATH}"), d.expand("${SYSROOT_DESTDIR}${KERNEL_SRC_PATH}")) } -KERNEL_CONFIG_COMMAND ?= "oe_runmake_call oldnoconfig || yes '' | oe_runmake oldconfig" +KERNEL_CONFIG_COMMAND ?= "oe_runmake_call -C ${S} O=${B} oldnoconfig || yes '' | oe_runmake -C ${S} O=${B} oldconfig" kernel_do_configure() { # fixes extra + in /lib/modules/2.6.37+ @@ -264,6 +281,10 @@ kernel_do_configure() { # $ make kernelrelease => 2.6.37+ touch ${B}/.scmversion ${S}/.scmversion + if [ "${S}" != "${B}" ] && [ -f "${S}/.config" ] && [ ! -f "${B}/.config" ]; then + mv "${S}/.config" "${B}/.config" + fi + # Copy defconfig to .config if .config does not exist. This allows # recipes to manage the .config themselves in do_configure_prepend(). if [ -f "${WORKDIR}/defconfig" ] && [ ! -f "${B}/.config" ]; then -- cgit 1.2.3-korg