* [PATCH v2 0/6] On-target multilib gcc enhacement
@ 2013-01-14 15:16 Constantin Musca
2013-01-14 15:16 ` [PATCH v2 1/6] gcc: add missing dependency (zlib) Constantin Musca
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw)
To: openembedded-core
This patchset enables the user to build gcc with configurable multilib options.
The following changes since commit 53cc748b93e8af584557d6db5309c3e955182c5c:
linux-libc-headers: fix headers install in long path name environments (2013-01-10 23:53:51 +0000)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib cmuscax/gcc_enhan3
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=cmuscax/gcc_enhan3
Constantin Musca (6):
gcc: add missing dependency (zlib)
gcc: remove the 64bithack patch
multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME
gcc: enable multilib for target gcc
tune-mips32: add BASE_LIB to mips32 tunes
tune-ppc603e: add BASE_LIB
meta/conf/machine/include/tune-mips32.inc | 4 +
meta/conf/machine/include/tune-ppc603e.inc | 1 +
meta/conf/multilib.conf | 2 +-
meta/recipes-devtools/gcc/gcc-4.7.inc | 5 +-
meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch | 63 -------
meta/recipes-devtools/gcc/gcc-common.inc | 25 +++
meta/recipes-devtools/gcc/gcc-configure-common.inc | 3 +-
meta/recipes-devtools/gcc/gcc-configure-target.inc | 1 +
meta/recipes-devtools/gcc/gcc-multilib-config.inc | 200 +++++++++++++++++++++
meta/recipes-devtools/gcc/libgcc_4.7.bb | 44 +++++
10 files changed, 280 insertions(+), 68 deletions(-)
delete mode 100644 meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch
create mode 100644 meta/recipes-devtools/gcc/gcc-multilib-config.inc
--
1.7.11.7
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v2 1/6] gcc: add missing dependency (zlib) 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca @ 2013-01-14 15:16 ` Constantin Musca 2013-01-14 15:16 ` [PATCH v2 2/6] gcc: remove the 64bithack patch Constantin Musca ` (5 subsequent siblings) 6 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw) To: openembedded-core - add zlib to DEPENDS (it fails otherwise) Signed-off-by: Constantin Musca <constantinx.musca@intel.com> --- meta/recipes-devtools/gcc/gcc-4.7.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta/recipes-devtools/gcc/gcc-4.7.inc b/meta/recipes-devtools/gcc/gcc-4.7.inc index 378caf0..08a0103 100644 --- a/meta/recipes-devtools/gcc/gcc-4.7.inc +++ b/meta/recipes-devtools/gcc/gcc-4.7.inc @@ -1,6 +1,6 @@ require gcc-common.inc -PR = "r13" +PR = "r14" # Third digit in PV should be incremented after a minor release # happens from this branch on gcc e.g. currently its 4.7.1 @@ -20,7 +20,7 @@ BINV = "4.7.2" FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/gcc-4.7' ], d)}" -DEPENDS =+ "mpfr gmp libmpc" +DEPENDS =+ "mpfr gmp libmpc zlib" NATIVEDEPS = "mpfr-native gmp-native libmpc-native zlib-native" LICENSE="GPL-3.0-with-GCC-exception & GPLv3" -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/6] gcc: remove the 64bithack patch 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca 2013-01-14 15:16 ` [PATCH v2 1/6] gcc: add missing dependency (zlib) Constantin Musca @ 2013-01-14 15:16 ` Constantin Musca 2013-01-14 15:16 ` [PATCH v2 3/6] multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME Constantin Musca ` (4 subsequent siblings) 6 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw) To: openembedded-core Signed-off-by: Constantin Musca <constantinx.musca@intel.com> --- meta/recipes-devtools/gcc/gcc-4.7.inc | 1 - meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch | 63 ----------------------- 2 files changed, 64 deletions(-) delete mode 100644 meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch diff --git a/meta/recipes-devtools/gcc/gcc-4.7.inc b/meta/recipes-devtools/gcc/gcc-4.7.inc index 08a0103..2fad764 100644 --- a/meta/recipes-devtools/gcc/gcc-4.7.inc +++ b/meta/recipes-devtools/gcc/gcc-4.7.inc @@ -50,7 +50,6 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://gcc-poison-system-directories.patch \ file://gcc-poison-dir-extend.patch \ file://gcc-4.3.3-SYSROOT_CFLAGS_FOR_TARGET.patch \ - file://64bithack.patch \ file://optional_libstdc.patch \ file://disable_relax_pic_calls_flag.patch \ file://COLLECT_GCC_OPTIONS.patch \ diff --git a/meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch b/meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch deleted file mode 100644 index f475669..0000000 --- a/meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch +++ /dev/null @@ -1,63 +0,0 @@ -Upstream-Status: Inappropriate [embedded specific] - -GCC has internal multilib handling code but it assumes a very specific rigid directory -layout. The build system implementation of multilib layout is very generic and allows -complete customisation of the library directories. - -This patch is a partial solution to allow any custom directories to be passed into gcc -and handled correctly. It forces gcc to use the base_libdir (which is the current -directory, "."). We need to do this for each multilib that is configured as we don't -know which compiler options may be being passed into the compiler. Since we have a compiler -per mulitlib at this point that isn't an issue. - -The one problem is the target compiler is only going to work for the default multlilib at -this point. Ideally we'd figure out which multilibs were being enabled with which paths -and be able to patch these entries with a complete set of correct paths but this we -don't have such code at this point. This is something the target gcc recipe should do -and override these platform defaults in its build config. - -RP 15/8/11 - -Index: trunk/gcc/config/i386/t-linux64 -=================================================================== ---- trunk.orig/gcc/config/i386/t-linux64 2012-02-22 09:44:48.000000000 -0800 -+++ trunk/gcc/config/i386/t-linux64 2012-02-22 12:31:01.836462957 -0800 -@@ -33,7 +33,6 @@ - # - comma=, - MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG)) --MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS))) --MULTILIB_OSDIRNAMES = m64=../lib64 --MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) --MULTILIB_OSDIRNAMES+= mx32=../libx32 -+MULTILIB_DIRNAMES = . . -+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) -+ -Index: trunk/gcc/config/mips/t-linux64 -=================================================================== ---- trunk.orig/gcc/config/mips/t-linux64 2012-02-22 09:44:58.000000000 -0800 -+++ trunk/gcc/config/mips/t-linux64 2012-02-22 12:32:01.132465823 -0800 -@@ -17,5 +17,5 @@ - # <http://www.gnu.org/licenses/>. - - MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64 --MULTILIB_DIRNAMES = n32 32 64 --MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64 -+MULTILIB_DIRNAMES = . . . -+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) -Index: trunk/gcc/config/rs6000/t-linux64 -=================================================================== ---- trunk.orig/gcc/config/rs6000/t-linux64 2012-02-22 09:44:54.000000000 -0800 -+++ trunk/gcc/config/rs6000/t-linux64 2012-02-22 12:28:17.960454968 -0800 -@@ -27,9 +27,9 @@ - # MULTILIB_OSDIRNAMES according to what is found on the target. - - MULTILIB_OPTIONS = m64/m32 msoft-float --MULTILIB_DIRNAMES = 64 32 nof -+MULTILIB_DIRNAMES = . . . - MULTILIB_EXTRA_OPTS = fPIC mstrict-align - MULTILIB_EXCEPTIONS = m64/msoft-float - MULTILIB_EXCLUSIONS = m64/!m32/msoft-float --MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof -+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) - MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 3/6] multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca 2013-01-14 15:16 ` [PATCH v2 1/6] gcc: add missing dependency (zlib) Constantin Musca 2013-01-14 15:16 ` [PATCH v2 2/6] gcc: remove the 64bithack patch Constantin Musca @ 2013-01-14 15:16 ` Constantin Musca 2013-01-14 15:16 ` [PATCH v2 4/6] gcc: enable multilib for target gcc Constantin Musca ` (3 subsequent siblings) 6 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw) To: openembedded-core Signed-off-by: Constantin Musca <constantinx.musca@intel.com> --- meta/conf/multilib.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/conf/multilib.conf b/meta/conf/multilib.conf index 97b53ec..daa569c 100644 --- a/meta/conf/multilib.conf +++ b/meta/conf/multilib.conf @@ -2,7 +2,7 @@ baselib = "${@d.getVar('BASE_LIB_tune-' + (d.getVar('DEFAULTTUNE', True) or 'INVALID'), True) or 'lib'}" MULTILIB_VARIANTS = "${@extend_variants(d,'MULTILIBS','multilib')}" -MULTILIB_SAVE_VARNAME = "DEFAULTTUNE" +MULTILIB_SAVE_VARNAME = "DEFAULTTUNE TARGET_ARCH" MULTILIBS ??= "multilib:lib32" -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/6] gcc: enable multilib for target gcc 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca ` (2 preceding siblings ...) 2013-01-14 15:16 ` [PATCH v2 3/6] multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME Constantin Musca @ 2013-01-14 15:16 ` Constantin Musca 2013-01-14 15:16 ` [PATCH v2 5/6] tune-mips32: add BASE_LIB to mips32 tunes Constantin Musca ` (2 subsequent siblings) 6 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw) To: openembedded-core - add a task to setup multilib configuration for target gcc - this commit adapts Nitin Kamble's work to gcc 4.7 - gcc_multilib_setup creates the same patch for all gcc variants - use a hash for storing the multilib default options - use a hash for storing arch-dependent multilib options Tests: root@qemux86-64:~# gcc -m64 t.c -o t root@qemux86-64:~# file t t: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped root@qemux86-64:~# ./t Hello World ! root@qemux86-64:~# gcc -m32 t.c -o t root@qemux86-64:~# file t t: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped root@qemux86-64:~# ./t Hello World ! [YOCTO #1369] Signed-off-by: Constantin Musca <constantinx.musca@intel.com> --- meta/recipes-devtools/gcc/gcc-4.7.inc | 2 +- meta/recipes-devtools/gcc/gcc-common.inc | 25 +++ meta/recipes-devtools/gcc/gcc-configure-common.inc | 3 +- meta/recipes-devtools/gcc/gcc-configure-target.inc | 1 + meta/recipes-devtools/gcc/gcc-multilib-config.inc | 200 +++++++++++++++++++++ meta/recipes-devtools/gcc/libgcc_4.7.bb | 44 +++++ 6 files changed, 273 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-devtools/gcc/gcc-multilib-config.inc diff --git a/meta/recipes-devtools/gcc/gcc-4.7.inc b/meta/recipes-devtools/gcc/gcc-4.7.inc index 2fad764..13a1e7e 100644 --- a/meta/recipes-devtools/gcc/gcc-4.7.inc +++ b/meta/recipes-devtools/gcc/gcc-4.7.inc @@ -1,6 +1,6 @@ require gcc-common.inc -PR = "r14" +PR = "r15" # Third digit in PV should be incremented after a minor release # happens from this branch on gcc e.g. currently its 4.7.1 diff --git a/meta/recipes-devtools/gcc/gcc-common.inc b/meta/recipes-devtools/gcc/gcc-common.inc index 6e64441..8c8168f 100644 --- a/meta/recipes-devtools/gcc/gcc-common.inc +++ b/meta/recipes-devtools/gcc/gcc-common.inc @@ -34,6 +34,29 @@ def get_gcc_multiarch_setting(bb, d): return multiarch_options[target_arch] return "" +# this is used by the multilib setup of gcc +def get_tune_parameters(tune, d): + availtunes = d.getVar('AVAILTUNES', True) + if tune not in availtunes.split(): + bb.error('The tune: %s is not one of the available tunes: %s', tune, availtunes) + + localdata = bb.data.createCopy(d) + override = ':tune-' + tune + localdata.setVar('OVERRIDES', localdata.getVar('OVERRIDES', False) + override) + bb.data.update_data(localdata) + + retdict = {} + retdict['tune'] = tune + retdict['ccargs'] = localdata.getVar('TUNE_CCARGS', True) + retdict['features'] = localdata.getVar('TUNE_FEATURES', True) + retdict['baselib'] = localdata.getVar('BASE_LIB', True) + retdict['arch'] = localdata.getVar('TUNE_ARCH', True) + retdict['abiextension'] = localdata.getVar('ABIEXTENSION', True) + retdict['target_fpu'] = localdata.getVar('TARGET_FPU', True) + retdict['pkgarch'] = localdata.getVar('TUNE_PKGARCH', True) + retdict['package_extra_archs'] = localdata.getVar('PACKAGE_EXTRA_ARCHS', True) + return retdict + # We really need HOST_SYS here for some packages and TARGET_SYS for others. # For now, libgcc is most important so we fix for that - RP. SHLIBSDIR = "${STAGING_DIR_TARGET}/shlibs" @@ -62,10 +85,12 @@ SS = "${TMPDIR}/stamps/work-shared/gcc-${PV}-${PR}" do_fetch[stamp-base] = "${SS}" do_unpack[stamp-base] = "${SS}" do_patch[stamp-base] = "${SS}" +do_gcc_multilib_setup[stamp-base] = "${SS}" SSCLEAN = "${TMPDIR}/stamps/work-shared/gcc-[0-9]*-*" do_fetch[stamp-base-clean] = "${SSCLEAN}" do_unpack[stamp-base-clean] = "${SSCLEAN}" do_patch[stamp-base-clean] = "${SSCLEAN}" +do_gcc_multilib_setup[stamp-base-clean] = "${SSCLEAN}" # SW means Shared Work directory SW = "${TMPDIR}/work-shared/gcc-${PV}-${PR}" diff --git a/meta/recipes-devtools/gcc/gcc-configure-common.inc b/meta/recipes-devtools/gcc/gcc-configure-common.inc index 4eb59fd..b87ea62 100644 --- a/meta/recipes-devtools/gcc/gcc-configure-common.inc +++ b/meta/recipes-devtools/gcc/gcc-configure-common.inc @@ -1,3 +1,4 @@ +require gcc-multilib-config.inc # # Build the list of lanaguages to build. # @@ -25,7 +26,7 @@ EXTRA_OECONF_PATHS ?= "" EXTRA_OECONF_INITIAL ?= "" EXTRA_OECONF_INTERMEDIATE ?= "" -GCCMULTILIB = "--disable-multilib" +GCCMULTILIB ?= "--disable-multilib" GCCTHREADS ?= "posix" EXTRA_OECONF = "${@['--enable-clocale=generic', ''][d.getVar('USE_NLS', True) != 'no']} \ diff --git a/meta/recipes-devtools/gcc/gcc-configure-target.inc b/meta/recipes-devtools/gcc/gcc-configure-target.inc index f41301f..6cc374b 100644 --- a/meta/recipes-devtools/gcc/gcc-configure-target.inc +++ b/meta/recipes-devtools/gcc/gcc-configure-target.inc @@ -1,3 +1,4 @@ +GCCMULTILIB = "--enable-multilib" require gcc-configure-common.inc EXTRA_OECONF_PATHS = " \ diff --git a/meta/recipes-devtools/gcc/gcc-multilib-config.inc b/meta/recipes-devtools/gcc/gcc-multilib-config.inc new file mode 100644 index 0000000..3c1e248 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-multilib-config.inc @@ -0,0 +1,200 @@ +addtask gcc_multilib_setup after do_patch before do_configure + +# following code modifies these definitions in the gcc config +# MULTILIB_OPTIONS +# MULTILIB_DIRNAMES +# MULTILIB_OSDIRNAMES +# GLIBC_DYNAMIC_LINKER32 +# GLIBC_DYNAMIC_LINKER64 +# GLIBC_DYNAMIC_LINKERX32 +# GLIBC_DYNAMIC_LINKERN32 +# For more information on use of these variables look at these files in the gcc source code +# gcc/config/i386/t-linux64 +# gcc/config/mips/t-linux64 +# gcc/config/rs6000/t-linux64 +# gcc/config/i386/linux64.h +# gcc/config/mips/linux64.h +# gcc/config/rs6000/linux64.h + +python do_gcc_multilib_setup() { + import re + + srcdir = d.getVar('S', True) + + def write_config(files, options, dirnames, osdirnames): + for ml_conf_file in files: + with open(srcdir + '/' + ml_conf_file, 'r') as f: + filelines = f.read() + # recreate multilib configuration variables + + filelines = re.sub(r'^\s*MULTILIB_OPTIONS\s*=.*$', + 'MULTILIB_OPTIONS = ' + '/'.join(options), + filelines, flags=re.MULTILINE) + filelines = re.sub(r'^\s*MULTILIB_DIRNAMES\s*=.*$', + 'MULTILIB_DIRNAMES = ' + ' '.join(dirnames), + filelines, flags=re.MULTILINE) + filelines = re.sub(r'^\s*MULTILIB_OSDIRNAMES\s*=.*$', + 'MULTILIB_OSDIRNAMES = ' + ' '.join(osdirnames), + filelines, flags=re.MULTILINE) + + filelines = re.sub(r'^\s*MULTILIB_OPTIONS\s*\+=.*$', + '', filelines, flags=re.MULTILINE) + filelines = re.sub(r'^\s*MULTILIB_DIRNAMES\s*\+=.*$', + '', filelines, flags=re.MULTILINE) + filelines = re.sub(r'^\s*MULTILIB_OSDIRNAMES\s*\+=.*$', + '', filelines, flags=re.MULTILINE) + + with open(srcdir + '/' + ml_conf_file, 'w') as f: + f.write(filelines) + + def write_headers(files, libdir32, libdir64, libdirx32, libdirn32): + def wrap_libdir(libdir): + if libdir.find('SYSTEMLIBS_DIR') != -1: + return libdir + else: + return '"/%s/"' % libdir + + for ml_conf_file in files: + with open(srcdir + '/' + ml_conf_file, 'r') as f: + filelines = f.read() + + # replace lines like + # #define GLIBC_DYNAMIC_LINKER32 SYSTEMLIBS_DIR "ld-linux.so.2" + # by + # #define GLIBC_DYNAMIC_LINKER32 "/lib/" "ld-linux.so.2" + # this is needed to put the correct dynamic loader path in the generated binaries + + filelines = re.sub(r'^(#define\s*GLIBC_DYNAMIC_LINKER32\s*)(\S+)(\s*\".*\")$', + r'\1' + wrap_libdir(libdir32) + r'\3', + filelines, flags=re.MULTILINE) + filelines = re.sub(r'^(#define\s*GLIBC_DYNAMIC_LINKER64\s*)(\S+)(\s*\".*\")$', + r'\1' + wrap_libdir(libdir64) + r'\3', + filelines, flags=re.MULTILINE) + filelines = re.sub(r'^(#define\s*GLIBC_DYNAMIC_LINKERX32\s*)(\S+)(\s*\".*\")$', + r'\1' + wrap_libdir(libdirx32) + r'\3', + filelines, flags=re.MULTILINE) + filelines = re.sub(r'^(#define\s*GLIBC_DYNAMIC_LINKERN32\s*)(\S+)(\s*\".*\")$', + r'\1' + wrap_libdir(libdirn32) + r'\3', + filelines, flags=re.MULTILINE) + + with open(srcdir + '/' + ml_conf_file, 'w') as f: + f.write(filelines) + + gcc_target_config_files = { + 'x86_64' : ['gcc/config/i386/t-linux64'], + 'i586' : ['gcc/config/i386/t-linux64'], + 'mips' : ['gcc/config/mips/t-linux64'], + 'powerpc' : ['gcc/config/rs6000/t-linux64'], + } + + gcc_header_config_files = { + 'x86_64' : ['gcc/config/i386/linux64.h'], + 'i586' : ['gcc/config/i386/linux64.h'], + 'mips' : ['gcc/config/mips/linux64.h'], + 'powerpc' : ['gcc/config/rs6000/linux64.h'], + } + + default_ml_config = { + 'gcc/config/i386/t-linux64' : { + 'options' : ['$(subst $(comma),/,$(TM_MULTILIB_CONFIG))'], + 'dirnames' : ['.'] * 2, + 'osdirnames' : ['../$(shell basename $(base_libdir))'] * 2, + }, + 'gcc/config/mips/t-linux64' : { + 'options' : ['mabi=n32', 'mabi=32', 'mabi=64'], + 'dirnames' : ['.'] * 3, + 'osdirnames' : ['../$(shell basename $(base_libdir))'] * 3, + }, + 'gcc/config/rs6000/t-linux64' : { + 'options' : ['m64/m32 msoft-float'], + 'dirnames' : ['.'] * 3, + 'osdirnames' : ['../$(shell basename $(base_libdir))'] * 3, + }, + } + + multilibs = (d.getVar('MULTILIB_VARIANTS', True) or "").split() + default_ml = False if multilibs else True + + mlvariant = False + mlindex = 0 + pn = d.getVar('PN', True) + for ml in multilibs: + if pn.startswith(ml): + mlvariant = True + break + mlindex += 1 + + target_arch = (d.getVar('TARGET_ARCH_MULTILIB_ORIGINAL', True) if mlvariant + else d.getVar('TARGET_ARCH', True)) + + if target_arch not in gcc_target_config_files: + if multilibs: + bb.warn('gcc multilib setup is not supported for TARGET_ARCH=' + target_arch) + default_ml = True + + libdir32 = 'SYSTEMLIBS_DIR' + libdir64 = 'SYSTEMLIBS_DIR' + libdirx32 = 'SYSTEMLIBS_DIR' + libdirn32 = 'SYSTEMLIBS_DIR' + + if default_ml: + for fn in default_ml_config: + write_config([fn], + default_ml_config[fn]['options'], + default_ml_config[fn]['dirnames'], + default_ml_config[fn]['osdirnames']) + + write_headers([item for sublist in gcc_header_config_files.values() + for item in sublist], + libdir32, libdir64, libdirx32, libdirn32) + return + + target_config_files = gcc_target_config_files[target_arch] + header_config_files = gcc_header_config_files[target_arch] + ml_list = ['DEFAULTTUNE_MULTILIB_ORIGINAL' if mlvariant else 'DEFAULTTUNE'] + + mltunes = ['DEFAULTTUNE_virtclass-multilib-%s' % ml for ml in multilibs] + if multilibs: + if mlvariant: + ml_list.extend(mltunes[:mlindex] + ['DEFAULTTUNE'] + mltunes[(mlindex + 1):]) + else: + ml_list.extend(mltunes) + + options = [] + dirnames = [] + osdirnames = [] + + for ml in ml_list: + tune = d.getVar(ml, True) + if not tune: + bb.warn("%s doesn't have a corresponding tune. Skipping..." % ml) + continue + tune_parameters = get_tune_parameters(tune, d) + + tune_baselib = tune_parameters['baselib'] + if not tune_baselib: + bb.warn("Tune %s doesn't have a baselib set. Skipping..." % tune) + continue + + if tune_baselib == 'lib64': + libdir64 = tune_baselib + elif tune_baselib == 'libx32': + libdirx32 = tune_baselib + elif tune_baselib == 'lib32': + libdirn32 = tune_baselib + elif tune_baselib == 'lib': + libdir32 = tune_baselib + else: + bb.error('Unknown libdir (%s) of the tune : %s' % (tune_baselib, tune)) + + # take out '-' in parameters + options.append(re.sub(r' +\-+', ' ', re.sub(r'^ *\-+', '', tune_parameters['ccargs']))) + if tune_baselib == 'lib': + dirnames.append('32') # /lib => 32bit lib + else: + dirnames.append(tune_baselib.replace('lib', '')) + osdirnames.append('../' + tune_baselib) + + write_config(target_config_files, options, dirnames, osdirnames) + write_headers(header_config_files, libdir32, libdir64, libdirx32, libdirn32) +} diff --git a/meta/recipes-devtools/gcc/libgcc_4.7.bb b/meta/recipes-devtools/gcc/libgcc_4.7.bb index 5eaa515..c17c78a 100644 --- a/meta/recipes-devtools/gcc/libgcc_4.7.bb +++ b/meta/recipes-devtools/gcc/libgcc_4.7.bb @@ -15,6 +15,10 @@ FILES_${PN} = "${base_libdir}/libgcc*.so.*" FILES_${PN}-dev = " \ ${base_libdir}/libgcc*.so \ ${libdir}/${TARGET_SYS}/${BINV}/*crt* \ + ${libdir}/${TARGET_SYS}/${BINV}/64 \ + ${libdir}/${TARGET_SYS}/${BINV}/32 \ + ${libdir}/${TARGET_SYS}/${BINV}/x32 \ + ${libdir}/${TARGET_SYS}/${BINV}/n32 \ ${libdir}/${TARGET_SYS}/${BINV}/libgcc*" FILES_libgcov-dev = " \ ${libdir}/${TARGET_SYS}/${BINV}/libgcov.a \ @@ -70,3 +74,43 @@ BBCLASSEXTEND = "nativesdk" INSANE_SKIP_${PN}-dev = "staticdev" INSANE_SKIP_${MLPREFIX}libgcov-dev = "staticdev" + +addtask multilib_install after do_install before do_package +# this makes multilib gcc files findable for target gcc +# e.g. +# /usr/lib/i586-pokymllib32-linux/4.7/ +# by creating this symlink to it +# /usr/lib64/x86_64-poky-linux/4.7/32 + +python do_multilib_install() { + import re + # do this only for multilib extended recipe + if d.getVar('PN', True) != 'libgcc': + return + + multilibs = d.getVar('MULTILIB_VARIANTS', True) or '' + if multilibs == '': + return + + binv = d.getVar('BINV', True) or '' + + for ml in multilibs.split(' '): + tune = d.getVar('DEFAULTTUNE_virtclass-multilib-' + ml, True) or '' + tune_parameters = get_tune_parameters(tune, d) + tune_baselib = tune_parameters['baselib'] + tune_arch = tune_parameters['arch'] + tune_bitness = tune_baselib.replace('lib', '') + if tune_bitness == '' : + tune_bitness = '32' # /lib => 32bit lib + + src = '../../../' + tune_baselib + '/' + \ + tune_arch + d.getVar('TARGET_VENDOR', True) + 'ml' + ml + \ + '-' + d.getVar('TARGET_OS', True) + '/' + binv + '/' + + dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + \ + d.getVar('TARGET_SYS', True) + '/' + binv + '/' + tune_bitness + + if os.path.lexists(dest): + os.unlink(dest) + os.symlink(src, dest) +} -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 5/6] tune-mips32: add BASE_LIB to mips32 tunes 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca ` (3 preceding siblings ...) 2013-01-14 15:16 ` [PATCH v2 4/6] gcc: enable multilib for target gcc Constantin Musca @ 2013-01-14 15:16 ` Constantin Musca 2013-01-14 15:16 ` [PATCH v2 6/6] tune-ppc603e: add BASE_LIB Constantin Musca 2013-01-15 7:40 ` [PATCH v2 0/6] On-target multilib gcc enhacement Saul Wold 6 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw) To: openembedded-core Signed-off-by: Constantin Musca <constantinx.musca@intel.com> --- meta/conf/machine/include/tune-mips32.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meta/conf/machine/include/tune-mips32.inc b/meta/conf/machine/include/tune-mips32.inc index 03cd411..ffbaecf 100644 --- a/meta/conf/machine/include/tune-mips32.inc +++ b/meta/conf/machine/include/tune-mips32.inc @@ -9,17 +9,21 @@ TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "mips32", "-march=mips32", AVAILTUNES += "mips32 mips32el mips32-nf mips32el-nf" TUNE_FEATURES_tune-mips32 = "${TUNE_FEATURES_tune-mips} mips32" +BASE_LIB_tune-mips32 = "lib" MIPSPKGSFX_VARIANT_tune-mips32 = "mips32" PACKAGE_EXTRA_ARCHS_tune-mips32 = "mips mips32" TUNE_FEATURES_tune-mips32el = "${TUNE_FEATURES_tune-mipsel} mips32" +BASE_LIB_tune-mips32el = "lib" MIPSPKGSFX_VARIANT_tune-mips32el = "mips32el" PACKAGE_EXTRA_ARCHS_tune-mips32el = "mipsel mips32el" TUNE_FEATURES_tune-mips32-nf = "${TUNE_FEATURES_tune-mips-nf} mips32" +BASE_LIB_tune-mips32-nf = "lib" MIPSPKGSFX_VARIANT_tune-mips32-nf = "mips32" PACKAGE_EXTRA_ARCHS_tune-mips32-nf = "mips-nf mips32-nf" TUNE_FEATURES_tune-mips32el-nf = "${TUNE_FEATURES_tune-mipsel-nf} mips32" +BASE_LIB_tune-mips32el-nf = "lib" MIPSPKGSFX_VARIANT_tune-mips32el-nf = "mips32el" PACKAGE_EXTRA_ARCHS_tune-mips32el-nf = "mipsel-nf mips32el-nf" -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 6/6] tune-ppc603e: add BASE_LIB 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca ` (4 preceding siblings ...) 2013-01-14 15:16 ` [PATCH v2 5/6] tune-mips32: add BASE_LIB to mips32 tunes Constantin Musca @ 2013-01-14 15:16 ` Constantin Musca 2013-01-15 7:40 ` [PATCH v2 0/6] On-target multilib gcc enhacement Saul Wold 6 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-14 15:16 UTC (permalink / raw) To: openembedded-core Signed-off-by: Constantin Musca <constantinx.musca@intel.com> --- meta/conf/machine/include/tune-ppc603e.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/meta/conf/machine/include/tune-ppc603e.inc b/meta/conf/machine/include/tune-ppc603e.inc index 6557c1d..2cfd342 100644 --- a/meta/conf/machine/include/tune-ppc603e.inc +++ b/meta/conf/machine/include/tune-ppc603e.inc @@ -7,6 +7,7 @@ TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "ppc603e", "-mcpu=603e", " AVAILTUNES += "ppc603e" TUNE_FEATURES_tune-ppc603e = "m32 fpu-hard ppc603e" +BASE_LIB_tune-ppc603e = "lib" TUNE_PKGARCH_tune-ppc603e = "ppc603e" PACKAGE_EXTRA_ARCHS_tune-ppc603e = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppc603e" -- 1.7.11.7 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/6] On-target multilib gcc enhacement 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca ` (5 preceding siblings ...) 2013-01-14 15:16 ` [PATCH v2 6/6] tune-ppc603e: add BASE_LIB Constantin Musca @ 2013-01-15 7:40 ` Saul Wold 2013-01-15 9:13 ` Constantin Musca 6 siblings, 1 reply; 9+ messages in thread From: Saul Wold @ 2013-01-15 7:40 UTC (permalink / raw) To: Constantin Musca; +Cc: openembedded-core On 01/14/2013 07:16 AM, Constantin Musca wrote: > This patchset enables the user to build gcc with configurable multilib options. > The following changes since commit 53cc748b93e8af584557d6db5309c3e955182c5c: > > linux-libc-headers: fix headers install in long path name environments (2013-01-10 23:53:51 +0000) > > are available in the git repository at: > > git://git.pokylinux.org/poky-contrib cmuscax/gcc_enhan3 > http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=cmuscax/gcc_enhan3 > > Constantin Musca (6): > gcc: add missing dependency (zlib) > gcc: remove the 64bithack patch > multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME > gcc: enable multilib for target gcc > tune-mips32: add BASE_LIB to mips32 tunes > tune-ppc603e: add BASE_LIB > This patch set caused a number of failures on the Autobuilder today. please check the AB results. Thanks Sau! > meta/conf/machine/include/tune-mips32.inc | 4 + > meta/conf/machine/include/tune-ppc603e.inc | 1 + > meta/conf/multilib.conf | 2 +- > meta/recipes-devtools/gcc/gcc-4.7.inc | 5 +- > meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch | 63 ------- > meta/recipes-devtools/gcc/gcc-common.inc | 25 +++ > meta/recipes-devtools/gcc/gcc-configure-common.inc | 3 +- > meta/recipes-devtools/gcc/gcc-configure-target.inc | 1 + > meta/recipes-devtools/gcc/gcc-multilib-config.inc | 200 +++++++++++++++++++++ > meta/recipes-devtools/gcc/libgcc_4.7.bb | 44 +++++ > 10 files changed, 280 insertions(+), 68 deletions(-) > delete mode 100644 meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch > create mode 100644 meta/recipes-devtools/gcc/gcc-multilib-config.inc > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/6] On-target multilib gcc enhacement 2013-01-15 7:40 ` [PATCH v2 0/6] On-target multilib gcc enhacement Saul Wold @ 2013-01-15 9:13 ` Constantin Musca 0 siblings, 0 replies; 9+ messages in thread From: Constantin Musca @ 2013-01-15 9:13 UTC (permalink / raw) To: Saul Wold; +Cc: openembedded-core On 01/15/2013 09:40 AM, Saul Wold wrote: > On 01/14/2013 07:16 AM, Constantin Musca wrote: >> This patchset enables the user to build gcc with configurable >> multilib options. >> The following changes since commit >> 53cc748b93e8af584557d6db5309c3e955182c5c: >> >> linux-libc-headers: fix headers install in long path name >> environments (2013-01-10 23:53:51 +0000) >> >> are available in the git repository at: >> >> git://git.pokylinux.org/poky-contrib cmuscax/gcc_enhan3 >> http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=cmuscax/gcc_enhan3 >> >> Constantin Musca (6): >> gcc: add missing dependency (zlib) >> gcc: remove the 64bithack patch >> multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME >> gcc: enable multilib for target gcc >> tune-mips32: add BASE_LIB to mips32 tunes >> tune-ppc603e: add BASE_LIB >> > This patch set caused a number of failures on the Autobuilder today. > please check the AB results. > > Thanks > > Sau! The re.sub flags argument doesn't exist in python 2.6 or in a lower version. Should I adapt my patch for 2.6 or do we need to update python on the AB systems ? Cheers, Constantin > >> meta/conf/machine/include/tune-mips32.inc | 4 + >> meta/conf/machine/include/tune-ppc603e.inc | 1 + >> meta/conf/multilib.conf | 2 +- >> meta/recipes-devtools/gcc/gcc-4.7.inc | 5 +- >> meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch | 63 ------- >> meta/recipes-devtools/gcc/gcc-common.inc | 25 +++ >> meta/recipes-devtools/gcc/gcc-configure-common.inc | 3 +- >> meta/recipes-devtools/gcc/gcc-configure-target.inc | 1 + >> meta/recipes-devtools/gcc/gcc-multilib-config.inc | 200 >> +++++++++++++++++++++ >> meta/recipes-devtools/gcc/libgcc_4.7.bb | 44 +++++ >> 10 files changed, 280 insertions(+), 68 deletions(-) >> delete mode 100644 meta/recipes-devtools/gcc/gcc-4.7/64bithack.patch >> create mode 100644 meta/recipes-devtools/gcc/gcc-multilib-config.inc >> ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2013-01-15 9:28 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-01-14 15:16 [PATCH v2 0/6] On-target multilib gcc enhacement Constantin Musca 2013-01-14 15:16 ` [PATCH v2 1/6] gcc: add missing dependency (zlib) Constantin Musca 2013-01-14 15:16 ` [PATCH v2 2/6] gcc: remove the 64bithack patch Constantin Musca 2013-01-14 15:16 ` [PATCH v2 3/6] multilib.conf: add TARGET_ARCH to MULTILIB_SAVE_VARNAME Constantin Musca 2013-01-14 15:16 ` [PATCH v2 4/6] gcc: enable multilib for target gcc Constantin Musca 2013-01-14 15:16 ` [PATCH v2 5/6] tune-mips32: add BASE_LIB to mips32 tunes Constantin Musca 2013-01-14 15:16 ` [PATCH v2 6/6] tune-ppc603e: add BASE_LIB Constantin Musca 2013-01-15 7:40 ` [PATCH v2 0/6] On-target multilib gcc enhacement Saul Wold 2013-01-15 9:13 ` Constantin Musca
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox