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") 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/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..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, @@ -183,3 +189,55 @@ 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("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)) + 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 +}