build-kernel.sh revision 2905b20226f06f50140804fe130764e98f2bd975
15c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner#!/bin/sh
25c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner#
35c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner# A small script used to rebuild the Android goldfish kernel image
45c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner# See docs/KERNEL.TXT for usage instructions.
55c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner#
65c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerMACHINE=goldfish
75c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerVARIANT=goldfish
85c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerOUTPUT=/tmp/kernel-qemu
99ada5ea3626964561ed983c64cf04bcdf44e6806Andrew HsiehCROSSPREFIX=arm-linux-androideabi-
105c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerCONFIG=goldfish
115c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
12fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner# Determine the host architecture, and which default prebuilt tag we need.
13fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner# For the toolchain auto-detection.
14fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner#
15fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' TurnerHOST_OS=`uname -s`
16fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnercase "$HOST_OS" in
17fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    Darwin)
18fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        HOST_OS=darwin
19fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        HOST_TAG=darwin-x86
20fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        BUILD_NUM_CPUS=$(sysctl -n hw.ncpu)
21fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        ;;
22fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    Linux)
23fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        # note that building  32-bit binaries on x86_64 is handled later
24fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        HOST_OS=linux
25fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        HOST_TAG=linux-x86
26fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        BUILD_NUM_CPUS=$(grep -c processor /proc/cpuinfo)
27fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        ;;
28fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    *)
29fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        echo "ERROR: Unsupported OS: $HOST_OS"
30fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        exit 1
31fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turneresac
32fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner
33fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner# Default number of parallel jobs during the build: cores * 2
34fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' TurnerJOBS=$(( $BUILD_NUM_CPUS * 2 ))
355c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
365c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerARCH=arm
375c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
385c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerOPTION_HELP=no
3963e03bb38594807c04d9bb184e3204235916e689Young-Ho ChaOPTION_ARMV7=yes
405c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerOPTION_OUT=
415c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerOPTION_CROSS=
425c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerOPTION_ARCH=
435c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerOPTION_CONFIG=
448621048ded576220927651915e2d6942096f31bcYoung-Ho ChaOPTION_SAVEDEFCONFIG=no
45fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' TurnerOPTION_JOBS=
46ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' TurnerOPTION_VERBOSE=
472905b20226f06f50140804fe130764e98f2bd975Young-Ho ChaCCACHE=
482905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha
492905b20226f06f50140804fe130764e98f2bd975Young-Ho Chacase "$USE_CCACHE" in
502905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha    "")
512905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        CCACHE=
522905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        ;;
532905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha    *)
542905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        # use ccache bundled in AOSP source tree
552905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        CCACHE=${ANDROID_BUILD_TOP:-$(dirname $0)/../../..}/prebuilts/misc/$HOST_TAG/ccache/ccache
562905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        [ -x $CCACHE ] || CCACHE=
572905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        ;;
582905b20226f06f50140804fe130764e98f2bd975Young-Ho Chaesac
595c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
605c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfor opt do
615c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
625c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    case $opt in
635c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    --help|-h|-\?) OPTION_HELP=yes
645c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
6563e03bb38594807c04d9bb184e3204235916e689Young-Ho Cha    --armv5)
6663e03bb38594807c04d9bb184e3204235916e689Young-Ho Cha        OPTION_ARMV7=no
6763e03bb38594807c04d9bb184e3204235916e689Young-Ho Cha        ;;
685c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    --armv7)
695c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        OPTION_ARMV7=yes
705c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
715c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    --out=*)
725c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        OPTION_OUT=$optarg
735c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
745c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    --cross=*)
755c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        OPTION_CROSS=$optarg
765c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
775c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    --arch=*)
785c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        OPTION_ARCH=$optarg
795c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
805c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    --config=*)
815c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        OPTION_CONFIG=$optarg
825c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
838621048ded576220927651915e2d6942096f31bcYoung-Ho Cha    --savedefconfig)
848621048ded576220927651915e2d6942096f31bcYoung-Ho Cha        OPTION_SAVEDEFCONFIG=yes
858621048ded576220927651915e2d6942096f31bcYoung-Ho Cha        ;;
862905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha    --ccache=*)
872905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        CCACHE=$optarg
882905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha        ;;
89ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turner    --verbose)
90ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turner        OPTION_VERBOSE=true
91ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turner        ;;
925c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    -j*)
93fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OPTION_JOBS=$optarg
945c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        ;;
955c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    *)
965c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        echo "unknown option '$opt', use --help"
975c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        exit 1
985c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    esac
995c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerdone
1005c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1015c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ $OPTION_HELP = "yes" ] ; then
1025c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "Rebuild the prebuilt kernel binary for Android's emulator."
1035c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo ""
1045c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "options (defaults are within brackets):"
1055c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo ""
1065c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "  --help                   print this message"
1075c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "  --arch=<arch>            change target architecture [$ARCH]"
10863e03bb38594807c04d9bb184e3204235916e689Young-Ho Cha    echo "  --armv5                  build ARMv5 binaries"
10963e03bb38594807c04d9bb184e3204235916e689Young-Ho Cha    echo "  --armv7                  build ARMv7 binaries (default. see note below)"
1105c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "  --out=<directory>        output directory [$OUTPUT]"
1115c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "  --cross=<prefix>         cross-toolchain prefix [$CROSSPREFIX]"
1125c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "  --config=<name>          kernel config name [$CONFIG]"
1138621048ded576220927651915e2d6942096f31bcYoung-Ho Cha    echo "  --savedefconfig          run savedefconfig"
1142905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha    echo "  --ccache=<path>          use compiler cache [${CCACHE:-not set}]"
115ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turner    echo "  --verbose                show build commands"
116fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    echo "  -j<number>               launch <number> parallel build jobs [$JOBS]"
1175c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo ""
1185c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "NOTE: --armv7 is equivalent to --config=goldfish_armv7. It is"
1195c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "      ignored if --config=<name> is used."
1205c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo ""
1215c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    exit 0
1225c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
1235c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1245c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ -n "$OPTION_ARCH" ]; then
125fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    ARCH=$OPTION_ARCH
1265c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
1275c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1285c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ -n "$OPTION_CONFIG" ]; then
129fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    CONFIG=$OPTION_CONFIG
130fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnerelse
131fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    if [ "$OPTION_ARMV7" = "yes" ]; then
132fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        CONFIG=goldfish_armv7
133fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    fi
134fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    echo "Auto-config: --config=$CONFIG"
1355c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
1365c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1375c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner# Check that we are in the kernel directory
1385c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ ! -d arch/$ARCH/mach-$MACHINE ] ; then
1395c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "Cannot find arch/$ARCH/mach-$MACHINE. Please cd to the kernel source directory."
1405c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "Aborting."
1415c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    #exit 1
1425c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
1435c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1445c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner# Check output directory.
1455c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ -n "$OPTION_OUT" ] ; then
1465c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    if [ ! -d "$OPTION_OUT" ] ; then
1475c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        echo "Output directory '$OPTION_OUT' does not exist ! Aborting."
1485c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        exit 1
1495c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    fi
1505c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    OUTPUT=$OPTION_OUT
1515c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerelse
1525c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    mkdir -p $OUTPUT
1535c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
1545c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1555c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ -n "$OPTION_CROSS" ] ; then
1565c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    CROSSPREFIX="$OPTION_CROSS"
1575c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerelse
1585c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    case $ARCH in
1595c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        arm)
1609ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh            CROSSTOOLCHAIN=arm-linux-androideabi-4.6
1619ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh            CROSSPREFIX=arm-linux-androideabi-
1625c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner            ;;
1635c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        x86)
1640621eeb599686e1d7dea3bf39ae8057bec574e0dH.J. Lu            CROSSTOOLCHAIN=i686-linux-android-4.6
1650621eeb599686e1d7dea3bf39ae8057bec574e0dH.J. Lu            CROSSPREFIX=i686-linux-android-
1665c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner            ;;
16788f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli        mips)
1689ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh            CROSSTOOLCHAIN=mipsel-linux-android-4.6
16988f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli            CROSSPREFIX=mipsel-linux-android-
17088f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli            ;;
1715c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner        *)
1725c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner            echo "ERROR: Unsupported architecture!"
1735c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner            exit 1
1745c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner            ;;
1755c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    esac
176fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    echo "Auto-config: --cross=$CROSSPREFIX"
1775c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
1785c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
1796f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew HsiehZIMAGE=zImage
1806f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsieh
1816f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsiehcase $ARCH in
1826f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsieh    x86)
1836f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsieh        ZIMAGE=bzImage
1846f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsieh        ;;
18588f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli    mips)
18688f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli        ZIMAGE=
18788f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli        ;;
1886f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsiehesac
1896f0425a8f6d386d7ca10e69ad90cbd5d5c5228a9Andrew Hsieh
190fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner# If the cross-compiler is not in the path, try to find it automatically
191fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' TurnerCROSS_COMPILER="${CROSSPREFIX}gcc"
1925c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' TurnerCROSS_COMPILER_VERSION=$($CROSS_COMPILER --version 2>/dev/null)
1935c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ $? != 0 ] ; then
194fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    BUILD_TOP=$ANDROID_BUILD_TOP
195fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    if [ -z "$BUILD_TOP" ]; then
196fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        # Assume this script is under external/qemu/distrib/ in the
197fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        # Android source tree.
198fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        BUILD_TOP=$(dirname $0)/../../..
1999ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh        if [ ! -d "$BUILD_TOP/prebuilts" ]; then
200fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner            BUILD_TOP=
201fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        else
202fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner            BUILD_TOP=$(cd $BUILD_TOP && pwd)
203fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        fi
204fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    fi
2059ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh    CROSSPREFIX=$BUILD_TOP/prebuilts/gcc/$HOST_TAG/$ARCH/$CROSSTOOLCHAIN/bin/$CROSSPREFIX
206fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    if [ "$BUILD_TOP" -a -f ${CROSSPREFIX}gcc ]; then
207fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        echo "Auto-config: --cross=$CROSSPREFIX"
208fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    else
209fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        echo "It looks like $CROSS_COMPILER is not in your path ! Aborting."
210fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        exit 1
211fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    fi
212fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnerfi
213fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner
2142905b20226f06f50140804fe130764e98f2bd975Young-Ho Chaif [ "$CCACHE" ] ; then
2152905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha    echo "Using ccache program: $CCACHE"
2162905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha    CROSSPREFIX="$CCACHE $CROSSPREFIX"
2172905b20226f06f50140804fe130764e98f2bd975Young-Ho Chafi
2182905b20226f06f50140804fe130764e98f2bd975Young-Ho Cha
219fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnerexport CROSS_COMPILE="$CROSSPREFIX" ARCH SUBARCH=$ARCH
220fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner
221fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnerif [ "$OPTION_JOBS" ]; then
222fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    JOBS=$OPTION_JOBS
223fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnerelse
224fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    echo "Auto-config: -j$JOBS"
2255c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
2265c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
227bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
228bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner# Special magic redirection with our magic toolbox script
2299ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh# This is needed to add extra compiler flags to compiler.
2309ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsieh# See kernel-toolchain/android-kernel-toolchain-* for details
231bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner#
2329ada5ea3626964561ed983c64cf04bcdf44e6806Andrew Hsiehexport REAL_CROSS_COMPILE="$CROSS_COMPILE"
2339ada5ea3626964561ed983c64cf04bcdf44e6806Andrew HsiehCROSS_COMPILE=$(dirname "$0")/kernel-toolchain/android-kernel-toolchain-
234bc9cbbe2a02d84d57854c211449f6491a6140eabDavid 'Digit' Turner
235ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' TurnerMAKE_FLAGS=
236ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turnerif [ "$OPTION_VERBOSE" ]; then
237ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turner  MAKE_FLAGS="$MAKE_FLAGS V=1"
238ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turnerfi
239ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turner
240fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner# Do the build
241fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner#
2425c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerrm -f include/asm &&
2435c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnermake ${CONFIG}_defconfig &&    # configure the kernel
244ebba0e7bc8fe2cddaf2c7fd13c04a00353793726David 'Digit' Turnermake -j$JOBS $MAKE_FLAGS       # build it
2455c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
2465c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerif [ $? != 0 ] ; then
2475c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    echo "Could not build the kernel. Aborting !"
2485c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner    exit 1
2495c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerfi
2505c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
2518621048ded576220927651915e2d6942096f31bcYoung-Ho Chaif [ "$OPTION_SAVEDEFCONFIG" = "yes" ]; then
2528621048ded576220927651915e2d6942096f31bcYoung-Ho Cha    make savedefconfig
2538621048ded576220927651915e2d6942096f31bcYoung-Ho Cha    mv -f defconfig arch/$ARCH/configs/${CONFIG}_defconfig
2548621048ded576220927651915e2d6942096f31bcYoung-Ho Chafi
2558621048ded576220927651915e2d6942096f31bcYoung-Ho Cha
256fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner# Note: The exact names of the output files are important for the Android build,
257fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner#       do not change the definitions lightly.
258fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turnercase $CONFIG in
259fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    vbox*)
260fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_KERNEL=kernel-vbox
261fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_VMLINUX=vmlinux-vbox
262fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        ;;
263fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    goldfish)
264fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_KERNEL=kernel-qemu
265fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_VMLINUX=vmlinux-qemu
266fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        ;;
267fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    goldfish_armv7)
268fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_KERNEL=kernel-qemu-armv7
269fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_VMLINUX=vmlinux-qemu-armv7
270fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        ;;
271fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner    *)
272fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_KERNEL=kernel-$CONFIG
273fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turner        OUTPUT_VMLINUX=vmlinux-$CONFIG
274fe6c89d7d8684c112db7da6bbea12284c4896f3aDavid 'Digit' Turneresac
2755c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
2765c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnercp -f vmlinux $OUTPUT/$OUTPUT_VMLINUX
27788f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalliif [ ! -z $ZIMAGE ]; then
27888f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapalli    cp -f arch/$ARCH/boot/$ZIMAGE $OUTPUT/$OUTPUT_KERNEL
27988f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapallielse
2809bc2c5eba30c83bf3a1ae78f99a79eb763fd267bBhanu Chetlapalli    cp -f vmlinux $OUTPUT/$OUTPUT_KERNEL
28188f828e91ff4f13fb3d4f873fc0eedd6ef49a156Bhanu Chetlapallifi
2829bc2c5eba30c83bf3a1ae78f99a79eb763fd267bBhanu Chetlapalliecho "Kernel $CONFIG prebuilt images ($OUTPUT_KERNEL and $OUTPUT_VMLINUX) copied to $OUTPUT successfully !"
2835c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turner
2845c25d3d60c64efb11709b625714ca1dac7c043f4David 'Digit' Turnerexit 0
285