nanohub: add instructions for Android build

add script to download compatible toolchain
and define build environment for both Android
and non-Android builds

Change-Id: I02f52ed9a8286d583cbde6d0d06fb977eab8766b
diff --git a/firmware/README b/firmware/README
index 2bdb624..197bbd3 100644
--- a/firmware/README
+++ b/firmware/README
@@ -1,17 +1,58 @@
-Define and export CROSS_COMPILE env var for your toolchain
+0. ENVIRONMENT SETUP (Common ANDROID and NON-ANDROID builds)
 
-1. to build any OS variant, run
+# Create Android lunch shell and add external toolchain
+
+bash
+. build/envsetup.sh
+. device/google/contexthub/firmware/toolchain-setup.sh
+lunch <your lunch option>
+
+# First time you run toolchain-setup.sh it will download and install
+# the external toolchain from linaro launchpad.
+# Next time it will simply define environment wariables for it.
+
+
+1. NON-ANDROID BUILD (unsupported)
+
+1.1. to build any OS variant, run
 
 make -C <variant_path>
 
-where <variant_path> is relative path to OS variant dir;
-or simply "cd  <variant_path>" and run "make".
-for local variants, variant_path is variant/<variant_name>
+# where <variant_path> is relative path to OS variant dir;
+# or simply "cd  <variant_path>" and run "make".
+# for local variants, variant_path is variant/<variant_name>
 
-2. to build nanoapp, run
+1.2. to build nanoapp, run
 
 make -C <nanapp_path>
 
-where <nanoapp_path> is relative path to nanoapp;
-or simply "cd  <nanoapp_path>" and run "make".
-for local nanoapps, nanoapp_path is app/<app_name>
+# where <nanoapp_path> is relative path to nanoapp;
+# or simply "cd  <nanoapp_path>" and run "make".
+# for local nanoapps, nanoapp_path is app/<app_name>
+
+
+2. ANDROID BUILD
+
+2.1 to build nanohub OS and all apps
+
+# execute
+make auxiliary -j24
+
+2.2 Build Artifacts Location
+
+# Artifacts will be found in
+# $OUT/aux/$(AUX_OS_VARIANT)/$(AUX_OS)-$(AUX_ARCH)-$(AUX_CPU)/bin
+# e.g. for nanohub OS on STM32 series MCU (ARM cortex m4 core) for Angler this will be in
+# $OUT/aux/angler/nanohub-stm32-cortexm4/bin
+# where $OUT is lunch shell environment variable
+
+2.3 partial build or build without dependencies
+
+# Any app or static library could be built in isolation with
+mmm <path-to-module>
+
+# or, for current path
+mm
+
+# Nanohub OS system image is only built with
+m auxiliary
diff --git a/firmware/toolchain-setup.sh b/firmware/toolchain-setup.sh
new file mode 100644
index 0000000..e3a001a
--- /dev/null
+++ b/firmware/toolchain-setup.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+[[ $_ != $0 ]] && echo "configuring external toolchain for nanohub" || (echo "Script has to be sourced" && exit 1)
+
+if [ ! -e $HOME/toolchains/gcc-arm-none-eabi-5_3-2016q1/bin ] ; then
+    echo Toolchain is not found, downloading
+    (mkdir -p $HOME/toolchains && cd $HOME/toolchains &&
+     wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q1-update/+download/gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2 &&
+     tar xjf gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2 &&
+     echo Toolchain download done
+    ) || (echo Toolchain download failed)
+fi
+
+export ARM_NONE_GCC_PATH=$HOME/toolchains/gcc-arm-none-eabi-5_3-2016q1
+export CROSS_COMPILE=$ARM_NONE_GCC_PATH/bin/arm-none-eabi-
+export NANOHUB_TOOLCHAIN=$CROSS_COMPILE