Merge changes I3dc3fded,Ic1276329,I6be04dec

* changes:
  Add bpf_test.go to build and fix tests
  Don't create a second host arch for tests on darwin
  Move CreateTestContext to cc/testing.go
This commit is contained in:
Treehugger Robot 2019-05-18 00:31:56 +00:00 committed by Gerrit Code Review
commit 045f0f1f30
7 changed files with 82 additions and 173 deletions

View File

@ -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")

View File

@ -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"],
}

View File

@ -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{

View File

@ -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,
}
`

View File

@ -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"})

View File

@ -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))

View File

@ -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
}