--- /usr/bin/crossdev.sh 2004-05-25 08:54:46.000000000 +0200 +++ crossdev-arm.sh 2004-05-29 10:08:34.938703728 +0200 @@ -60,7 +60,7 @@ GLIBC_LOC="sys-libs/glibc" #// My Version - MYVERSION="0.4" + MYVERSION="0.4-arm" #// Remember original PATH ORIGPATH="${PATH}" @@ -423,6 +423,7 @@ echo -e " ${CYAN}ppc${XX}\t\t- PowerPC/Apple Macintosh Systems" echo -e " ${CYAN}ppc64${XX}\t\t- PowerPC Systems (64-bit)" echo -e " ${CYAN}ppc-eabi${XX}\t- PowerPC/Embedded Systems" + echo -e " ${CYAN}arm${XX}\t- StrongARM systems" echo -e "" echo -e "${WHITE}Options:${XX}" @@ -544,9 +545,6 @@ x86) showError "x86 is an invalid architecture. Please specify i486, i586, or i686" ;; - arm) - showError "${CMDARCH} isn't tested/implemented yet. Test and send patches!" - ;; help) displayHelp exit 0 @@ -679,6 +677,11 @@ CROSS_CHOST="sparc64-unknown-linux-gnu" CROSS_KEYW="sparc" ;; + arm) + CROSS_CFLAGS="-mcpu=strongarm -mtune=strongarm" + CROSS_CHOST="arm-unknown-linux-gnu" + CROSS_KEYW="arm" + ;; *) showError "Invalid arch specified!" ;; @@ -1080,29 +1083,33 @@ if [ "${USE_HEADERS}" = "yes" ]; then if [ ! -d "${CROSS_PTMPDIR}/${CROSS_BUILDIR}/${HEADERS_DIR}" ]; then - showInfo "Copying ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." - cp -axf ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ - showError "${func_name}: Failed to copy ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + showInfo "Moving ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." + mv -f ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ + showError "${func_name}: Failed to move ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + mkdir -p ${CROSS_PTMPDIR}/${HEADERS_PDIR}/work/${HEADERS_DIR} fi fi if [ ! -d "${CROSS_PTMPDIR}/${CROSS_BUILDIR}/${BINUTILS_DIR}" ]; then - showInfo "Copying ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." - cp -axf ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ - showError "${func_name}: Failed to copy ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + showInfo "Moving ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." + mv -f ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ + showError "${func_name}: Failed to move ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + mkdir -p ${CROSS_PTMPDIR}/${BINUTILS_PDIR}/work/${BINUTILS_DIR} fi if [ ! -d "${CROSS_PTMPDIR}/${CROSS_BUILDIR}/${GCC_DIR}" ]; then - showInfo "Copying ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." - cp -axf ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ - showError "${func_name}: Failed to copy ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + showInfo "Moving ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." + mv -f ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ + showError "${func_name}: Failed to move ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + mkdir -p ${CROSS_PTMPDIR}/${GCC_PDIR}/work/${GCC_DIR} fi if [ "${CMDKERNEL}" != "yes" ]; then if [ ! -d "${CROSS_PTMPDIR}/${CROSS_BUILDIR}/${GLIBC_DIR}" ]; then - showInfo "Copying ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." - cp -axf ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ - showError "${func_name}: Failed to copy ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + showInfo "Moving ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} -> ${CROSS_PTMPDIR}/${CROSS_BUILDIR}..." + mv -f ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} ${CROSS_PTMPDIR}/${CROSS_BUILDIR} || \ + showError "${func_name}: Failed to move ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} to ${CROSS_PTMPDIR}/${CROSS_BUILDIR}!" + mkdir -p ${CROSS_PTMPDIR}/${GLIBC_PDIR}/work/${GLIBC_DIR} fi fi @@ -1434,7 +1441,12 @@ myconf="--enable-hacker-mode" fi - + #// the ugly arm patch (no sjlj-exceptions) + if [ "${TARGETARCH}" = "arm" ]; then + mv -f ../sysdeps/generic/framestate.c ../sysdeps/generic/framestate.orig.c + touch ../sysdeps/generic/framestate.c + fi + #// if .compiled exists, skip, otherwise configure & build if [ ! -f ".compiled" ]; then showInfo "Configuring ${GLIBC_VER} (full)..." @@ -1493,6 +1505,22 @@ touch .installed fi + #// another ugly glibc bug, see http://www.handhelds.org/z/wiki/CrossToolchainHacksPage + #// or http://sources.redhat.com/ml/libc-alpha/2003-05/msg00174.html + if [ "${TARGETARCH}" = "arm" ]; then + if [ -f "${CROSS_INSTALL}/lib/libc.so" ]; then + mv -f ${CROSS_INSTALL}/lib/libc.so ${CROSS_INSTALL}/lib/libc.so.orig + grep -v BUG ${CROSS_INSTALL}/lib/libc.so.orig > ${CROSS_INSTALL}/lib/libc.so + else + showError "${func_name}: no libc.so found in for target ${TARGETARCH} in ${CROSS_INSTALL}/lib/ !" + fi + if [ -f "${CROSS_INSTALL}/lib/libpthread.so" ]; then + mv -f ${CROSS_INSTALL}/lib/libpthread.so ${CROSS_INSTALL}/lib/libpthread.so.orig + grep -v BUG ${CROSS_INSTALL}/lib/libc.so.orig > ${CROSS_INSTALL}/lib/libpthread.so + else + showError "${func_name}: no libpthread.so found in for target ${TARGETARCH} in ${CROSS_INSTALL}/lib/ !" + fi + fi #// Complete? if [ -f ".compiled" ] && [ -f ".installed" ]; then