Add RS support in API19

Change-Id: I31b7c747c045cbbf3ffef96edd4910c75fe6da29
diff --git a/build/core/add-application.mk b/build/core/add-application.mk
index 79c6a86..28d4da1 100644
--- a/build/core/add-application.mk
+++ b/build/core/add-application.mk
@@ -94,8 +94,8 @@
     APP_PLATFORM := android-9
     $(call ndk_log,  Adjusting APP_PLATFORM android-$(APP_PLATFORM_LEVEL) to $(APP_PLATFORM))
 endif
-ifneq (,$(call gt,$(APP_PLATFORM_LEVEL),18))
-    APP_PLATFORM := android-18
+ifneq (,$(call gt,$(APP_PLATFORM_LEVEL),19))
+    APP_PLATFORM := android-19
     $(call ndk_log,  Adjusting APP_PLATFORM android-$(APP_PLATFORM_LEVEL) to $(APP_PLATFORM))
 endif
 
@@ -239,6 +239,9 @@
 
 APP_CFLAGS := $(strip $(APP_CFLAGS))
 APP_CONLYFLAGS := $(strip $(APP_CONLYFLAGS))
+APP_CPPFLAGS := $(strip $(APP_CPPFLAGS))
+APP_CXXFLAGS := $(strip $(APP_CXXFLAGS))
+APP_RENDERSCRIPT_FLAGS := $(strip $(APP_RENDERSCRIPT_FLAGS))
 APP_LDFLAGS := $(strip $(APP_LDFLAGS))
 
 # Check that APP_STL is defined. If not, use the default value (system)
diff --git a/build/core/build-binary.mk b/build/core/build-binary.mk
index 5653899..380ff4c 100644
--- a/build/core/build-binary.mk
+++ b/build/core/build-binary.mk
@@ -68,7 +68,16 @@
     GLESv2 \
     GLESv3 \
     OpenSLES \
-    OpenMAXAL
+    OpenMAXAL \
+    bcc \
+    bcinfo \
+    cutils \
+    gui \
+    RScpp \
+    RScpp_static \
+    RS \
+    ui \
+    utils
 
 libs_in_ldflags := $(filter-out $(addprefix -l,$(system_libs)), $(libs_in_ldflags))
 
@@ -128,6 +137,9 @@
 # list of generated object files
 LOCAL_OBJECTS :=
 
+# list of generated object files from RS files, subset of LOCAL_OBJECTS
+LOCAL_RS_OBJECTS :=
+
 # always define ANDROID when building binaries
 #
 LOCAL_CFLAGS := -DANDROID $(LOCAL_CFLAGS)
@@ -150,7 +162,7 @@
 endif
 
 #
-# Check LOCAL_CPP_EXTENSION, use '.cpp' by default
+# Check LOCAL_CPP_EXTENSION
 #
 bad_cpp_extensions := $(strip $(filter-out .%,$(LOCAL_CPP_EXTENSION)))
 ifdef bad_cpp_extensions
@@ -161,8 +173,8 @@
 ifeq ($(LOCAL_CPP_EXTENSION),)
   # Match the default GCC C++ extensions.
   LOCAL_CPP_EXTENSION := $(default-c++-extensions)
-else
 endif
+LOCAL_RS_EXTENSION := $(default-rs-extensions)
 
 #
 # If LOCAL_ALLOW_UNDEFINED_SYMBOLS is not true, the linker will allow the generation
@@ -301,9 +313,10 @@
 
 # all_source_patterns contains the list of filename patterns that correspond
 # to source files recognized by our build system
-all_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION)
+all_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION) $(LOCAL_RS_EXTENSION)
 all_source_patterns   := $(foreach _ext,$(all_source_extensions),%$(_ext))
 all_cpp_patterns      := $(foreach _ext,$(LOCAL_CPP_EXTENSION),%$(_ext))
+all_rs_patterns       := $(foreach _ext,$(LOCAL_RS_EXTENSION),%$(_ext))
 
 unknown_sources := $(strip $(filter-out $(all_source_patterns),$(LOCAL_SRC_FILES)))
 ifdef unknown_sources
@@ -322,6 +335,14 @@
 LOCAL_OBJECTS := $(subst ../,__/,$(LOCAL_OBJECTS))
 LOCAL_OBJECTS := $(foreach _obj,$(LOCAL_OBJECTS),$(LOCAL_OBJS_DIR)/$(_obj))
 
+LOCAL_RS_OBJECTS := $(filter $(all_rs_patterns),$(LOCAL_SRC_FILES))
+$(foreach _ext,$(LOCAL_RS_EXTENSION),\
+    $(eval LOCAL_RS_OBJECTS := $$(LOCAL_RS_OBJECTS:%$(_ext)=%$$(TARGET_OBJ_EXTENSION)))\
+)
+LOCAL_RS_OBJECTS := $(filter %$(TARGET_OBJ_EXTENSION),$(LOCAL_RS_OBJECTS))
+LOCAL_RS_OBJECTS := $(subst ../,__/,$(LOCAL_RS_OBJECTS))
+LOCAL_RS_OBJECTS := $(foreach _obj,$(LOCAL_RS_OBJECTS),$(LOCAL_OBJS_DIR)/$(_obj))
+
 # If the module has any kind of C++ features, enable them in LOCAL_CPPFLAGS
 #
 ifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti))
@@ -340,16 +361,36 @@
     endif
 endif
 
+# Set include patch for renderscript
+
+
+ifneq ($(LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE),)
+    LOCAL_RENDERSCRIPT_INCLUDES := $(LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE)
+else
+    LOCAL_RENDERSCRIPT_INCLUDES := \
+        $(RENDERSCRIPT_TOOLCHAIN_HEADER) \
+        $(TARGET_C_INCLUDES)/rs/scriptc \
+        $(LOCAL_RENDERSCRIPT_INCLUDES)
+endif
+
+RS_COMPAT :=
+ifneq ($(call module-is-shared-library,$(LOCAL_MODULE)),)
+    RS_COMPAT := true
+endif
+
 # Build the sources to object files
 #
 
 $(foreach src,$(filter %.c,$(LOCAL_SRC_FILES)), $(call compile-c-source,$(src),$(call get-object-name,$(src))))
 $(foreach src,$(filter %.S %.s,$(LOCAL_SRC_FILES)), $(call compile-s-source,$(src),$(call get-object-name,$(src))))
-
 $(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\
     $(call compile-cpp-source,$(src),$(call get-object-name,$(src)))\
 )
 
+$(foreach src,$(filter $(all_rs_patterns),$(LOCAL_SRC_FILES)),\
+    $(call compile-rs-source,$(src),$(call get-rs-scriptc-name,$(src)),$(call get-rs-bc-name,$(src)),$(call get-rs-so-name,$(src)),$(call get-object-name,$(src)),$(RS_COMPAT))\
+)
+
 #
 # The compile-xxx-source calls updated LOCAL_OBJECTS and LOCAL_DEPENDENCY_DIRS
 #
diff --git a/build/core/default-build-commands.mk b/build/core/default-build-commands.mk
index cf2e89e..41967f6 100644
--- a/build/core/default-build-commands.mk
+++ b/build/core/default-build-commands.mk
@@ -124,6 +124,10 @@
 endif
 TARGET_CXXFLAGS = $(TARGET_CFLAGS) -fno-exceptions -fno-rtti
 
+TARGET_RS_CC    = $(RENDERSCRIPT_TOOLCHAIN_PREFIX)llvm-rs-cc
+TARGET_RS_BCC   = $(RENDERSCRIPT_TOOLCHAIN_PREFIX)bcc_compat
+TARGET_RS_FLAGS = -Wall -Werror
+
 TARGET_LD       = $(TOOLCHAIN_PREFIX)ld
 TARGET_LDFLAGS :=
 
diff --git a/build/core/definitions.mk b/build/core/definitions.mk
index 327c2e4..c446064 100644
--- a/build/core/definitions.mk
+++ b/build/core/definitions.mk
@@ -70,6 +70,9 @@
 # The list of default C++ extensions supported by GCC.
 default-c++-extensions := .cc .cp .cxx .cpp .CPP .c++ .C
 
+# The list of default RS extensions supported by llvm-rs-cc
+default-rs-extensions := .rs .fs
+
 # -----------------------------------------------------------------------------
 # Function : generate-dir
 # Arguments: 1: directory path
@@ -401,6 +404,10 @@
     SHORT_COMMANDS \
     BUILT_MODULE_NOT_COPIED \
     THIN_ARCHIVE \
+    RENDERSCRIPT_INCLUDES \
+    RENDERSCRIPT_INCLUDES_OVERRIDE \
+    RENDERSCRIPT_FLAGS \
+    RENDERSCRIPT_TARGET_API
 
 # The following are generated by the build scripts themselves
 
@@ -1278,7 +1285,7 @@
 get-object-name = $(strip \
     $(subst ../,__/,\
         $(eval __obj := $1)\
-        $(foreach __ext,.c .s .S $(LOCAL_CPP_EXTENSION),\
+        $(foreach __ext,.c .s .S $(LOCAL_CPP_EXTENSION) $(LOCAL_RS_EXTENSION),\
             $(eval __obj := $(__obj:%$(__ext)=%$(TARGET_OBJ_EXTENSION)))\
         )\
         $(__obj)\
@@ -1287,10 +1294,39 @@
 -test-get-object-name = \
   $(eval TARGET_OBJ_EXTENSION=.o)\
   $(eval LOCAL_CPP_EXTENSION ?= .cpp)\
+  $(eval LOCAL_RS_EXTENSION ?= .rs)\
   $(call test-expect,foo.o,$(call get-object-name,foo.c))\
   $(call test-expect,bar.o,$(call get-object-name,bar.s))\
   $(call test-expect,zoo.o,$(call get-object-name,zoo.S))\
-  $(call test-expect,tot.o,$(call get-object-name,tot.cpp))
+  $(call test-expect,tot.o,$(call get-object-name,tot.cpp))\
+  $(call test-expect,RS.o,$(call get-object-name,RS.rs))
+
+get-rs-scriptc-name = $(strip \
+    $(subst ../,__/,\
+        $(eval __obj := $1)\
+        $(foreach __ext,$(LOCAL_RS_EXTENSION),\
+            $(eval __obj := $(__obj:%$(__ext)=%.cpp))\
+        )\
+        $(dir $(__obj))ScriptC_$(notdir $(__obj))\
+    ))
+
+get-rs-bc-name = $(strip \
+    $(subst ../,__/,\
+        $(eval __obj := $1)\
+        $(foreach __ext,$(LOCAL_RS_EXTENSION),\
+            $(eval __obj := $(__obj:%$(__ext)=%.bc))\
+        )\
+        $(__obj)\
+    ))
+
+get-rs-so-name = $(strip \
+    $(subst ../,__/,\
+        $(eval __obj := $1)\
+        $(foreach __ext,$(LOCAL_RS_EXTENSION),\
+            $(eval __obj := $(__obj:%$(__ext)=%$(TARGET_SONAME_EXTENSION)))\
+        )\
+        $(notdir $(__obj))\
+    ))
 
 # -----------------------------------------------------------------------------
 # Macro    : hide
@@ -1385,13 +1421,79 @@
 endif
 
 $$(call generate-file-dir,$$(_OBJ))
-
-$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER)
+$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER) $(LOCAL_RS_OBJECTS)
 	$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) "$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))"
 	$$(hide) $$(PRIVATE_CC) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CFLAGS) $$(call host-path,$$(PRIVATE_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \
 	$$(call cmd-convert-deps,$$(PRIVATE_DEPS))
 endef
 
+
+# For renderscript: slightly different from the above ev-build-file
+# _RS_SRC: RS source file
+# _CPP_SRC: ScriptC_RS.cpp source file
+# _BC_SRC: Bitcode source file
+# _BC_SO: Bitcode SO name, no path
+# _OBJ: destination file
+# _RS_CC: 'compiler' command for _RS_SRC
+# _RS_BCC: 'compiler' command for _BC_SRC
+# _CXX: 'compiler' command for _CPP_SRC
+# _RS_FLAGS: 'compiler' flags for _RS_SRC
+# _CPP_FLAGS: 'compiler' flags for _CPP_SRC
+# _TEXT: Display text (e.g. "Compile RS")
+# _OUT: output dir
+# _COMPAT: 'true' if bcc_compat is required
+#
+define ev-build-rs-file
+$$(_OBJ): PRIVATE_ABI       := $$(TARGET_ARCH_ABI)
+$$(_OBJ): PRIVATE_RS_SRC    := $$(_RS_SRC)
+$$(_OBJ): PRIVATE_CPP_SRC   := $$(_CPP_SRC)
+$$(_OBJ): PRIVATE_BC_SRC    := $$(_BC_SRC)
+$$(_OBJ): PRIVATE_OBJ       := $$(_OBJ)
+$$(_OBJ): PRIVATE_BC_OBJ    := $$(_BC_SRC)$(TARGET_OBJ_EXTENSION)
+$$(_OBJ): PRIVATE_BC_SO     := $$(_BC_SO)
+$$(_OBJ): PRIVATE_DEPS      := $$(call host-path,$$(_OBJ).d)
+$$(_OBJ): PRIVATE_MODULE    := $$(LOCAL_MODULE)
+$$(_OBJ): PRIVATE_TEXT      := $$(_TEXT)
+$$(_OBJ): PRIVATE_RS_CC     := $$(_RS_CC)
+$$(_OBJ): PRIVATE_RS_BCC    := $$(_RS_BCC)
+$$(_OBJ): PRIVATE_CXX       := $$(_CXX)
+$$(_OBJ): PRIVATE_RS_FLAGS  := $$(_RS_FLAGS)
+$$(_OBJ): PRIVATE_CPPFLAGS  := $$(_CPP_FLAGS)
+$$(_OBJ): PRIVATE_OUT       := $$(NDK_APP_DST_DIR)
+$$(_OBJ): PRIVATE_RS_TRIPLE := $$(RS_TRIPLE)
+$$(_OBJ): PRIVATE_COMPAT    := $$(_COMPAT)
+
+ifeq ($$(LOCAL_SHORT_COMMANDS),true)
+_OPTIONS_LISTFILE := $$(_OBJ).cflags
+$$(_OBJ): $$(call generate-list-file,$$(_CPP_FLAGS),$$(_OPTIONS_LISTFILE))
+$$(_OBJ): PRIVATE_CPPFLAGS := @$$(call host-path,$$(_OPTIONS_LISTFILE))
+$$(_OBJ): $$(_OPTIONS_LISTFILE)
+endif
+
+# llvm-rc-cc.exe has problem accepting input *.rs with path. To workaround:
+# cd ($dir $(_SRC)) ; llvm-rs-cc $(notdir $(_SRC)) -o ...full-path...
+#
+ifeq ($$(_COMPAT),true)
+$$(_OBJ): $$(_RS_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER)
+	$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) "$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_RS_SRC))"
+	$$(hide) \
+	cd $$(call host-path,$$(dir $$(PRIVATE_RS_SRC))) && $$(PRIVATE_RS_CC) -o $$(call host-path,$$(abspath $$(dir $$(PRIVATE_OBJ))))/ -d $$(abspath $$(call host-path,$$(dir $$(PRIVATE_OBJ)))) -MD -reflect-c++ $$(PRIVATE_RS_FLAGS) $$(notdir $$(PRIVATE_RS_SRC))
+	$$(hide) \
+	$$(PRIVATE_RS_BCC) -O3 -o $$(call host-path,$$(PRIVATE_BC_OBJ)) -fPIC -shared -rt-path $$(call host-path,$(RENDERSCRIPT_TOOLCHAIN_LIB)/libclcore.bc) -mtriple $$(PRIVATE_RS_TRIPLE) $$(call host-path,$$(PRIVATE_BC_SRC)) && \
+	$$(PRIVATE_CXX) -shared -Wl,-soname,librs.$$(PRIVATE_BC_SO) -nostdlib $$(call host-path,$$(PRIVATE_BC_OBJ)) $$(call host-path,$(SYSROOT_LINK)/usr/lib/rs/libcompiler_rt.a) -o $$(call host-path,$$(PRIVATE_OUT)/librs.$$(PRIVATE_BC_SO)) -L $$(call host-path,$(SYSROOT_LINK)/usr/lib) -L $$(call host-path,$(SYSROOT_LINK)/usr/lib/rs) -lRSSupport -lm -lc && \
+	$$(PRIVATE_CXX) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CPPFLAGS) $$(call host-path,$$(PRIVATE_CPP_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \
+	$$(call cmd-convert-deps,$$(PRIVATE_DEPS))
+else
+$$(_OBJ): $$(_RS_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER)
+	$$(call host-echo-build-step,$$(PRIVATE_ABI),$$(PRIVATE_TEXT)) "$$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_RS_SRC))"
+	$$(hide) \
+	cd $$(call host-path,$$(dir $$(PRIVATE_RS_SRC))) && $$(PRIVATE_RS_CC) -o $$(call host-path,$$(abspath $$(dir $$(PRIVATE_OBJ))))/ -d $$(abspath $$(call host-path,$$(dir $$(PRIVATE_OBJ)))) -MD -reflect-c++ $$(PRIVATE_RS_FLAGS) $$(notdir $$(PRIVATE_RS_SRC))
+	$$(hide) \
+	$$(PRIVATE_CXX) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CPPFLAGS) $$(call host-path,$$(PRIVATE_CPP_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \
+	$$(call cmd-convert-deps,$$(PRIVATE_DEPS))
+endif
+endef
+
 # This assumes the same things than ev-build-file, but will handle
 # the definition of LOCAL_FILTER_ASM as well.
 define ev-build-source-file
@@ -1551,11 +1653,72 @@
 # Arguments : 1: single C++ source file name (relative to LOCAL_PATH)
 #           : 2: object file name
 # Returns   : None
-# Usage     : $(call compile-c-source,<srcfile>)
+# Usage     : $(call compile-cpp-source,<srcfile>)
 # Rationale : Setup everything required to build a single C++ source file
 # -----------------------------------------------------------------------------
 compile-cpp-source = $(eval $(call ev-compile-cpp-source,$1,$2))
 
+# -----------------------------------------------------------------------------
+# Template  : ev-compile-rs-source
+# Arguments : 1: single RS source file name (relative to LOCAL_PATH)
+#             2: intermediate cpp file (without path)
+#             3: intermediate bc file (without path)
+#             4: so file from bc (without path)
+#             5: target object file (without path)
+#             6: 'true' if bcc_compat is required
+# Returns   : None
+# Usage     : $(eval $(call ev-compile-rs-source,<srcfile>,<cppfile>,<objfile>)
+# Rationale : Internal template evaluated by compile-rs-source
+# -----------------------------------------------------------------------------
+
+define  ev-compile-rs-source
+_RS_SRC:=$$(call local-source-file-path,$(1))
+_CPP_SRC:=$$(LOCAL_OBJS_DIR:%/=%)/$(2)
+_BC_SRC:=$$(LOCAL_OBJS_DIR:%/=%)/$(3)
+_BC_SO:=$(4)
+_OBJ:=$$(LOCAL_OBJS_DIR:%/=%)/$(5)
+_COMPAT := $(6)
+_CPP_FLAGS := $$($$(my)CXXFLAGS) \
+          $$(call get-src-file-target-cflags,$(1)) \
+          $$(call host-c-includes, $$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \
+          $$(LOCAL_CFLAGS) \
+          $$(LOCAL_CPPFLAGS) \
+          $$(LOCAL_CXXFLAGS) \
+          $$(NDK_APP_CFLAGS) \
+          $$(NDK_APP_CPPFLAGS) \
+          $$(NDK_APP_CXXFLAGS) \
+          $$(call host-c-includes,$$($(my)C_INCLUDES)) \
+          -fno-rtti \
+          -c \
+
+_RS_FLAGS := $$(call host-c-includes, $$(LOCAL_RENDERSCRIPT_INCLUDES) $$(LOCAL_PATH)) \
+          $$($$(my)RS_FLAGS) \
+          $$(LOCAL_RENDERSCRIPT_FLAGS) \
+          $$(call host-c-includes,$$($(my)RENDERSCRIPT_INCLUDES)) \
+
+_RS_CC  := $$(NDK_CCACHE) $$($$(my)RS_CC)
+_RS_BCC := $$(NDK_CCACHE) $$($$(my)RS_BCC)
+_CXX    := $$(NDK_CCACHE) $$($$(my)CXX)
+_TEXT   := Compile RS
+_OUT    := $$($$(my)OUT)
+
+$$(eval $$(call ev-build-rs-file))
+endef
+
+# -----------------------------------------------------------------------------
+# Function  : compile-rs-source
+# Arguments : 1: single RS source file name (relative to LOCAL_PATH)
+#             2: intermediate cpp file name
+#             3: intermediate bc file
+#             4: so file from bc (without path)
+#             5: object file name
+#             6: 'true' if bcc_compat is required
+# Returns   : None
+# Usage     : $(call compile-rs-source,<srcfile>)
+# Rationale : Setup everything required to build a single RS source file
+# -----------------------------------------------------------------------------
+compile-rs-source = $(eval $(call ev-compile-rs-source,$1,$2,$3,$4,$5,$6))
+
 #
 #  Module imports
 #
diff --git a/build/core/import-locals.mk b/build/core/import-locals.mk
index cb18480..2c4dfba 100644
--- a/build/core/import-locals.mk
+++ b/build/core/import-locals.mk
@@ -32,6 +32,7 @@
 imported_CFLAGS     := $(call module-get-listed-export,$(all_depends),CFLAGS)
 imported_CONLYFLAGS := $(call module-get-listed-export,$(all_depends),CONLYFLAGS)
 imported_CPPFLAGS   := $(call module-get-listed-export,$(all_depends),CPPFLAGS)
+imported_RENDERSCRIPT_FLAGS := $(call module-get-listed-export,$(all_depends),RENDERSCRIPT_FLAGS)
 imported_C_INCLUDES := $(call module-get-listed-export,$(all_depends),C_INCLUDES)
 
 ifdef NDK_DEBUG_IMPORTS
@@ -39,6 +40,7 @@
     $(info   CFLAGS='$(imported_CFLAGS)')
     $(info   CONLYFLAGS='$(imported_CONLYFLAGS)')
     $(info   CPPFLAGS='$(imported_CPPFLAGS)')
+    $(info   RENDERSCRIPT_FLAGS='$(imported_RENDERSCRIPT_FLAGS)')
     $(info   C_INCLUDES='$(imported_C_INCLUDES)')
     $(info All depends='$(all_depends)')
 endif
@@ -50,6 +52,7 @@
 LOCAL_CFLAGS     := $(strip $(imported_CFLAGS) $(LOCAL_CFLAGS))
 LOCAL_CONLYFLAGS := $(strip $(imported_CONLYFLAGS) $(LOCAL_CONLYFLAGS))
 LOCAL_CPPFLAGS   := $(strip $(imported_CPPFLAGS) $(LOCAL_CPPFLAGS))
+LOCAL_RENDERSCRIPT_FLAGS := $(strip $(imported_RENDERSCRIPT_FLAGS) $(LOCAL_RENDERSCRIPT_FLAGS))
 
 #
 # The imported include directories are appended to their LOCAL_XXX value
diff --git a/build/core/setup-abi.mk b/build/core/setup-abi.mk
index c66deaf..c3be36a 100644
--- a/build/core/setup-abi.mk
+++ b/build/core/setup-abi.mk
@@ -54,6 +54,21 @@
 
 TARGET_GDB_SETUP := $(TARGET_OUT)/setup.gdb
 
+# RS triple
+ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
+  RS_TRIPLE := armv7-none-linux-gnueabi
+endif
+ifeq ($(TARGET_ARCH_ABI),armeabi)
+  RS_TRIPLE := arm-none-linux-gnueabi
+endif
+ifeq ($(TARGET_ARCH_ABI),mips)
+  RS_TRIPLE := mipsel-unknown-linux
+endif
+ifeq ($(TARGET_ARCH_ABI),x86)
+  RS_TRIPLE := i686-unknown-linux
+endif
+
+
 include $(BUILD_SYSTEM)/setup-toolchain.mk
 
 # Restore TARGET_PLATFORM, see above.
diff --git a/build/core/setup-app.mk b/build/core/setup-app.mk
index e9e5073..6a9b850 100644
--- a/build/core/setup-app.mk
+++ b/build/core/setup-app.mk
@@ -105,6 +105,15 @@
 	$(hide) $(call host-rm,$(NDK_ALL_ABIS:%=$(NDK_APP_LIBS_OUT)/%/gdb.setup))
 endif
 
+# Renderscript
+
+RENDERSCRIPT_TOOLCHAIN_ROOT   := $(NDK_ROOT)/toolchains/renderscript
+RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT := $(call host-prebuilt-tag,$(RENDERSCRIPT_TOOLCHAIN_ROOT))
+RENDERSCRIPT_TOOLCHAIN_PREFIX := $(RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT)/bin/
+RENDERSCRIPT_TOOLCHAIN_LIB    := $(RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT)/lib
+RENDERSCRIPT_TOOLCHAIN_HEADER := $(RENDERSCRIPT_TOOLCHAIN_PREBUILT_ROOT)/lib/clang/3.3/include
+
+# Each ABI
 $(foreach _abi,$(NDK_APP_ABI),\
     $(eval TARGET_ARCH_ABI := $(_abi))\
     $(eval include $(BUILD_SYSTEM)/setup-abi.mk) \
diff --git a/build/tools/dev-defaults.sh b/build/tools/dev-defaults.sh
index 9877af1..df979d9 100644
--- a/build/tools/dev-defaults.sh
+++ b/build/tools/dev-defaults.sh
@@ -6,7 +6,7 @@
 # Note: levels 6 and 7 are omitted since they have the same native
 # APIs as level 5. Same for levels 10, 11 and 12
 #
-API_LEVELS="3 4 5 8 9 13 14 15 16 17 18"
+API_LEVELS="3 4 5 8 9 13 14 15 16 17 18 19"
 
 # Default ABIs for the target prebuilt binaries.
 PREBUILT_ABIS="armeabi armeabi-v7a x86 mips"