1#!/bin/sh 2## This file is part of the libpayload project. 3## 4## Copyright (C) 2008 Advanced Micro Devices, Inc. 5## 6## Redistribution and use in source and binary forms, with or without 7## modification, are permitted provided that the following conditions 8## are met: 9## 1. Redistributions of source code must retain the above copyright 10## notice, this list of conditions and the following disclaimer. 11## 2. Redistributions in binary form must reproduce the above copyright 12## notice, this list of conditions and the following disclaimer in the 13## documentation and/or other materials provided with the distribution. 14## 3. The name of the author may not be used to endorse or promote products 15## derived from this software without specific prior written permission. 16## 17## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27## SUCH DAMAGE. 28 29# GCC wrapper for libpayload 30# let's not recurse. 31# This is a hack, I know, but it makes sure that really simple user errors 32# don't fork-bomb your machine. 33# echo "CC = $CC" 34 35if [ -n "$CC" ]; then 36b=`basename $CC` 37if [ "$b" = "lpgcc" ]; then 38CC="" 39fi 40fi 41 42 43 44if [ "$CC" != "" ]; then 45DEFAULT_CC=$CC 46else 47DEFAULT_CC=gcc 48fi 49 50BASE=`dirname $0` 51 52# This will set the _LIBDIR and _INCDIR variables used below 53. $BASE/lp.functions 54 55# include libpayload config 56. $BASE/../libpayload.config 57 58_LDSCRIPT="-Wl,-T,$_LIBDIR/libpayload.ldscript" 59 60trygccoption() { 61 $DEFAULT_CC $1 -S -xc /dev/null -o .$$.tmp &> /dev/null 62 RET=$? 63 rm -f .$$.tmp 64 return $RET 65} 66 67DEBUGME=0 68DOLINK=1 69 70# This variable will contain the command line that the user wants to 71# pass to gas 72 73CMDLINE= 74 75# Process various flags that would change our behavior 76 77while [ $# -gt 0 ]; do 78 case $1 in 79 -m32|-fno-stack-protector) 80 shift 81 continue 82 ;; 83 -m64) 84 error "Invalid option --64 - only 32 bit architectures are supported" 85 ;; 86 -c) 87 DOLINK=0 88 ;; 89 -debug-wrapper) 90 DEBUGME=1 91 shift 92 continue 93 ;; 94 -Wl,-T,*) 95 _LDSCRIPT="$1" 96 shift 97 continue 98 ;; 99 *) 100 ;; 101 esac 102 103 CMDLINE="$CMDLINE $1" 104 shift 105done 106 107if [ "$CONFIG_TARGET_I386" = "y" ]; then 108 _ARCHINCDIR=$_INCDIR/i386 109 _ARCHLIBDIR=$_LIBDIR/i386 110fi 111 112if [ "$CONFIG_TARGET_POWERPC" = "y" ]; then 113 _ARCHINCDIR=$_INCDIR/powerpc 114 _ARCHLIBDIR=$_LIBDIR/powerpc 115fi 116 117_CFLAGS="-m32 -nostdinc -nostdlib -I$_INCDIR -I$_ARCHINCDIR -D__LIBPAYLOAD__=1" 118 119# Check for the -fno-stack-protector silliness 120 121trygccoption -fno-stack-protector 122[ $? -eq 0 ] && _CFLAGS="$_CFLAGS -fno-stack-protector" 123 124_CFLAGS="$_CFLAGS -I`$DEFAULT_CC -m32 -print-search-dirs | head -n 1 | cut -d' ' -f2`include" 125 126_LDFLAGS="-L$BASE/../lib $_LDSCRIPT -static" 127 128if [ $DOLINK -eq 0 ]; then 129 if [ $DEBUGME -eq 1 ]; then 130 echo "$DEFAULT_CC $_CFLAGS $CMDLINE" 131 fi 132 133 $DEFAULT_CC $_CFLAGS $CMDLINE 134else 135 _LIBGCC=`$DEFAULT_CC -m32 -print-libgcc-file-name` 136 if [ $DEBUGME -eq 1 ]; then 137 echo "$DEFAULT_CC $_CFLAGS $_LDFLAGS $_ARCHLIBDIR/head.o $CMDLINE -lpayload $_LIBGCC" 138 fi 139 140 # Note: $_ARCHLIBDIR/head.o must be the first object being linked, because it 141 # contains a Multiboot header. The Multiboot standard requires this 142 # header to be placed below 0x2000 in the resulting image. See: 143 # http://www.gnu.org/software/grub/manual/multiboot/html_node/OS-image-format.html 144 145 $DEFAULT_CC $_CFLAGS $_LDFLAGS $_ARCHLIBDIR/head.o $CMDLINE -lpayload $_LIBGCC 146fi 147

