Merge "Check NDK API level link compatibility."
diff --git a/android/module.go b/android/module.go
index 41499ca..f1af53a 100644
--- a/android/module.go
+++ b/android/module.go
@@ -56,8 +56,6 @@
 	Darwin() bool
 	Debug() bool
 	AConfig() Config
-	Proprietary() bool
-	InstallInData() bool
 }
 
 type BaseContext interface {
@@ -82,6 +80,9 @@
 	CheckbuildFile(srcPath Path)
 
 	AddMissingDependencies(deps []string)
+
+	Proprietary() bool
+	InstallInData() bool
 }
 
 type Module interface {
@@ -387,15 +388,14 @@
 
 func (a *ModuleBase) androidBaseContextFactory(ctx blueprint.BaseModuleContext) androidBaseContextImpl {
 	return androidBaseContextImpl{
-		target:        a.commonProperties.CompileTarget,
-		proprietary:   a.commonProperties.Proprietary,
-		config:        ctx.Config().(Config),
-		installInData: a.module.InstallInData(),
+		target: a.commonProperties.CompileTarget,
+		config: ctx.Config().(Config),
 	}
 }
 
 func (a *ModuleBase) GenerateBuildActions(ctx blueprint.ModuleContext) {
 	androidCtx := &androidModuleContext{
+		module:                 a.module,
 		ModuleContext:          ctx,
 		androidBaseContextImpl: a.androidBaseContextFactory(ctx),
 		installDeps:            a.computeInstallDeps(ctx),
@@ -422,11 +422,9 @@
 }
 
 type androidBaseContextImpl struct {
-	target        Target
-	debug         bool
-	config        Config
-	proprietary   bool
-	installInData bool
+	target Target
+	debug  bool
+	config Config
 }
 
 type androidModuleContext struct {
@@ -436,6 +434,7 @@
 	installFiles    Paths
 	checkbuildFiles Paths
 	missingDeps     []string
+	module          Module
 }
 
 func (a *androidModuleContext) ninjaError(outputs []string, err error) {
@@ -533,12 +532,12 @@
 	return a.config
 }
 
-func (a *androidBaseContextImpl) Proprietary() bool {
-	return a.proprietary
+func (a *androidModuleContext) Proprietary() bool {
+	return a.module.base().commonProperties.Proprietary
 }
 
-func (a *androidBaseContextImpl) InstallInData() bool {
-	return a.installInData
+func (a *androidModuleContext) InstallInData() bool {
+	return a.module.InstallInData()
 }
 
 func (a *androidModuleContext) InstallFileName(installPath OutputPath, name string, srcPath Path,
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index 903a96b..d681b77 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -93,6 +93,8 @@
 	baseCompiler
 
 	properties libraryProperties
+
+	linker *stubLinker
 }
 
 // OMG GO
@@ -175,6 +177,7 @@
 	stubSrcPath := android.PathForModuleGen(ctx, stubSrcName)
 	versionScriptName := fileBase + ".map"
 	versionScriptPath := android.PathForModuleGen(ctx, versionScriptName)
+	c.linker.versionScriptPath = versionScriptPath
 	symbolFilePath := android.PathForModuleSrc(ctx, c.properties.Symbol_file)
 	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
 		Rule:    genStubSrc,
@@ -209,6 +212,8 @@
 
 type stubLinker struct {
 	libraryLinker
+
+	versionScriptPath android.ModuleGenPath
 }
 
 func (linker *stubLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
@@ -221,6 +226,14 @@
 	return linker.libraryLinker.linkerFlags(ctx, flags)
 }
 
+func (linker *stubLinker) link(ctx ModuleContext, flags Flags, deps PathDeps,
+	objFiles android.Paths) android.Path {
+
+	linkerScriptFlag := "-Wl,--version-script," + linker.versionScriptPath.String()
+	flags.LdFlags = append(flags.LdFlags, linkerScriptFlag)
+	return linker.libraryLinker.link(ctx, flags, deps, objFiles)
+}
+
 type stubInstaller struct {
 	baseInstaller
 
@@ -258,6 +271,7 @@
 	module.linker = linker
 
 	compiler := &stubCompiler{}
+	compiler.linker = linker
 	module.compiler = compiler
 	module.installer = &stubInstaller{baseInstaller{
 		dir:   "lib",