Add an option for libraries to opt out of libcrt

Test: m checkbuild
Bug: 29275768
Change-Id: I9c0999ddc15ad152c47089509f91dc1dc901f7e4
diff --git a/cc/linker.go b/cc/linker.go
index 6d4d07b..2e1828a 100644
--- a/cc/linker.go
+++ b/cc/linker.go
@@ -59,6 +59,9 @@
 	// don't link in libgcc.a
 	No_libgcc *bool
 
+	// don't link in libclang_rt.builtins-*.a
+	No_libcrt *bool
+
 	// Use clang lld instead of gnu ld.
 	Use_clang_lld *bool `android:"arch_variant"`
 
@@ -216,10 +219,14 @@
 	}
 
 	if ctx.toolchain().Bionic() {
-		// libclang_rt.builtins, libgcc and libatomic have to be last on the command line
-		// TODO: Also enable for libc and libm
-		if ctx.ModuleName() != "libc" && ctx.ModuleName() != "libm" {
-			deps.LateStaticLibs = append(deps.LateStaticLibs, config.BuiltinsRuntimeLibrary(ctx.toolchain()))
+		// Allow individual projects to opt out of libcrt,builtins
+		// b/117565638
+		if !Bool(linker.Properties.No_libcrt) {
+			// libclang_rt.builtins, libgcc and libatomic have to be last on the command line
+			// TODO: Also enable for libc and libm
+			if ctx.ModuleName() != "libc" && ctx.ModuleName() != "libm" {
+				deps.LateStaticLibs = append(deps.LateStaticLibs, config.BuiltinsRuntimeLibrary(ctx.toolchain()))
+			}
 		}
 
 		deps.LateStaticLibs = append(deps.LateStaticLibs, "libatomic")