Loading bazel/properties.go +0 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,6 @@ func SubtractStrings(haystack []string, needle []string) []string { // Return all needles in a given haystack, where needleFn is true for needles. func FilterLabelList(haystack LabelList, needleFn func(string) bool) LabelList { var includes []Label for _, inc := range haystack.Includes { if needleFn(inc.Label) { includes = append(includes, inc) Loading bp2build/build_conversion.go +1 −1 Original line number Diff line number Diff line Loading @@ -445,7 +445,7 @@ func prettyPrint(propertyValue reflect.Value, indent int) (string, error) { return prettyPrint(propertyValue.Elem(), indent) case reflect.Slice: if propertyValue.Len() == 0 { return "", nil return "[]", nil } if propertyValue.Len() == 1 { Loading bp2build/cc_library_static_conversion_test.go +78 −0 Original line number Diff line number Diff line Loading @@ -850,6 +850,84 @@ cc_library_static { }) } func TestCcLibraryStaticOneArchEmpty(t *testing.T) { runCcLibraryStaticTestCase(t, bp2buildTestCase{ description: "cc_library_static one arch empty", moduleTypeUnderTest: "cc_library_static", moduleTypeUnderTestFactory: cc.LibraryStaticFactory, moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build, depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build}, filesystem: map[string]string{ "common.cc": "", "foo-no-arm.cc": "", "foo-excluded.cc": "", }, blueprint: soongCcLibraryStaticPreamble + ` cc_library_static { name: "foo_static", srcs: ["common.cc", "foo-*.cc"], exclude_srcs: ["foo-excluded.cc"], arch: { arm: { exclude_srcs: ["foo-no-arm.cc"] }, }, }`, expectedBazelTargets: []string{`cc_library_static( name = "foo_static", copts = [ "-I.", "-I$(BINDIR)/.", ], linkstatic = True, srcs = ["common.cc"] + select({ "//build/bazel/platforms/arch:arm": [], "//conditions:default": ["foo-no-arm.cc"], }), )`}, }) } func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) { runCcLibraryStaticTestCase(t, bp2buildTestCase{ description: "cc_library_static one arch empty other set", moduleTypeUnderTest: "cc_library_static", moduleTypeUnderTestFactory: cc.LibraryStaticFactory, moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build, depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build}, filesystem: map[string]string{ "common.cc": "", "foo-no-arm.cc": "", "x86-only.cc": "", "foo-excluded.cc": "", }, blueprint: soongCcLibraryStaticPreamble + ` cc_library_static { name: "foo_static", srcs: ["common.cc", "foo-*.cc"], exclude_srcs: ["foo-excluded.cc"], arch: { arm: { exclude_srcs: ["foo-no-arm.cc"] }, x86: { srcs: ["x86-only.cc"] }, }, }`, expectedBazelTargets: []string{`cc_library_static( name = "foo_static", copts = [ "-I.", "-I$(BINDIR)/.", ], linkstatic = True, srcs = ["common.cc"] + select({ "//build/bazel/platforms/arch:arm": [], "//build/bazel/platforms/arch:x86": [ "foo-no-arm.cc", "x86-only.cc", ], "//conditions:default": ["foo-no-arm.cc"], }), )`}, }) } func TestCcLibraryStaticMultipleDepSameName(t *testing.T) { runCcLibraryStaticTestCase(t, bp2buildTestCase{ description: "cc_library_static multiple dep same name panic", Loading bp2build/configurability.go +34 −11 Original line number Diff line number Diff line Loading @@ -128,32 +128,55 @@ func getLabelListValues(list bazel.LabelListAttribute) (reflect.Value, []selects if !list.HasConfigurableValues() { return value, []selects{} } var ret []selects archSelects := map[string]reflect.Value{} for arch, selectKey := range bazel.PlatformArchMap { archSelects[selectKey] = reflect.ValueOf(list.GetValueForArch(arch).Includes) if use, value := labelListSelectValue(selectKey, list.GetValueForArch(arch)); use { archSelects[selectKey] = value } } if len(archSelects) > 0 { ret = append(ret, archSelects) } osSelects := map[string]reflect.Value{} osArchSelects := make([]selects, 0) osArchSelects := []selects{} for _, os := range android.SortedStringKeys(bazel.PlatformOsMap) { selectKey := bazel.PlatformOsMap[os] osSelects[selectKey] = reflect.ValueOf(list.GetOsValueForTarget(os).Includes) archSelects := make(map[string]reflect.Value) if use, value := labelListSelectValue(selectKey, list.GetOsValueForTarget(os)); use { osSelects[selectKey] = value } selects := make(map[string]reflect.Value) // TODO(b/187530594): Should we also check arch=CONDITIOSN_DEFAULT? (not in AllArches) for _, arch := range bazel.AllArches { target := os + "_" + arch selectKey := bazel.PlatformTargetMap[target] archSelects[selectKey] = reflect.ValueOf(list.GetOsArchValueForTarget(os, arch).Includes) if use, value := labelListSelectValue(selectKey, list.GetOsArchValueForTarget(os, arch)); use { selects[selectKey] = value } osArchSelects = append(osArchSelects, archSelects) } if len(selects) > 0 { osArchSelects = append(osArchSelects, selects) } } if len(osSelects) > 0 { ret = append(ret, osSelects) } ret = append(ret, osArchSelects...) var selects []selects selects = append(selects, archSelects) selects = append(selects, osSelects) selects = append(selects, osArchSelects...) return value, selects return value, ret } func labelListSelectValue(selectKey string, list bazel.LabelList) (bool, reflect.Value) { if selectKey == bazel.ConditionsDefaultSelectKey || len(list.Includes) > 0 { return true, reflect.ValueOf(list.Includes) } else if len(list.Excludes) > 0 { // if there is still an excludes -- we need to have an empty list for this select & use the // value in conditions default Includes return true, reflect.ValueOf([]string{}) } return false, reflect.Zero(reflect.TypeOf([]string{})) } // prettyPrintAttribute converts an Attribute to its Bazel syntax. May contain Loading cc/bp2build.go +6 −2 Original line number Diff line number Diff line Loading @@ -421,7 +421,9 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul if baseCompilerProps, ok := osProps.Properties.(*BaseCompilerProperties); ok { srcsList := parseSrcs(baseCompilerProps) // TODO(b/186153868): add support for os-specific srcs and exclude_srcs if len(baseCompilerProps.Srcs) > 0 || len(baseCompilerProps.Exclude_srcs) > 0 { srcs.SetOsValueForTarget(os.Name, bazel.SubtractBazelLabelList(srcsList, baseSrcsLabelList)) } copts.SetOsValueForTarget(os.Name, parseCopts(baseCompilerProps)) asFlags.SetOsValueForTarget(os.Name, parseCommandLineFlags(baseCompilerProps.Asflags)) conlyFlags.SetOsValueForTarget(os.Name, parseCommandLineFlags(baseCompilerProps.Conlyflags)) Loading @@ -431,7 +433,9 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul if baseCompilerProps, ok := archProps.(*BaseCompilerProperties); ok { srcsList := parseSrcs(baseCompilerProps) // TODO(b/186153868): add support for os-specific srcs and exclude_srcs if len(baseCompilerProps.Srcs) > 0 || len(baseCompilerProps.Exclude_srcs) > 0 { srcs.SetOsArchValueForTarget(os.Name, arch.Name, bazel.SubtractBazelLabelList(srcsList, baseSrcsLabelList)) } copts.SetOsArchValueForTarget(os.Name, arch.Name, parseCopts(baseCompilerProps)) asFlags.SetOsArchValueForTarget(os.Name, arch.Name, parseCommandLineFlags(baseCompilerProps.Asflags)) conlyFlags.SetOsArchValueForTarget(os.Name, arch.Name, parseCommandLineFlags(baseCompilerProps.Conlyflags)) Loading Loading
bazel/properties.go +0 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,6 @@ func SubtractStrings(haystack []string, needle []string) []string { // Return all needles in a given haystack, where needleFn is true for needles. func FilterLabelList(haystack LabelList, needleFn func(string) bool) LabelList { var includes []Label for _, inc := range haystack.Includes { if needleFn(inc.Label) { includes = append(includes, inc) Loading
bp2build/build_conversion.go +1 −1 Original line number Diff line number Diff line Loading @@ -445,7 +445,7 @@ func prettyPrint(propertyValue reflect.Value, indent int) (string, error) { return prettyPrint(propertyValue.Elem(), indent) case reflect.Slice: if propertyValue.Len() == 0 { return "", nil return "[]", nil } if propertyValue.Len() == 1 { Loading
bp2build/cc_library_static_conversion_test.go +78 −0 Original line number Diff line number Diff line Loading @@ -850,6 +850,84 @@ cc_library_static { }) } func TestCcLibraryStaticOneArchEmpty(t *testing.T) { runCcLibraryStaticTestCase(t, bp2buildTestCase{ description: "cc_library_static one arch empty", moduleTypeUnderTest: "cc_library_static", moduleTypeUnderTestFactory: cc.LibraryStaticFactory, moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build, depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build}, filesystem: map[string]string{ "common.cc": "", "foo-no-arm.cc": "", "foo-excluded.cc": "", }, blueprint: soongCcLibraryStaticPreamble + ` cc_library_static { name: "foo_static", srcs: ["common.cc", "foo-*.cc"], exclude_srcs: ["foo-excluded.cc"], arch: { arm: { exclude_srcs: ["foo-no-arm.cc"] }, }, }`, expectedBazelTargets: []string{`cc_library_static( name = "foo_static", copts = [ "-I.", "-I$(BINDIR)/.", ], linkstatic = True, srcs = ["common.cc"] + select({ "//build/bazel/platforms/arch:arm": [], "//conditions:default": ["foo-no-arm.cc"], }), )`}, }) } func TestCcLibraryStaticOneArchEmptyOtherSet(t *testing.T) { runCcLibraryStaticTestCase(t, bp2buildTestCase{ description: "cc_library_static one arch empty other set", moduleTypeUnderTest: "cc_library_static", moduleTypeUnderTestFactory: cc.LibraryStaticFactory, moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build, depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build}, filesystem: map[string]string{ "common.cc": "", "foo-no-arm.cc": "", "x86-only.cc": "", "foo-excluded.cc": "", }, blueprint: soongCcLibraryStaticPreamble + ` cc_library_static { name: "foo_static", srcs: ["common.cc", "foo-*.cc"], exclude_srcs: ["foo-excluded.cc"], arch: { arm: { exclude_srcs: ["foo-no-arm.cc"] }, x86: { srcs: ["x86-only.cc"] }, }, }`, expectedBazelTargets: []string{`cc_library_static( name = "foo_static", copts = [ "-I.", "-I$(BINDIR)/.", ], linkstatic = True, srcs = ["common.cc"] + select({ "//build/bazel/platforms/arch:arm": [], "//build/bazel/platforms/arch:x86": [ "foo-no-arm.cc", "x86-only.cc", ], "//conditions:default": ["foo-no-arm.cc"], }), )`}, }) } func TestCcLibraryStaticMultipleDepSameName(t *testing.T) { runCcLibraryStaticTestCase(t, bp2buildTestCase{ description: "cc_library_static multiple dep same name panic", Loading
bp2build/configurability.go +34 −11 Original line number Diff line number Diff line Loading @@ -128,32 +128,55 @@ func getLabelListValues(list bazel.LabelListAttribute) (reflect.Value, []selects if !list.HasConfigurableValues() { return value, []selects{} } var ret []selects archSelects := map[string]reflect.Value{} for arch, selectKey := range bazel.PlatformArchMap { archSelects[selectKey] = reflect.ValueOf(list.GetValueForArch(arch).Includes) if use, value := labelListSelectValue(selectKey, list.GetValueForArch(arch)); use { archSelects[selectKey] = value } } if len(archSelects) > 0 { ret = append(ret, archSelects) } osSelects := map[string]reflect.Value{} osArchSelects := make([]selects, 0) osArchSelects := []selects{} for _, os := range android.SortedStringKeys(bazel.PlatformOsMap) { selectKey := bazel.PlatformOsMap[os] osSelects[selectKey] = reflect.ValueOf(list.GetOsValueForTarget(os).Includes) archSelects := make(map[string]reflect.Value) if use, value := labelListSelectValue(selectKey, list.GetOsValueForTarget(os)); use { osSelects[selectKey] = value } selects := make(map[string]reflect.Value) // TODO(b/187530594): Should we also check arch=CONDITIOSN_DEFAULT? (not in AllArches) for _, arch := range bazel.AllArches { target := os + "_" + arch selectKey := bazel.PlatformTargetMap[target] archSelects[selectKey] = reflect.ValueOf(list.GetOsArchValueForTarget(os, arch).Includes) if use, value := labelListSelectValue(selectKey, list.GetOsArchValueForTarget(os, arch)); use { selects[selectKey] = value } osArchSelects = append(osArchSelects, archSelects) } if len(selects) > 0 { osArchSelects = append(osArchSelects, selects) } } if len(osSelects) > 0 { ret = append(ret, osSelects) } ret = append(ret, osArchSelects...) var selects []selects selects = append(selects, archSelects) selects = append(selects, osSelects) selects = append(selects, osArchSelects...) return value, selects return value, ret } func labelListSelectValue(selectKey string, list bazel.LabelList) (bool, reflect.Value) { if selectKey == bazel.ConditionsDefaultSelectKey || len(list.Includes) > 0 { return true, reflect.ValueOf(list.Includes) } else if len(list.Excludes) > 0 { // if there is still an excludes -- we need to have an empty list for this select & use the // value in conditions default Includes return true, reflect.ValueOf([]string{}) } return false, reflect.Zero(reflect.TypeOf([]string{})) } // prettyPrintAttribute converts an Attribute to its Bazel syntax. May contain Loading
cc/bp2build.go +6 −2 Original line number Diff line number Diff line Loading @@ -421,7 +421,9 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul if baseCompilerProps, ok := osProps.Properties.(*BaseCompilerProperties); ok { srcsList := parseSrcs(baseCompilerProps) // TODO(b/186153868): add support for os-specific srcs and exclude_srcs if len(baseCompilerProps.Srcs) > 0 || len(baseCompilerProps.Exclude_srcs) > 0 { srcs.SetOsValueForTarget(os.Name, bazel.SubtractBazelLabelList(srcsList, baseSrcsLabelList)) } copts.SetOsValueForTarget(os.Name, parseCopts(baseCompilerProps)) asFlags.SetOsValueForTarget(os.Name, parseCommandLineFlags(baseCompilerProps.Asflags)) conlyFlags.SetOsValueForTarget(os.Name, parseCommandLineFlags(baseCompilerProps.Conlyflags)) Loading @@ -431,7 +433,9 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul if baseCompilerProps, ok := archProps.(*BaseCompilerProperties); ok { srcsList := parseSrcs(baseCompilerProps) // TODO(b/186153868): add support for os-specific srcs and exclude_srcs if len(baseCompilerProps.Srcs) > 0 || len(baseCompilerProps.Exclude_srcs) > 0 { srcs.SetOsArchValueForTarget(os.Name, arch.Name, bazel.SubtractBazelLabelList(srcsList, baseSrcsLabelList)) } copts.SetOsArchValueForTarget(os.Name, arch.Name, parseCopts(baseCompilerProps)) asFlags.SetOsArchValueForTarget(os.Name, arch.Name, parseCommandLineFlags(baseCompilerProps.Asflags)) conlyFlags.SetOsArchValueForTarget(os.Name, arch.Name, parseCommandLineFlags(baseCompilerProps.Conlyflags)) Loading