Merge "object files depend only on NDK headers"
diff --git a/cc/binary.go b/cc/binary.go
index 63657e4..0650bdf 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -412,6 +412,7 @@
 		linkerDeps = append(linkerDeps, deps.EarlySharedLibsDeps...)
 		linkerDeps = append(linkerDeps, deps.SharedLibsDeps...)
 		linkerDeps = append(linkerDeps, deps.LateSharedLibsDeps...)
+		linkerDeps = append(linkerDeps, ndkSharedLibDeps(ctx)...)
 	}
 
 	validations = append(validations, objs.tidyFiles...)
diff --git a/cc/builder.go b/cc/builder.go
index fea65d5..72c2fa5 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -549,10 +549,6 @@
 		return "$" + kind + n
 	}
 
-	// clang-tidy checks source files and does not need to link with libraries.
-	// tidyPathDeps should contain pathDeps but not libraries.
-	tidyPathDeps := skipNdkLibraryDeps(ctx, pathDeps)
-
 	for i, srcFile := range srcFiles {
 		objFile := android.ObjPathWithExt(ctx, subdir, srcFile, "o")
 
@@ -676,7 +672,7 @@
 				Output:      tidyFile,
 				Input:       srcFile,
 				Implicits:   cFlagsDeps,
-				OrderOnly:   tidyPathDeps,
+				OrderOnly:   pathDeps,
 				Args: map[string]string{
 					"ccCmd":     ccCmd,
 					"cFlags":    shareFlags("cFlags", escapeSingleQuotes(moduleToolingFlags)),
diff --git a/cc/compiler.go b/cc/compiler.go
index 2e62b00..8adc3ab 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -637,9 +637,9 @@
 
 func ndkPathDeps(ctx ModuleContext) android.Paths {
 	if ctx.Module().(*Module).IsSdkVariant() {
-		// The NDK sysroot timestamp file depends on all the NDK sysroot files
-		// (headers and libraries).
-		return android.Paths{getNdkBaseTimestampFile(ctx)}
+		// The NDK sysroot timestamp file depends on all the NDK sysroot header files
+		// for compiling src to obj files.
+		return android.Paths{getNdkHeadersTimestampFile(ctx)}
 	}
 	return nil
 }
diff --git a/cc/library.go b/cc/library.go
index d071429..e53aac0 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -1366,11 +1366,21 @@
 	return outputFile
 }
 
+func ndkSharedLibDeps(ctx ModuleContext) android.Paths {
+	if ctx.Module().(*Module).IsSdkVariant() {
+		// The NDK sysroot timestamp file depends on all the NDK
+		// sysroot header and shared library files.
+		return android.Paths{getNdkBaseTimestampFile(ctx)}
+	}
+	return nil
+}
+
 func (library *libraryDecorator) linkShared(ctx ModuleContext,
 	flags Flags, deps PathDeps, objs Objects) android.Path {
 
 	var linkerDeps android.Paths
 	linkerDeps = append(linkerDeps, flags.LdFlagsDeps...)
+	linkerDeps = append(linkerDeps, ndkSharedLibDeps(ctx)...)
 
 	unexportedSymbols := ctx.ExpandOptionalSource(library.Properties.Unexported_symbols_list, "unexported_symbols_list")
 	forceNotWeakSymbols := ctx.ExpandOptionalSource(library.Properties.Force_symbols_not_weak_list, "force_symbols_not_weak_list")
diff --git a/cc/ndk_sysroot.go b/cc/ndk_sysroot.go
index ee11db1..6c200f5 100644
--- a/cc/ndk_sysroot.go
+++ b/cc/ndk_sysroot.go
@@ -94,21 +94,6 @@
 	return android.PathForOutput(ctx, "ndk.timestamp")
 }
 
-// Replace ndk_base.timestamp and ndk.timestamp with ndk_headers.timestamp.
-func skipNdkLibraryDeps(ctx android.ModuleContext, paths android.Paths) android.Paths {
-	var newPaths android.Paths
-	baseTimestamp := getNdkBaseTimestampFile(ctx)
-	fullTimestamp := getNdkFullTimestampFile(ctx)
-	headersTimestamp := getNdkHeadersTimestampFile(ctx)
-	for _, path := range paths {
-		if path == baseTimestamp || path == fullTimestamp {
-			path = headersTimestamp
-		}
-		newPaths = append(newPaths, path)
-	}
-	return newPaths
-}
-
 func NdkSingleton() android.Singleton {
 	return &ndkSingleton{}
 }