From b5f6d9ea511a6515637de0c4aaaf3859061f07cb Mon Sep 17 00:00:00 2001 From: Alix Date: Wed, 20 Apr 2022 23:00:58 +0000 Subject: [PATCH] Deprecating clang Property Clang has defaulted to true since 2018. Clang property is deprecated. Set up a BUILD_BROKEN_CLANG_PROPERTY flag so partners can bypass \ errors from using clang. Bug: 208980553 Test: m nothing & treehugger Change-Id: I8fd7d3e6bdbb963279248d3482e8a590238727e3 --- android/config.go | 4 ++++ android/variable.go | 1 + cc/cc.go | 2 ++ cc/cc_test.go | 50 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/android/config.go b/android/config.go index 5ca94209f..6654b499c 100644 --- a/android/config.go +++ b/android/config.go @@ -1630,6 +1630,10 @@ func (c *deviceConfig) ShippingApiLevel() ApiLevel { return uncheckedFinalApiLevel(apiLevel) } +func (c *deviceConfig) BuildBrokenClangProperty() bool { + return c.config.productVariables.BuildBrokenClangProperty +} + func (c *deviceConfig) BuildBrokenEnforceSyspropOwner() bool { return c.config.productVariables.BuildBrokenEnforceSyspropOwner } diff --git a/android/variable.go b/android/variable.go index 2d7b0bf8e..7a080fef7 100644 --- a/android/variable.go +++ b/android/variable.go @@ -430,6 +430,7 @@ type productVariables struct { ShippingApiLevel *string `json:",omitempty"` + BuildBrokenClangProperty bool `json:",omitempty"` BuildBrokenDepfile *bool `json:",omitempty"` BuildBrokenEnforceSyspropOwner bool `json:",omitempty"` BuildBrokenTrebleSyspropNeverallow bool `json:",omitempty"` diff --git a/cc/cc.go b/cc/cc.go index 336771a83..f1e9bf621 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -1900,6 +1900,8 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { if c.Properties.Clang != nil && *c.Properties.Clang == false { ctx.PropertyErrorf("clang", "false (GCC) is no longer supported") + } else if c.Properties.Clang != nil && !ctx.DeviceConfig().BuildBrokenClangProperty() { + ctx.PropertyErrorf("clang", "property is deprecated, see Changes.md file") } flags := Flags{ diff --git a/cc/cc_test.go b/cc/cc_test.go index f02570020..36174d639 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -4336,3 +4336,53 @@ func TestIncludeDirectoryOrdering(t *testing.T) { } } + +func TestCcBuildBrokenClangProperty(t *testing.T) { + tests := []struct { + name string + clang bool + BuildBrokenClangProperty bool + err string + }{ + { + name: "error when clang is set to false", + clang: false, + err: "is no longer supported", + }, + { + name: "error when clang is set to true", + clang: true, + err: "property is deprecated, see Changes.md", + }, + { + name: "no error when BuildBrokenClangProperty is explicitly set to true", + clang: true, + BuildBrokenClangProperty: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + bp := fmt.Sprintf(` + cc_library { + name: "foo", + clang: %t, + }`, test.clang) + + if test.err == "" { + android.GroupFixturePreparers( + prepareForCcTest, + android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + if test.BuildBrokenClangProperty { + variables.BuildBrokenClangProperty = test.BuildBrokenClangProperty + } + }), + ).RunTestWithBp(t, bp) + } else { + prepareForCcTest. + ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(test.err)). + RunTestWithBp(t, bp) + } + }) + } +}