changeset 43:6d16887ec084

Intermediate snapshot. Doesn't work yet.
author Rob Landley <rob@landley.net>
date Sun, 17 Dec 2006 14:21:02 -0500
parents 7b0f34fbc35a
children 41e82517e123
files mini-native.sh
diffstat 1 files changed, 196 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mini-native.sh	Sun Dec 17 14:21:02 2006 -0500
@@ -0,0 +1,196 @@
+#!/bin/sh
+
+# Get lots of predefined environment variables and shell functions.
+
+source include.sh
+TOOLS="${NATIVE}/tools"
+
+mkdir -p "${TOOLS}/bin" || dienow
+
+if false
+then
+
+# Build qemu
+setupfor qemu &&
+./configure --disable-gcc-check --prefix="${NATIVE}" &&
+make &&
+make install &&
+cd .. &&
+$CLEANUP qemu-*
+
+[ $? -ne 0 ] && dienow
+
+setupfor linux
+# Install Linux kernel headers (for use by uClibc).
+make headers_install ARCH="${KARCH}" INSTALL_HDR_PATH="${TOOLS}" &&
+# build bootable kernel for target
+mv "${WORK}/config-linux" .config &&
+(yes "" | make ARCH="${KARCH}" oldconfig) &&
+make ARCH="${KARCH}" CROSS_COMPILE="${ARCH}-" &&
+cp "${KERNEL_PATH}" "${NATIVE}/zImage-${ARCH}" &&
+cd .. &&
+$CLEANUP linux-*
+
+[ $? -ne 0 ] && dienow
+
+# Build and install busybox
+
+setupfor busybox
+make defconfig &&
+make CONFIG_STATIC=y CROSS_COMPILE="${ARCH}-" &&
+cp busybox "${TOOLS}/bin"
+[ $? -ne 0 ] && dienow
+for i in $(sed 's@.*/@@' busybox.links)
+do
+  ln -s busybox "${TOOLS}/bin/$i" || dienow
+done
+cd .. &&
+$CLEANUP busybox
+
+[ $? -ne 0 ] && dienow
+
+# Build and install native binutils
+
+setupfor binutils build-binutils
+CC="${ARCH}"-gcc AR="${ARCH}"-ar "${CURSRC}/configure" --prefix="${TOOLS}" \
+  --build="${CROSS_HOST}" --host=${CROSS_TARGET} --target=${CROSS_TARGET} \
+  --disable-nls --disable-shared --disable-multilib $BINUTILS_FLAGS &&
+make configure-host &&
+make &&
+make install &&
+cd .. &&
+mkdir -p "${TOOLS}/include" &&
+cp binutils-*/include/libiberty.h "${TOOLS}/include" &&
+$CLEANUP binutils-* build-binutils
+
+[ $? -ne 0 ] && dienow
+
+# Build and install native gcc, with c++ support this time.
+
+setupfor gcc-core build-gcc gcc-
+echo -n "Adding c++" &&
+(tar xvjCf "${WORK}" "${LINKDIR}/gcc-g++.tar.bz2" || dienow ) | dotprogress &&
+CC="${ARCH}-gcc" AS="${ARCH-gcc}" LD="${ARCH}-ld" "${CURSRC}/configure" \
+  --prefix="${TOOLS}" --disable-multilib \
+  --build="${CROSS_HOST}" --host="${CROSS_TARGET}" --target="${CROSS_TARGET}" \
+  --enable-long-long --enable-c99 --enable-shared --enable-threads=posix \
+  --enable-__cxa_atexit --disable-nls --enable-languages=c,c++ \
+  --disable-libstdcxx-pch &&
+cd "${WORK}"/build-gcc &&
+
+make all-gcc  && # CC_FOR_TARGET="${ARCH}-gcc" AS_FOR_TARGET="${ARCH}-as" \
+#     LD_FOR_TARGET="${ARCH}-ld" all-gcc &&
+make install-gcc &&
+ln -s gcc "${TOOLS}/bin/cc" &&
+cd .. &&
+$CLEANUP gcc-* build-gcc
+
+[ $? -ne 0 ] && dienow
+
+# Move the gcc internal libraries and headers somewhere sane.
+
+mkdir -p "${TOOLS}"/gcc &&
+mv "${TOOLS}"/lib/gcc/*/*/include "${TOOLS}"/gcc/include &&
+mv "${TOOLS}"/lib/gcc/*/* "${TOOLS}"/gcc/lib &&
+$CLEANUP "${TOOLS}"/{lib/gcc,gcc/lib/install-tools} &&
+
+exit 0
+
+# Build and install gcc wrapper script.
+
+mv "$GCCNAME" "${CROSS}"/bin/gcc-unwrapped &&
+gcc "${TOP}"/sources/toys/gcc-uClibc.c -Os -s -o "$GCCNAME"
+
+[ $? -ne 0 ] && dienow
+
+# Install the linux kernel, and kernel headers.
+
+setupfor linux
+# Configure kernel
+##mv "${WORK}"/config-linux .config &&
+##(yes "" | make ARCH="${KARCH}" oldconfig) &&
+# Install Linux kernel headers (for use by uClibc).
+make headers_install ARCH="${KARCH}" INSTALL_HDR_PATH="${CROSS}" &&
+# Build bootable kernel for target.
+##make ARCH="${KARCH}" CROSS_COMPILE="${CROSS_TARGET}"- &&
+##cp "${KERNEL_PATH}" "${CROSS}"/zImage &&
+cd .. &&
+$CLEANUP linux-*
+
+[ $? -ne 0 ] && dienow
+
+# Build and install uClibc
+
+setupfor uClibc
+cp "${WORK}"/config-uClibc .config &&
+(yes "" | make CROSS="${CROSS_TARGET}"- oldconfig) &&
+make CROSS="${CROSS_TARGET}"- KERNEL_SOURCE="${CROSS}" &&
+#make CROSS="${CROSS_TARGET}"- utils &&
+# The kernel headers are already installed, but uClibc's install will try to
+# be "helpful" and copy them over themselves, at which point hilarity ensues.
+# Make it not do that.
+rm include/{asm,asm-generic,linux} &&
+make CROSS="${CROSS_TARGET}"- KERNEL_SOURCE="${CROSS}"/ \
+	RUNTIME_PREFIX="${CROSS}"/ DEVEL_PREFIX="${CROSS}"/ \
+	install_runtime install_dev &&
+# The uClibc build uses ./include instead of ${CROSS}/include, so the symlinks
+# need to come back.  (Yes, it links against the _headers_ from the source,
+# but against the _libraries_ from the destination.  Hence needing to install
+# libc.so before building utils.)
+ln -s "${CROSS}"/include/linux include/linux &&
+ln -s "${CROSS}"/include/asm include/asm &&
+ln -s "${CROSS}"/include/asm-generic include/asm-generic &&
+make CROSS=${CROSS_TARGET}- RUNTIME_PREFIX="${CROSS}"/ install_utils &&
+cd .. &&
+$CLEANUP uClibc*
+
+[ $? -ne 0 ] && dienow
+
+# A quick hello world program to test the cross-compiler out.
+
+cat > "$WORK"/hello.c << 'EOF' &&
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+  printf("Hello world!\n");
+  return 0;
+}
+EOF
+
+# Build hello.c dynamic, then static, to verify header/library paths.
+
+"$GCCNAME" -Os "$WORK"/hello.c -o "$WORK"/hello &&
+"$GCCNAME" -Os -static "$WORK"/hello.c -o "$WORK"/hello &&
+[ x"$(qemu-"${KARCH}" "${WORK}"/hello)" == x"Hello world!" ] &&
+echo Cross-toolchain seems to work.
+
+[ $? -ne 0 ] && dienow
+
+# Change the FSF's crazy names to something reasonable.
+
+cd "${CROSS}"/bin &&
+for i in "${ARCH}"-*
+do
+  strip "$i"
+  mv "$i" "${ARCH}"-"$(echo "$i" | sed 's/.*-//')"
+done
+
+cat > "${CROSS}"/README << "EOF" &&
+Cross compiler for $ARCH
+From http://landley.net/code/firmware
+
+To use: Add the \"bin\" directory to your \$PATH, and use \"$ARCH-gcc\" as
+your compiler.
+
+The syntax used to build the Linux kernel is:
+
+  make ARCH="${KARCH}" CROSS_COMPILE="${ARCH}"-
+
+EOF
+
+# Tar up the cross compiler.
+cd "${TOP}"
+tar cjvCf build cross-compiler-"${ARCH}".tar.bz2 cross-compiler-"${ARCH}" &&
+
+[ $? -ne 0 ] && dienow