linux-yocto: streamline support for multiple upstream repo types

In order to support repositories of various types (with or without
meta data, branched, pristine, custom, etc) information about the
type of processing that is required was passed to the processing
phases via variables.

The combination of variables involved in coordinating the processing
creates a learning curve and overly complicates recipe extensions.

With minor tweaks to the kern-tools, adding flexibility and keying
off the existence of the meta branch it is possible to remove all
of the variables that were added to support different repository
types.

(From OE-Core rev: 06e5f45c8f38925cd5902a3a3f436f5e9451dd16)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Bruce Ashfield 2012-03-22 16:00:08 -04:00 committed by Richard Purdie
parent 6636f840d4
commit 921e67bc82
8 changed files with 85 additions and 67 deletions

View File

@ -45,9 +45,6 @@ def find_urls(d):
do_patch() {
cd ${S}
if [ -f ${WORKDIR}/defconfig ]; then
defconfig=${WORKDIR}/defconfig
fi
# if kernel tools are available in-tree, they are preferred
# and are placed on the path before any external tools. Unless
@ -59,16 +56,13 @@ do_patch() {
fi
kbranch=${KBRANCH}
if [ -n "${YOCTO_KERNEL_EXTERNAL_BRANCH}" ]; then
# switch from a generic to a specific branch
kbranch=${YOCTO_KERNEL_EXTERNAL_BRANCH}
fi
# simply ensures that a branch of the right name has been created
if [ -n "${YOCTO_KERNEL_META_DATA}" ]; then
# if we have a defined/set meta branch we should not be generating
# any meta data. The passed branch has what we need.
if [ -n "${KMETA}" ]; then
createme_flags="--disable-meta-gen"
fi
createme ${createme_flags} ${ARCH} ${kbranch} ${defconfig}
createme ${createme_flags} ${ARCH} ${kbranch}
if [ $? -ne 0 ]; then
echo "ERROR. Could not create ${kbranch}"
exit 1
@ -95,7 +89,7 @@ do_patch() {
fi
# executes and modifies the source tree as required
patchme ${kbranch}
patchme ${KMACHINE}
if [ $? -ne 0 ]; then
echo "ERROR. Could not modify ${kbranch}"
exit 1
@ -122,7 +116,7 @@ do_kernel_checkout() {
mv ${WORKDIR}/git/.git ${S}
rm -rf ${WORKDIR}/git/
cd ${S}
if [ -n "${YOCTO_KERNEL_META_DATA}" ] && [ -n "${KMETA}" ]; then
if [ -n "${KMETA}" ]; then
git branch -a | grep -q ${KMETA}
if [ $? -ne 0 ]; then
echo "ERROR. The branch '${KMETA}' is required and was not"
@ -131,15 +125,6 @@ do_kernel_checkout() {
exit 1
fi
fi
if [ -z "${YOCTO_KERNEL_EXTERNAL_BRANCH}" ] && [ -n "${KBRANCH}" ] ; then
git branch -a | grep -q ${KBRANCH}
if [ $? -ne 0 ]; then
echo "ERROR. The branch '${KBRANCH}' is required and was not"
echo "found. Ensure that the SRC_URI points to a valid linux-yocto"
echo "kernel repository"
exit 1
fi
fi
fi
if [ -d "${WORKDIR}/git/" ] && [ ! -d "${WORKDIR}/git/.git" ]; then
# we build out of {S}, so ensure that ${S} is clean and present
@ -192,7 +177,7 @@ do_kernel_configme() {
cd ${S}
PATH=${PATH}:${S}/scripts/util
configme ${configmeflags} --reconfig --output ${B} ${KBRANCH} ${KMACHINE}
configme ${configmeflags} --reconfig --output ${B} ${LINUX_KERNEL_TYPE} ${KMACHINE}
if [ $? -ne 0 ]; then
echo "ERROR. Could not configure ${KMACHINE}-${LINUX_KERNEL_TYPE}"
exit 1
@ -221,51 +206,71 @@ python do_kernel_configcheck() {
do_validate_branches() {
cd ${S}
# nothing to do if bootstrapping
if [ -n "${YOCTO_KERNEL_EXTERNAL_BRANCH}" ]; then
return
fi
# nothing to do if SRCREV is AUTOREV
set +e
# if SRCREV is AUTOREV it shows up as AUTOINC there's nothing to
# check and we can exit early
if [ "${SRCREV_machine}" = "AUTOINC" ]; then
# restore the branch for builds
git checkout -f ${KBRANCH}
return
fi
# if the branches do not exist, then there's nothing to check either
git show-ref --quiet --verify -- "refs/heads/${KBRANCH}"
if [ $? -eq 1 ]; then
return
fi
branch_head=`git show-ref -s --heads ${KBRANCH}`
meta_head=`git show-ref -s --heads ${KMETA}`
target_branch_head="${SRCREV_machine}"
target_meta_head="${SRCREV_meta}"
if [ -z "${SRCREV_machine}" ]; then
target_branch_head="${SRCREV}"
else
target_branch_head="${SRCREV_machine}"
fi
if [ "${target_branch_head}" = "AUTOINC" ]; then
return
fi
# We have SRCREVs and we have branches so validation can continue!
current=`git branch |grep \*|sed 's/^\* //'`
if [ -n "$target_branch_head" ] && [ "$branch_head" != "$target_branch_head" ]; then
if [ -n "${KERNEL_REVISION_CHECKING}" ]; then
ref=`git show ${target_meta_head} 2>&1 | head -n1 || true`
if [ "$ref" = "fatal: bad object ${target_meta_head}" ]; then
echo "ERROR ${target_branch_head} is not a valid commit ID."
echo "The kernel source tree may be out of sync"
exit 1
else
echo "Forcing branch $current to ${target_branch_head}"
git branch -m $current $current-orig
git checkout -b $current ${target_branch_head}
fi
if [ -n "$target_branch_head" ] && [ "$branch_head" != "$target_branch_head" ] &&
[ "$target_branch_head" != "AUTOINC" ]; then
ref=`git show ${target_branch_head} 2>&1 | head -n1 || true`
if [ "$ref" = "fatal: bad object ${target_meta_head}" ]; then
echo "ERROR ${target_branch_head} is not a valid commit ID."
echo "The kernel source tree may be out of sync"
exit 1
else
echo "Forcing branch $current to ${target_branch_head}"
git branch -m $current $current-orig
git checkout -b $current ${target_branch_head}
fi
fi
meta_head=`git show-ref -s --heads ${KMETA}`
target_meta_head="${SRCREV_meta}"
git show-ref --quiet --verify -- "refs/heads/${KMETA}"
if [ $? -eq 1 ]; then
return
fi
if [ "${target_meta_head}" = "AUTOINC" ]; then
return
fi
if [ "$meta_head" != "$target_meta_head" ]; then
if [ -n "${KERNEL_REVISION_CHECKING}" ]; then
ref=`git show ${target_meta_head} 2>&1 | head -n1 || true`
if [ "$ref" = "fatal: bad object ${target_meta_head}" ]; then
echo "ERROR ${target_meta_head} is not a valid commit ID"
echo "The kernel source tree may be out of sync"
ref=`git show ${target_meta_head} 2>&1 | head -n1 || true`
if [ "$ref" = "fatal: bad object ${target_meta_head}" ]; then
echo "ERROR ${target_meta_head} is not a valid commit ID"
echo "The kernel source tree may be out of sync"
exit 1
else
echo "Forcing branch meta to ${target_meta_head}"
git branch -m ${KMETA} ${KMETA}-orig
git checkout -b ${KMETA} ${target_meta_head}
if [ $? -ne 0 ];then
echo "ERROR: could not checkout meta branch from known hash ${target_meta_head}"
exit 1
else
echo "Forcing branch meta to ${target_meta_head}"
git branch -m ${KMETA} ${KMETA}-orig
git checkout -b ${KMETA} ${target_meta_head}
fi
fi
fi
fi

View File

@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://git/tools/kgit;beginline=5;endline=9;md5=e2bf4415f3d8
DEPENDS = "git-native guilt-native"
SRCREV = "2bbbaaa00cc70887d6d6f745b9425890d522d240"
SRCREV = "369e67046a1b72b6447c208babd4d2065265a95e"
PR = "r12"
PV = "0.1+git${SRCPV}"

View File

@ -13,6 +13,7 @@ KBRANCH_qemuppc = "yocto/standard/preempt-rt/qemu-ppc32"
LINUX_VERSION ?= "3.0.24"
LINUX_KERNEL_TYPE = "preempt-rt"
KMETA = "meta"
SRCREV_machine ?= "cf280f1dc5877d4ca43d21307222326efa68bb27"
SRCREV_machine_qemuppc ?= "afaa5baa6a9ca9c8a03a9a3eee2ba9fba089f416"

View File

@ -14,6 +14,8 @@ KBRANCH_qemuppc = "standard/preempt-rt/qemu-ppc32"
LINUX_VERSION ?= "3.2.11"
LINUX_KERNEL_TYPE = "preempt-rt"
KMETA = "meta"
SRCREV_machine ?= "3ebf4d172cf4a41d2abf09e4036f0850e08064e7"
SRCREV_machine_qemuppc ?= "7cebfe717987f4ffa9ae90558c28f45049847c1c"
SRCREV_meta ?= "6b3d4e09aa2531e9649f3f03827b7efbccfcec03"

View File

@ -9,15 +9,14 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
# and it can be specific to the machine or shared
# KMACHINE = "UNDEFINED"
# Set this to 'preempt_rt' in the local.conf if you want a real time kernel
LINUX_KERNEL_TYPE ?= "standard"
KMETA ?= "meta"
# KMETA ?= ""
KBRANCH ?= "master"
KMACHINE ?= "${MACHINE}"
SRCREV_FORMAT ?= "meta_machine"
LINUX_VERSION_EXTENSION ?= "-yocto-${LINUX_KERNEL_TYPE}"
KERNEL_REVISION_CHECKING ?= "t"
YOCTO_KERNEL_META_DATA ?= "t"
do_patch[depends] = "kern-tools-native:do_populate_sysroot"

View File

@ -10,6 +10,8 @@ KMACHINE_qemuarm = "yocto/standard/arm-versatile-926ejs"
KBRANCH = "${KMACHINE}"
KMETA = "meta"
LINUX_VERSION ?= "2.6.37"
SRCREV_machine_qemuarm = "b3e53a090eaa23aa82e64fa0a563a93a2b4dbb5d"

View File

@ -1,14 +1,21 @@
inherit kernel
require recipes-kernel/linux/linux-yocto.inc
KMACHINE = "yocto/standard/base"
KMACHINE_qemux86 = "yocto/standard/common-pc/base"
KMACHINE_qemux86-64 = "yocto/standard/common-pc-64/base"
KMACHINE_qemuppc = "yocto/standard/qemu-ppc32"
KMACHINE_qemumips = "yocto/standard/mti-malta32-be"
KMACHINE_qemuarm = "yocto/standard/arm-versatile-926ejs"
KBRANCH = "yocto/standard/base"
KBRANCH_qemux86 = "yocto/standard/common-pc/base"
KBRANCH_qemux86-64 = "yocto/standard/common-pc-64/base"
KBRANCH_qemuppc = "yocto/standard/qemu-ppc32"
KBRANCH_qemumips = "yocto/standard/mti-malta32-be"
KBRANCH_qemuarm = "yocto/standard/arm-versatile-926ejs"
KBRANCH = "${KMACHINE}"
# Temporary until 3.0 kernel tree is updated with machine mappings
KMACHINE_qemux86 = "common-pc"
KMACHINE_qemux86-64 = "common-pc-64"
KMACHINE_qemuppc = "qemu-ppc32"
KMACHINE_qemumips = "mti-malta32-be"
KMACHINE_qemuarm = "arm-versatile-926ejs"
KMETA = "meta"
LINUX_VERSION ?= "3.0.24"

View File

@ -28,6 +28,8 @@ SRCREV_meta ?= "6b3d4e09aa2531e9649f3f03827b7efbccfcec03"
PR = "r1"
PV = "${LINUX_VERSION}+git${SRCPV}"
KMETA = "meta"
SRC_URI = "git://git.yoctoproject.org/linux-yocto-3.2;protocol=git;bareclone=1;branch=${KBRANCH},meta;name=machine,meta"
COMPATIBLE_MACHINE = "(qemuarm|qemux86|qemuppc|qemumips|qemux86-64)"