1bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#!/bin/sh
2bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
39ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh# This is a wrapper around our toolchain that allows us to add a few
4bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# compiler flags.
59ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh# The issue is that our toolchain are NDK-compatible, and hence enforces
69ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh# -fpic (and also -mfpmath=sse for x86) by default.  When building the
79ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh# kernel, we need to disable this.
8bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
9bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# Also support ccache compilation if USE_CCACHE is defined as "1"
10bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
11bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
12bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# REAL_CROSS_COMPILE must be defined, and its value must be one of the
13bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# CROSS_COMPILE values that are supported by the Kernel build system
140621eeb599686e1d7dea3bf39ae8057bec574e0dH.J. Lu# (e.g. "i686-linux-android-")
15bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
16bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turnerif [ -z "$REAL_CROSS_COMPILE" ]; then
17bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner    echo "ERROR: The REAL_CROSS_COMPILE environment variable should be defined!"
18bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner    exit 1
19bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turnerfi
20bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
21bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# ARCH must also be defined before calling this script, e.g. 'arm' or 'x86'
22bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
23bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turnerif [ -z "$ARCH" ]; then
24bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner    echo "ERROR: ARCH must be defined!"
25bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner    exit 1
26bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turnerfi
27bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
28bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# Common prefix for all fake toolchain programs, which are all really
29bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# symlinks to this script, i.e.
30bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
31bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# $PROGPREFIX-gcc  --> $0
32bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# $PROGPREFIX-ld   --> $0
33bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# etc...
34bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
35bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' TurnerPROGPREFIX=android-kernel-toolchain-
36bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
37bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# Get program name, must be of the form $PROGPREFIX-<suffix>, where
38bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# <suffix> can be 'gcc', 'ld', etc... We expect that the fake toolchain
39bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# files are all symlinks to this script.
40bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
41bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' TurnerPROGNAME=$(basename "$0")
42bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' TurnerPROGSUFFIX=${PROGNAME##$PROGPREFIX}
43bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
44bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' TurnerEXTRA_FLAGS=
45bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
469ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsiehif [ "$PROGSUFFIX" = gcc ]; then
479ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh    # Special case #1: For all, disable PIC code
489ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh    EXTRA_FLAGS=$EXTRA_FLAGS" -fno-pic"
499ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh    if [ "$ARCH" = "x86" ]; then
509ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh        # Special case #2: For x86, disable SSE FPU arithmetic too
519ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh        EXTRA_FLAGS=$EXTRA_FLAGS" -mfpmath=387"
529ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh    fi
53bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turnerfi
54bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
55bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# Invoke real cross-compiler toolchain program now
56bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner${REAL_CROSS_COMPILE}$PROGSUFFIX $EXTRA_FLAGS "$@"
57