summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-24 22:10:49 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-25 15:33:58 +0100
commitc6211d82f6323362cecbbdcfc19e4b87829a8bc7 (patch)
treef6343210d1de537dc7410926e794bbf4e407aca7
parent42470aa22d9abdf400771d26ea1fb39bc9c16a0d (diff)
downloadpoky-c6211d82f6323362cecbbdcfc19e4b87829a8bc7.tar.gz
gcc-multilib: Simply/fix MULTILIB_OPTIONS handling
MULTILIB_OPTIONS takes the parameters which trigger a given multilib to be selected. It supports *one* option per multilib, '/' separated. Spaces separate options used to generate additional multilib combinations. Adding in all of CFLAGS to this is therefore clearly a really bad idea but how do we fix things? The best option I've come up with so far is a list of whitelist variables to use to trigger the multilibs. Its populated with the standard multilibs we support, anyone setting up an advanced multilib can populate the variable with the correct trigger parameters. This has the advantage of simplifying the code and allowing us to remove the code filtering blocks since there is no longer option duplication. Testing after this change shows a much improved sdk toolchain functionality. (From OE-Core rev: 29202cd1b9d2e5d56e5b9f7a596e44e229c90492) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/gcc/gcc-multilib-config.inc27
1 files changed, 9 insertions, 18 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-multilib-config.inc b/meta/recipes-devtools/gcc/gcc-multilib-config.inc
index acea6d8436..b8c705a590 100644
--- a/meta/recipes-devtools/gcc/gcc-multilib-config.inc
+++ b/meta/recipes-devtools/gcc/gcc-multilib-config.inc
@@ -14,6 +14,8 @@
14# gcc/config/mips/linux64.h 14# gcc/config/mips/linux64.h
15# gcc/config/rs6000/linux64.h 15# gcc/config/rs6000/linux64.h
16 16
17MULTILIB_OPTION_WHITELIST ??= "-m32 -m64 -mx32 -mabi=n32 -mabi=32 -mabi=64"
18
17python gcc_multilib_setup() { 19python gcc_multilib_setup() {
18 import re 20 import re
19 import shutil 21 import shutil
@@ -187,30 +189,19 @@ python gcc_multilib_setup() {
187 bb.error('Unknown libdir (%s) of the tune : %s' % (tune_baselib, tune)) 189 bb.error('Unknown libdir (%s) of the tune : %s' % (tune_baselib, tune))
188 190
189 # take out '-' mcpu='s and march='s from parameters 191 # take out '-' mcpu='s and march='s from parameters
190 options.append(re.sub(r'mcpu=[^ ]+ *', '', 192 opts = []
191 re.sub(r'march=[^ ]+ *', '', 193 whitelist = (d.getVar("MULTILIB_OPTION_WHITELIST", True) or "").split()
192 re.sub(r' +\-+', ' ', 194 for i in tune_parameters['ccargs'].split():
193 re.sub(r'^ *\-+', '', tune_parameters['ccargs']))))) 195 if i in whitelist:
196 opts.append(i)
197 options.append(" ".join(opts))
198
194 if tune_baselib == 'lib': 199 if tune_baselib == 'lib':
195 dirnames.append('32') # /lib => 32bit lib 200 dirnames.append('32') # /lib => 32bit lib
196 else: 201 else:
197 dirnames.append(tune_baselib.replace('lib', '')) 202 dirnames.append(tune_baselib.replace('lib', ''))
198 osdirnames.append('../' + tune_baselib) 203 osdirnames.append('../' + tune_baselib)
199 204
200 if len(options) > 1:
201 for optstr in options:
202 optsets.append(optstr.split())
203
204 #get common options present in all the tune parameters
205 common_opt_set = set.intersection(*map(set, optsets))
206
207 #common options will be added at the end of the options string only once
208 if (len(common_opt_set) > 0):
209 rex = re.compile(''.join(['\\b(', '|'.join(common_opt_set), ')\\W']), re.I)
210 options = [rex.sub("", optstr) for optstr in options]
211 options = [optstr.strip() for optstr in options]
212 options[len(options)-1] = ' '.join((options[len(options)-1], ' '.join(common_opt_set)))
213
214 write_config(builddir, target_config_files, options, dirnames, osdirnames) 205 write_config(builddir, target_config_files, options, dirnames, osdirnames)
215 write_headers(builddir, header_config_files, libdir32, libdir64, libdirx32, libdirn32) 206 write_headers(builddir, header_config_files, libdir32, libdir64, libdirx32, libdirn32)
216} 207}