From 9a94287fc95617e2541bf5ac7c2c42a2c3adcaa0 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 14 May 2019 15:44:26 -0700 Subject: [PATCH 1/3] Move CreateTestContext to cc/testing.go Allow CreateTestContext to be called by tests in other packages that need cc modules. Test: all soong tests Change-Id: I6be04dec50632baa8cb51e55ba14d0ddc0df60b8 --- cc/cc_test.go | 55 ++------------------------------------------- cc/prebuilt_test.go | 2 +- cc/testing.go | 51 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/cc/cc_test.go b/cc/cc_test.go index ef6364b58..f5bb12c8f 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -52,64 +52,13 @@ func TestMain(m *testing.M) { os.Exit(run()) } -func createTestContext(t *testing.T, config android.Config, bp string, fs map[string][]byte, - os android.OsType) *android.TestContext { - - ctx := android.NewTestArchContext() - ctx.RegisterModuleType("cc_binary", android.ModuleFactoryAdaptor(BinaryFactory)) - ctx.RegisterModuleType("cc_binary_host", android.ModuleFactoryAdaptor(binaryHostFactory)) - ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(LibraryFactory)) - ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(LibrarySharedFactory)) - ctx.RegisterModuleType("cc_library_static", android.ModuleFactoryAdaptor(LibraryStaticFactory)) - ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(LibraryHeaderFactory)) - ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(ToolchainLibraryFactory)) - ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(LlndkLibraryFactory)) - ctx.RegisterModuleType("llndk_headers", android.ModuleFactoryAdaptor(llndkHeadersFactory)) - ctx.RegisterModuleType("vendor_public_library", android.ModuleFactoryAdaptor(vendorPublicLibraryFactory)) - ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(ObjectFactory)) - ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory)) - ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { - ctx.BottomUp("image", ImageMutator).Parallel() - ctx.BottomUp("link", LinkageMutator).Parallel() - ctx.BottomUp("vndk", VndkMutator).Parallel() - ctx.BottomUp("version", VersionMutator).Parallel() - ctx.BottomUp("begin", BeginMutator).Parallel() - }) - ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) { - ctx.TopDown("double_loadable", checkDoubleLoadableLibraries).Parallel() - }) - ctx.RegisterSingletonType("vndk-snapshot", android.SingletonFactoryAdaptor(VndkSnapshotSingleton)) - - // add some modules that are required by the compiler and/or linker - bp = bp + GatherRequiredDepsForTest(os) - - mockFS := map[string][]byte{ - "Android.bp": []byte(bp), - "foo.c": nil, - "bar.c": nil, - "a.proto": nil, - "b.aidl": nil, - "my_include": nil, - "foo.map.txt": nil, - "liba.so": nil, - } - - for k, v := range fs { - mockFS[k] = v - } - - ctx.MockFileSystem(mockFS) - - return ctx -} - func testCcWithConfig(t *testing.T, bp string, config android.Config) *android.TestContext { return testCcWithConfigForOs(t, bp, config, android.Android) } func testCcWithConfigForOs(t *testing.T, bp string, config android.Config, os android.OsType) *android.TestContext { t.Helper() - ctx := createTestContext(t, config, bp, nil, os) + ctx := CreateTestContext(bp, nil, os) ctx.Register() _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) @@ -143,7 +92,7 @@ func testCcError(t *testing.T, pattern string, bp string) { config.TestProductVariables.DeviceVndkVersion = StringPtr("current") config.TestProductVariables.Platform_vndk_version = StringPtr("VER") - ctx := createTestContext(t, config, bp, nil, android.Android) + ctx := CreateTestContext(bp, nil, android.Android) ctx.Register() _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) diff --git a/cc/prebuilt_test.go b/cc/prebuilt_test.go index 7cc265141..98d78e816 100644 --- a/cc/prebuilt_test.go +++ b/cc/prebuilt_test.go @@ -70,7 +70,7 @@ func TestPrebuilt(t *testing.T) { config := android.TestArchConfig(buildDir, nil) - ctx := createTestContext(t, config, bp, fs, android.Android) + ctx := CreateTestContext(bp, fs, android.Android) ctx.RegisterModuleType("cc_prebuilt_library_shared", android.ModuleFactoryAdaptor(prebuiltSharedLibraryFactory)) ctx.RegisterModuleType("cc_prebuilt_library_static", android.ModuleFactoryAdaptor(prebuiltStaticLibraryFactory)) diff --git a/cc/testing.go b/cc/testing.go index 8d76c2f5a..162a74600 100644 --- a/cc/testing.go +++ b/cc/testing.go @@ -183,3 +183,54 @@ func GatherRequiredDepsForTest(os android.OsType) string { } return ret } + +func CreateTestContext(bp string, fs map[string][]byte, + os android.OsType) *android.TestContext { + + ctx := android.NewTestArchContext() + ctx.RegisterModuleType("cc_binary", android.ModuleFactoryAdaptor(BinaryFactory)) + ctx.RegisterModuleType("cc_binary_host", android.ModuleFactoryAdaptor(binaryHostFactory)) + ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(LibraryFactory)) + ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(LibrarySharedFactory)) + ctx.RegisterModuleType("cc_library_static", android.ModuleFactoryAdaptor(LibraryStaticFactory)) + ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(LibraryHeaderFactory)) + ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(ToolchainLibraryFactory)) + ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(LlndkLibraryFactory)) + ctx.RegisterModuleType("llndk_headers", android.ModuleFactoryAdaptor(llndkHeadersFactory)) + ctx.RegisterModuleType("vendor_public_library", android.ModuleFactoryAdaptor(vendorPublicLibraryFactory)) + ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(ObjectFactory)) + ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory)) + ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { + ctx.BottomUp("image", ImageMutator).Parallel() + ctx.BottomUp("link", LinkageMutator).Parallel() + ctx.BottomUp("vndk", VndkMutator).Parallel() + ctx.BottomUp("version", VersionMutator).Parallel() + ctx.BottomUp("begin", BeginMutator).Parallel() + }) + ctx.PostDepsMutators(func(ctx android.RegisterMutatorsContext) { + ctx.TopDown("double_loadable", checkDoubleLoadableLibraries).Parallel() + }) + ctx.RegisterSingletonType("vndk-snapshot", android.SingletonFactoryAdaptor(VndkSnapshotSingleton)) + + // add some modules that are required by the compiler and/or linker + bp = bp + GatherRequiredDepsForTest(os) + + mockFS := map[string][]byte{ + "Android.bp": []byte(bp), + "foo.c": nil, + "bar.c": nil, + "a.proto": nil, + "b.aidl": nil, + "my_include": nil, + "foo.map.txt": nil, + "liba.so": nil, + } + + for k, v := range fs { + mockFS[k] = v + } + + ctx.MockFileSystem(mockFS) + + return ctx +} From 0d99f7cd8419a16132dc0aa3a6f37697dc473aad Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 14 May 2019 16:01:24 -0700 Subject: [PATCH 2/3] Don't create a second host arch for tests on darwin Only x86_64 darwin is supported, not x86. Don't create an x86 host arch when running tests on darwin. Test: all soong tests Change-Id: Ic12763298345e32a1340f8fbef338d2ab4d62b2e --- android/config.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/android/config.go b/android/config.go index a18feb6dd..1507c252a 100644 --- a/android/config.go +++ b/android/config.go @@ -235,20 +235,14 @@ func TestConfig(buildDir string, env map[string]string) Config { } func TestArchConfigNativeBridge(buildDir string, env map[string]string) Config { - testConfig := TestConfig(buildDir, env) + testConfig := TestArchConfig(buildDir, env) config := testConfig.config - config.Targets = map[OsType][]Target{ - Android: []Target{ - {Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled}, - {Android, Arch{ArchType: X86, ArchVariant: "silvermont", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled}, - {Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeEnabled}, - {Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled}, - }, - BuildOs: []Target{ - {BuildOs, Arch{ArchType: X86_64}, NativeBridgeDisabled}, - {BuildOs, Arch{ArchType: X86}, NativeBridgeDisabled}, - }, + config.Targets[Android] = []Target{ + {Android, Arch{ArchType: X86_64, ArchVariant: "silvermont", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled}, + {Android, Arch{ArchType: X86, ArchVariant: "silvermont", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled}, + {Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Native: true, Abi: []string{"arm64-v8a"}}, NativeBridgeEnabled}, + {Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Native: true, Abi: []string{"armeabi-v7a"}}, NativeBridgeEnabled}, } return testConfig @@ -286,6 +280,10 @@ func TestArchConfig(buildDir string, env map[string]string) Config { }, } + if runtime.GOOS == "darwin" { + config.Targets[BuildOs] = config.Targets[BuildOs][:1] + } + config.BuildOsVariant = config.Targets[BuildOs][0].String() config.BuildOsCommonVariant = getCommonTargets(config.Targets[BuildOs])[0].String() config.TestProductVariables.DeviceArch = proptools.StringPtr("arm64") From 815daf95b2a019cc997484841d318ee86e3f8c08 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 14 May 2019 16:05:20 -0700 Subject: [PATCH 3/3] Add bpf_test.go to build and fix tests bpf_test.go was not listed in testSrcs, which meant it was not run during the build, but ran and failed with go test android/soong/... Don't redeclare the cc module types and mutators, use exported functions from cc/testing.go instead, which contain a new dependency needed by cc modules. This reapplies I4542640e8ff08e71565ed50617dbe67d86b29b69 after fixes for mac tests. Test: m Test: go test android/soong/... Change-Id: I3dc3fdedbd7063df4a2e0cadf2a4e0711b1823ad --- bpf/Android.bp | 4 ++ bpf/bpf.go | 4 +- bpf/bpf_test.go | 110 +++--------------------------------------------- cc/testing.go | 7 +++ 4 files changed, 18 insertions(+), 107 deletions(-) diff --git a/bpf/Android.bp b/bpf/Android.bp index 7bd4d4431..882cd8afe 100644 --- a/bpf/Android.bp +++ b/bpf/Android.bp @@ -21,10 +21,14 @@ bootstrap_go_package { "blueprint", "blueprint-proptools", "soong-android", + "soong-cc", "soong-cc-config", ], srcs: [ "bpf.go", ], + testSrcs: [ + "bpf_test.go", + ], pluginFor: ["soong_build"], } diff --git a/bpf/bpf.go b/bpf/bpf.go index 13468c73f..dcbf9adac 100644 --- a/bpf/bpf.go +++ b/bpf/bpf.go @@ -33,7 +33,7 @@ func init() { var ( pctx = android.NewPackageContext("android/soong/bpf") - cc = pctx.AndroidGomaStaticRule("cc", + ccRule = pctx.AndroidGomaStaticRule("ccRule", blueprint.RuleParams{ Depfile: "${out}.d", Deps: blueprint.DepsGCC, @@ -82,7 +82,7 @@ func (bpf *bpf) GenerateAndroidBuildActions(ctx android.ModuleContext) { obj := android.ObjPathWithExt(ctx, "", src, "o") ctx.Build(pctx, android.BuildParams{ - Rule: cc, + Rule: ccRule, Input: src, Output: obj, Args: map[string]string{ diff --git a/bpf/bpf_test.go b/bpf/bpf_test.go index 1d53e4138..cbb251fad 100644 --- a/bpf/bpf_test.go +++ b/bpf/bpf_test.go @@ -20,7 +20,7 @@ import ( "testing" "android/soong/android" - cc2 "android/soong/cc" + "android/soong/cc" ) var buildDir string @@ -49,115 +49,14 @@ func TestMain(m *testing.M) { } func testContext(bp string) *android.TestContext { - ctx := android.NewTestArchContext() - ctx.RegisterModuleType("bpf", android.ModuleFactoryAdaptor(bpfFactory)) - ctx.RegisterModuleType("cc_test", android.ModuleFactoryAdaptor(cc2.TestFactory)) - ctx.RegisterModuleType("cc_library", android.ModuleFactoryAdaptor(cc2.LibraryFactory)) - ctx.RegisterModuleType("cc_library_static", android.ModuleFactoryAdaptor(cc2.LibraryStaticFactory)) - ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(cc2.ObjectFactory)) - ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(cc2.ToolchainLibraryFactory)) - ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { - ctx.BottomUp("link", cc2.LinkageMutator).Parallel() - }) - ctx.Register() - - // Add some modules that are required by the compiler and/or linker - bp = bp + ` - toolchain_library { - name: "libatomic", - vendor_available: true, - recovery_available: true, - src: "", - } - - toolchain_library { - name: "libclang_rt.builtins-arm-android", - vendor_available: true, - recovery_available: true, - src: "", - } - - toolchain_library { - name: "libclang_rt.builtins-aarch64-android", - vendor_available: true, - recovery_available: true, - src: "", - } - - toolchain_library { - name: "libgcc", - vendor_available: true, - recovery_available: true, - src: "", - } - - cc_library { - name: "libc", - no_libgcc: true, - nocrt: true, - system_shared_libs: [], - recovery_available: true, - } - - cc_library { - name: "libm", - no_libgcc: true, - nocrt: true, - system_shared_libs: [], - recovery_available: true, - } - - cc_library { - name: "libdl", - no_libgcc: true, - nocrt: true, - system_shared_libs: [], - recovery_available: true, - } - - cc_library { - name: "libgtest", - host_supported: true, - vendor_available: true, - } - - cc_library { - name: "libgtest_main", - host_supported: true, - vendor_available: true, - } - - cc_object { - name: "crtbegin_dynamic", - recovery_available: true, - vendor_available: true, - } - - cc_object { - name: "crtend_android", - recovery_available: true, - vendor_available: true, - } - - cc_object { - name: "crtbegin_so", - recovery_available: true, - vendor_available: true, - } - - cc_object { - name: "crtend_so", - recovery_available: true, - vendor_available: true, - } - ` mockFS := map[string][]byte{ - "Android.bp": []byte(bp), "bpf.c": nil, "BpfTest.cpp": nil, } - ctx.MockFileSystem(mockFS) + ctx := cc.CreateTestContext(bp, mockFS, android.Android) + ctx.RegisterModuleType("bpf", android.ModuleFactoryAdaptor(bpfFactory)) + ctx.Register() return ctx } @@ -174,6 +73,7 @@ func TestBpfDataDependency(t *testing.T) { name: "vts_test_binary_bpf_module", srcs: ["BpfTest.cpp"], data: [":bpf.o"], + gtest: false, } ` diff --git a/cc/testing.go b/cc/testing.go index 162a74600..259fb19e5 100644 --- a/cc/testing.go +++ b/cc/testing.go @@ -147,6 +147,12 @@ func GatherRequiredDepsForTest(os android.OsType) string { vendor_available: true, } + cc_object { + name: "crtbegin_dynamic", + recovery_available: true, + vendor_available: true, + } + cc_object { name: "crtbegin_static", recovery_available: true, @@ -194,6 +200,7 @@ func CreateTestContext(bp string, fs map[string][]byte, ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(LibrarySharedFactory)) ctx.RegisterModuleType("cc_library_static", android.ModuleFactoryAdaptor(LibraryStaticFactory)) ctx.RegisterModuleType("cc_library_headers", android.ModuleFactoryAdaptor(LibraryHeaderFactory)) + ctx.RegisterModuleType("cc_test", android.ModuleFactoryAdaptor(TestFactory)) ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(ToolchainLibraryFactory)) ctx.RegisterModuleType("llndk_library", android.ModuleFactoryAdaptor(LlndkLibraryFactory)) ctx.RegisterModuleType("llndk_headers", android.ModuleFactoryAdaptor(llndkHeadersFactory))