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
41if [ -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
55fi
56
57PROGDIR=`dirname $0`
58PROGDIR=`cd $PROGDIR && pwd`
59
60if [ -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
64fi
65
66# If GNUMAKE is defined, check that it points to a valid file
67if [ -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"
75else
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
83fi
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#
89if [ "$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
110fi
111
112NDK_ROOT=$NDK_ROOT $GNUMAKE -f $PROGDIR/build/core/build-local.mk "$@"
113
114# Transfer the control power to NDK
115if [ $? -eq 0 ]; then
116  $GNUMAKE -f $NDK_ROOT/build/core/build-local.mk "$@"
117fi
118