Loading bp2build/cc_binary_conversion_test.go +41 −0 Original line number Diff line number Diff line Loading @@ -996,3 +996,44 @@ func TestCcBinaryWithThinLtoAndWholeProgramVtables(t *testing.T) { }, }) } func TestCcBinaryHiddenVisibilityConvertedToFeature(t *testing.T) { runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{ description: "cc_binary changes hidden visibility to feature", blueprint: ` {rule_name} { name: "foo", cflags: ["-fvisibility=hidden"], }`, targets: []testBazelTarget{ {"cc_binary", "foo", AttrNameToString{ "local_includes": `["."]`, "features": `["visibility_hidden"]`, }}, }, }) } func TestCcBinaryHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{ description: "cc_binary changes hidden visibility to feature for specific os", blueprint: ` {rule_name} { name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, targets: []testBazelTarget{ {"cc_binary", "foo", AttrNameToString{ "local_includes": `["."]`, "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, }}, }, }) } bp2build/cc_library_conversion_test.go +104 −0 Original line number Diff line number Diff line Loading @@ -4350,3 +4350,107 @@ cc_library { }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeature(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", cflags: ["-fvisibility=hidden"], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeatureSharedSpecific(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature when specific to shared variant", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", shared: { cflags: ["-fvisibility=hidden"], }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeatureStaticSpecific(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature when specific to static variant", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", static: { cflags: ["-fvisibility=hidden"], }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "local_includes": `["."]`, }), }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature when specific to an os", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), }, }) } bp2build/cc_library_shared_conversion_test.go +41 −0 Original line number Diff line number Diff line Loading @@ -1250,3 +1250,44 @@ cc_library_shared { }, }) } func TestCcLibrarySharedHiddenVisibilityConvertedToFeature(t *testing.T) { runCcLibrarySharedTestCase(t, Bp2buildTestCase{ Description: "cc_library_shared changes hidden visibility flag to feature", Blueprint: ` cc_library_shared{ name: "foo", cflags: ["-fvisibility=hidden"], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibrarySharedHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcLibrarySharedTestCase(t, Bp2buildTestCase{ Description: "cc_library_shared changes hidden visibility flag to feature for specific os", Blueprint: ` cc_library_shared{ name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), }, }) } bp2build/cc_library_static_conversion_test.go +41 −0 Original line number Diff line number Diff line Loading @@ -2032,3 +2032,44 @@ cc_library_static { }, }) } func TestCcLibraryStaticHiddenVisibilityConvertedToFeature(t *testing.T) { runCcLibraryStaticTestCase(t, Bp2buildTestCase{ Description: "cc_library_static changes hidden visibility flag to feature", Blueprint: ` cc_library_static { name: "foo", cflags: ["-fvisibility=hidden"], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibraryStaticHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcLibraryStaticTestCase(t, Bp2buildTestCase{ Description: "cc_library_static changes hidden visibility flag to feature for specific os", Blueprint: ` cc_library_static { name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), }, }) } cc/bp2build.go +48 −2 Original line number Diff line number Diff line Loading @@ -67,6 +67,8 @@ type staticOrSharedAttributes struct { Apex_available []string Features bazel.StringListAttribute sdkAttributes tidyAttributes Loading Loading @@ -226,7 +228,7 @@ func bp2buildParseStaticOrSharedProps(ctx android.BazelConversionPathContext, mo attrs := staticOrSharedAttributes{} setAttrs := func(axis bazel.ConfigurationAxis, config string, props StaticOrSharedProperties) { attrs.Copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag)) attrs.Copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag, filterOutHiddenVisibility)) attrs.Srcs.SetSelectValue(axis, config, android.BazelLabelForModuleSrc(ctx, props.Srcs)) attrs.System_dynamic_deps.SetSelectValue(axis, config, bazelLabelForSharedDeps(ctx, props.System_shared_libs)) Loading Loading @@ -270,6 +272,8 @@ func bp2buildParseStaticOrSharedProps(ctx android.BazelConversionPathContext, mo attrs.Apex_available = android.ConvertApexAvailableToTags(apexAvailable) attrs.Features.Append(convertHiddenVisibilityToFeatureStaticOrShared(ctx, module, isStatic)) if !partitionedSrcs[protoSrcPartition].IsEmpty() { // TODO(b/208815215): determine whether this is used and add support if necessary ctx.ModuleErrorf("Migrating static/shared only proto srcs is not currently supported") Loading Loading @@ -428,6 +432,12 @@ type compilerAttributes struct { type filterOutFn func(string) bool // filterOutHiddenVisibility removes the flag specifying hidden visibility as // this flag is converted to a toolchain feature func filterOutHiddenVisibility(flag string) bool { return flag == config.VisibilityHiddenFlag } func filterOutStdFlag(flag string) bool { return strings.HasPrefix(flag, "-std=") } Loading Loading @@ -490,7 +500,7 @@ func (ca *compilerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversi // overridden. In Bazel we always allow overriding, via flags; however, this can cause // incompatibilities, so we remove "-std=" flags from Cflag properties while leaving it in other // cases. ca.copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag, filterOutClangUnknownCflags)) ca.copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag, filterOutClangUnknownCflags, filterOutHiddenVisibility)) ca.asFlags.SetSelectValue(axis, config, parseCommandLineFlags(props.Asflags, nil)) ca.conlyFlags.SetSelectValue(axis, config, parseCommandLineFlags(props.Conlyflags, filterOutClangUnknownCflags)) ca.cppFlags.SetSelectValue(axis, config, parseCommandLineFlags(props.Cppflags, filterOutClangUnknownCflags)) Loading Loading @@ -833,6 +843,7 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module) features := compilerAttrs.features.Clone().Append(linkerAttrs.features).Append(bp2buildSanitizerFeatures(ctx, module)) features = features.Append(bp2buildLtoFeatures(ctx, module)) features = features.Append(convertHiddenVisibilityToFeatureBase(ctx, module)) features.DeduplicateAxesFromBase() addMuslSystemDynamicDeps(ctx, linkerAttrs) Loading Loading @@ -1547,3 +1558,38 @@ func bp2buildLtoFeatures(ctx android.BazelConversionPathContext, m *Module) baze } return ltoStringFeatures } func convertHiddenVisibilityToFeatureBase(ctx android.BazelConversionPathContext, m *Module) bazel.StringListAttribute { visibilityHiddenFeature := bazel.StringListAttribute{} bp2BuildPropParseHelper(ctx, m, &BaseCompilerProperties{}, func(axis bazel.ConfigurationAxis, configString string, props interface{}) { if baseCompilerProps, ok := props.(*BaseCompilerProperties); ok { convertHiddenVisibilityToFeatureHelper(&visibilityHiddenFeature, axis, configString, baseCompilerProps.Cflags) } }) return visibilityHiddenFeature } func convertHiddenVisibilityToFeatureStaticOrShared(ctx android.BazelConversionPathContext, m *Module, isStatic bool) bazel.StringListAttribute { visibilityHiddenFeature := bazel.StringListAttribute{} if isStatic { bp2BuildPropParseHelper(ctx, m, &StaticProperties{}, func(axis bazel.ConfigurationAxis, configString string, props interface{}) { if staticProps, ok := props.(*StaticProperties); ok { convertHiddenVisibilityToFeatureHelper(&visibilityHiddenFeature, axis, configString, staticProps.Static.Cflags) } }) } else { bp2BuildPropParseHelper(ctx, m, &SharedProperties{}, func(axis bazel.ConfigurationAxis, configString string, props interface{}) { if sharedProps, ok := props.(*SharedProperties); ok { convertHiddenVisibilityToFeatureHelper(&visibilityHiddenFeature, axis, configString, sharedProps.Shared.Cflags) } }) } return visibilityHiddenFeature } func convertHiddenVisibilityToFeatureHelper(feature *bazel.StringListAttribute, axis bazel.ConfigurationAxis, configString string, cflags []string) { if inList(config.VisibilityHiddenFlag, cflags) { feature.SetSelectValue(axis, configString, []string{"visibility_hidden"}) } } Loading
bp2build/cc_binary_conversion_test.go +41 −0 Original line number Diff line number Diff line Loading @@ -996,3 +996,44 @@ func TestCcBinaryWithThinLtoAndWholeProgramVtables(t *testing.T) { }, }) } func TestCcBinaryHiddenVisibilityConvertedToFeature(t *testing.T) { runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{ description: "cc_binary changes hidden visibility to feature", blueprint: ` {rule_name} { name: "foo", cflags: ["-fvisibility=hidden"], }`, targets: []testBazelTarget{ {"cc_binary", "foo", AttrNameToString{ "local_includes": `["."]`, "features": `["visibility_hidden"]`, }}, }, }) } func TestCcBinaryHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{ description: "cc_binary changes hidden visibility to feature for specific os", blueprint: ` {rule_name} { name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, targets: []testBazelTarget{ {"cc_binary", "foo", AttrNameToString{ "local_includes": `["."]`, "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, }}, }, }) }
bp2build/cc_library_conversion_test.go +104 −0 Original line number Diff line number Diff line Loading @@ -4350,3 +4350,107 @@ cc_library { }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeature(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", cflags: ["-fvisibility=hidden"], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeatureSharedSpecific(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature when specific to shared variant", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", shared: { cflags: ["-fvisibility=hidden"], }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeatureStaticSpecific(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature when specific to static variant", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", static: { cflags: ["-fvisibility=hidden"], }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "local_includes": `["."]`, }), }, }) } func TestCcLibraryHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcLibraryTestCase(t, Bp2buildTestCase{ Description: "cc_library changes hidden visibility flag to feature when specific to an os", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` cc_library { name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), }, }) }
bp2build/cc_library_shared_conversion_test.go +41 −0 Original line number Diff line number Diff line Loading @@ -1250,3 +1250,44 @@ cc_library_shared { }, }) } func TestCcLibrarySharedHiddenVisibilityConvertedToFeature(t *testing.T) { runCcLibrarySharedTestCase(t, Bp2buildTestCase{ Description: "cc_library_shared changes hidden visibility flag to feature", Blueprint: ` cc_library_shared{ name: "foo", cflags: ["-fvisibility=hidden"], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibrarySharedHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcLibrarySharedTestCase(t, Bp2buildTestCase{ Description: "cc_library_shared changes hidden visibility flag to feature for specific os", Blueprint: ` cc_library_shared{ name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), }, }) }
bp2build/cc_library_static_conversion_test.go +41 −0 Original line number Diff line number Diff line Loading @@ -2032,3 +2032,44 @@ cc_library_static { }, }) } func TestCcLibraryStaticHiddenVisibilityConvertedToFeature(t *testing.T) { runCcLibraryStaticTestCase(t, Bp2buildTestCase{ Description: "cc_library_static changes hidden visibility flag to feature", Blueprint: ` cc_library_static { name: "foo", cflags: ["-fvisibility=hidden"], }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "features": `["visibility_hidden"]`, "local_includes": `["."]`, }), }, }) } func TestCcLibraryStaticHiddenVisibilityConvertedToFeatureOsSpecific(t *testing.T) { runCcLibraryStaticTestCase(t, Bp2buildTestCase{ Description: "cc_library_static changes hidden visibility flag to feature for specific os", Blueprint: ` cc_library_static { name: "foo", target: { android: { cflags: ["-fvisibility=hidden"], }, }, }`, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "features": `select({ "//build/bazel/platforms/os:android": ["visibility_hidden"], "//conditions:default": [], })`, "local_includes": `["."]`, }), }, }) }
cc/bp2build.go +48 −2 Original line number Diff line number Diff line Loading @@ -67,6 +67,8 @@ type staticOrSharedAttributes struct { Apex_available []string Features bazel.StringListAttribute sdkAttributes tidyAttributes Loading Loading @@ -226,7 +228,7 @@ func bp2buildParseStaticOrSharedProps(ctx android.BazelConversionPathContext, mo attrs := staticOrSharedAttributes{} setAttrs := func(axis bazel.ConfigurationAxis, config string, props StaticOrSharedProperties) { attrs.Copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag)) attrs.Copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag, filterOutHiddenVisibility)) attrs.Srcs.SetSelectValue(axis, config, android.BazelLabelForModuleSrc(ctx, props.Srcs)) attrs.System_dynamic_deps.SetSelectValue(axis, config, bazelLabelForSharedDeps(ctx, props.System_shared_libs)) Loading Loading @@ -270,6 +272,8 @@ func bp2buildParseStaticOrSharedProps(ctx android.BazelConversionPathContext, mo attrs.Apex_available = android.ConvertApexAvailableToTags(apexAvailable) attrs.Features.Append(convertHiddenVisibilityToFeatureStaticOrShared(ctx, module, isStatic)) if !partitionedSrcs[protoSrcPartition].IsEmpty() { // TODO(b/208815215): determine whether this is used and add support if necessary ctx.ModuleErrorf("Migrating static/shared only proto srcs is not currently supported") Loading Loading @@ -428,6 +432,12 @@ type compilerAttributes struct { type filterOutFn func(string) bool // filterOutHiddenVisibility removes the flag specifying hidden visibility as // this flag is converted to a toolchain feature func filterOutHiddenVisibility(flag string) bool { return flag == config.VisibilityHiddenFlag } func filterOutStdFlag(flag string) bool { return strings.HasPrefix(flag, "-std=") } Loading Loading @@ -490,7 +500,7 @@ func (ca *compilerAttributes) bp2buildForAxisAndConfig(ctx android.BazelConversi // overridden. In Bazel we always allow overriding, via flags; however, this can cause // incompatibilities, so we remove "-std=" flags from Cflag properties while leaving it in other // cases. ca.copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag, filterOutClangUnknownCflags)) ca.copts.SetSelectValue(axis, config, parseCommandLineFlags(props.Cflags, filterOutStdFlag, filterOutClangUnknownCflags, filterOutHiddenVisibility)) ca.asFlags.SetSelectValue(axis, config, parseCommandLineFlags(props.Asflags, nil)) ca.conlyFlags.SetSelectValue(axis, config, parseCommandLineFlags(props.Conlyflags, filterOutClangUnknownCflags)) ca.cppFlags.SetSelectValue(axis, config, parseCommandLineFlags(props.Cppflags, filterOutClangUnknownCflags)) Loading Loading @@ -833,6 +843,7 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module) features := compilerAttrs.features.Clone().Append(linkerAttrs.features).Append(bp2buildSanitizerFeatures(ctx, module)) features = features.Append(bp2buildLtoFeatures(ctx, module)) features = features.Append(convertHiddenVisibilityToFeatureBase(ctx, module)) features.DeduplicateAxesFromBase() addMuslSystemDynamicDeps(ctx, linkerAttrs) Loading Loading @@ -1547,3 +1558,38 @@ func bp2buildLtoFeatures(ctx android.BazelConversionPathContext, m *Module) baze } return ltoStringFeatures } func convertHiddenVisibilityToFeatureBase(ctx android.BazelConversionPathContext, m *Module) bazel.StringListAttribute { visibilityHiddenFeature := bazel.StringListAttribute{} bp2BuildPropParseHelper(ctx, m, &BaseCompilerProperties{}, func(axis bazel.ConfigurationAxis, configString string, props interface{}) { if baseCompilerProps, ok := props.(*BaseCompilerProperties); ok { convertHiddenVisibilityToFeatureHelper(&visibilityHiddenFeature, axis, configString, baseCompilerProps.Cflags) } }) return visibilityHiddenFeature } func convertHiddenVisibilityToFeatureStaticOrShared(ctx android.BazelConversionPathContext, m *Module, isStatic bool) bazel.StringListAttribute { visibilityHiddenFeature := bazel.StringListAttribute{} if isStatic { bp2BuildPropParseHelper(ctx, m, &StaticProperties{}, func(axis bazel.ConfigurationAxis, configString string, props interface{}) { if staticProps, ok := props.(*StaticProperties); ok { convertHiddenVisibilityToFeatureHelper(&visibilityHiddenFeature, axis, configString, staticProps.Static.Cflags) } }) } else { bp2BuildPropParseHelper(ctx, m, &SharedProperties{}, func(axis bazel.ConfigurationAxis, configString string, props interface{}) { if sharedProps, ok := props.(*SharedProperties); ok { convertHiddenVisibilityToFeatureHelper(&visibilityHiddenFeature, axis, configString, sharedProps.Shared.Cflags) } }) } return visibilityHiddenFeature } func convertHiddenVisibilityToFeatureHelper(feature *bazel.StringListAttribute, axis bazel.ConfigurationAxis, configString string, cflags []string) { if inList(config.VisibilityHiddenFlag, cflags) { feature.SetSelectValue(axis, configString, []string{"visibility_hidden"}) } }