NDK can now build JNI code for IA

Change-Id: I5c03c2680663a4fefc4b22524088a3489132e74f
diff --git a/ndk/build/host-setup.sh b/ndk/build/host-setup.sh
index a29cf84..a677b8f 100755
--- a/ndk/build/host-setup.sh
+++ b/ndk/build/host-setup.sh
@@ -122,6 +122,23 @@
     log2 "    Check $result"
 }
 
+bad_toolchain()
+{
+    tc=$1	# Toolchain
+    ht=$2	# Host Tag
+    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 ($ht)."
+    echo "See http://developer.android.com/sdk/index.html"
+    echo ""
+    echo "ABORTING."
+    echo ""
+}
+
+
 OPTION_HELP=no
 OPTION_NO_MAKE_CHECK=no
 OPTION_NO_AWK_CHECK=no
@@ -216,10 +233,15 @@
 add_config "HOST_TAG      := $HOST_TAG"
 add_config "HOST_AWK      := $AWK"
 
-## Check that the toolchains we need are installed
+## Determine which toolchains are installed and verify their integrity.
 ## Otherwise, instruct the user to download them from the web site
 
-TOOLCHAINS=arm-eabi-4.2.1
+TOOLCHAINS=`ls build/prebuilt/$HOST_TAG`
+
+if [ -z "$TOOLCHAINS" ]; then
+    bad_toolchain NONE_FOUND $HOST_TAG
+    exit 1
+fi
 
 for tc in $TOOLCHAINS; do
     echo "Toolchain  : Checking for $tc prebuilt binaries"
@@ -228,16 +250,7 @@
     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 ""
+        bad_toolchain $tc $HOST_TAG
         exit 1
     fi
 done
diff --git a/ndk/build/toolchains/x86-4.2.1/config.mk b/ndk/build/toolchains/x86-4.2.1/config.mk
new file mode 100644
index 0000000..ea11e02
--- /dev/null
+++ b/ndk/build/toolchains/x86-4.2.1/config.mk
@@ -0,0 +1,19 @@
+# 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.
+#
+
+# config file for the x86-4.2.1 toolchain for the Android NDK
+# the real meat is in the setup.mk file adjacent to this one
+#
+TOOLCHAIN_ABIS := x86
diff --git a/ndk/build/toolchains/x86-4.2.1/setup.mk b/ndk/build/toolchains/x86-4.2.1/setup.mk
new file mode 100644
index 0000000..2579148
--- /dev/null
+++ b/ndk/build/toolchains/x86-4.2.1/setup.mk
@@ -0,0 +1,128 @@
+# 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.
+#
+
+# this file is used to prepare the NDK to build with the x86-4.2.1
+# toolchain any number of source files
+#
+# its purpose is to define (or re-define) templates used to build
+# various sources into target object files, libraries or executables.
+#
+# Note that this file may end up being parsed several times in future
+# revisions of the NDK.
+#
+
+TOOLCHAIN_NAME   := x86-4.2.1
+TOOLCHAIN_PREFIX := $(HOST_PREBUILT)/$(TOOLCHAIN_NAME)/bin/i686-android-linux-gnu-
+
+TARGET_CFLAGS.common := \
+    -I$(SYSROOT)/usr/include \
+    -msoft-float -fpic \
+    -ffunction-sections \
+    -funwind-tables \
+    -fstack-protector \
+    -fno-short-enums
+
+TARGET_x86_release_CFLAGS :=  -O2 \
+                              -fomit-frame-pointer \
+                              -fstrict-aliasing    \
+                              -funswitch-loops     \
+                              -finline-limit=300
+
+# When building for debug, compile everything as x86.
+TARGET_x86_debug_CFLAGS := $(TARGET_x86_release_CFLAGS) \
+                           -fno-omit-frame-pointer \
+                           -fno-strict-aliasing
+
+# This function will be called to determine the target CFLAGS used to build
+# a C or Assembler source file, based on its tags.
+#
+TARGET-process-src-files-tags = \
+$(eval __debug_sources := $(call get-src-files-with-tag,debug)) \
+$(eval __release_sources := $(call get-sr-files-without-tag,debug)) \
+$(call set-src-files-target-cflags, $(__debug_sources), $(TARGET_x86_debug_CFLAGS)) \
+$(call set-src-files-target-cflags, $(__release_sources),$(TARGET_x86_release_CFLAGS)) \
+$(call set-src-files-text,$(LOCAL_SRC_FILES),x86$(space)$(space)) \
+
+TARGET_CC       := $(TOOLCHAIN_PREFIX)gcc
+TARGET_CFLAGS   := $(TARGET_CFLAGS.common)
+
+
+TARGET_CXX      := $(TOOLCHAIN_PREFIX)g++
+TARGET_CXXFLAGS := $(TARGET_CFLAGS.common) -fno-exceptions -fno-rtti
+
+TARGET_LD      := $(TOOLCHAIN_PREFIX)ld
+TARGET_LDFLAGS :=
+
+TARGET_AR      := $(TOOLCHAIN_PREFIX)ar
+TARGET_ARFLAGS := crs
+
+TARGET_LIBGCC := $(shell $(TARGET_CC) -print-libgcc-file-name)
+TARGET_LDLIBS := -Wl,-rpath-link=$(SYSROOT)/usr/lib
+
+# These flags are used to ensure that a binary doesn't reference undefined
+# flags.
+TARGET_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
+
+# The ABI-specific sub-directory that the SDK tools recognize for
+# this toolchain's generated binaries
+TARGET_ABI_SUBDIR := x86
+
+# NOTE: Ensure that TARGET_LIBGCC is placed after all private objects
+#       and static libraries, but before any other library in the link
+#       command line when generating shared libraries and executables.
+#
+#       This ensures that all libgcc.a functions required by the target
+#       will be included into it, instead of relying on what's available
+#       on other libraries like libc.so, which may change between system
+#       releases due to toolchain or library changes.
+#
+define cmd-build-shared-library
+$(TARGET_CC) \
+    -nostdlib -Wl,-soname,$(notdir $@) \
+    -Wl,-shared,-Bsymbolic \
+    $(PRIVATE_OBJECTS) \
+    -Wl,--whole-archive \
+    $(PRIVATE_WHOLE_STATIC_LIBRARIES) \
+    -Wl,--no-whole-archive \
+    $(PRIVATE_STATIC_LIBRARIES) \
+    $(TARGET_LIBGCC) \
+    $(PRIVATE_SHARED_LIBRARIES) \
+    $(PRIVATE_LDFLAGS) \
+    $(PRIVATE_LDLIBS) \
+    -o $@
+endef
+
+define cmd-build-executable
+$(TARGET_CC) \
+    -nostdlib -Bdynamic \
+    -Wl,-dynamic-linker,/system/bin/linker \
+    -Wl,--gc-sections \
+    -Wl,-z,nocopyreloc \
+    $(TARGET_CRTBEGIN_DYNAMIC_O) \
+    $(PRIVATE_OBJECTS) \
+    $(PRIVATE_STATIC_LIBRARIES) \
+    $(TARGET_LIBGCC) \
+    $(PRIVATE_SHARED_LIBRARIES) \
+    $(PRIVATE_LDFLAGS) \
+    $(PRIVATE_LDLIBS) \
+    $(TARGET_CRTEND_O) \
+    -o $@
+endef
+
+define cmd-build-static-library
+$(TARGET_AR) $(TARGET_ARFLAGS) $@ $(PRIVATE_OBJECTS)
+endef
+
+cmd-strip = $(TOOLCHAIN_PREFIX)strip --strip-debug $1