Mercurial > hg > aboriginal
view root-filesystem.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 | 7f1b9fb1099e |
children | f326dbd73bee |
line wrap: on
line source
#!/bin/bash # Build a basic busybox+uClibc root filesystem for a given target. # Requires a cross-compiler (or simple-cross-compiler) in the $PATH or in # the build directory. In theory you can supply your own as long as the # prefix- name is correct. source sources/include.sh || exit 1 load_target "$1" check_for_base_arch || exit 0 check_prerequisite "${ARCH}-cc" # Determine which directory layout we're using mkdir -p "$STAGE_DIR"/{tmp,proc,sys,dev,home,mnt,root} && chmod a+rwxt "$STAGE_DIR/tmp" || dienow STAGE_USR="$STAGE_DIR/usr" # Having lots of repeated locations at / and also under /usr is silly, so # symlink them together. (The duplication happened back in the 1970's # when Ken and Dennis ran out of space on their PDP-11's root disk and # leaked the OS into the disk containing the user home directories. It's # been mindlessly duplicated ever since.) for i in bin sbin lib etc do mkdir -p "$STAGE_USR/$i" && ln -s "usr/$i" "$STAGE_DIR/$i" || dienow done # Copy qemu setup script and so on. cp -r "$SOURCES/root-filesystem/." "$STAGE_USR/" && echo -e "CROSS_TARGET=$CROSS_TARGET\nKARCH=$KARCH" > \ "$STAGE_USR/src/host-info" && cp "$SRCDIR"/MANIFEST "$STAGE_USR/src" || dienow # If user specified different files to put in the root filesystem, add them. # (This overwrites existing files.) if [ ! -z "$SIMPLE_ROOT_OVERLAY" ] then cd "$TOP" tar -c -C "$SIMPLE_ROOT_OVERLAY" . | tar -x -C "$STAGE_DIR" || dienow fi # Build toybox STAGE_DIR="$STAGE_USR" build_section busybox cp "$WORK"/config-busybox "$STAGE_USR"/src || dienow build_section toybox # Put statically and dynamically linked hello world programs on there for # test purposes. "${ARCH}-cc" "${SOURCES}/root-filesystem/src/hello.c" -Os $CFLAGS \ -o "$STAGE_USR/bin/hello-dynamic" || dienow if [ "$BUILD_STATIC" != none ] then "${ARCH}-cc" "${SOURCES}/root-filesystem/src/hello.c" -Os $CFLAGS -static \ -o "$STAGE_USR/bin/hello-static" || dienow STATIC=--static else STATIC= fi # Debug wrapper for use with /usr/src/record-commands.sh "${ARCH}-cc" "$SOURCES/toys/wrappy.c" -Os $CFLAGS $STATIC \ -o "$STAGE_USR/bin/record-commands-wrapper" || dienow # Do we need shared libraries? if ! is_in_list toybox $BUILD_STATIC || ! is_in_list busybox $BUILD_STATIC then echo Copying compiler libraries... mkdir -p "$STAGE_USR/lib" || dienow (path_search \ "$("$ARCH-cc" --print-search-dirs | sed -n 's/^libraries: =*//p')" \ "*.so*" 'cp -H "$DIR/$FILE" "$STAGE_USR/lib/$FILE"' \ || dienow) | dotprogress [ -z "$SKIP_STRIP" ] && "${ARCH}-strip" --strip-unneeded "$STAGE_USR"/lib/*.so fi # Clean up and package the result [ -z "$SKIP_STRIP" ] && "${ARCH}-strip" "$STAGE_USR"/{bin/*,sbin/*} create_stage_tarball # Color back to normal echo -e "\e[0mBuild complete"