Comments
Patch
@@ -29,11 +29,10 @@ do_stage_append () {
done
# Fix a few include links so cross builds are happier
- if [ ! -e ${STAGING_INCDIR}/c++ ]; then
- mkdir -p ${STAGING_INCDIR}
- mkdir -p ${CROSS_DIR}/${TARGET_SYS}/include/c++
+ if [ ! -e ${STAGING_DIR_TARGET}/${target_includedir}/c++ ]; then
+ mkdir -p ${STAGING_DIR_TARGET}/${target_includedir}/c++
ln -sf ${CROSS_DIR}/${TARGET_SYS}/include/c++ \
- ${STAGING_INCDIR}/
+ ${STAGING_DIR_TARGET}/${target_includedir}/c++/
fi
# We probably don't need these
@@ -47,9 +46,25 @@ do_stage_append () {
done
#fix up libsupc++ and libstdc++ la files
- for d in lib lib/nof; do
+ libdirs="lib"
+ if [ -e lib/nof ]; then
+ libdirs="$libs lib/nof"
+ fi
+ for d in ${libdirs}; do
sed -i "s|dependency_libs\s*=\s*.*|dependency_libs='-L${CROSS_DIR}/${TARGET_SYS}/$d ${LIBGCCS_VAR} -lc -lm '|" ${CROSS_DIR}/${TARGET_SYS}/$d/libsupc++.la || true
sed -i "s|dependency_libs\s*=\s*.*|dependency_libs='-L${CROSS_DIR}/${TARGET_SYS}/$d ${LIBGCCS_VAR} -lc -lm '|" ${CROSS_DIR}/${TARGET_SYS}/$d/libstdc++.la || true
done
+ # stage shared libgcc and libstdc++ in target staging area.
+ if [ -e ${CROSS_DIR}/${TARGET_SYS}${target_base_libdir}/libgcc_s.so ]; then
+ mkdir -p ${STAGING_DIR_TARGET}${target_base_libdir}
+ cp -d ${CROSS_DIR}/${TARGET_SYS}${target_base_libdir}/libgcc_s.so* \
+ ${STAGING_DIR_TARGET}${target_base_libdir}
+
+ fi
+ if [ -e ${CROSS_DIR}/${TARGET_SYS}${target_base_libdir}/libstdc++.so ]; then
+ mkdir -p ${STAGING_DIR_TARGET}${target_prefix}${target_base_libdir}
+ cp -d ${CROSS_DIR}/${TARGET_SYS}${target_base_libdir}/libstdc++.so* \
+ ${STAGING_DIR_TARGET}${target_prefix}${target_base_libdir}
+ fi
}
@@ -2,5 +2,10 @@ require gcc-configure-common.inc
EXTRA_OECONF_PATHS = " \
--with-local-prefix=${prefix}/local \
- --with-gxx-include-dir=${includedir}/c++/${BINV}"
-
+ --with-gxx-include-dir=${includedir}/c++/${BINV} \
+ --disable-libstdc++-v3 \
+ --disable-libgfortran \
+ --disable-libssp \
+ --disable-libobjc \
+ "
+TARGET_CC_ARCH += "${LDFLAGS}"
@@ -2,7 +2,8 @@ INHIBIT_PACKAGE_STRIP ?= ""
OLD_INHIBIT_PACKAGE_STRIP := "${INHIBIT_PACKAGE_STRIP}"
INHIBIT_PACKAGE_STRIP = "1"
-PACKAGES = "libgcc libssp libstdc++ libg2c libgfortran"
+PACKAGES = "libgcc libssp libstdc++ libg2c libgfortran objc libmudflap \
+ libgcc-dev libstdc++-dev libmudflap-dev objc-dev"
# Called from within gcc-cross, so libdir is set wrong
FILES_libg2c = "${target_libdir}/libg2c.so.*"
@@ -11,63 +12,83 @@ FILES_libssp = "${target_libdir}/libssp.so.*"
FILES_libgfortran = "${target_libdir}/libgfortran.so.*"
-FILES_libgcc = "${target_base_libdir}/libgcc_s.so.1"
+FILES_libgcc = "${target_base_libdir}/libgcc*.so.*"
+
+FILES_libgcc-dev = "${target_libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so"
FILES_libstdc++ = "${target_libdir}/libstdc++.so.*"
+FILES_libstdc++-dev = "\
+ ${target_includedir}/c++/* \
+ ${target_libdir}/gcc/${TARGET_SYS}/${BINV}/libstdc++.a \
+ ${target_libdir}/gcc/${TARGET_SYS}/${BINV}/libsupc++.a \
+ ${target_libdir}/gcc/${TARGET_SYS}/${BINV}/libstdc++.so"
+
+RDEPENDS_append_libstdc++-dev = " libgcc-dev libc-dev g++ libstdc++"
+
+# We don't care about GNU_HASH in objc, so mask all errors
+INSANE_SKIP_objc = "True"
+FILES_objc = "${target_libdir}/libobjc*.so.* \
+"
+FILES_objc-dev = "${target_libdir}/libobjc*.so \
+ ${target_libdir}/libobjc*.la \
+ ${target_libdir}/libobjc*.a \
+"
+
+FILES_libmudflap = "${target_libdir}/libmudflap*.so.*"
+FILES_libmudflap-dev = "\
+ ${target_libdir}/libmudflap*.so \
+ ${target_libdir}/libmudflap*.a \
+ ${target_libdir}/libmudflap*.a \
+"
do_install () {
oe_runmake 'DESTDIR=${D}' install
- # Move libgcc_s into /lib
- mkdir -p ${D}${target_base_libdir}
- if [ -f ${D}${target_base_libdir}/libgcc_s.so.? ]; then
- # Already in the right location
- :
- elif [ -f ${D}${prefix}/lib/libgcc_s.so.? ]; then
- mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} || true
-
- elif [ -f ${D}${prefix}/*/lib/nof/libgcc_s.so.? ]; then
- mv -f ${D}${prefix}/*/lib/nof/libgcc_s.so* ${D}${target_base_libdir}
- else
- # Look for .../${TARGET_SYS}/lib/libgcc_s*
- # (or /lib64/, on x86_64)
- mv -f ${D}${prefix}/*/${target_base_libdir}/libgcc_s.so* ${D}${target_base_libdir} || true
- fi
-
-
-
- # Move libstdc++ and libg2c into libdir (resetting our prefix to /usr
- mkdir -p ${D}${target_libdir}
-
- if [ -f ${D}${prefix}/*/lib/nof/libstdc++.so ]; then
-
- mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} || true
- mv -f ${D}${prefix}/*/lib/nof/libg2c.so* ${D}${target_libdir} || true
- mv -f ${D}${prefix}/*/lib/nof/libgfortran*.so* ${D}${target_libdir} || true
- mv -f ${D}${prefix}/*/lib/nof/libssp*.so* ${D}${target_libdir} || true
-
- else
- # Look for .../${TARGET_SYS}/lib/lib* (or /lib64/ on x86_64)
- mv -f ${D}${prefix}/*/${target_base_libdir}/libstdc++.so* ${D}${target_libdir} || true
- mv -f ${D}${prefix}/*/${target_base_libdir}/libg2c.so* ${D}${target_libdir} || true
- mv -f ${D}${prefix}/*/${target_base_libdir}/libgfortran*.so* ${D}${target_libdir} || true
- mv -f ${D}${prefix}/*/${target_base_libdir}/libssp*.so* ${D}${target_libdir} || true
- fi
-
+ mkdir -p ${D}${target_includedir}/c++/${BINV}
+ mv -f ${D}${STAGING_DIR_TARGET}/${target_includedir}/c++/* ${D}${target_includedir}/c++/${BINV}
+ # Remove precompiled c++ headers as they are really big
+ rm -rf ${D}${target_includedir}/c++/${BINV}/bits/*.gch
+ # Move target libraries into libdir (resetting our prefix to /usr
+ tmp_ifs="$IFS" # save default Internal File Separator
+ IFS=',' # set IFS to ','
+ multilib_dirs="," # default is /lib
+ if [ -d ${D}${prefix}/${TARGET_SYS}/lib/nof ]; then
+ multilib_dirs="${multilib_dirs},nof"
+ fi
+ for multilib in ${multilib_dirs}; do
+ mkdir -p ${D}${target_prefix}${target_base_libdir}/${multilib}
+ mkdir -p ${D}${target_base_libdir}${multilib}
+ mkdir -p ${D}${target_libdir}/gcc/${TARGET_SYS}/${BINV}${target_base_libdir}${multilib}
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libgcc*.so* ${D}${target_base_libdir}/${multilib} || true
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libstdc++.so* ${D}${target_libdir}${multilib} || true
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libg2c.so* ${D}${target_libdir}${multilib} || true
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libgfortran*.so* ${D}${target_libdir}${multilib} || true
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libssp*.so* ${D}${target_libdir}${multilib} || true
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libstdc++.a ${D}${target_libdir}/gcc/${TARGET_SYS}/${BINV}${target_base_libdir}/${multilib} || true
+ mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libsupc++.a ${D}${target_libdir}/gcc/${TARGET_SYS}/${BINV}${target_base_libdir}/${multilib} || true
+ ln -s ${target_base_libdir}${multilib}/libgcc_s.so.1 ${D}${target_libdir}/gcc/${TARGET_SYS}/${BINV}/${multilib}/libgcc_s.so || true
+ #mv -f ${D}${prefix}/${TARGET_SYS}${target_base_libdir}${multilib}/libgcc_s.so ${D}${target_libdir}/gcc/${TARGET_SYS}/${BINV}${target_base_libdir}/${multilib} || true
+ #mv -f ${D}${prefix}${target_base_libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc*.a ${D}${target_libdir}/gcc/${TARGET_SYS}/${BINV}${target_base_libdir}/${multilib} || true
+
+ done
# Manually run the target stripper since we won't get it run by
# the packaging.
if [ "x${OLD_INHIBIT_PACKAGE_STRIP}" != "x1" ]; then
- ${TARGET_PREFIX}strip ${D}${target_libdir}/libstdc++.so.* || true
- ${TARGET_PREFIX}strip ${D}${target_libdir}/libg2c.so.* || true
- ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* || true
- ${TARGET_PREFIX}strip ${D}${target_libdir}/libgfortran*.so* || true
+ for multilib in ${multilib_dirs}; do
+ ${TARGET_PREFIX}strip ${D}${target_libdir}/${multilib}/libstdc++.so.* || true
+ ${TARGET_PREFIX}strip ${D}${target_libdir}/${multilib}/libg2c.so.* || true
+ ${TARGET_PREFIX}strip ${D}${target_libdir}/${multilib}/libssp.so.* || true
+ ${TARGET_PREFIX}strip ${D}${target_libdir}/${multilib}/libgfortran*.so* || true
+ ${TARGET_PREFIX}strip ${D}${target_base_libdir}/${multilib}/libgcc_s.so.* || true
+ done
fi
+ IFS="$tmp_IFS"
# Link gfortran to g77 to satisfy not-so-smart configure or hard coded g77
# gfortran is fully backwards compatible. This is a safe and practical solution.
- if [ -f ${CROSS_DIR}/bin/${TARGET_PREFIX}gfortran ]; then
+ if [ -n "${FORTRAN}" ]; then
currdir="$PWD"
cd ${CROSS_DIR}/bin/
ln -sf ${TARGET_PREFIX}gfortran ${TARGET_PREFIX}g77 || true
@@ -4,13 +4,7 @@ PACKAGES = "\
cpp cpp-symlinks \
g77 g77-symlinks \
gfortran gfortran-symlinks \
- objc objc-dev \
gcov gcov-symlinks \
- libmudflap libmudflap-dev \
- libgcc-dev \
- libstdc++-dev \
- libg2c-dev \
- libgfortran-dev \
${PN}-doc \
"
@@ -20,7 +14,7 @@ FILES_${PN} = "\
${libexecdir}/gcc/${TARGET_SYS}/${BINV}/collect2 \
${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \
${gcclibdir}/${TARGET_SYS}/${BINV}/specs \
- ${gcclibdir}/${TARGET_SYS}/${BINV}/lib* \
+ ${gcclibdir}/${TARGET_SYS}/${BINV}/*.a \
${gcclibdir}/${TARGET_SYS}/${BINV}/include* \
"
FILES_${PN}-symlinks = "\
@@ -54,16 +48,10 @@ FILES_cpp-symlinks = "${bindir}/cpp"
FILES_gcov = "${bindir}/${TARGET_PREFIX}gcov"
FILES_gcov-symlinks = "${bindir}/gcov"
-FILES_libgcc = "${base_libdir}/libgcc*.so.*"
-FILES_libgcc-dev = "${base_libdir}/libgcc*.so"
-
-# Called from within gcc-cross, so libdir is set wrong
-FILES_libg2c = "${target_libdir}/libg2c.so.*"
-FILES_libg2c-dev = "\
- ${libdir}/libg2c.so \
- ${libdir}/libg2c.a \
- ${libdir}/libfrtbegin.a \
-"
+#FILES_libgcc = "${base_libdir}/libgcc*.so.*"
+#FILES_libgcc-dev = "\
+# ${base_libdir}/libgcc*.so \
+# ${libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so"
FILES_g++ = "\
${bindir}/${TARGET_PREFIX}g++ \
@@ -74,36 +62,6 @@ FILES_g++-symlinks = "\
${bindir}/g++ \
"
-FILES_libstdc++ = "${libdir}/libstdc++.so.*"
-FILES_libstdc++-dev = "\
- ${includedir}/c++/${BINV} \
- ${libdir}/libstdc++.so \
- ${libdir}/libstdc++.la \
- ${libdir}/libstdc++.a \
- ${libdir}/libsupc++.la \
- ${libdir}/libsupc++.a \
-"
-
-FILES_libgfortran-dev = "${libdir}/libgfortran.a \
- ${libdir}/libgfortran.so \
- ${libdir}/libgfortranbegin.a"
-
-# We don't care about GNU_HASH in objc, so mask all errors
-INSANE_SKIP_objc = "True"
-FILES_objc = "${libdir}/libobjc*.so.* \
-"
-FILES_objc-dev = "${libdir}/libobjc*.so \
- ${libdir}/libobjc*.la \
- ${libdir}/libobjc*.a \
-"
-
-FILES_libmudflap = "${libdir}/libmudflap*.so.*"
-FILES_libmudflap-dev = "\
- ${libdir}/libmudflap*.so \
- ${libdir}/libmudflap*.a \
- ${libdir}/libmudflap*.a \
-"
-
FILES_${PN}-doc = "\
${infodir} \
${mandir} \
@@ -118,20 +76,20 @@ do_install () {
rm -r ${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/install-tools
# Hack around specs file assumptions
- test -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs && sed -i -e '/^*cross_compile:$/ { n; s/1/0/; }' ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs
-
+ test -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs && \
+ sed -i -e '/^*cross_compile:$/ { n; s/1/0/; }' ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/specs
# Move libgcc_s into /lib
- mkdir -p ${D}${base_libdir}
- if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then
- mv ${D}${libdir}/nof/libgcc_s.so.* ${D}${base_libdir}
- else
- mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir} || true
- fi
- rm -f ${D}${libdir}/libgcc_s.so || true
- ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \
- | tr -s / \
- | sed -e 's,^/,,' -e 's,[^/]*,..,g'`/lib/libgcc_s.so.1 \
- ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so
+ # mkdir -p ${D}${base_libdir}
+ # if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then
+ # mv ${D}${libdir}/nof/libgcc_s.so.* ${D}${base_libdir}
+ #else
+ # mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir} || true
+ #fi
+ #rm -f ${D}${libdir}/libgcc_s.so || true
+ #ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \
+ # | tr -s / \
+ # | sed -e 's,^/,,' -e 's,[^/]*,..,g'`/lib/libgcc_s.so.1 \
+ # ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/libgcc_s.so
# We don't need libtool libraries
rm -f ${D}${libdir}/libg2c.la &>/dev/null || true
@@ -154,17 +112,20 @@ do_install () {
rm -f ${TARGET_ARCH}-*${TARGET_ARCH}-*
# Symlinks so we can use these trivially on the target
- ln -sf ${TARGET_SYS}-g77 g77 || true
- ln -sf ${TARGET_SYS}-gfortran gfortran || true
+ if [ -n "${FORTRAN}" ]; then
+ ln -sf ${TARGET_SYS}-g77 g77
+ ln -sf ${TARGET_SYS}-gfortran gfortran
+ ln -sf g77 f77
+ ln -sf gfortran f95
+ fi
ln -sf ${TARGET_SYS}-g++ g++
ln -sf ${TARGET_SYS}-gcc gcc
- ln -sf g77 f77 || true
- ln -sf gfortran f95 || true
ln -sf g++ c++
ln -sf gcc cc
+ mkdir -p ${D}${base_libdir} ${D}${bindir}
ln -sf ${bindir}/${TARGET_SYS}-cpp ${D}${base_libdir}/cpp
ln -sf ${bindir}/${TARGET_SYS}-cpp ${D}${bindir}/cpp
- # Remove precompiled c++ headers as they are really big
- rm -rf ${D}${includedir}/c++/${BINV}/${TARGET_SYS}/bits/*.gch
+ # Remove c++ headers we already have them in libstdc++-dev
+ rm -rf ${D}${includedir}/c++
}
Hi, Inspired by a discussion with RP on IRC this patch does following. * Package most of target libraries during gcc-cross recipes and not during gcc target recipe. * Do not build and package libraries like libstdc++ and others twice (once during cross compile and then during target gcc compile) More libraries that can be built in cross gcc recipe should be packaged there. These changes can be done after this patch. Comments ? -Khem Signed-off-by: Khem Raj <raj.khem@gmail.com> --- recipes/gcc/gcc-configure-cross.inc | 25 ++++++-- recipes/gcc/gcc-configure-target.inc | 9 ++- recipes/gcc/gcc-package-cross.inc | 107 ++++++++++++++++++++-------------- recipes/gcc/gcc-package-target.inc | 93 +++++++++--------------------- 4 files changed, 118 insertions(+), 116 deletions(-)