16724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner#!/bin/sh 26724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 36724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Copyright (C) 2010 The Android Open Source Project 46724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 56724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License"); 66724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# you may not use this file except in compliance with the License. 76724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# You may obtain a copy of the License at 86724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 96724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# http://www.apache.org/licenses/LICENSE-2.0 106724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 116724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software 126724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS, 136724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 146724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# See the License for the specific language governing permissions and 156724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# limitations under the License. 166724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 176724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# This shell script is a wrapper to launch the NDK build from the 186724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# command-line inside an application project path. 196724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 206724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Typical usage is: 216724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 226724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# cd $PROJECT_PATH 236724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ndk-build 246724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 256724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Assuming that the Android NDK root path is in your PATH. However, 266724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# you can also invoke it directly as: 276724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 286724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# $NDK_ROOT/ndk-build 296724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 306724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# This really is a tiny wrapper around GNU Make. 316724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 32a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner 33a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# Ensure we get the full path of this script's directory 34a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# this is needed if the caller uses the -C <path> GNU Make 35a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# option, as in: 36a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# 37a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# cd ndk 38a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# ./ndk-build -C <project-path> 39a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# 406724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerPROGDIR=`dirname $0` 41d8276e9ad1bdc4f3209de6ab28eba0d61e69e3eeAndrew HsiehPROGDIR=`cd $PROGDIR && pwd -P` 426724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 432c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsieh# Check if absolute NDK path contain space 442c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsieh# 452c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsiehcase $PROGDIR in 462c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsieh *\ *) echo "ERROR: NDK path cannot contain space" 472c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsieh exit 1 482c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsieh ;; 492c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsiehesac 502c1bb7ca4db1efd528e2ae7beac53b1b04cdb154Andrew Hsieh 515cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# If NDK_LOG is set to 1 or true in the environment, or the command-line 525cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# then enable log messages below 538fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh# Also normalize NDK_HOST_32BIT and NDK_ANALYZE to 1 or 0 545cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerif [ -z "$NDK_LOG" ]; then 555cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner NDK_LOG=0 565cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerfi 575cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 5818f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehif [ -z "$NDK_HOST_32BIT" ]; then 5918f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh NDK_HOST_32BIT=0 6018f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehfi 6118f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh 628fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehif [ -z "$NDK_ANALYZE" ]; then 638fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_ANALYZE=0 648fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehfi 658fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 668fbff41d699dad1386dcdf58e02b7263939abe41Andrew HsiehPROJECT_PATH= 678fbff41d699dad1386dcdf58e02b7263939abe41Andrew HsiehPROJECT_PATH_NEXT= 685cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerfor opt; do 698fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh if [ -z "$PROJECT_PATH" -a "$PROJECT_PATH_NEXT" = "yes" ] ; then 708fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh PROJECT_PATH=$opt 718fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh PROJECT_PATH_NEXT= 728fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh else 738fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh case $opt in 748fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_LOG=1|NDK_LOG=true) 758fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_LOG=1 768fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 778fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_LOG=*) 788fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_LOG=0 798fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 808fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_HOST_32BIT=1|NDK_HOST_32BIT=true) 818fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_HOST_32BIT=1 828fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 838fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_HOST_32BIT=*) 848fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_HOST_32BIT=0 858fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 868fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_ANALYZE=1|NDK_ANALYZE=true) 878fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_ANALYZE=1 888fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 898fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_ANALYZE=*) 908fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_ANALYZE=0 918fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 928fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_TOOLCHAIN_VERSION=*) 938fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_TOOLCHAIN_VERSION=${opt#NDK_TOOLCHAIN_VERSION=} 948fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 958fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh APP_ABI=*) 968fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh APP_ABI=${opt#APP_ABI=} 978fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 988fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh -C) 998fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh PROJECT_PATH_NEXT="yes" 1008fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh ;; 1018fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh esac 1028fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh fi 1035cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerdone 1045cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 1055cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerif [ "$NDK_LOG" = "true" ]; then 1065cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner NDK_LOG=1 1075cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerfi 10818f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh 10918f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehif [ "$NDK_HOST_32BIT" = "true" ]; then 11018f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh NDK_HOST_32BIT=1 11118f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehfi 11218f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh 1138fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehif [ "$NDK_ANALYZE" = "true" ]; then 1148fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh NDK_ANALYZE=1 1158fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehfi 1168fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 11718f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehif [ "$NDK_LOG" = "1" ]; then 1185cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log () { 1195cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner echo "$@" 1205cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner } 1215cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerelse 1225cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log () { 1235cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner : # nothing 1245cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner } 1255cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerfi 1265cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 1275cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# Detect host operating system and architecture 1285cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# The 64-bit / 32-bit distinction gets tricky on Linux and Darwin because 1295cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# uname -m returns the kernel's bit size, and it's possible to run with 1305cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# a 64-bit kernel and a 32-bit userland. 1315cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# 1325cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' TurnerHOST_OS=$(uname -s) 1335cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnercase $HOST_OS in 1345cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner Darwin) HOST_OS=darwin;; 1355cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner Linux) HOST_OS=linux;; 1365cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner FreeBsd) HOST_OS=freebsd;; 1375cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner CYGWIN*|*_NT-*) HOST_OS=cygwin;; 1385cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner *) echo "ERROR: Unknown host operating system: $HOST_OS" 1395cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner exit 1 1405cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turneresac 1415cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerlog "HOST_OS=$HOST_OS" 1425cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 1435cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' TurnerHOST_ARCH=$(uname -m) 1445cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnercase $HOST_ARCH in 1455cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner i?86) HOST_ARCH=x86;; 1465cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner x86_64|amd64) HOST_ARCH=x86_64;; 1475cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner *) echo "ERROR: Unknown host CPU architecture: $HOST_ARCH" 1485cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner exit 1 1495cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turneresac 1505cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerlog "HOST_ARCH=$HOST_ARCH" 1515cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 1525cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# Detect 32-bit userland on 64-bit kernels 1535cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' TurnerHOST_TAG="$HOST_OS-$HOST_ARCH" 1545cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnercase $HOST_TAG in 1555cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner linux-x86_64|darwin-x86_64) 1565cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner # we look for x86_64 or x86-64 in the output of 'file' for our shell 1575cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner # the -L flag is used to dereference symlinks, just in case. 1585cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner file -L "$SHELL" | grep -q "x86[_-]64" 1595cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner if [ $? != 0 ]; then 1605cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner HOST_ARCH=x86 1615cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log "HOST_ARCH=$HOST_ARCH (32-bit userland detected)" 1625cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner fi 1635cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner ;; 1645cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turneresac 1655cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 1665cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# Check that we have 64-bit binaries on 64-bit system, otherwise fallback 1675cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# on 32-bit ones. This gives us more freedom in packaging the NDK. 16818f80b1624fdf4491c674986564f07e486e06c75Andrew HsiehLOG_MESSAGE= 16918f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehif [ $HOST_ARCH = x86_64 ]; then 17018f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh if [ ! -d $PROGDIR/prebuilt/$HOST_TAG ]; then 17118f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh HOST_ARCH=x86 17218f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh LOG_MESSAGE="(no 64-bit prebuilt binaries detected)" 1735cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner fi 17418f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh 17518f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh if [ "$NDK_HOST_32BIT" = "1" ]; then 17618f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh HOST_ARCH=x86 17718f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh LOG_MESSAGE="(force 32-bit host toolchain)" 17818f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh fi 17918f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehfi 18018f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh 18118f80b1624fdf4491c674986564f07e486e06c75Andrew HsiehHOST_TAG=$HOST_OS-$HOST_ARCH 18218f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh# Special case windows-x86 -> windows 18318f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehif [ $HOST_TAG = windows-x86 ]; then 18418f80b1624fdf4491c674986564f07e486e06c75Andrew Hsieh HOST_TAG=windows 1855cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turnerfi 18618f80b1624fdf4491c674986564f07e486e06c75Andrew Hsiehlog "HOST_TAG=$HOST_TAG $LOG_MESSAGE" 1875cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner 18833202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner# If GNUMAKE is defined, check that it points to a valid file 18933202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turnerif [ -n "$GNUMAKE" ] ; then 19033202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner ABS_GNUMAKE=`which $GNUMAKE 2> /dev/null` 19133202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner if [ $? != 0 ] ; then 19233202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner echo "ERROR: Your GNUMAKE variable is defined to an invalid name: $GNUMAKE" 19333202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner echo "Please fix it to point to a valid make executable (e.g. /usr/bin/make)" 19433202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner exit 1 19533202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner fi 19633202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner GNUMAKE="$ABS_GNUMAKE" 1975cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log "GNUMAKE=$GNUMAKE (from environment variable)" 19833202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turnerelse 1995cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner # Otherwise use the prebuilt version for our host tag, if it exists 2005cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner # Note: we intentionally do not provide prebuilt make binaries for Cygwin 2015cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner # or MSys. 2025cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner GNUMAKE=$PROGDIR/prebuilt/$HOST_TAG/bin/make 2035cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner if [ ! -f "$GNUMAKE" ]; then 2045cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner # Otherwise, use 'make' and check that it is available 2055cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner GNUMAKE=`which make 2> /dev/null` 2065cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner if [ $? != 0 ] ; then 2075cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner echo "ERROR: Cannot find 'make' program. Please install Cygwin make package" 2085cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner echo "or define the GNUMAKE variable to point to it." 2095cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner exit 1 2105cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner fi 2115cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log "GNUMAKE=$GNUMAKE (system path)" 2125cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner else 2135cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log "GNUMAKE=$GNUMAKE (NDK prebuilt)" 21433202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner fi 2156724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerfi 2166724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 217dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner# On Windows, when running under cygwin, check that we are 218dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner# invoking a cygwin-compatible GNU Make binary. It is unfortunately 2195cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# common for app developers to have another non cygwin-compatible 2205cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner# 'make' program in their PATH. 221dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner# 222dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turnerif [ "$OSTYPE" = "cygwin" ] ; then 223dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner GNUMAKE=`cygpath -u $GNUMAKE` 22433202f3b3008ce413717c04b7eefd8722eaa214cDavid 'Digit' Turner PROGDIR_MIXED=`cygpath -m $PROGDIR` 22599dcb2c517a0d9d9e7246cca9e668c04a8e348b8David 'Digit' Turner CYGWIN_GNUMAKE=`$GNUMAKE -f "$PROGDIR_MIXED/build/core/check-cygwin-make.mk" 2>&1` 226dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner if [ $? != 0 ] ; then 227dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "ERROR: You are using a non-Cygwin compatible Make program." 228dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "Currently using: `cygpath -m $GNUMAKE`" 229dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "" 230dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "To solve the issue, follow these steps:" 231dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "" 232dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "1. Ensure that the Cygwin 'make' package is installed." 233dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo " NOTE: You will need GNU Make 3.81 or later!" 234dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "" 235dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "2. Define the GNUMAKE environment variable to point to it, as in:" 236dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "" 237dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo " export GNUMAKE=/usr/bin/make" 238dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "" 239dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "3. Call 'ndk-build' again." 240dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner echo "" 241dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner exit 1 242dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner fi 2435cf36153892578ff9bb86053f0922f1b153345b6David 'Digit' Turner log "Cygwin-compatible GNU make detected" 244dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turnerfi 245dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner 2468fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehif [ "$NDK_ANALYZE" = 1 ]; then 2478fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh . $PROGDIR/build/tools/dev-defaults.sh # for DEFAULT_LLVM_VERSION 2488fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 2492641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh # Find perl. If HOST_PERL is defined, check that it points to a valid file 2502641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh HOST_PERL_LIB= 2512641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh if [ -n "$HOST_PERL" ] ; then 2522641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh ABS_PERL=`which $HOST_PERL 2> /dev/null` 2532641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh if [ $? != 0 ] ; then 2542641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh echo "ERROR: Your HOST_PERL variable is defined to an invalid name: $HOST_PERL" 2552641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh echo "Please fix it to point to a valid perl executable (e.g. /usr/bin/perl)" 2562641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh exit 1 2572641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh fi 2582641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh HOST_PERL="$ABS_PERL" 2592641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh log "HOST_PERL=$HOST_PERL (from environment variable)" 2602641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh else 2612641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh # Otherwise use the prebuilt version for our host tag 2622641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh HOST_PERL="$PROGDIR/prebuilt/$HOST_TAG/bin/perl" 2632641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh if [ ! -f "$HOST_PERL" ]; then 2642641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh # Otherwise, use 'perl' and check that it is available 2652641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh HOST_PERL=`which perl 2> /dev/null` 2662641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh if [ $? != 0 ] ; then 2672641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh echo "ERROR: Cannot find 'perl' program. Please install perl package" 2682641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh echo "or define the HOST_PERL variable to point to it." 2692641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh exit 1 2702641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh fi 2712641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh log "HOST_PERL=$HOST_PERL (system path)" 2722641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh else 2732641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh HOST_PERL_LIB="$PROGDIR/prebuilt/$HOST_TAG/lib/perl5" 2742641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh log "HOST_PERL=$HOST_PERL (NDK prebuilt)" 2752641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh fi 2762641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh fi 2772641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh 2788fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh # Return flags send in env. or command line which are enough to retrive APP_ABI and TOOLCHAIN_PREFIX later 2798fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh gen_flags () 2808fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh { 2818fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh local FLAGS= 2828fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 2838fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh if [ -n "$PROJECT_PATH" ] ; then 2848fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh FLAGS=$FLAGS" -C $PROJECT_PATH" 2858fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh fi 2868fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh if [ -n "$APP_ABI" ] ; then 2878fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh FLAGS=$FLAGS" APP_ABI=$APP_ABI" 2888fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh fi 2898fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh if [ -n "$NDK_HOST_32BIT" ] ; then 2908fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh FLAGS=$FLAGS" NDK_HOST_32BIT=$NDK_HOST_32BIT" 2918fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh fi 2928fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh if [ -n "$NDK_TOOLCHAIN_VERSION" ] ; then 2938fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh FLAGS=$FLAGS" NDK_TOOLCHAIN_VERSION=$NDK_TOOLCHAIN_VERSION" 2948fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh fi 2958fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh echo "$FLAGS" 2968fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh } 2978fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 2988fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh get_build_var () 2998fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh { 3008fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh local VAR=$1 3018fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh local FLAGS=`gen_flags` 3028fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh $GNUMAKE --no-print-dir -f $PROGDIR/build/core/build-local.mk $FLAGS DUMP_${VAR} | tail -1 3038fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh } 3048fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 3058fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh get_build_var_for_abi () 3068fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh { 3078fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh local VAR=$1 3088fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh local ABI=$2 3098fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh local FLAGS=`gen_flags` 3108fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh $GNUMAKE --no-print-dir -f $PROGDIR/build/core/build-local.mk $FLAGS DUMP_${VAR} APP_ABI=${ABI} | tail -1 3118fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh } 3128fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 3138fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh APP_ABIS=`get_build_var APP_ABI` 3148fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh for ABI in $APP_ABIS; do 3158fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh TOOLCHAIN_PREFIX=`get_build_var_for_abi TOOLCHAIN_PREFIX $ABI` 3162641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh PERL5LIB="$HOST_PERL_LIB" "$HOST_PERL" $PROGDIR/prebuilt/common/scan-build/scan-build \ 3178fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh --use-analyzer $PROGDIR/toolchains/llvm-${DEFAULT_LLVM_VERSION}/prebuilt/$HOST_TAG/bin/${ABI}/analyzer \ 3188fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh --use-cc ${TOOLCHAIN_PREFIX}gcc \ 3198fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh --use-c++ ${TOOLCHAIN_PREFIX}g++ \ 32016b7a31819fa874e981cf9ab5671aec76901d5d2Martin Storsjo --status-bugs \ 3218fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh $GNUMAKE -f $PROGDIR/build/core/build-local.mk "$@" APP_ABI=$ABI 3228fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh done 3238fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehelse 3248fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh $GNUMAKE -f $PROGDIR/build/core/build-local.mk "$@" 3258fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehfi 3268fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 327