Mercurial > hg > aboriginal
view simple-cross-compiler.sh @ 1786:0787ceb820bf draft 1.4.2
When x86-64 switched on NPTL in uClibc, distcc broke, and it turns out fully
native compiles under qemu never worked due to qemu not quite emulating
floating point right and confusing the perl build with zero not comparing equal
to zero.
As long as it's broken anyway, switch it over to musl and fix it up on that
side. It's no longer worth trying to fix anything broken in uClibc, the
project is dead. (I'm aware of uClibc-ng, and am treating it exactly the
same way I treated the ecommstation reboot of OS/2.)
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 11 Sep 2015 13:25:14 -0500 |
parents | b6e4e49cec5e |
children |
line wrap: on
line source
#!/bin/bash # Build a simple cross compiler for the specified target. # This simple compiler has no thread support, no libgcc_s.so, doesn't include # uClibc++, and is dynamically linked against the host's shared libraries. # Its stripped down nature makes it easy to build on an arbitrary host, and # provides just enough capability to build a root filesystem, and to be used # as a distcc accelerator from within that system. # Get lots of predefined environment variables and shell functions. source sources/include.sh || exit 1 # Parse sources/targets/$1 load_target "$1" # If this target has a base architecture that's already been built, use that. check_for_base_arch || exit 0 export TOOLCHAIN_PREFIX="${ARCH}-" # Build binutils, gcc, and ccwrap build_section binutils [ ! -z "$ELF2FLT" ] && build_section elf2flt build_section gcc build_section ccwrap if [ ! -z "$KARCH" ] then # Build C Library build_section linux-headers if [ -z "$UCLIBC_CONFIG" ] || [ ! -z "$MUSL" ] then build_section musl else build_section uClibc fi fi [ ! -z "$KARCH" ] && cat > "${STAGE_DIR}"/README << EOF Cross compiler for $ARCH from http://landley.net/aboriginal To use: Add the "bin" subdirectory to your \$PATH, and use "$ARCH-cc" as your compiler. The syntax used to build the Linux kernel is: make ARCH=${KARCH} CROSS_COMPILE=${ARCH}- EOF # Strip the binaries if [ -z "$SKIP_STRIP" ] then cd "$STAGE_DIR" for i in `find bin -type f` `find "$CROSS_TARGET" -type f` do strip "$i" 2> /dev/null done fi if [ ! -z "$KARCH" ] then # A quick hello world program to test the cross compiler out. # Build hello.c dynamic, then static, to verify header/library paths. echo "Sanity test: building Hello World." "${ARCH}-gcc" -Os "${SOURCES}/root-filesystem/src/hello.c" -o "$WORK"/hello && "${ARCH}-gcc" -Os -static "${SOURCES}/root-filesystem/src/hello.c" \ -o "$WORK"/hello || dienow # Does the hello world we just built actually run? if [ ! -z "$CROSS_SMOKE_TEST" ] then more/cross-smoke-test.sh "$ARCH" || exit 1 fi fi # Tar it up create_stage_tarball echo -e "\e[32mCross compiler toolchain build complete.\e[0m"