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.bbclass122
1 files changed, 63 insertions, 59 deletions
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index b6c09969b1..15056dac4d 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -5,30 +5,31 @@
5# 5#
6 6
7python multilib_virtclass_handler () { 7python multilib_virtclass_handler () {
8 cls = e.data.getVar("BBEXTENDCURR") 8 cls = d.getVar("BBEXTENDCURR")
9 variant = e.data.getVar("BBEXTENDVARIANT") 9 variant = d.getVar("BBEXTENDVARIANT")
10 if cls != "multilib" or not variant: 10 if cls != "multilib" or not variant:
11 return 11 return
12 12
13 localdata = bb.data.createCopy(e.data) 13 localdata = bb.data.createCopy(d)
14 localdata.delVar('TMPDIR') 14 localdata.delVar('TMPDIR')
15 e.data.setVar('STAGING_KERNEL_DIR', localdata.getVar('STAGING_KERNEL_DIR')) 15 d.setVar('STAGING_KERNEL_DIR', localdata.getVar('STAGING_KERNEL_DIR'))
16 16
17 # There should only be one kernel in multilib configs 17 # There should only be one kernel in multilib configs
18 # We also skip multilib setup for module packages. 18 # We also skip multilib setup for module packages.
19 provides = (e.data.getVar("PROVIDES") or "").split() 19 provides = (d.getVar("PROVIDES") or "").split()
20 non_ml_recipes = d.getVar('NON_MULTILIB_RECIPES').split() 20 non_ml_recipes = d.getVar('NON_MULTILIB_RECIPES').split()
21 bpn = e.data.getVar("BPN") 21 bpn = d.getVar("BPN")
22 if "virtual/kernel" in provides or \ 22 if ("virtual/kernel" in provides
23 bb.data.inherits_class('module-base', e.data) or \ 23 or bb.data.inherits_class('module-base', d)
24 bpn in non_ml_recipes: 24 or bb.data.inherits_class('kernel-fit-image', d)
25 or bpn in non_ml_recipes):
25 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)
26 27
27 save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME") or "" 28 save_var_name = d.getVar("MULTILIB_SAVE_VARNAME") or ""
28 for name in save_var_name.split(): 29 for name in save_var_name.split():
29 val=e.data.getVar(name) 30 val = d.getVar(name)
30 if val: 31 if val:
31 e.data.setVar(name + "_MULTILIB_ORIGINAL", val) 32 d.setVar(name + "_MULTILIB_ORIGINAL", val)
32 33
33 # We nearly don't need this but dependencies on NON_MULTILIB_RECIPES don't work without it 34 # We nearly don't need this but dependencies on NON_MULTILIB_RECIPES don't work without it
34 d.setVar("SSTATE_ARCHS_TUNEPKG", "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}") 35 d.setVar("SSTATE_ARCHS_TUNEPKG", "${@all_multilib_tune_values(d, 'TUNE_PKGARCH')}")
@@ -36,66 +37,67 @@ python multilib_virtclass_handler () {
36 overrides = e.data.getVar("OVERRIDES", False) 37 overrides = e.data.getVar("OVERRIDES", False)
37 pn = e.data.getVar("PN", False) 38 pn = e.data.getVar("PN", False)
38 overrides = overrides.replace("pn-${PN}", "pn-${PN}:pn-" + pn) 39 overrides = overrides.replace("pn-${PN}", "pn-${PN}:pn-" + pn)
39 e.data.setVar("OVERRIDES", overrides) 40 d.setVar("OVERRIDES", overrides)
40 41
41 if bb.data.inherits_class('image', e.data): 42 if bb.data.inherits_class('image', d):
42 e.data.setVar("MLPREFIX", variant + "-") 43 d.setVar("MLPREFIX", variant + "-")
43 e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) 44 d.setVar("PN", variant + "-" + d.getVar("PN", False))
44 e.data.setVar('SDKTARGETSYSROOT', e.data.getVar('SDKTARGETSYSROOT')) 45 d.setVar('SDKTARGETSYSROOT', d.getVar('SDKTARGETSYSROOT'))
45 override = ":virtclass-multilib-" + variant 46 override = ":virtclass-multilib-" + variant
46 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) 47 d.setVar("OVERRIDES", d.getVar("OVERRIDES", False) + override)
47 target_vendor = e.data.getVar("TARGET_VENDOR:" + "virtclass-multilib-" + variant, False) 48 target_vendor = d.getVar("TARGET_VENDOR:" + "virtclass-multilib-" + variant, False)
48 if target_vendor: 49 if target_vendor:
49 e.data.setVar("TARGET_VENDOR", target_vendor) 50 d.setVar("TARGET_VENDOR", target_vendor)
50 return 51 return
51 52
52 if bb.data.inherits_class('cross-canadian', e.data): 53 if bb.data.inherits_class('cross-canadian', d):
53 # Multilib cross-candian should use the same nativesdk sysroot without MLPREFIX 54 # Multilib cross-candian should use the same nativesdk sysroot without MLPREFIX
54 e.data.setVar("RECIPE_SYSROOT", "${WORKDIR}/recipe-sysroot") 55 d.setVar("RECIPE_SYSROOT", "${WORKDIR}/recipe-sysroot")
55 e.data.setVar("STAGING_DIR_TARGET", "${WORKDIR}/recipe-sysroot") 56 d.setVar("STAGING_DIR_TARGET", "${WORKDIR}/recipe-sysroot")
56 e.data.setVar("STAGING_DIR_HOST", "${WORKDIR}/recipe-sysroot") 57 d.setVar("STAGING_DIR_HOST", "${WORKDIR}/recipe-sysroot")
57 e.data.setVar("RECIPE_SYSROOT_MANIFEST_SUBDIR", "nativesdk-" + variant) 58 d.setVar("RECIPE_SYSROOT_MANIFEST_SUBDIR", "nativesdk-" + variant)
58 e.data.setVar("MLPREFIX", variant + "-") 59 d.setVar("MLPREFIX", variant + "-")
59 override = ":virtclass-multilib-" + variant 60 override = ":virtclass-multilib-" + variant
60 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) 61 d.setVar("OVERRIDES", d.getVar("OVERRIDES", False) + override)
61 return 62 return
62 63
63 if bb.data.inherits_class('native', e.data): 64 if bb.data.inherits_class('native', d):
64 raise bb.parse.SkipRecipe("We can't extend native recipes") 65 raise bb.parse.SkipRecipe("We can't extend native recipes")
65 66
66 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):
67 raise bb.parse.SkipRecipe("We can't extend nativesdk recipes") 68 raise bb.parse.SkipRecipe("We can't extend nativesdk recipes")
68 69
69 if bb.data.inherits_class('allarch', e.data) and not d.getVar('MULTILIB_VARIANTS') \ 70 if (bb.data.inherits_class('allarch', d)
70 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)):
71 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")
72 74
73 # 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
74 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"))
75 77
76 override = ":virtclass-multilib-" + variant 78 override = ":virtclass-multilib-" + variant
77 79
78 skip_msg = e.data.getVarFlag('SKIP_RECIPE', e.data.getVar('PN')) 80 skip_msg = d.getVarFlag('SKIP_RECIPE', d.getVar('PN'))
79 if skip_msg: 81 if skip_msg:
80 pn_new = variant + "-" + e.data.getVar('PN') 82 pn_new = variant + "-" + d.getVar('PN')
81 if not e.data.getVarFlag('SKIP_RECIPE', pn_new): 83 if not d.getVarFlag('SKIP_RECIPE', pn_new):
82 e.data.setVarFlag('SKIP_RECIPE', pn_new, skip_msg) 84 d.setVarFlag('SKIP_RECIPE', pn_new, skip_msg)
83 85
84 e.data.setVar("MLPREFIX", variant + "-") 86 d.setVar("MLPREFIX", variant + "-")
85 e.data.setVar("PN", variant + "-" + e.data.getVar("PN", False)) 87 d.setVar("PN", variant + "-" + d.getVar("PN", False))
86 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + override) 88 d.setVar("OVERRIDES", d.getVar("OVERRIDES", False) + override)
87 89
88 # Expand INCOMPATIBLE_LICENSE_EXCEPTIONS with multilib prefix 90 # Expand INCOMPATIBLE_LICENSE_EXCEPTIONS with multilib prefix
89 pkgs = e.data.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS") 91 pkgs = d.getVar("INCOMPATIBLE_LICENSE_EXCEPTIONS")
90 if pkgs: 92 if pkgs:
91 for pkg in pkgs.split(): 93 for pkg in pkgs.split():
92 pkgs += " " + variant + "-" + pkg 94 pkgs += " " + variant + "-" + pkg
93 e.data.setVar("INCOMPATIBLE_LICENSE_EXCEPTIONS", pkgs) 95 d.setVar("INCOMPATIBLE_LICENSE_EXCEPTIONS", pkgs)
94 96
95 # 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
96 newtune = e.data.getVar("DEFAULTTUNE:" + "virtclass-multilib-" + variant, False) 98 newtune = d.getVar("DEFAULTTUNE:" + "virtclass-multilib-" + variant, False)
97 if newtune: 99 if newtune:
98 e.data.setVar("DEFAULTTUNE", newtune) 100 d.setVar("DEFAULTTUNE", newtune)
99} 101}
100 102
101addhandler multilib_virtclass_handler 103addhandler multilib_virtclass_handler
@@ -110,11 +112,12 @@ python __anonymous () {
110 variant = d.getVar("BBEXTENDVARIANT") 112 variant = d.getVar("BBEXTENDVARIANT")
111 import oe.classextend 113 import oe.classextend
112 114
113 clsextend = oe.classextend.ClassExtender(variant, d) 115 prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
114 116 clsextend = oe.classextend.ClassExtender(variant, prefixes, d)
115 clsextend.map_depends_variable("PACKAGE_INSTALL") 117 clsextend.set_filter("PACKAGE_INSTALL", deps=False)
116 clsextend.map_depends_variable("LINGUAS_INSTALL") 118 clsextend.set_filter("LINGUAS_INSTALL", deps=False)
117 clsextend.map_depends_variable("RDEPENDS") 119 clsextend.set_filter("ROOTFS_RO_UNNEEDED", deps=False)
120 clsextend.set_filter("RDEPENDS", deps=True)
118 pinstall = d.getVar("LINGUAS_INSTALL") + " " + d.getVar("PACKAGE_INSTALL") 121 pinstall = d.getVar("LINGUAS_INSTALL") + " " + d.getVar("PACKAGE_INSTALL")
119 d.setVar("PACKAGE_INSTALL", pinstall) 122 d.setVar("PACKAGE_INSTALL", pinstall)
120 d.setVar("LINGUAS_INSTALL", "") 123 d.setVar("LINGUAS_INSTALL", "")
@@ -134,27 +137,28 @@ python multilib_virtclass_handler_postkeyexp () {
134 137
135 import oe.classextend 138 import oe.classextend
136 139
137 clsextend = oe.classextend.ClassExtender(variant, d)
138
139 if bb.data.inherits_class('image', d): 140 if bb.data.inherits_class('image', d):
140 return 141 return
141 142
142 clsextend.map_depends_variable("DEPENDS") 143 prefixes = (d.getVar("MULTILIB_VARIANTS") or "").split()
143 clsextend.map_depends_variable("PACKAGE_WRITE_DEPS") 144 clsextend = oe.classextend.ClassExtender(variant, prefixes, d)
144 clsextend.map_variable("PROVIDES") 145
146 clsextend.set_filter("DEPENDS", deps=True)
147 clsextend.set_filter("PACKAGE_WRITE_DEPS", deps=False)
148
149 clsextend.set_filter("PROVIDES", deps=False)
145 150
146 if bb.data.inherits_class('cross-canadian', d): 151 if bb.data.inherits_class('cross-canadian', d):
147 return 152 return
148 153
149 clsextend.rename_packages()
150 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split()) 154 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split())
151 155
152 clsextend.map_packagevars() 156 clsextend.map_packagevars()
153 clsextend.map_regexp_variable("PACKAGES_DYNAMIC") 157
154 clsextend.map_variable("INITSCRIPT_PACKAGES") 158 clsextend.set_filter("INITSCRIPT_PACKAGES", deps=False)
155 clsextend.map_variable("USERADD_PACKAGES") 159 clsextend.set_filter("USERADD_PACKAGES", deps=False)
156 clsextend.map_variable("SYSTEMD_PACKAGES") 160 clsextend.set_filter("SYSTEMD_PACKAGES", deps=False)
157 clsextend.map_variable("UPDATERCPN") 161 clsextend.set_filter("UPDATERCPN", deps=False)
158 162
159 reset_alternative_priority(d) 163 reset_alternative_priority(d)
160} 164}