Merge "Fixing protoOutParams concatenation."
diff --git a/ui/build/config.go b/ui/build/config.go
index a1b5bd4..aa60b3f 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -48,6 +48,8 @@
 	ninjaArgs    []string
 	katiSuffix   string
 	targetDevice string
+
+	brokenDupRules bool
 }
 
 const srcDirFileCheck = "build/soong/root.bp"
@@ -556,3 +558,11 @@
 	}
 	return filepath.Join("prebuilts/build-tools", c.HostPrebuiltTag(), "bin", name)
 }
+
+func (c *configImpl) SetBuildBrokenDupRules(val bool) {
+	c.brokenDupRules = val
+}
+
+func (c *configImpl) BuildBrokenDupRules() bool {
+	return c.brokenDupRules
+}
diff --git a/ui/build/dumpvars.go b/ui/build/dumpvars.go
index a0e1eca..eb43ed6 100644
--- a/ui/build/dumpvars.go
+++ b/ui/build/dumpvars.go
@@ -156,6 +156,9 @@
 
 		// To find target/product/<DEVICE>
 		"TARGET_DEVICE",
+
+		// Whether --werror_overriding_commands will work
+		"BUILD_BROKEN_DUP_RULES",
 	}, exportEnvVars...), BannerVars...)
 
 	make_vars, err := dumpMakeVars(ctx, config, config.Arguments(), allVars, true)
@@ -179,4 +182,6 @@
 	config.SetKatiArgs(strings.Fields(make_vars["KATI_GOALS"]))
 	config.SetNinjaArgs(strings.Fields(make_vars["NINJA_GOALS"]))
 	config.SetTargetDevice(make_vars["TARGET_DEVICE"])
+
+	config.SetBuildBrokenDupRules(make_vars["BUILD_BROKEN_DUP_RULES"] != "false")
 }
diff --git a/ui/build/kati.go b/ui/build/kati.go
index dde5ecc..a73ebdf 100644
--- a/ui/build/kati.go
+++ b/ui/build/kati.go
@@ -81,6 +81,10 @@
 		"-f", "build/make/core/main.mk",
 	}
 
+	if !config.BuildBrokenDupRules() {
+		args = append(args, "--werror_overriding_commands")
+	}
+
 	if !config.Environment().IsFalse("KATI_EMULATE_FIND") {
 		args = append(args, "--use_find_emulator")
 	}
@@ -190,6 +194,7 @@
 		"--color_warnings",
 		"--gen_all_targets",
 		"--werror_find_emulator",
+		"--werror_overriding_commands",
 		"--use_find_emulator",
 		"-f", "build/make/core/cleanbuild.mk",
 		"BUILDING_WITH_NINJA=true",