summaryrefslogtreecommitdiffstats
path: root/meta/classes/multilib.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/multilib.bbclass')
-rw-r--r--meta/classes/multilib.bbclass120
1 files changed, 69 insertions, 51 deletions
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index 9f726e4537..b959bbd93c 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -1,90 +1,103 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
1python multilib_virtclass_handler () { 7python multilib_virtclass_handler () {
2 cls = e.data.getVar("BBEXTENDCURR") 8 cls = d.getVar("BBEXTENDCURR")
3 variant = e.data.getVar("BBEXTENDVARIANT") 9 variant = d.getVar("BBEXTENDVARIANT")
4 if cls != "multilib" or not variant: 10 if cls != "multilib" or not variant:
5 return 11 return
6 12
7 localdata = bb.data.createCopy(e.data) 13 localdata = bb.data.createCopy(d)
8 localdata.delVar('TMPDIR') 14 localdata.delVar('TMPDIR')
9 e.data.setVar('STAGING_KERNEL_DIR', localdata.getVar('STAGING_KERNEL_DIR')) 15 d.setVar('STAGING_KERNEL_DIR', localdata.getVar('STAGING_KERNEL_DIR'))
10 16
11 # There should only be one kernel in multilib configs 17 # There should only be one kernel in multilib configs
12 # We also skip multilib setup for module packages. 18 # We also skip multilib setup for module packages.
13 provides = (e.data.getVar("PROVIDES") or "").split() 19 provides = (d.getVar("PROVIDES") or "").split()
14 non_ml_recipes = d.getVar('NON_MULTILIB_RECIPES').split() 20 non_ml_recipes = d.getVar('NON_MULTILIB_RECIPES').split()
15 bpn = e.data.getVar("BPN") 21 bpn = d.getVar("BPN")
16 if "virtual/kernel" in provides or \ 22 if ("virtual/kernel" in provides
17 bb.data.inherits_class('module-base', e.data) or \ 23 or bb.data.inherits_class('module-base', d)
18 bpn in non_ml_recipes: 24 or bb.data.inherits_class('kernel-fit-image', d)
25 or bpn in non_ml_recipes):
19 raise bb.parse.SkipRecipe("We shouldn't have multilib variants for %s" % bpn) 26 raise bb.parse.SkipRecipe("We shouldn't have multilib variants for %s" % bpn)
20 27
21 save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME") or "" 28 save_var_name = d.getVar("MULTILIB_SAVE_VARNAME") or ""
22 for name in save_var_name.split(): 29 for name in save_var_name.split():
23 val=e.data.getVar(name) 30 val = d.getVar(name)
24 if val: 31 if val:
25 e.data.setVar(name + "_MULTILIB_ORIGINAL", val) 32 d.setVar(name + "_MULTILIB_ORIGINAL", val)
33
34 # We nearly don't need this but dependencies on NON_MULTILIB_RECIPES don't work without it
35 d.setVar("SSTATE_ARCHS_TUNEPKG", "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}")
26 36
27 overrides = e.data.getVar("OVERRIDES", False) 37 overrides = e.data.getVar("OVERRIDES", False)
28 pn = e.data.getVar("PN", False) 38 pn = e.data.getVar("PN", False)
29 overrides = overrides.replace("pn-${PN}", "pn-${PN}:pn-" + pn) 39 overrides = overrides.replace("pn-${PN}", "pn-${PN}:pn-" + pn)
30 e.data.setVar("OVERRIDES", overrides) 40 d.setVar("OVERRIDES", overrides)
31 41
32 if bb.data.inherits_class('image', e.data): 42 if bb.data.inherits_class('image', d):
33 e.data.setVar("MLPREFIX", variant + "-") 43 d.setVar("MLPREFIX", variant + "-")
34 e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) 44 d.setVar("PN", variant + "-" + d.getVar("PN", False))
35 e.data.setVar('SDKTARGETSYSROOT', e.data.getVar('SDKTARGETSYSROOT')) 45 d.setVar('SDKTARGETSYSROOT', d.getVar('SDKTARGETSYSROOT'))
36 override = ":virtclass-multilib-" + variant 46 override = ":virtclass-multilib-" + variant
37 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) 47 d.setVar("OVERRIDES", d.getVar("OVERRIDES", False) + override)
38 target_vendor = e.data.getVar("TARGET_VENDOR_" + "virtclass-multilib-" + variant, False) 48 target_vendor = d.getVar("TARGET_VENDOR:" + "virtclass-multilib-" + variant, False)
39 if target_vendor: 49 if target_vendor:
40 e.data.setVar("TARGET_VENDOR", target_vendor) 50 d.setVar("TARGET_VENDOR", target_vendor)
41 return 51 return
42 52
43 if bb.data.inherits_class('cross-canadian', e.data): 53 if bb.data.inherits_class('cross-canadian', d):
44 # Multilib cross-candian should use the same nativesdk sysroot without MLPREFIX 54 # Multilib cross-candian should use the same nativesdk sysroot without MLPREFIX
45 e.data.setVar("RECIPE_SYSROOT", "${WORKDIR}/recipe-sysroot") 55 d.setVar("RECIPE_SYSROOT", "${WORKDIR}/recipe-sysroot")
46 e.data.setVar("STAGING_DIR_TARGET", "${WORKDIR}/recipe-sysroot") 56 d.setVar("STAGING_DIR_TARGET", "${WORKDIR}/recipe-sysroot")
47 e.data.setVar("STAGING_DIR_HOST", "${WORKDIR}/recipe-sysroot") 57 d.setVar("STAGING_DIR_HOST", "${WORKDIR}/recipe-sysroot")
48 e.data.setVar("MLPREFIX", variant + "-") 58 d.setVar("RECIPE_SYSROOT_MANIFEST_SUBDIR", "nativesdk-" + variant)
59 d.setVar("MLPREFIX", variant + "-")
49 override = ":virtclass-multilib-" + variant 60 override = ":virtclass-multilib-" + variant
50 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) 61 d.setVar("OVERRIDES", d.getVar("OVERRIDES", False) + override)
51 return 62 return
52 63
53 if bb.data.inherits_class('native', e.data): 64 if bb.data.inherits_class('native', d):
54 raise bb.parse.SkipRecipe("We can't extend native recipes") 65 raise bb.parse.SkipRecipe("We can't extend native recipes")
55 66
56 if bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data): 67 if bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d):
57 raise bb.parse.SkipRecipe("We can't extend nativesdk recipes") 68 raise bb.parse.SkipRecipe("We can't extend nativesdk recipes")
58 69
59 if bb.data.inherits_class('allarch', e.data) and not d.getVar('MULTILIB_VARIANTS') \ 70 if (bb.data.inherits_class('allarch', d)
60 and not bb.data.inherits_class('packagegroup', e.data): 71 and not d.getVar('MULTILIB_VARIANTS')
72 and not bb.data.inherits_class('packagegroup', d)):
61 raise bb.parse.SkipRecipe("Don't extend allarch recipes which are not packagegroups") 73 raise bb.parse.SkipRecipe("Don't extend allarch recipes which are not packagegroups")
62 74
63 # Expand this since this won't work correctly once we set a multilib into place 75 # Expand this since this won't work correctly once we set a multilib into place
64 e.data.setVar("ALL_MULTILIB_PACKAGE_ARCHS", e.data.getVar("ALL_MULTILIB_PACKAGE_ARCHS")) 76 d.setVar("ALL_MULTILIB_PACKAGE_ARCHS", d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"))
65 77
66 override = ":virtclass-multilib-" + variant 78 override = ":virtclass-multilib-" + variant
67 79
68 blacklist = e.data.getVarFlag('PNBLACKLIST', e.data.getVar('PN')) 80 skip_msg = d.getVarFlag('SKIP_RECIPE', d.getVar('PN'))
69 if blacklist: 81 if skip_msg:
70 pn_new = variant + "-" + e.data.getVar('PN') 82 pn_new = variant + "-" + d.getVar('PN')
71 if not e.data.getVarFlag('PNBLACKLIST', pn_new): 83 if not d.getVarFlag('SKIP_RECIPE', pn_new):
72 e.data.setVarFlag('PNBLACKLIST', pn_new, blacklist) 84 d.setVarFlag('SKIP_RECIPE', pn_new, skip_msg)
73 85
74 e.data.setVar("MLPREFIX", variant + "-") 86 d.setVar("MLPREFIX", variant + "-")
75 e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) 87 d.setVar("PN", variant + "-" + d.getVar("PN", False))
76 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) 88 d.setVar("OVERRIDES", d.getVar("OVERRIDES", False) + override)
77 89
78 # Expand WHITELIST_GPL-3.0 with multilib prefix 90 # Expand INCOMPATIBLE_LICENSE_EXCEPTIONS with multilib prefix
79 pkgs = e.data.getVar("WHITELIST_GPL-3.0") 91 pkgs = d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS")
80 for pkg in pkgs.split(): 92 if pkgs:
81 pkgs += " " + variant + "-" + pkg 93 for pkg in pkgs.split():
82 e.data.setVar("WHITELIST_GPL-3.0", pkgs) 94 pkgs += " " + variant + "-" + pkg
95 d.setVar("INCOMPATIBLE_LICENSE_EXCEPTIONS", pkgs)
83 96
84 # DEFAULTTUNE can change TARGET_ARCH override so expand this now before update_data 97 # DEFAULTTUNE can change TARGET_ARCH override so expand this now before update_data
85 newtune = e.data.getVar("DEFAULTTUNE_" + "virtclass-multilib-" + variant, False) 98 newtune = d.getVar("DEFAULTTUNE:" + "virtclass-multilib-" + variant, False)
86 if newtune: 99 if newtune:
87 e.data.setVar("DEFAULTTUNE", newtune) 100 d.setVar("DEFAULTTUNE", newtune)
88} 101}
89 102
90addhandler multilib_virtclass_handler 103addhandler multilib_virtclass_handler
@@ -92,6 +105,10 @@ multilib_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
92 105
93python __anonymous () { 106python __anonymous () {
94 if bb.data.inherits_class('image', d): 107 if bb.data.inherits_class('image', d):
108 # set rpm preferred file color for 32-bit multilib image
109 if d.getVar("SITEINFO_BITS") == "32":
110 d.setVar("RPM_PREFER_ELF_ARCH", "1")
111
95 variant = d.getVar("BBEXTENDVARIANT") 112 variant = d.getVar("BBEXTENDVARIANT")
96 import oe.classextend 113 import oe.classextend
97 114
@@ -105,7 +122,6 @@ python __anonymous () {
105 d.setVar("LINGUAS_INSTALL", "") 122 d.setVar("LINGUAS_INSTALL", "")
106 # FIXME, we need to map this to something, not delete it! 123 # FIXME, we need to map this to something, not delete it!
107 d.setVar("PACKAGE_INSTALL_ATTEMPTONLY", "") 124 d.setVar("PACKAGE_INSTALL_ATTEMPTONLY", "")
108 bb.build.deltask('do_populate_sdk', d)
109 bb.build.deltask('do_populate_sdk_ext', d) 125 bb.build.deltask('do_populate_sdk_ext', d)
110 return 126 return
111} 127}
@@ -126,6 +142,7 @@ python multilib_virtclass_handler_postkeyexp () {
126 return 142 return
127 143
128 clsextend.map_depends_variable("DEPENDS") 144 clsextend.map_depends_variable("DEPENDS")
145 clsextend.map_depends_variable("PACKAGE_WRITE_DEPS")
129 clsextend.map_variable("PROVIDES") 146 clsextend.map_variable("PROVIDES")
130 147
131 if bb.data.inherits_class('cross-canadian', d): 148 if bb.data.inherits_class('cross-canadian', d):
@@ -177,7 +194,7 @@ def reset_alternative_priority(d):
177 bb.debug(1, '%s: Setting ALTERNATIVE_PRIORITY_%s to %s' % (pkg, pkg, reset_priority)) 194 bb.debug(1, '%s: Setting ALTERNATIVE_PRIORITY_%s to %s' % (pkg, pkg, reset_priority))
178 d.setVar('ALTERNATIVE_PRIORITY_%s' % pkg, reset_priority) 195 d.setVar('ALTERNATIVE_PRIORITY_%s' % pkg, reset_priority)
179 196
180 for alt_name in (d.getVar('ALTERNATIVE_%s' % pkg) or "").split(): 197 for alt_name in (d.getVar('ALTERNATIVE:%s' % pkg) or "").split():
181 # ALTERNATIVE_PRIORITY_pkg[tool] = priority 198 # ALTERNATIVE_PRIORITY_pkg[tool] = priority
182 alt_priority_pkg_name = d.getVarFlag('ALTERNATIVE_PRIORITY_%s' % pkg, alt_name) 199 alt_priority_pkg_name = d.getVarFlag('ALTERNATIVE_PRIORITY_%s' % pkg, alt_name)
183 # ALTERNATIVE_PRIORITY[tool] = priority 200 # ALTERNATIVE_PRIORITY[tool] = priority
@@ -192,12 +209,12 @@ def reset_alternative_priority(d):
192 bb.debug(1, '%s: Setting ALTERNATIVE_PRIORITY[%s] to %s' % (pkg, alt_name, reset_priority)) 209 bb.debug(1, '%s: Setting ALTERNATIVE_PRIORITY[%s] to %s' % (pkg, alt_name, reset_priority))
193 d.setVarFlag('ALTERNATIVE_PRIORITY', alt_name, reset_priority) 210 d.setVarFlag('ALTERNATIVE_PRIORITY', alt_name, reset_priority)
194 211
195PACKAGEFUNCS_append = " do_package_qa_multilib" 212PACKAGEFUNCS:append = " do_package_qa_multilib"
196 213
197python do_package_qa_multilib() { 214python do_package_qa_multilib() {
198 215
199 def check_mlprefix(pkg, var, mlprefix): 216 def check_mlprefix(pkg, var, mlprefix):
200 values = bb.utils.explode_deps(d.getVar('%s_%s' % (var, pkg)) or d.getVar(var) or "") 217 values = bb.utils.explode_deps(d.getVar('%s:%s' % (var, pkg)) or d.getVar(var) or "")
201 candidates = [] 218 candidates = []
202 for i in values: 219 for i in values:
203 if i.startswith('virtual/'): 220 if i.startswith('virtual/'):
@@ -211,7 +228,7 @@ python do_package_qa_multilib() {
211 if len(candidates) > 0: 228 if len(candidates) > 0:
212 msg = "%s package %s - suspicious values '%s' in %s" \ 229 msg = "%s package %s - suspicious values '%s' in %s" \
213 % (d.getVar('PN'), pkg, ' '.join(candidates), var) 230 % (d.getVar('PN'), pkg, ' '.join(candidates), var)
214 package_qa_handle_error("multilib", msg, d) 231 oe.qa.handle_error("multilib", msg, d)
215 232
216 ml = d.getVar('MLPREFIX') 233 ml = d.getVar('MLPREFIX')
217 if not ml: 234 if not ml:
@@ -229,4 +246,5 @@ python do_package_qa_multilib() {
229 check_mlprefix(pkg, 'RSUGGESTS', ml) 246 check_mlprefix(pkg, 'RSUGGESTS', ml)
230 check_mlprefix(pkg, 'RREPLACES', ml) 247 check_mlprefix(pkg, 'RREPLACES', ml)
231 check_mlprefix(pkg, 'RCONFLICTS', ml) 248 check_mlprefix(pkg, 'RCONFLICTS', ml)
249 oe.qa.exit_if_errors(d)
232} 250}