summaryrefslogtreecommitdiff
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:32 +0100
commit29202cd1b9d2e5d56e5b9f7a596e44e229c90492 (patch)
treeb5931519d15a489256a14b869b40660a85c5645e
parent5aea553e6eaa3b9647f26944976d2a9da79cba42 (diff)
downloadopenembedded-core-29202cd1b9d2e5d56e5b9f7a596e44e229c90492.tar.gz
openembedded-core-29202cd1b9d2e5d56e5b9f7a596e44e229c90492.tar.bz2
openembedded-core-29202cd1b9d2e5d56e5b9f7a596e44e229c90492.zip
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. 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 @@
# gcc/config/mips/linux64.h
# gcc/config/rs6000/linux64.h
+MULTILIB_OPTION_WHITELIST ??= "-m32 -m64 -mx32 -mabi=n32 -mabi=32 -mabi=64"
+
python gcc_multilib_setup() {
import re
import shutil
@@ -187,30 +189,19 @@ python gcc_multilib_setup() {
bb.error('Unknown libdir (%s) of the tune : %s' % (tune_baselib, tune))
# take out '-' mcpu='s and march='s from parameters
- options.append(re.sub(r'mcpu=[^ ]+ *', '',
- re.sub(r'march=[^ ]+ *', '',
- re.sub(r' +\-+', ' ',
- re.sub(r'^ *\-+', '', tune_parameters['ccargs'])))))
+ opts = []
+ whitelist = (d.getVar("MULTILIB_OPTION_WHITELIST", True) or "").split()
+ for i in tune_parameters['ccargs'].split():
+ if i in whitelist:
+ opts.append(i)
+ options.append(" ".join(opts))
+
if tune_baselib == 'lib':
dirnames.append('32') # /lib => 32bit lib
else:
dirnames.append(tune_baselib.replace('lib', ''))
osdirnames.append('../' + tune_baselib)
- if len(options) > 1:
- for optstr in options:
- optsets.append(optstr.split())
-
- #get common options present in all the tune parameters
- common_opt_set = set.intersection(*map(set, optsets))
-
- #common options will be added at the end of the options string only once
- if (len(common_opt_set) > 0):
- rex = re.compile(''.join(['\\b(', '|'.join(common_opt_set), ')\\W']), re.I)
- options = [rex.sub("", optstr) for optstr in options]
- options = [optstr.strip() for optstr in options]
- options[len(options)-1] = ' '.join((options[len(options)-1], ' '.join(common_opt_set)))
-
write_config(builddir, target_config_files, options, dirnames, osdirnames)
write_headers(builddir, header_config_files, libdir32, libdir64, libdirx32, libdirn32)
}