#!/bin/sh
#
# This is a wrapper around our toolchain that allows us to add a few
# compiler flags.
# The issue is that our toolchain are NDK-compatible, and hence enforces
# -fpic (and also -mfpmath=sse for x86) by default.  When building the
# kernel, we need to disable this.
#
# Also support ccache compilation if USE_CCACHE is defined as "1"
#

# REAL_CROSS_COMPILE must be defined, and its value must be one of the
# CROSS_COMPILE values that are supported by the Kernel build system
# (e.g. "i686-linux-android-")
#
if [ -z "$REAL_CROSS_COMPILE" ]; then
    echo "ERROR: The REAL_CROSS_COMPILE environment variable should be defined!"
    exit 1
fi

# ARCH must also be defined before calling this script, e.g. 'arm' or 'x86'
#
if [ -z "$ARCH" ]; then
    echo "ERROR: ARCH must be defined!"
    exit 1
fi

# Common prefix for all fake toolchain programs, which are all really
# symlinks to this script, i.e.
#
# $PROGPREFIX-gcc  --> $0
# $PROGPREFIX-ld   --> $0
# etc...
#
PROGPREFIX=android-kernel-toolchain-

# Get program name, must be of the form $PROGPREFIX-<suffix>, where
# <suffix> can be 'gcc', 'ld', etc... We expect that the fake toolchain
# files are all symlinks to this script.
#
PROGNAME=$(basename "$0")
PROGSUFFIX=${PROGNAME##$PROGPREFIX}

EXTRA_FLAGS=

if [ "$PROGSUFFIX" = gcc ]; then
    # Special case #1: For all, disable PIC code
    EXTRA_FLAGS=$EXTRA_FLAGS" -fno-pic"
    case $ARCH in
        x86)
            # Special case #2: For x86, disable SSE FPU arithmetic too
            EXTRA_FLAGS=$EXTRA_FLAGS" -m32 -mfpmath=387"
            ;;
    esac
fi

# Invoke real cross-compiler toolchain program now
${REAL_CROSS_COMPILE}$PROGSUFFIX $EXTRA_FLAGS "$@"
