Files
poky/meta/recipes-devtools/gcc/libgcc-common.inc
Richard Purdie ee758b6927 gcc-cross: Improve handling of unwind.h
Rather than building the whole of libgcc to obtain the unwind.h header
file, simply configure it and then install the file. This avoids copying
chunks of data around when we don't need to and building the same thing
twice.

After doing this we need to make sure the target build directory exists
in the libgcc case since it will no longer be created automatically.

(From OE-Core rev: 459e4dc25462771038459567c22e87d4cd38b117)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-04-25 17:19:18 +01:00

137 lines
4.5 KiB
PHP

BPN = "libgcc"
INHIBIT_DEFAULT_DEPS = "1"
do_configure () {
target=`echo ${MULTIMACH_TARGET_SYS} | sed -e s#-${SDKPKGSUFFIX}##`
install -d ${D}${base_libdir} ${D}${libdir}
hardlinkdir ${STAGING_INCDIR_NATIVE}/${LIBGCCBUILDTREENAME}$target/ ${B}
mkdir -p ${B}/${BPN}
mkdir -p ${B}/$target/${BPN}/
cd ${B}/${BPN}
chmod a+x ${S}/${BPN}/configure
${S}/${BPN}/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
}
do_compile () {
target=`echo ${TARGET_SYS} | sed -e s#-${SDKPKGSUFFIX}##`
cd ${B}/${BPN}
oe_runmake MULTIBUILDTOP=${B}/$target/${BPN}/
}
do_install () {
target=`echo ${TARGET_SYS} | sed -e s#-${SDKPKGSUFFIX}##`
cd ${B}/${BPN}
oe_runmake 'DESTDIR=${D}' MULTIBUILDTOP=${B}/$target/${BPN}/ install
# Move libgcc_s into /lib
mkdir -p ${D}${base_libdir}
if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then
mv ${D}${libdir}/nof/libgcc* ${D}${base_libdir}
else
mv ${D}${libdir}/libgcc* ${D}${base_libdir} || true
fi
# install the runtime in /usr/lib/ not in /usr/lib/gcc on target
# so that cross-gcc can find it in the sysroot
mv ${D}${libdir}/gcc/* ${D}${libdir}
rm -rf ${D}${libdir}/gcc/
# unwind.h is installed here which is shipped in gcc-cross
# as well as target gcc and they are identical so we dont
# ship one with libgcc here
rm -rf ${D}${libdir}/${TARGET_SYS}/${BINV}/include
}
BBCLASSEXTEND = "nativesdk"
addtask multilib_install after do_install before do_package do_populate_sysroot
# 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
multilibs = d.getVar('MULTILIB_VARIANTS', True)
if not multilibs or bb.data.inherits_class('nativesdk', d):
return
binv = d.getVar('BINV', True)
mlprefix = d.getVar('MLPREFIX', True)
if ('%slibgcc' % mlprefix) != d.getVar('PN', True):
return
if mlprefix:
orig_tune = d.getVar('DEFAULTTUNE_MULTILIB_ORIGINAL', True)
orig_tune_params = get_tune_parameters(orig_tune, d)
orig_tune_baselib = orig_tune_params['baselib']
orig_tune_bitness = orig_tune_baselib.replace('lib', '')
if not orig_tune_bitness:
orig_tune_bitness = '32'
src = '../../../' + orig_tune_baselib + '/' + \
d.getVar('TARGET_SYS_MULTILIB_ORIGINAL', True) + '/' + binv + '/'
dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + \
d.getVar('TARGET_SYS', True) + '/' + binv + '/' + orig_tune_bitness
if os.path.lexists(dest):
os.unlink(dest)
os.symlink(src, dest)
return
for ml in multilibs.split():
tune = d.getVar('DEFAULTTUNE_virtclass-multilib-' + ml, True)
if not tune:
bb.warn('DEFAULTTUNE_virtclass-multilib-%s is not defined. 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
tune_arch = tune_parameters['arch']
tune_bitness = tune_baselib.replace('lib', '')
if not 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)
}
addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot
python do_extra_symlinks() {
targetsysnoext = d.getVar('TARGET_SYS_NO_EXTENSION', True)
if targetsysnoext != d.getVar('TARGET_SYS', True):
dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsysnoext
src = d.getVar('TARGET_SYS', True)
if not os.path.lexists(dest) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)):
os.symlink(src, dest)
}
python () {
targetsysnoext = d.getVar('TARGET_SYS', True)
for suffix in [d.getVar('ABIEXTENSION', True), d.getVar('LIBCEXTENSION', True)]:
if suffix and targetsysnoext.endswith(suffix):
targetsysnoext = targetsysnoext[:-len(suffix)]
d.setVar('TARGET_SYS_NO_EXTENSION', targetsysnoext)
}