diff options
author | Victor Khimenko <khim@google.com> | 2020-05-07 22:16:33 +0200 |
---|---|---|
committer | Victor Khimenko <khim@google.com> | 2020-06-09 23:35:37 +0200 |
commit | 78f654c6cf06b744209f89cc6cc54da6712a50e8 (patch) | |
tree | 1c31de728423ef99affc76948ca768fed807f20b /android | |
parent | feee55480628da93c4f02e95d2da4b2cb1f6404b (diff) | |
download | build_soong-78f654c6cf06b744209f89cc6cc54da6712a50e8.tar.gz build_soong-78f654c6cf06b744209f89cc6cc54da6712a50e8.tar.bz2 build_soong-78f654c6cf06b744209f89cc6cc54da6712a50e8.zip |
Make it possible to specify separate rules for native_bridge case
This change make it possible to specify separate rules for native-bridge
case and non-native-bridge case.
Bug: http://b/153609531
Test: build 4arch product
Change-Id: I60145bbb9c94318f14af3cabd9f5960fc9ee62de
Merged-In: I60145bbb9c94318f14af3cabd9f5960fc9ee62de
Diffstat (limited to 'android')
-rw-r--r-- | android/arch.go | 6 | ||||
-rw-r--r-- | android/arch_test.go | 85 |
2 files changed, 91 insertions, 0 deletions
diff --git a/android/arch.go b/android/arch.go index e4404868..d14221f7 100644 --- a/android/arch.go +++ b/android/arch.go @@ -1070,6 +1070,7 @@ func createArchPropTypeDesc(props reflect.Type) []archPropTypeDesc { "Not_windows", "Arm_on_x86", "Arm_on_x86_64", + "Native_bridge", } for _, os := range OsTypeList { targets = append(targets, os.Field) @@ -1457,6 +1458,11 @@ func (m *ModuleBase) setArchProperties(ctx BottomUpMutatorContext) { prefix := "target.arm_on_x86_64" m.appendProperties(ctx, genProps, targetProp, field, prefix) } + if os == Android && m.Target().NativeBridge == NativeBridgeEnabled { + field := "Native_bridge" + prefix := "target.native_bridge" + m.appendProperties(ctx, genProps, targetProp, field, prefix) + } } } } diff --git a/android/arch_test.go b/android/arch_test.go index b987d569..8525b034 100644 --- a/android/arch_test.go +++ b/android/arch_test.go @@ -383,3 +383,88 @@ func TestArchMutator(t *testing.T) { }) } } + +func TestArchMutatorNativeBridge(t *testing.T) { + bp := ` + // This module is only enabled for x86. + module { + name: "foo", + } + + // This module is enabled for x86 and arm (via native bridge). + module { + name: "bar", + native_bridge_supported: true, + } + + // This module is enabled for arm (native_bridge) only. + module { + name: "baz", + native_bridge_supported: true, + enabled: false, + target: { + native_bridge: { + enabled: true, + } + } + } + ` + + testCases := []struct { + name string + config func(Config) + fooVariants []string + barVariants []string + bazVariants []string + }{ + { + name: "normal", + config: nil, + fooVariants: []string{"android_x86_64_silvermont", "android_x86_silvermont"}, + barVariants: []string{"android_x86_64_silvermont", "android_native_bridge_arm64_armv8-a", "android_x86_silvermont", "android_native_bridge_arm_armv7-a-neon"}, + bazVariants: []string{"android_native_bridge_arm64_armv8-a", "android_native_bridge_arm_armv7-a-neon"}, + }, + } + + enabledVariants := func(ctx *TestContext, name string) []string { + var ret []string + variants := ctx.ModuleVariantsForTests(name) + for _, variant := range variants { + m := ctx.ModuleForTests(name, variant) + if m.Module().Enabled() { + ret = append(ret, variant) + } + } + return ret + } + + for _, tt := range testCases { + t.Run(tt.name, func(t *testing.T) { + config := TestArchConfigNativeBridge(buildDir, nil, bp, nil) + + ctx := NewTestArchContext() + ctx.RegisterModuleType("module", archTestModuleFactory) + ctx.Register(config) + if tt.config != nil { + tt.config(config) + } + + _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) + FailIfErrored(t, errs) + _, errs = ctx.PrepareBuildActions(config) + FailIfErrored(t, errs) + + if g, w := enabledVariants(ctx, "foo"), tt.fooVariants; !reflect.DeepEqual(w, g) { + t.Errorf("want foo variants:\n%q\ngot:\n%q\n", w, g) + } + + if g, w := enabledVariants(ctx, "bar"), tt.barVariants; !reflect.DeepEqual(w, g) { + t.Errorf("want bar variants:\n%q\ngot:\n%q\n", w, g) + } + + if g, w := enabledVariants(ctx, "baz"), tt.bazVariants; !reflect.DeepEqual(w, g) { + t.Errorf("want qux variants:\n%q\ngot:\n%q\n", w, g) + } + }) + } +} |