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