1inherit cross-canadian 2 3SUMMARY = "GNU cc and gcc C compilers (cross-canadian for ${TARGET_ARCH} target)" 4PN = "gcc-cross-canadian-${TRANSLATED_TARGET_ARCH}" 5 6DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${HOST_PREFIX}gcc-crosssdk virtual/${HOST_PREFIX}binutils-crosssdk virtual/nativesdk-${HOST_PREFIX}libc-for-gcc nativesdk-gettext flex-native" 7 8GCCMULTILIB = "--enable-multilib" 9 10require gcc-configure-common.inc 11 12EXTRA_OECONF_PATHS = "\ 13 --with-gxx-include-dir=/not/exist${target_includedir}/c++/${BINV} \ 14 --with-build-time-tools=${STAGING_DIR_NATIVE}${prefix_native}/${TARGET_SYS}/bin \ 15 --with-sysroot=/not/exist \ 16 --with-build-sysroot=${STAGING_DIR_TARGET} \ 17" 18# We have to point gcc at a sysroot but we don't need to rebuild if this changes 19# e.g. we switch between different machines with different tunes. 20EXTRA_OECONF_PATHS[vardepsexclude] = "TUNE_PKGARCH" 21TARGET_ARCH[vardepsexclude] = "TUNE_ARCH" 22get_gcc_float_setting[vardepvalue] = "" 23 24# 25# gcc-cross looks and finds these in ${exec_prefix} but we're not so lucky 26# for the sdk. Hardcoding the paths ensures the build doesn't go canadian or worse. 27# 28export AR_FOR_TARGET = "${TARGET_PREFIX}ar" 29export AS_FOR_TARGET = "${TARGET_PREFIX}as" 30export DLLTOOL_FOR_TARGET = "${TARGET_PREFIX}dlltool" 31export CC_FOR_TARGET = "${TARGET_PREFIX}gcc" 32export CXX_FOR_TARGET = "${TARGET_PREFIX}g++" 33export GCC_FOR_TARGET = "${TARGET_PREFIX}gcc" 34export LD_FOR_TARGET = "${TARGET_PREFIX}ld" 35export LIPO_FOR_TARGET = "${TARGET_PREFIX}lipo" 36export NM_FOR_TARGET = "${TARGET_PREFIX}nm" 37export OBJDUMP_FOR_TARGET = "${TARGET_PREFIX}objdump" 38export RANLIB_FOR_TARGET = "${TARGET_PREFIX}ranlib" 39export STRIP_FOR_TARGET = "${TARGET_PREFIX}strip" 40export WINDRES_FOR_TARGET = "${TARGET_PREFIX}windres" 41 42# 43# We need to override this and make sure the compiler can find staging 44# 45export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET}" 46 47do_configure () { 48 export CC_FOR_BUILD="${BUILD_CC}" 49 export CXX_FOR_BUILD="${BUILD_CXX}" 50 export CFLAGS_FOR_BUILD="${BUILD_CFLAGS}" 51 export CPPFLAGS_FOR_BUILD="${BUILD_CPPFLAGS}" 52 export CXXFLAGS_FOR_BUILD="${BUILD_CXXFLAGS}" 53 export LDFLAGS_FOR_BUILD="${BUILD_LDFLAGS}" 54 export CFLAGS_FOR_TARGET="${TARGET_CFLAGS}" 55 export CPPFLAGS_FOR_TARGET="${TARGET_CPPFLAGS}" 56 export CXXFLAGS_FOR_TARGET="${TARGET_CXXFLAGS}" 57 export LDFLAGS_FOR_TARGET="${TARGET_LDFLAGS}" 58 oe_runconf 59} 60 61do_compile () { 62 oe_runmake all-host configure-target-libgcc 63 (cd ${B}/${TARGET_SYS}/libgcc; oe_runmake enable-execute-stack.c unwind.h md-unwind-support.h sfp-machine.h gthr-default.h) 64} 65 66# Having anything auto depending on gcc-cross-sdk is a really bad idea... 67EXCLUDE_FROM_SHLIBS = "1" 68 69PACKAGES = "${PN}-dbg ${PN} ${PN}-doc" 70 71FILES_${PN} = "\ 72 ${exec_prefix}/bin/* \ 73 ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/* \ 74 ${gcclibdir}/${TARGET_SYS}/${BINV}/*.o \ 75 ${gcclibdir}/${TARGET_SYS}/${BINV}/specs \ 76 ${gcclibdir}/${TARGET_SYS}/${BINV}/lib* \ 77 ${gcclibdir}/${TARGET_SYS}/${BINV}/include \ 78 ${gcclibdir}/${TARGET_SYS}/${BINV}/include-fixed \ 79 ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/include/ \ 80 ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/gtype.* \ 81 ${includedir}/c++/${BINV} \ 82 ${prefix}/${TARGET_SYS}/bin/* \ 83 ${prefix}/${TARGET_SYS}/lib/* \ 84 ${prefix}/${TARGET_SYS}${target_includedir}/* \ 85" 86INSANE_SKIP_${PN} += "dev-so" 87 88FILES_${PN}-doc = "\ 89 ${infodir} \ 90 ${mandir} \ 91 ${gcclibdir}/${TARGET_SYS}/${BINV}/include/README \ 92" 93 94EXEEXT = "" 95 96# Compute how to get from libexecdir to bindir in python (easier than shell) 97BINRELPATH = "${@os.path.relpath(d.expand("${bindir}"), d.expand("${libexecdir}/gcc/${TARGET_SYS}/${BINV}"))}" 98 99do_install () { 100 ( cd ${B}/${TARGET_SYS}/libgcc; oe_runmake 'DESTDIR=${D}' install-unwind_h-forbuild install-unwind_h ) 101 oe_runmake 'DESTDIR=${D}' install-host 102 103 # Cleanup some of the ${libdir}{,exec}/gcc stuff ... 104 rm -r ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/install-tools 105 rm -r ${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/install-tools 106 rm -rf ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/finclude 107 108 # We care about g++ not c++ 109 rm -f ${D}${bindir}/*c++ 110 111 # We don't care about the gcc-<version> copies 112 rm -f ${D}${bindir}/*gcc-?.?* 113 114 # We use libiberty from binutils 115 rm -f ${D}${prefix}/${TARGET_SYS}/lib/libiberty.a 116 # Not sure where the strange paths come from 117 rm -f ${D}${libdir}/../lib/libiberty.a 118 rm -f ${D}${libdir}/libiberty.a 119 120 # Cleanup empty directories which are not shipped 121 # we use rmdir instead of 'rm -f' to ensure the non empty directories are not deleted 122 # ${D}${libdir}/../lib only seems to appear with SDKMACHINE=i686 123 local empty_dirs="${D}${libdir}/../lib ${D}${prefix}/${TARGET_SYS}/lib ${D}${prefix}/${TARGET_SYS} ${D}${includedir}" 124 for i in $empty_dirs; do 125 [ -d $i ] && rmdir --ignore-fail-on-non-empty $i 126 done 127 128 # Insert symlinks into libexec so when tools without a prefix are searched for, the correct ones are 129 # found. 130 dest=${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/ 131 install -d $dest 132 suffix=${EXEEXT} 133 for t in ar as ld nm objcopy objdump ranlib strip g77 gcc cpp gfortran; do 134 if [ "$t" = "g77" -o "$t" = "gfortran" ] && [ ! -e ${D}${bindir}/${TARGET_PREFIX}$t$suffix ]; then 135 continue 136 fi 137 138 ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t$suffix $dest$t$suffix 139 done 140 t=real-ld 141 ln -sf ${BINRELPATH}/${TARGET_PREFIX}ld$suffix $dest$t$suffix 142 143 # libquadmath headers need to be available in the gcc libexec dir 144 install -d ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/ 145 cp ${S}/libquadmath/quadmath.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/ 146 cp ${S}/libquadmath/quadmath_weak.h ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/include/ 147 148 chown -R root:root ${D} 149 150 cross_canadian_bindirlinks 151} 152 153ELFUTILS = "nativesdk-elfutils" 154DEPENDS += "nativesdk-gmp nativesdk-mpfr nativesdk-libmpc ${ELFUTILS} nativesdk-zlib" 155RDEPENDS_${PN} += "nativesdk-mpfr nativesdk-libmpc ${ELFUTILS}" 156 157SYSTEMHEADERS = "${target_includedir}/" 158SYSTEMLIBS = "${target_base_libdir}/" 159SYSTEMLIBS1 = "${target_libdir}/" 160 161EXTRA_OECONF += "--enable-poison-system-directories" 162 163EXTRA_OECONF_append_libc-baremetal = " --without-headers" 164EXTRA_OECONF_remove_libc-baremetal = "--with-sysroot=/not/exist" 165EXTRA_OECONF_remove_libc-baremetal = "--with-build-sysroot=${STAGING_DIR_TARGET}" 166 167# gcc 4.7 needs -isystem 168export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET} -isystem=${target_includedir}" 169