Add LLNDK support for the VNDK

Instead of using the NDK headers and libraries, add LL-NDK specific
headers and library stubs for VNDK users. This allows us to provide an
expanded liblog interface.

Test: aosp_arm; m -j
Test: Enable BOARD_VNDK_VERSION on aosp_arm; m -j
Test: Inspect out/soong/build.ninja before/after (w/o vndk)
Change-Id: Ic85f07fa10c695b5baab10c41f5e0ad38700bf3d
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index c28b411..75785f9 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -30,10 +30,10 @@
 
 	genStubSrc = pctx.AndroidStaticRule("genStubSrc",
 		blueprint.RuleParams{
-			Command:     "$toolPath --arch $arch --api $apiLevel $in $out",
+			Command:     "$toolPath --arch $arch --api $apiLevel $vndk $in $out",
 			Description: "genStubSrc $out",
 			CommandDeps: []string{"$toolPath"},
-		}, "arch", "apiLevel")
+		}, "arch", "apiLevel", "vndk")
 
 	ndkLibrarySuffix = ".ndk"
 
@@ -241,28 +241,20 @@
 	ndkMigratedLibs = append(ndkMigratedLibs, name)
 }
 
-func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
+func compileStubLibrary(ctx ModuleContext, flags Flags, symbolFile, apiLevel, vndk string) (Objects, android.ModuleGenPath) {
 	arch := ctx.Arch().ArchType.String()
 
-	if !strings.HasSuffix(ctx.ModuleName(), ndkLibrarySuffix) {
-		ctx.ModuleErrorf("ndk_library modules names must be suffixed with %q\n",
-			ndkLibrarySuffix)
-	}
-	libName := strings.TrimSuffix(ctx.ModuleName(), ndkLibrarySuffix)
-	fileBase := fmt.Sprintf("%s.%s.%s", libName, arch, c.properties.ApiLevel)
-	stubSrcName := fileBase + ".c"
-	stubSrcPath := android.PathForModuleGen(ctx, stubSrcName)
-	versionScriptName := fileBase + ".map"
-	versionScriptPath := android.PathForModuleGen(ctx, versionScriptName)
-	c.versionScriptPath = versionScriptPath
-	symbolFilePath := android.PathForModuleSrc(ctx, c.properties.Symbol_file)
+	stubSrcPath := android.PathForModuleGen(ctx, "stub.c")
+	versionScriptPath := android.PathForModuleGen(ctx, "stub.map")
+	symbolFilePath := android.PathForModuleSrc(ctx, symbolFile)
 	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
 		Rule:    genStubSrc,
 		Outputs: []android.WritablePath{stubSrcPath, versionScriptPath},
 		Input:   symbolFilePath,
 		Args: map[string]string{
 			"arch":     arch,
-			"apiLevel": c.properties.ApiLevel,
+			"apiLevel": apiLevel,
+			"vndk":     vndk,
 		},
 	})
 
@@ -280,7 +272,17 @@
 
 	subdir := ""
 	srcs := []android.Path{stubSrcPath}
-	return compileObjs(ctx, flagsToBuilderFlags(flags), subdir, srcs, nil)
+	return compileObjs(ctx, flagsToBuilderFlags(flags), subdir, srcs, nil), versionScriptPath
+}
+
+func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
+	if !strings.HasSuffix(ctx.ModuleName(), ndkLibrarySuffix) {
+		ctx.ModuleErrorf("ndk_library modules names must be suffixed with %q\n",
+			ndkLibrarySuffix)
+	}
+	objs, versionScript := compileStubLibrary(ctx, flags, c.properties.Symbol_file, c.properties.ApiLevel, "")
+	c.versionScriptPath = versionScript
+	return objs
 }
 
 func (linker *stubDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {