## SUCH DAMAGE.
# GCC wrapper for libpayload
+# let's not recurse.
+# This is a hack, I know, but it makes sure that really simple user errors
+# don't fork-bomb your machine.
+# echo "CC = $CC"
+
+if [ -n "$CC" ]; then
+b=`basename $CC`
+if [ "$b" = "lpgcc" ]; then
+CC=""
+fi
+fi
+
+
if [ "$CC" != "" ]; then
DEFAULT_CC=$CC
# This will set the _LIBDIR and _INCDIR variables used below
. $BASE/lp.functions
+# include libpayload config
+. $BASE/../libpayload.config
+
+_LDSCRIPT="-Wl,-T,$_LIBDIR/libpayload.ldscript"
+
trygccoption() {
$DEFAULT_CC $1 -S -xc /dev/null -o .$$.tmp &> /dev/null
RET=$?
shift
continue
;;
+ -Wl,-T,*)
+ _LDSCRIPT="$1"
+ shift
+ continue
+ ;;
*)
;;
esac
shift
done
-_CFLAGS="-m32 -nostdinc -nostdlib -I$_INCDIR"
+if [ "$CONFIG_TARGET_I386" = "y" ]; then
+ _ARCHINCDIR=$_INCDIR/i386
+ _ARCHLIBDIR=$_LIBDIR/i386
+fi
+
+if [ "$CONFIG_TARGET_POWERPC" = "y" ]; then
+ _ARCHINCDIR=$_INCDIR/powerpc
+ _ARCHLIBDIR=$_LIBDIR/powerpc
+fi
+
+_CFLAGS="-m32 -nostdinc -nostdlib -I$_INCDIR -I$_ARCHINCDIR -D__LIBPAYLOAD__=1"
# Check for the -fno-stack-protector silliness
_CFLAGS="$_CFLAGS -I`$DEFAULT_CC -m32 -print-search-dirs | head -n 1 | cut -d' ' -f2`include"
-_LDFLAGS="-Wl,-T,$_LIBDIR/libpayload.ldscript -static"
+_LDFLAGS="$_LDSCRIPT -static"
if [ $DOLINK -eq 0 ]; then
if [ $DEBUGME -eq 1 ]; then
else
_LIBGCC=`$DEFAULT_CC -m32 -print-libgcc-file-name`
if [ $DEBUGME -eq 1 ]; then
- echo "$DEFAULT_CC $_CFLAGS $_LDFLAGS $CMDLINE $_LIBDIR/i386/head.o $_LIBDIR/libpayload.a $_LIBGCC"
+ echo "$DEFAULT_CC $_CFLAGS $_LDFLAGS $_ARCHLIBDIR/head.o $CMDLINE $_LIBDIR/libpayload.a $_LIBGCC"
fi
- $DEFAULT_CC $_CFLAGS $_LDFLAGS $CMDLINE $_LIBDIR/i386/head.o $_LIBDIR/libpayload.a $_LIBGCC
+ # Note: $_ARCHLIBDIR/head.o must be the first object being linked, because it
+ # contains a Multiboot header. The Multiboot standard requires this
+ # header to be placed below 0x2000 in the resulting image. See:
+ # http://www.gnu.org/software/grub/manual/multiboot/html_node/OS-image-format.html
+
+ $DEFAULT_CC $_CFLAGS $_LDFLAGS $_ARCHLIBDIR/head.o $CMDLINE $_LIBDIR/libpayload.a $_LIBGCC
fi