Home | History | Annotate | Download | only in gdk
      1 #!/bin/sh
      2 #
      3 # Copyright (C) 2010 The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 #
     17 #  This shell script is a wrapper to launch the NDK build from the
     18 #  command-line inside an application project path.
     19 #
     20 #  Typical usage is:
     21 #
     22 #     cd $PROJECT_PATH
     23 #     ndk-build
     24 #
     25 #  Assuming that the Android NDK root path is in your PATH. However,
     26 #  you can also invoke it directly as:
     27 #
     28 #     $NDK_ROOT/ndk-build
     29 #
     30 #  This really is a tiny wrapper around GNU Make.
     31 #
     32 
     33 # Ensure we get the full path of this script's directory
     34 # this is needed if the caller uses the -C <path> GNU Make
     35 # option, as in:
     36 #
     37 #    cd ndk
     38 #    ./ndk-build -C <project-path>
     39 #
     40 
     41 if [ -z "$NDK_ROOT" ] ; then
     42   if [ $# -lt 1 ]; then
     43       echo "Usage: $0 --ndk-root=<where> ..."
     44       echo
     45       exit 1
     46   fi
     47 
     48   if [ `echo $1 | awk -F '=' '{print $1}'` != "--ndk-root" ]; then
     49       echo "Usage: $0 --ndk-root=<where> ..."
     50       echo
     51       exit 1
     52   fi
     53   NDK_ROOT=`echo $1 | awk -F '=' '{print $2}'`
     54   shift 1
     55 fi
     56 
     57 PROGDIR=`dirname $0`
     58 PROGDIR=`cd $PROGDIR && pwd`
     59 
     60 if [ -z "$OUT" ] ; then
     61   echo "ERROR: Your OUT variable is not defined. Please set it by running \"lunch PRODUCT\""
     62   echo "This is a workaroud for libbcc"
     63   exit 1
     64 fi
     65 
     66 # If GNUMAKE is defined, check that it points to a valid file
     67 if [ -n "$GNUMAKE" ] ; then
     68     ABS_GNUMAKE=`which $GNUMAKE 2> /dev/null`
     69     if [ $? != 0 ] ; then
     70         echo "ERROR: Your GNUMAKE variable is defined to an invalid name: $GNUMAKE"
     71         echo "Please fix it to point to a valid make executable (e.g. /usr/bin/make)"
     72         exit 1
     73     fi
     74     GNUMAKE="$ABS_GNUMAKE"
     75 else
     76     # Otherwise, use 'make' and check that it is available
     77     GNUMAKE=`which make 2> /dev/null`
     78     if [ $? != 0 ] ; then
     79         echo "ERROR: Cannot find 'make' program. Please install Cygwin make package"
     80         echo "or define the GNUMAKE variable to point to it."
     81         exit 1
     82     fi
     83 fi
     84 
     85 # On Windows, when running under cygwin, check that we are
     86 # invoking a cygwin-compatible GNU Make binary. It is unfortunately
     87 # common for app developers to have another non-cygwin compatible
     88 #
     89 if [ "$OSTYPE" = "cygwin" ] ; then
     90     GNUMAKE=`cygpath -u $GNUMAKE`
     91     PROGDIR_MIXED=`cygpath -m $PROGDIR`
     92     CYGWIN_GNUMAKE=`$GNUMAKE -f "$PROGDIR_MIXED/build/core/check-cygwin-make.mk" 2>&1`
     93     if [ $? != 0 ] ; then
     94         echo "ERROR: You are using a non-Cygwin compatible Make program."
     95         echo "Currently using: `cygpath -m $GNUMAKE`"
     96         echo ""
     97         echo "To solve the issue, follow these steps:"
     98         echo ""
     99         echo "1. Ensure that the Cygwin 'make' package is installed."
    100         echo "   NOTE: You will need GNU Make 3.81 or later!"
    101         echo ""
    102         echo "2. Define the GNUMAKE environment variable to point to it, as in:"
    103         echo ""
    104         echo "     export GNUMAKE=/usr/bin/make"
    105         echo ""
    106         echo "3. Call 'ndk-build' again."
    107         echo ""
    108         exit 1
    109     fi
    110 fi
    111 
    112 NDK_ROOT=$NDK_ROOT $GNUMAKE -f $PROGDIR/build/core/build-local.mk "$@"
    113 
    114 # Transfer the control power to NDK
    115 if [ $? -eq 0 ]; then
    116   $GNUMAKE -f $NDK_ROOT/build/core/build-local.mk "$@"
    117 fi
    118