Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 0/4] Implement multilib SDK support
@ 2012-10-22 15:20 Mark Hatle
  2012-10-22 15:20 ` [PATCH 1/4] multilib: Add support for cross-canadian multilib packages Mark Hatle
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Mark Hatle @ 2012-10-22 15:20 UTC (permalink / raw)
  To: openembedded-core

The attached patch set implements multilib SDK support.  This means that 
when generating an SDK (either by a traditional SDK recipe or the
do_populate_sdk task), that support infrastructure for each multilib
will be included in the SDK.

Note, this code does -not- change the toolchain.  If the generated toolchain
does not work properly with the multilib configuration, that will need to
be a seperate fix!

This was tested with both the oe-core and our custom Wind River toolchain.
Generation passed on the oe-core SDK, but the functionality of the toolchain
was not tested.  The Wind River toolchain did get properly generated and
functioned as expected.

Note:  The 0003 patch that affects processing the environment file was
agreed to with the other author of the function.

The following changes since commit 06d27cf0fbcc4004e6f456880eca49893c9290bf:

  xorg: remove XF86 BigFont extension (2012-10-22 14:57:26 +0100)

are available in the git repository at:
  git://git.yoctoproject.org/poky-contrib mhatle/sdk
  http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=mhatle/sdk

Mark Hatle (4):
  multilib: Add support for cross-canadian multilib packages
  multilib - crosssdk: Stop building multilib for crosssdk packages
  populate_sdk_base: Update extraction script for multilibs
  populate_sdk_base: Ensure that the multilib cross-canadian tools are
    used

 meta/classes/base.bbclass              |   43 +++++++++++++++++++++++++++++---
 meta/classes/multilib.bbclass          |   20 +++++++++++---
 meta/classes/populate_sdk_base.bbclass |    7 +++--
 meta/lib/oe/classextend.py             |    4 +-
 4 files changed, 60 insertions(+), 14 deletions(-)

-- 
1.7.3.4




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

* [PATCH 1/4] multilib: Add support for cross-canadian multilib packages
  2012-10-22 15:20 [PATCH 0/4] Implement multilib SDK support Mark Hatle
@ 2012-10-22 15:20 ` Mark Hatle
  2012-10-22 15:20 ` [PATCH 2/4] multilib - crosssdk: Stop building multilib for crosssdk packages Mark Hatle
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Hatle @ 2012-10-22 15:20 UTC (permalink / raw)
  To: openembedded-core

Add support for the generation of cross-canadian packages.

Each cross-canadian package has:
 PN = "pkg-cross-canadian-${TRANSLATED_TARGET_ARCH}"

in order for that to be evaluated properly with multilibs enabled, it was
necessary to detect both the presence of the cross-canadian packages and
then update the vars using the OVERRIDE for the multilib.  Additional checks
were made to ensure that any dependency that sais "cross-canadian" did not
get prefixed with the MLPREFIX.

Also, make sure that even when building multilib cross-canadian packages,
we only use the single SDK PACKAGE_ARCH, we don't want or need variants.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/base.bbclass     |   39 +++++++++++++++++++++++++++++++++++++--
 meta/classes/multilib.bbclass |   18 ++++++++++++++----
 meta/lib/oe/classextend.py    |    4 ++--
 3 files changed, 53 insertions(+), 8 deletions(-)

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index f254306..12a30c9 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -183,6 +183,8 @@ def preferred_ml_updates(d):
             providers.append(v)
 
     for pkg, reason in blacklists.items():
+        if pkg.endswith("-native") or pkg.startswith("nativesdk-") or 'cross-canadian' in pkg:
+            continue
         for p in prefixes:
             newpkg = p + "-" + pkg
             if not d.getVarFlag('PNBLACKLIST', newpkg, True):
@@ -193,6 +195,17 @@ def preferred_ml_updates(d):
         pkg = v.replace("PREFERRED_VERSION_", "")
         if pkg.endswith("-native") or pkg.startswith("nativesdk-"):
             continue
+        if 'cross-canadian' in pkg:
+            for p in prefixes:
+                localdata = bb.data.createCopy(d)
+                override = ":virtclass-multilib-" + p
+                localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
+                bb.data.update_data(localdata)
+                newname = localdata.expand(v)
+                if newname != v:
+                    newval = localdata.getVar(v, True)
+                    d.setVar(newname, newval)
+            continue
         for p in prefixes:
             newname = "PREFERRED_VERSION_" + p + "-" + pkg
             if not d.getVar(newname, False):
@@ -203,14 +216,36 @@ def preferred_ml_updates(d):
         pkg = prov.replace("PREFERRED_PROVIDER_", "")
         if pkg.endswith("-native") or pkg.startswith("nativesdk-"):
             continue
+        if 'cross-canadian' in pkg:
+            for p in prefixes:
+                localdata = bb.data.createCopy(d)
+                override = ":virtclass-multilib-" + p
+                localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
+                bb.data.update_data(localdata)
+                newname = localdata.expand(prov)
+                if newname != prov:
+                    newval = localdata.expand(val)
+                    d.setVar(newname, newval)
+            continue
         virt = ""
         if pkg.startswith("virtual/"):
             pkg = pkg.replace("virtual/", "")
             virt = "virtual/"
         for p in prefixes:
-            newname = "PREFERRED_PROVIDER_" + virt + p + "-" + pkg
             if pkg != "kernel":
                 val = p + "-" + val
+
+            # implement variable keys
+            localdata = bb.data.createCopy(d)
+            override = ":virtclass-multilib-" + p
+            localdata.setVar("OVERRIDES", localdata.getVar("OVERRIDES", False) + override)
+            bb.data.update_data(localdata)
+            newname = localdata.expand(prov)
+            if newname != prov:
+                d.setVar(newname, localdata.expand(val))
+
+            # implement alternative multilib name
+            newname = localdata.expand("PREFERRED_PROVIDER_" + virt + p + "-" + pkg)
             if not d.getVar(newname, False):
                 d.setVar(newname, val)
 
@@ -218,7 +253,7 @@ def preferred_ml_updates(d):
     mp = (d.getVar("MULTI_PROVIDER_WHITELIST", True) or "").split()
     extramp = []
     for p in mp:
-        if p.endswith("-native") or p.startswith("nativesdk-"):
+        if p.endswith("-native") or p.startswith("nativesdk-") or 'cross-canadian' in p:
             continue
         virt = ""
         if p.startswith("virtual/"):
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index 3824f3b..de6e59e 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -18,6 +18,13 @@ python multilib_virtclass_handler () {
         e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False))
         return
 
+    if bb.data.inherits_class('cross-canadian', e.data):
+        e.data.setVar("MLPREFIX", variant + "-")
+        override = ":virtclass-multilib-" + variant
+        e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override)
+        bb.data.update_data(e.data)
+        return
+
     if bb.data.inherits_class('native', e.data):
         raise bb.parse.SkipPackage("We can't extend native recipes")
 
@@ -69,12 +76,16 @@ python __anonymous () {
     if bb.data.inherits_class('image', d) or bb.data.inherits_class('populate_sdk_base', d):
         return
 
+    clsextend.map_depends_variable("DEPENDS")
+    clsextend.map_variable("PROVIDES")
+
+    if bb.data.inherits_class('cross-canadian', d):
+        return
+
     clsextend.rename_packages()
     clsextend.rename_package_variables((d.getVar("PACKAGEVARS", True) or "").split())
 
-    clsextend.map_depends_variable("DEPENDS")
     clsextend.map_packagevars()
-    clsextend.map_variable("PROVIDES")
     clsextend.map_regexp_variable("PACKAGES_DYNAMIC")
     clsextend.map_variable("PACKAGE_INSTALL")
     clsextend.map_variable("INITSCRIPT_PACKAGES")
@@ -90,7 +101,7 @@ python do_package_qa_multilib() {
         for i in values:
             if i.startswith('virtual/'):
                 i = i[len('virtual/'):]
-            if (not i.startswith('kernel-module')) and (not i.startswith(mlprefix)):
+            if (not i.startswith('kernel-module')) and (not i.startswith(mlprefix)) and (not 'cross-canadian' in i):
                 candidates.append(i)
         if len(candidates) > 0:
             bb.warn("Multilib QA Issue: %s package %s - suspicious values '%s' in %s" 
@@ -109,4 +120,3 @@ python do_package_qa_multilib() {
         check_mlprefix(pkg, 'RREPLACES', ml)
         check_mlprefix(pkg, 'RCONFLICTS', ml)
 }
-
diff --git a/meta/lib/oe/classextend.py b/meta/lib/oe/classextend.py
index 857a6c9..c982fb7 100644
--- a/meta/lib/oe/classextend.py
+++ b/meta/lib/oe/classextend.py
@@ -50,7 +50,7 @@ class ClassExtender(object):
         return newdata
 
     def map_depends(self, dep):
-        if dep.endswith(("-native", "-native-runtime")):
+        if dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('cross-canadian' in dep):
             return dep
         else:
             return self.extend_name(dep)
@@ -93,7 +93,7 @@ class ClassExtender(object):
 
 class NativesdkClassExtender(ClassExtender):
     def map_depends(self, dep):
-        if dep.endswith(("-native", "-native-runtime", "-cross")):
+        if dep.endswith(("-native", "-native-runtime", "-cross")) or ('nativesdk-' in dep):
             return dep
         elif dep.endswith(("-gcc-intermediate", "-gcc-initial", "-gcc", "-g++")):
             return dep + "-crosssdk"
-- 
1.7.3.4




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

* [PATCH 2/4] multilib - crosssdk: Stop building multilib for crosssdk packages
  2012-10-22 15:20 [PATCH 0/4] Implement multilib SDK support Mark Hatle
  2012-10-22 15:20 ` [PATCH 1/4] multilib: Add support for cross-canadian multilib packages Mark Hatle
@ 2012-10-22 15:20 ` Mark Hatle
  2012-10-22 15:20 ` [PATCH 3/4] populate_sdk_base: Update extraction script for multilibs Mark Hatle
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Hatle @ 2012-10-22 15:20 UTC (permalink / raw)
  To: openembedded-core

Crosssdk packages are not actually multilib packages, so treat them
the same as other nativesdk packages in the multilib, base, and
classextend components.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/base.bbclass     |    8 ++++----
 meta/classes/multilib.bbclass |    4 ++--
 meta/lib/oe/classextend.py    |    4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 12a30c9..783b64d 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -183,7 +183,7 @@ def preferred_ml_updates(d):
             providers.append(v)
 
     for pkg, reason in blacklists.items():
-        if pkg.endswith("-native") or pkg.startswith("nativesdk-") or 'cross-canadian' in pkg:
+        if pkg.endswith(("-native", "-crosssdk")) or pkg.startswith("nativesdk-") or 'cross-canadian' in pkg:
             continue
         for p in prefixes:
             newpkg = p + "-" + pkg
@@ -193,7 +193,7 @@ def preferred_ml_updates(d):
     for v in versions:
         val = d.getVar(v, False)
         pkg = v.replace("PREFERRED_VERSION_", "")
-        if pkg.endswith("-native") or pkg.startswith("nativesdk-"):
+        if pkg.endswith(("-native", "-crosssdk")) or pkg.startswith("nativesdk-"):
             continue
         if 'cross-canadian' in pkg:
             for p in prefixes:
@@ -214,7 +214,7 @@ def preferred_ml_updates(d):
     for prov in providers:
         val = d.getVar(prov, False)
         pkg = prov.replace("PREFERRED_PROVIDER_", "")
-        if pkg.endswith("-native") or pkg.startswith("nativesdk-"):
+        if pkg.endswith(("-native", "-crosssdk")) or pkg.startswith("nativesdk-"):
             continue
         if 'cross-canadian' in pkg:
             for p in prefixes:
@@ -253,7 +253,7 @@ def preferred_ml_updates(d):
     mp = (d.getVar("MULTI_PROVIDER_WHITELIST", True) or "").split()
     extramp = []
     for p in mp:
-        if p.endswith("-native") or p.startswith("nativesdk-") or 'cross-canadian' in p:
+        if p.endswith(("-native", "-crosssdk")) or p.startswith("nativesdk-") or 'cross-canadian' in p:
             continue
         virt = ""
         if p.startswith("virtual/"):
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index de6e59e..c249925 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -28,7 +28,7 @@ python multilib_virtclass_handler () {
     if bb.data.inherits_class('native', e.data):
         raise bb.parse.SkipPackage("We can't extend native recipes")
 
-    if bb.data.inherits_class('nativesdk', e.data):
+    if bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data):
         raise bb.parse.SkipPackage("We can't extend nativesdk recipes")
 
     save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or ""
@@ -101,7 +101,7 @@ python do_package_qa_multilib() {
         for i in values:
             if i.startswith('virtual/'):
                 i = i[len('virtual/'):]
-            if (not i.startswith('kernel-module')) and (not i.startswith(mlprefix)) and (not 'cross-canadian' in i):
+            if (not i.startswith('kernel-module')) and (not i.startswith(mlprefix)) and (not 'cross-canadian' in i) and (not i.startswith("nativesdk-")):
                 candidates.append(i)
         if len(candidates) > 0:
             bb.warn("Multilib QA Issue: %s package %s - suspicious values '%s' in %s" 
diff --git a/meta/lib/oe/classextend.py b/meta/lib/oe/classextend.py
index c982fb7..c46332c 100644
--- a/meta/lib/oe/classextend.py
+++ b/meta/lib/oe/classextend.py
@@ -50,7 +50,7 @@ class ClassExtender(object):
         return newdata
 
     def map_depends(self, dep):
-        if dep.endswith(("-native", "-native-runtime")) or ('nativesdk-' in dep) or ('cross-canadian' in dep):
+        if dep.endswith(("-native", "-native-runtime", "-crosssdk")) or ('nativesdk-' in dep) or ('cross-canadian' in dep):
             return dep
         else:
             return self.extend_name(dep)
@@ -93,7 +93,7 @@ class ClassExtender(object):
 
 class NativesdkClassExtender(ClassExtender):
     def map_depends(self, dep):
-        if dep.endswith(("-native", "-native-runtime", "-cross")) or ('nativesdk-' in dep):
+        if dep.endswith(("-native", "-native-runtime", "-cross", "-crosssdk")) or ('nativesdk-' in dep):
             return dep
         elif dep.endswith(("-gcc-intermediate", "-gcc-initial", "-gcc", "-g++")):
             return dep + "-crosssdk"
-- 
1.7.3.4




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

* [PATCH 3/4] populate_sdk_base: Update extraction script for multilibs
  2012-10-22 15:20 [PATCH 0/4] Implement multilib SDK support Mark Hatle
  2012-10-22 15:20 ` [PATCH 1/4] multilib: Add support for cross-canadian multilib packages Mark Hatle
  2012-10-22 15:20 ` [PATCH 2/4] multilib - crosssdk: Stop building multilib for crosssdk packages Mark Hatle
@ 2012-10-22 15:20 ` Mark Hatle
  2012-10-22 15:20 ` [PATCH 4/4] populate_sdk_base: Ensure that the multilib cross-canadian tools are used Mark Hatle
  2012-10-28  1:15 ` [PATCH 0/4] Implement multilib SDK support Saul Wold
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Hatle @ 2012-10-22 15:20 UTC (permalink / raw)
  To: openembedded-core

When multilibs are enabled, there will be more then one environment
file created.  We need to be sure to process each environment file.
The next function can simply use the last environment file processed
to get the magic value(s) that it requires.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/populate_sdk_base.bbclass |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass
index a914a2c..8258224 100644
--- a/meta/classes/populate_sdk_base.bbclass
+++ b/meta/classes/populate_sdk_base.bbclass
@@ -160,8 +160,9 @@ echo "done"
 
 printf "Setting it up..."
 # fix environment paths
-env_setup_script=$(find $target_sdk_dir/ -name "environment-setup-${REAL_MULTIMACH_TARGET_SYS}")
-sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
+for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
+  sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
+done
 
 # fix dynamic loader paths in all ELF SDK binaries
 native_sysroot=$(cat $env_setup_script |grep OECORE_NATIVE_SYSROOT|cut -d'=' -f2|tr -d '"')
-- 
1.7.3.4




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

* [PATCH 4/4] populate_sdk_base: Ensure that the multilib cross-canadian tools are used
  2012-10-22 15:20 [PATCH 0/4] Implement multilib SDK support Mark Hatle
                   ` (2 preceding siblings ...)
  2012-10-22 15:20 ` [PATCH 3/4] populate_sdk_base: Update extraction script for multilibs Mark Hatle
@ 2012-10-22 15:20 ` Mark Hatle
  2012-10-28  1:15 ` [PATCH 0/4] Implement multilib SDK support Saul Wold
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Hatle @ 2012-10-22 15:20 UTC (permalink / raw)
  To: openembedded-core

Update the host toolchain list, for cross-canadian toolchains, to ensure
that all of the supported multilibs are built and installed.  This
dynamically generates the dependnecy set based on the current multilib
configuration.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 meta/classes/populate_sdk_base.bbclass |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass
index 8258224..2fe7f15 100644
--- a/meta/classes/populate_sdk_base.bbclass
+++ b/meta/classes/populate_sdk_base.bbclass
@@ -7,7 +7,7 @@ SDK_DEPLOY = "${TMPDIR}/deploy/sdk"
 
 SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${MULTIMACH_TARGET_SYS}"
 
-TOOLCHAIN_HOST_TASK ?= "nativesdk-packagegroup-sdk-host packagegroup-cross-canadian-${TRANSLATED_TARGET_ARCH}"
+TOOLCHAIN_HOST_TASK ?= "nativesdk-packagegroup-sdk-host packagegroup-cross-canadian-${@' packagegroup-cross-canadian-'.join(all_multilib_tune_values(d, 'TRANSLATED_TARGET_ARCH').split())}"
 TOOLCHAIN_HOST_TASK_ATTEMPTONLY ?= ""
 TOOLCHAIN_TARGET_TASK ?= "packagegroup-core-standalone-sdk-target packagegroup-core-standalone-sdk-target-dbg"
 TOOLCHAIN_TARGET_TASK_ATTEMPTONLY ?= ""
-- 
1.7.3.4




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

* Re: [PATCH 0/4] Implement multilib SDK support
  2012-10-22 15:20 [PATCH 0/4] Implement multilib SDK support Mark Hatle
                   ` (3 preceding siblings ...)
  2012-10-22 15:20 ` [PATCH 4/4] populate_sdk_base: Ensure that the multilib cross-canadian tools are used Mark Hatle
@ 2012-10-28  1:15 ` Saul Wold
  4 siblings, 0 replies; 6+ messages in thread
From: Saul Wold @ 2012-10-28  1:15 UTC (permalink / raw)
  To: Mark Hatle; +Cc: openembedded-core

On 10/22/2012 08:20 AM, Mark Hatle wrote:
> The attached patch set implements multilib SDK support.  This means that
> when generating an SDK (either by a traditional SDK recipe or the
> do_populate_sdk task), that support infrastructure for each multilib
> will be included in the SDK.
>
> Note, this code does -not- change the toolchain.  If the generated toolchain
> does not work properly with the multilib configuration, that will need to
> be a seperate fix!
>
> This was tested with both the oe-core and our custom Wind River toolchain.
> Generation passed on the oe-core SDK, but the functionality of the toolchain
> was not tested.  The Wind River toolchain did get properly generated and
> functioned as expected.
>
> Note:  The 0003 patch that affects processing the environment file was
> agreed to with the other author of the function.
>
> The following changes since commit 06d27cf0fbcc4004e6f456880eca49893c9290bf:
>
>    xorg: remove XF86 BigFont extension (2012-10-22 14:57:26 +0100)
>
> are available in the git repository at:
>    git://git.yoctoproject.org/poky-contrib mhatle/sdk
>    http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=mhatle/sdk
>
> Mark Hatle (4):
>    multilib: Add support for cross-canadian multilib packages
>    multilib - crosssdk: Stop building multilib for crosssdk packages
>    populate_sdk_base: Update extraction script for multilibs
>    populate_sdk_base: Ensure that the multilib cross-canadian tools are
>      used
>
>   meta/classes/base.bbclass              |   43 +++++++++++++++++++++++++++++---
>   meta/classes/multilib.bbclass          |   20 +++++++++++---
>   meta/classes/populate_sdk_base.bbclass |    7 +++--
>   meta/lib/oe/classextend.py             |    4 +-
>   4 files changed, 60 insertions(+), 14 deletions(-)
>

Merged into OE-Core

Thanks
	Sau!




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

end of thread, other threads:[~2012-10-28  1:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-22 15:20 [PATCH 0/4] Implement multilib SDK support Mark Hatle
2012-10-22 15:20 ` [PATCH 1/4] multilib: Add support for cross-canadian multilib packages Mark Hatle
2012-10-22 15:20 ` [PATCH 2/4] multilib - crosssdk: Stop building multilib for crosssdk packages Mark Hatle
2012-10-22 15:20 ` [PATCH 3/4] populate_sdk_base: Update extraction script for multilibs Mark Hatle
2012-10-22 15:20 ` [PATCH 4/4] populate_sdk_base: Ensure that the multilib cross-canadian tools are used Mark Hatle
2012-10-28  1:15 ` [PATCH 0/4] Implement multilib SDK support Saul Wold

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