diff --git a/cc/builder.go b/cc/builder.go
index 81ecd73..7144508 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -229,6 +229,7 @@
 	sAbiFlags   string
 	yasmFlags   string
 	aidlFlags   string
+	rsFlags     string
 	toolchain   config.Toolchain
 	clang       bool
 	tidy        bool
diff --git a/cc/cc.go b/cc/cc.go
index dd73504..28354a8 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -106,6 +106,7 @@
 	YaccFlags   []string // Flags that apply to Yacc source files
 	protoFlags  []string // Flags that apply to proto source files
 	aidlFlags   []string // Flags that apply to aidl source files
+	rsFlags     []string // Flags that apply to renderscript source files
 	LdFlags     []string // Flags that apply to linker command lines
 	libFlags    []string // Flags to add libraries early to the link order
 	TidyFlags   []string // Flags that apply to clang-tidy
diff --git a/cc/compiler.go b/cc/compiler.go
index f7e787c..cec527b 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -108,6 +108,17 @@
 		Local_include_dirs []string
 	}
 
+	Renderscript struct {
+		// list of directories that will be added to the llvm-rs-cc include paths
+		Include_dirs []string
+
+		// list of flags that will be passed to llvm-rs-cc
+		Flags []string
+
+		// Renderscript API level to target
+		Target_api *string
+	}
+
 	Debug, Release struct {
 		// list of module-specific flags that will be used for C and C++ compiles in debug or
 		// release builds
@@ -420,6 +431,10 @@
 			"-I"+android.PathForModuleGen(ctx, "aidl").String())
 	}
 
+	if compiler.hasSrcExt(".rs") || compiler.hasSrcExt(".fs") {
+		flags = rsFlags(ctx, flags, &compiler.Properties)
+	}
+
 	return flags
 }
 
diff --git a/cc/config/global.go b/cc/config/global.go
index 8c24289..43ff975 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -151,6 +151,12 @@
 	pctx.StaticVariable("RSLLVMPrebuiltsPath", "${RSClangBase}/${HostPrebuiltTag}/${RSClangVersion}/bin")
 	pctx.StaticVariable("RSIncludePath", "${RSLLVMPrebuiltsPath}/../lib64/clang/${RSReleaseVersion}/include")
 
+	pctx.PrefixedPathsForOptionalSourceVariable("RsGlobalIncludes", "-I",
+		[]string{
+			"external/clang/lib/Headers",
+			"frameworks/rs/script_api/include",
+		})
+
 	pctx.VariableFunc("CcWrapper", func(config interface{}) (string, error) {
 		if override := config.(android.Config).Getenv("CC_WRAPPER"); override != "" {
 			return override + " ", nil
diff --git a/cc/gen.go b/cc/gen.go
index 808a681..353c43d 100644
--- a/cc/gen.go
+++ b/cc/gen.go
@@ -105,6 +105,8 @@
 
 	var deps android.Paths
 
+	var rsFiles android.Paths
+
 	for i, srcFile := range srcFiles {
 		switch srcFile.Ext() {
 		case ".y":
@@ -131,8 +133,16 @@
 			cppFile := android.GenPathWithExt(ctx, "aidl", srcFile, "cpp")
 			srcFiles[i] = cppFile
 			deps = append(deps, genAidl(ctx, srcFile, cppFile, buildFlags.aidlFlags)...)
+		case ".rs", ".fs":
+			cppFile := rsGeneratedCppFile(ctx, srcFile)
+			rsFiles = append(rsFiles, srcFiles[i])
+			srcFiles[i] = cppFile
 		}
 	}
 
+	if len(rsFiles) > 0 {
+		deps = append(deps, rsGenerateCpp(ctx, rsFiles, buildFlags.rsFlags)...)
+	}
+
 	return srcFiles, deps
 }
diff --git a/cc/makevars.go b/cc/makevars.go
index 22b9013..8bf034a 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -77,6 +77,8 @@
 
 	ctx.Strict("AIDL_CPP", "${aidlCmd}")
 
+	ctx.Strict("RS_GLOBAL_INCLUDES", "${config.RsGlobalIncludes}")
+
 	includeFlags, err := ctx.Eval("${config.CommonGlobalIncludes}")
 	if err != nil {
 		panic(err)
diff --git a/cc/rs.go b/cc/rs.go
new file mode 100644
index 0000000..fda2469
--- /dev/null
+++ b/cc/rs.go
@@ -0,0 +1,114 @@
+// Copyright 2017 Google Inc. All rights reserved.
+//
+// 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.
+
+package cc
+
+import (
+	"android/soong/android"
+	"strings"
+
+	"github.com/google/blueprint"
+	"github.com/google/blueprint/proptools"
+)
+
+func init() {
+	pctx.HostBinToolVariable("rsCmd", "llvm-rs-cc")
+}
+
+var rsCppCmdLine = strings.Replace(`
+${rsCmd} -o ${outDir} -d ${outDir} -a ${out} -MD -reflect-c++ ${rsFlags} $in &&
+(echo '${out}: \' && cat ${depFiles} | awk 'start { sub(/( \\)?$$/, " \\"); print } /:/ { start=1 }') > ${out}.d &&
+touch $out
+`, "\n", "", -1)
+
+var (
+	rsCpp = pctx.AndroidStaticRule("rsCpp",
+		blueprint.RuleParams{
+			Command:     rsCppCmdLine,
+			CommandDeps: []string{"$rsCmd"},
+			Depfile:     "${out}.d",
+			Deps:        blueprint.DepsGCC,
+			Description: "rsCpp $out",
+		},
+		"depFiles", "outDir", "rsFlags", "stampFile")
+)
+
+// Takes a path to a .rs or .fs file, and returns a path to a generated ScriptC_*.cpp file
+// This has to match the logic in llvm-rs-cc in DetermineOutputFile.
+func rsGeneratedCppFile(ctx android.ModuleContext, rsFile android.Path) android.WritablePath {
+	fileName := strings.TrimSuffix(rsFile.Base(), rsFile.Ext())
+	return android.PathForModuleGen(ctx, "rs", "ScriptC_"+fileName+".cpp")
+}
+
+func rsGeneratedDepFile(ctx android.ModuleContext, rsFile android.Path) android.WritablePath {
+	fileName := strings.TrimSuffix(rsFile.Base(), rsFile.Ext())
+	return android.PathForModuleGen(ctx, "rs", fileName+".d")
+}
+
+func rsGenerateCpp(ctx android.ModuleContext, rsFiles android.Paths, rsFlags string) android.Paths {
+	stampFile := android.PathForModuleGen(ctx, "rs", "rs.stamp")
+	depFiles := make(android.WritablePaths, len(rsFiles))
+	cppFiles := make(android.WritablePaths, len(rsFiles))
+	for i, rsFile := range rsFiles {
+		depFiles[i] = rsGeneratedDepFile(ctx, rsFile)
+		cppFiles[i] = rsGeneratedCppFile(ctx, rsFile)
+	}
+
+	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+		Rule:            rsCpp,
+		Output:          stampFile,
+		ImplicitOutputs: cppFiles,
+		Inputs:          rsFiles,
+		Args: map[string]string{
+			"rsFlags":  rsFlags,
+			"outDir":   android.PathForModuleGen(ctx, "rs").String(),
+			"depFiles": strings.Join(depFiles.Strings(), " "),
+		},
+	})
+
+	return android.Paths{stampFile}
+}
+
+func rsFlags(ctx ModuleContext, flags Flags, properties *BaseCompilerProperties) Flags {
+	targetApi := proptools.String(properties.Renderscript.Target_api)
+	if targetApi == "" && ctx.sdk() {
+		switch ctx.sdkVersion() {
+		case "current", "system_current", "test_current":
+			// Nothing
+		default:
+			targetApi = ctx.sdkVersion()
+		}
+	}
+
+	if targetApi != "" {
+		flags.rsFlags = append(flags.rsFlags, "-target-api "+targetApi)
+	}
+
+	flags.rsFlags = append(flags.rsFlags, "-Wall", "-Werror")
+	flags.rsFlags = append(flags.rsFlags, properties.Renderscript.Flags...)
+	if ctx.Arch().ArchType.Multilib == "lib64" {
+		flags.rsFlags = append(flags.rsFlags, "-m64")
+	} else {
+		flags.rsFlags = append(flags.rsFlags, "-m32")
+	}
+	flags.rsFlags = append(flags.rsFlags, "${config.RsGlobalIncludes}")
+
+	rootRsIncludeDirs := android.PathsForSource(ctx, properties.Renderscript.Include_dirs)
+	flags.rsFlags = append(flags.rsFlags, includeDirsToFlags(rootRsIncludeDirs))
+
+	flags.GlobalFlags = append(flags.GlobalFlags,
+		"-I"+android.PathForModuleGen(ctx, "rs").String())
+
+	return flags
+}
diff --git a/cc/util.go b/cc/util.go
index 18ad8a6..2febb57 100644
--- a/cc/util.go
+++ b/cc/util.go
@@ -96,6 +96,7 @@
 		yaccFlags:   strings.Join(in.YaccFlags, " "),
 		protoFlags:  strings.Join(in.protoFlags, " "),
 		aidlFlags:   strings.Join(in.aidlFlags, " "),
+		rsFlags:     strings.Join(in.rsFlags, " "),
 		ldFlags:     strings.Join(in.LdFlags, " "),
 		libFlags:    strings.Join(in.libFlags, " "),
 		tidyFlags:   strings.Join(in.TidyFlags, " "),
