#!/bin/sh # # Copyright (C) 2009 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # A shell script used to configure the host-specific parts of the NDK # build system. This will create out/host/config-host.make based on # your host system and additionnal command-line options. # # check that this script is run from the top-level NDK directory if [ ! -f build/core/ndk-common.sh ] ; then echo "Please run this script from the top-level NDK directory as in:" echo " cd \$NDKROOT" echo " build/host-setup.sh" exit 1 fi # include common function and variable definitions . `dirname $0`/core/ndk-common.sh OUT_DIR=out HOST_CONFIG=$OUT_DIR/host/config.mk ## Build configuration file support ## you must define $config_mk before calling this function ## create_config_mk () { # create the directory if needed local config_dir config_mk=${config_mk:-$HOST_CONFIG} config_dir=`dirname $config_mk` mkdir -p $config_dir 2> $TMPL if [ $? != 0 ] ; then echo "Can't create directory for host config file: $config_dir" exit 1 fi # re-create the start of the configuration file log "Generate : $config_mk" echo "# This file was autogenerated by $PROGNAME. Do not edit !" > $config_mk } add_config () { echo "$1" >> $config_mk } # assume $1 points to a GNU Make executable, and extract version number # to verify its a least what we need check_gnu_make_version () { if [ -n "$GNU_MAKE" ] ; then return fi log2 " looking for GNU Make as '$1'" local executable=`which $1` if [ -z "$executable" ] ; then log2 " Not available." return fi # I'd love to do the version extraction with awk, but I'm unsure it is # part of the default Cygwin install, so don't bring the dependency # and rely on dumb tools instead. # local version major minor version=`$executable --version | grep "GNU Make"` if [ -z "$version" ] ; then log2 " Not a GNU Make executable." return fi version=`echo $version | sed -e 's/^GNU Make \([0-9\.]*\).*$/\1/g'` log2 " Found version $version" major=`echo $version | sed -e 's/\([0-9]*\)\..*/\1/g'` minor=`echo $version | sed -e 's/[0-9]*\.\(.*\)/\1/g'` if [ "$major" -lt "3" ] ; then log2 " Major version too small ($major.$minor < 3.81)." return fi if [ "$major" -eq "3" -a $minor -lt 80 ] ; then log2 " Minor version too small ($major.$minor < 3.81)." return fi GNU_MAKE=$1 GNU_MAKE_VERSION=$version } # check that $1 points to an awk executable that has a working # match() function. This really means Nawk or GNU Awk, which should # be installed on all modern distributions, but hey, you never know... check_awk () { if [ -n "$AWK" ] ; then return fi log2 " looking for nawk/gawk as '$1'" local executable=`which $1` if [ -z "$executable" ] ; then log2 " Not available." return fi local result result=`echo "" | $executable -f build/check-awk.awk` if [ "$result" == "Pass" ] ; then AWK="$1" fi log2 " Check $result" } OPTION_HELP=no OPTION_NO_MAKE_CHECK=no OPTION_NO_AWK_CHECK=no for opt do optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` case "$opt" in --help|-h|-\?) OPTION_HELP=yes ;; --no-make-check) OPTION_NO_MAKE_CHECK=yes ;; --no-awk-check) OPTION_NO_AWK_CHECK=yes ;; --verbose) if [ "$VERBOSE" = "yes" ] ; then VERBOSE2=yes else VERBOSE=yes fi ;; *) echo "unknown option '$opt', use --help" exit 1 esac done if [ $OPTION_HELP = yes ] ; then echo "Usage: build/host-setup.sh [options]" echo "" echo "This script is used to check your host development environment" echo "to ensure that the Android NDK will work correctly with it." echo "" echo "Options: [defaults in brackets after descriptions]" echo "" echo " --help Print this help message" echo " --verbose Enable verbose mode" echo " --no-make-check Ignore GNU Make version check" echo " --no-awk-check Ignore Nawk/Gawk check" echo "" exit 1 fi echo "Checking host development environment." echo "NDK Root : $ANDROID_NDK_ROOT" ## Check for GNU Make with a proper version number ## if [ "$OPTION_NO_MAKE_CHECK" = "no" ] ; then GNU_MAKE= check_gnu_make_version make check_gnu_make_version gmake if [ -z "$GNU_MAKE" ] ; then echo "ERROR: Could not find a valid GNU Make executable." echo " Please ensure GNU Make 3.81 or later is installed." echo " Use the --no-make-check option to ignore this message." exit 1 fi echo "GNU Make : $GNU_MAKE (version $GNU_MAKE_VERSION)" else echo "GNU Make : Check ignored through user option." fi ## Check for nawk or gawk, straight awk doesn't have the 'match' ## function we need in the build system. ## if [ "$OPTION_NO_AWK_CHECK" = "no" ] ; then AWK= check_awk awk check_awk gawk check_awk nawk if [ -z "$AWK" ] ; then echo "ERROR: Could not find a valid Nawk or Gawk executable." echo " Please ensure that either one of them is installed." echo " Use the --no-awk-check option to ignore this message." exit 1 fi echo "Awk : $AWK" else echo "Awk : Check ignored through user option." fi ## Check the host platform tag that will be used to locate prebuilt ## toolchain binaries. And create configuration file. ## force_32bit_binaries echo "Platform : $HOST_TAG" create_config_mk add_config "HOST_OS := $HOST_OS" add_config "HOST_ARCH := $HOST_ARCH" add_config "HOST_TAG := $HOST_TAG" add_config "HOST_AWK := $AWK" ## Check that the toolchains we need are installed ## Otherwise, instruct the user to download them from the web site TOOLCHAINS=arm-eabi-4.2.1 for tc in $TOOLCHAINS; do echo "Toolchain : Checking for $tc prebuilt binaries" PREBUILT_BIN=build/prebuilt/$HOST_TAG/$tc/bin log2 "Toolchain : Cross-compiler in <NDK>/$PREBUILT_BIN ?" COMPILER_PATTERN=$ANDROID_NDK_ROOT/$PREBUILT_BIN/*-gcc$HOST_EXE COMPILERS=`ls $COMPILER_PATTERN 2> /dev/null` if [ -z $COMPILERS ] ; then echo "" echo "ERROR: Toolchain compiler not found" echo "It seems you do not have the correct $tc toolchain binaries." echo "This may be the result of incorrect unzipping of the NDK archive." echo "Please go to the official Android NDK web site and download the" echo "appropriate NDK package for your platform ($HOST_TAG)." echo "See http://developer.android.com/sdk/index.html" echo "" echo "ABORTING." echo "" exit 1 fi done echo "" echo "Host setup complete. Please read docs/OVERVIEW.TXT if you don't know what to do." echo ""