summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
authorConstantin Musca <constantinx.musca@intel.com>2012-12-24 13:28:38 +0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-12-31 09:43:25 +0000
commit1674541ed83fa4645f2e078f65fe0f878527ee6e (patch)
tree3b0b2c5ce95eee3090f05058e52369490852fef4 /meta/classes
parent415c4fa12c83dacc6b107d0f857ea299a68b0eca (diff)
downloadpoky-1674541ed83fa4645f2e078f65fe0f878527ee6e.tar.gz
multilib: fix allarch/kernel/module-base multilib issues
- skip the non-packagegroup allarch recipes in multilib_virtclass_handler - extend PROVIDES/RPROVIDES for allarch recipes which are not packagegroups - use variants from MULTILIB_GLOBAL_VARIANTS (lib32 lib64 libx32) to create additional pkgdata files for multilib allarch: ${pkgdatadir}/${variant}-${PN} and ${pkgdatadir}/runtime/${variant}-${pkg} - use variants from MULTILIB_VARIANTS to create additional pkgdata files for multilib kernel/module-base recipes - add a sanity check to determine if the current multilib is in MULTILIB_GLOBAL_VARIANTS [YOCTO #2918] [YOCTO #3440] [YOCTO #3565] [YOCTO #3568] (From OE-Core rev: bc4da2573dfb59ea2fc4af359701818df20f7663) Signed-off-by: Constantin Musca <constantinx.musca@intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r--meta/classes/multilib.bbclass3
-rw-r--r--meta/classes/multilib_global.bbclass5
-rw-r--r--meta/classes/package.bbclass30
-rw-r--r--meta/classes/sanity.bbclass4
4 files changed, 41 insertions, 1 deletions
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index 09c08eddd0..f5f3c69363 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -31,6 +31,9 @@ python multilib_virtclass_handler () {
31 if bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data): 31 if bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data):
32 raise bb.parse.SkipPackage("We can't extend nativesdk recipes") 32 raise bb.parse.SkipPackage("We can't extend nativesdk recipes")
33 33
34 if bb.data.inherits_class('allarch', e.data) and not bb.data.inherits_class('packagegroup', e.data):
35 raise bb.parse.SkipPackage("Don't extend allarch recipes which are not packagegroups")
36
34 save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or "" 37 save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or ""
35 for name in save_var_name.split(): 38 for name in save_var_name.split():
36 val=e.data.getVar(name, True) 39 val=e.data.getVar(name, True)
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index f55e3a25aa..529e82a8bd 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -10,7 +10,10 @@ python multilib_virtclass_handler_global () {
10 variant = e.data.getVar("BBEXTENDVARIANT", True) 10 variant = e.data.getVar("BBEXTENDVARIANT", True)
11 11
12 if isinstance(e, bb.event.RecipeParsed) and not variant: 12 if isinstance(e, bb.event.RecipeParsed) and not variant:
13 if bb.data.inherits_class('kernel', e.data) or bb.data.inherits_class('module-base', e.data): 13 if bb.data.inherits_class('kernel', e.data) or \
14 bb.data.inherits_class('module-base', e.data) or \
15 (bb.data.inherits_class('allarch', e.data) and\
16 not bb.data.inherits_class('packagegroup', e.data)):
14 variants = (e.data.getVar("MULTILIB_VARIANTS", True) or "").split() 17 variants = (e.data.getVar("MULTILIB_VARIANTS", True) or "").split()
15 18
16 import oe.classextend 19 import oe.classextend
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 9885d94101..1ac65510c7 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1132,6 +1132,20 @@ python emit_pkgdata() {
1132 size = 0 1132 size = 0
1133 return size 1133 return size
1134 1134
1135 def write_extra_pkgs(variants, pn, packages, pkgdatadir):
1136 for variant in variants:
1137 with open("%s/%s-%s" % (pkgdatadir, variant, pn), 'w') as fd:
1138 fd.write("PACKAGES: %s\n" % ' '.join(
1139 map(lambda pkg: '%s-%s' % (variant, pkg), packages.split())))
1140
1141 def write_extra_runtime_pkgs(variants, packages, pkgdatadir):
1142 for variant in variants:
1143 for pkg in packages.split():
1144 ml_pkg = "%s-%s" % (variant, pkg)
1145 subdata_file = "%s/runtime/%s" % (pkgdatadir, ml_pkg)
1146 with open(subdata_file, 'w') as fd:
1147 fd.write("PKG_%s: %s" % (ml_pkg, pkg))
1148
1135 packages = d.getVar('PACKAGES', True) 1149 packages = d.getVar('PACKAGES', True)
1136 pkgdest = d.getVar('PKGDEST', True) 1150 pkgdest = d.getVar('PKGDEST', True)
1137 pkgdatadir = d.getVar('PKGDESTWORK', True) 1151 pkgdatadir = d.getVar('PKGDESTWORK', True)
@@ -1144,6 +1158,16 @@ python emit_pkgdata() {
1144 f.write("PACKAGES: %s\n" % packages) 1158 f.write("PACKAGES: %s\n" % packages)
1145 f.close() 1159 f.close()
1146 1160
1161 pn = d.getVar('PN', True)
1162 global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS', True) or "").split()
1163 variants = (d.getVar('MULTILIB_VARIANTS', True) or "").split()
1164
1165 if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
1166 write_extra_pkgs(variants, pn, packages, pkgdatadir)
1167
1168 if (bb.data.inherits_class('allarch', d) and not bb.data.inherits_class('packagegroup', d)):
1169 write_extra_pkgs(global_variants, pn, packages, pkgdatadir)
1170
1147 workdir = d.getVar('WORKDIR', True) 1171 workdir = d.getVar('WORKDIR', True)
1148 1172
1149 for pkg in packages.split(): 1173 for pkg in packages.split():
@@ -1198,6 +1222,12 @@ python emit_pkgdata() {
1198 packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg 1222 packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg
1199 file(packagedfile, 'w').close() 1223 file(packagedfile, 'w').close()
1200 1224
1225 if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
1226 write_extra_runtime_pkgs(variants, packages, pkgdatadir)
1227
1228 if bb.data.inherits_class('allarch', d) and not bb.data.inherits_class('packagegroup', d):
1229 write_extra_runtime_pkgs(global_variants, packages, pkgdatadir)
1230
1201 bb.utils.unlockfile(lf) 1231 bb.utils.unlockfile(lf)
1202} 1232}
1203emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse" 1233emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse"
diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 5b4f070ec4..0ffa52dedf 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -114,6 +114,8 @@ def check_toolchain(data):
114 tune_error_set.append(tune_errors) 114 tune_error_set.append(tune_errors)
115 115
116 multilibs = (data.getVar("MULTILIB_VARIANTS", True) or "").split() 116 multilibs = (data.getVar("MULTILIB_VARIANTS", True) or "").split()
117 global_multilibs = (data.getVar("MULTILIB_GLOBAL_VARIANTS", True) or "").split()
118
117 if multilibs: 119 if multilibs:
118 seen_libs = [] 120 seen_libs = []
119 seen_tunes = [] 121 seen_tunes = []
@@ -122,6 +124,8 @@ def check_toolchain(data):
122 tune_error_set.append("The multilib '%s' appears more than once." % lib) 124 tune_error_set.append("The multilib '%s' appears more than once." % lib)
123 else: 125 else:
124 seen_libs.append(lib) 126 seen_libs.append(lib)
127 if not lib in global_multilibs:
128 tune_error_set.append("Multilib %s is not present in MULTILIB_GLOBAL_VARIANTS" % lib)
125 tune = data.getVar("DEFAULTTUNE_virtclass-multilib-%s" % lib, True) 129 tune = data.getVar("DEFAULTTUNE_virtclass-multilib-%s" % lib, True)
126 if tune in seen_tunes: 130 if tune in seen_tunes:
127 tune_error_set.append("The tuning '%s' appears in more than one multilib." % tune) 131 tune_error_set.append("The tuning '%s' appears in more than one multilib." % tune)