public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
* [PATCH] kernel: Fix non linux-yocto builds
@ 2014-12-19 17:46 Richard Purdie
  2014-12-19 17:52 ` Gary Thomas
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Purdie @ 2014-12-19 17:46 UTC (permalink / raw)
  To: openembedded-core

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 to take advantage of it.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 94b5661..9a77a8a 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}"
+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 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




^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] kernel: Fix non linux-yocto builds
  2014-12-19 17:46 [PATCH] kernel: Fix non linux-yocto builds Richard Purdie
@ 2014-12-19 17:52 ` Gary Thomas
  0 siblings, 0 replies; 2+ messages in thread
From: Gary Thomas @ 2014-12-19 17:52 UTC (permalink / raw)
  To: openembedded-core

On 2014-12-19 10:46, Richard Purdie wrote:
> 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 to take advantage of it.
                                                       ^not to^

>
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
>
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 94b5661..9a77a8a 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}"
> +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 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
>
>

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-12-19 17:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-19 17:46 [PATCH] kernel: Fix non linux-yocto builds Richard Purdie
2014-12-19 17:52 ` Gary Thomas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox