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