summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/sanity.bbclass52
1 files changed, 46 insertions, 6 deletions
diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 1ad663a057..b5fab6a668 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -87,17 +87,54 @@ def raise_sanity_error(msg, d, network_error=False):
87 87
88 %s""" % msg) 88 %s""" % msg)
89 89
90# Check flags associated with a tuning.
91def check_toolchain_tune_args(data, tune, multilib, errs):
92 found_errors = False
93 if check_toolchain_args_present(data, tune, multilib, errs, 'CCARGS'):
94 found_errors = True
95 if check_toolchain_args_present(data, tune, multilib, errs, 'ASARGS'):
96 found_errors = True
97 if check_toolchain_args_present(data, tune, multilib, errs, 'LDARGS'):
98 found_errors = True
99
100 return found_errors
101
102def check_toolchain_args_present(data, tune, multilib, tune_errors, which):
103 args_set = (data.getVar("TUNE_%s" % which, True) or "").split()
104 args_wanted = (data.getVar("TUNEABI_REQUIRED_%s_tune-%s" % (which, tune), True) or "").split()
105 args_missing = []
106
107 # If no args are listed/required, we are done.
108 if not args_wanted:
109 return
110 for arg in args_wanted:
111 if arg not in args_set:
112 args_missing.append(arg)
113
114 found_errors = False
115 if args_missing:
116 found_errors = True
117 tune_errors.append("TUNEABI for %s requires '%s' in TUNE_%s (%s)." %
118 (tune, ' '.join(args_missing), which, ' '.join(args_set)))
119 return found_errors
120
90# Check a single tune for validity. 121# Check a single tune for validity.
91def check_toolchain_tune(data, tune, multilib): 122def check_toolchain_tune(data, tune, multilib):
92 tune_errors = [] 123 tune_errors = []
93 if not tune: 124 if not tune:
94 return "No tuning found for %s multilib." % multilib 125 return "No tuning found for %s multilib." % multilib
126 localdata = bb.data.createCopy(data)
127 if multilib != "default":
128 # Apply the overrides so we can look at the details.
129 overrides = localdata.getVar("OVERRIDES", False) + ":virtclass-multilib-" + multilib
130 localdata.setVar("OVERRIDES", overrides)
131 bb.data.update_data(localdata)
95 bb.debug(2, "Sanity-checking tuning '%s' (%s) features:" % (tune, multilib)) 132 bb.debug(2, "Sanity-checking tuning '%s' (%s) features:" % (tune, multilib))
96 features = (data.getVar("TUNE_FEATURES_tune-%s" % tune, True) or "").split() 133 features = (localdata.getVar("TUNE_FEATURES_tune-%s" % tune, True) or "").split()
97 if not features: 134 if not features:
98 return "Tuning '%s' has no defined features, and cannot be used." % tune 135 return "Tuning '%s' has no defined features, and cannot be used." % tune
99 valid_tunes = data.getVarFlags('TUNEVALID') or {} 136 valid_tunes = localdata.getVarFlags('TUNEVALID') or {}
100 conflicts = data.getVarFlags('TUNECONFLICTS') or {} 137 conflicts = localdata.getVarFlags('TUNECONFLICTS') or {}
101 # [doc] is the documentation for the variable, not a real feature 138 # [doc] is the documentation for the variable, not a real feature
102 if 'doc' in valid_tunes: 139 if 'doc' in valid_tunes:
103 del valid_tunes['doc'] 140 del valid_tunes['doc']
@@ -113,15 +150,18 @@ def check_toolchain_tune(data, tune, multilib):
113 bb.debug(2, " %s: %s" % (feature, valid_tunes[feature])) 150 bb.debug(2, " %s: %s" % (feature, valid_tunes[feature]))
114 else: 151 else:
115 tune_errors.append("Feature '%s' is not defined." % feature) 152 tune_errors.append("Feature '%s' is not defined." % feature)
116 whitelist = data.getVar("TUNEABI_WHITELIST", True) or '' 153 whitelist = localdata.getVar("TUNEABI_WHITELIST", True) or ''
117 override = data.getVar("TUNEABI_OVERRIDE", True) or '' 154 override = localdata.getVar("TUNEABI_OVERRIDE", True) or ''
118 if whitelist: 155 if whitelist:
119 tuneabi = data.getVar("TUNEABI_tune-%s" % tune, True) or '' 156 tuneabi = localdata.getVar("TUNEABI_tune-%s" % tune, True) or ''
120 if not tuneabi: 157 if not tuneabi:
121 tuneabi = tune 158 tuneabi = tune
122 if True not in [x in whitelist.split() for x in tuneabi.split()]: 159 if True not in [x in whitelist.split() for x in tuneabi.split()]:
123 tune_errors.append("Tuning '%s' (%s) cannot be used with any supported tuning/ABI." % 160 tune_errors.append("Tuning '%s' (%s) cannot be used with any supported tuning/ABI." %
124 (tune, tuneabi)) 161 (tune, tuneabi))
162 else:
163 if not check_toolchain_tune_args(localdata, tuneabi, multilib, tune_errors):
164 bb.debug(2, "Sanity check: Compiler args OK for %s." % tune)
125 if tune_errors: 165 if tune_errors:
126 return "Tuning '%s' has the following errors:\n" % tune + '\n'.join(tune_errors) 166 return "Tuning '%s' has the following errors:\n" % tune + '\n'.join(tune_errors)
127 167