coreboot/payloads/libpayload/bin/lpgcc
<<
>>
Prefs
   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
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.