Remove alternative stl names in bp2build

Test: bp2build.sh
Change-Id: Ie2bdac79306f9a5b50331f808f00187e172e46ab
This commit is contained in:
Liz Kammer 2022-05-12 11:42:33 -04:00
parent 061d352801
commit 7128d38da5
3 changed files with 88 additions and 15 deletions

View file

@ -18,6 +18,7 @@ import (
"android/soong/android"
"android/soong/cc"
"android/soong/genrule"
"fmt"
"testing"
)
@ -204,8 +205,8 @@ cc_library_static {
":whole_static_lib_1",
":whole_static_lib_2",
]`,
"sdk_version": `"current"`,
"min_sdk_version": `"29"`,
"sdk_version": `"current"`,
"min_sdk_version": `"29"`,
}),
},
})
@ -1489,3 +1490,72 @@ func TestCcLibraryStaticStdInFlags(t *testing.T) {
},
})
}
func TestCcLibraryStaticStl(t *testing.T) {
testCases := []struct {
desc string
prop string
attr attrNameToString
}{
{
desc: "c++_shared deduped to libc++",
prop: `stl: "c++_shared",`,
attr: attrNameToString{
"stl": `"libc++"`,
},
},
{
desc: "libc++ to libc++",
prop: `stl: "libc++",`,
attr: attrNameToString{
"stl": `"libc++"`,
},
},
{
desc: "c++_static to libc++_static",
prop: `stl: "c++_static",`,
attr: attrNameToString{
"stl": `"libc++_static"`,
},
},
{
desc: "libc++_static to libc++_static",
prop: `stl: "libc++_static",`,
attr: attrNameToString{
"stl": `"libc++_static"`,
},
},
{
desc: "system to system",
prop: `stl: "system",`,
attr: attrNameToString{
"stl": `"system"`,
},
},
{
desc: "none to none",
prop: `stl: "none",`,
attr: attrNameToString{
"stl": `"none"`,
},
},
{
desc: "empty to empty",
attr: attrNameToString{},
},
}
for _, tc := range testCases {
t.Run(tc.desc, func(*testing.T) {
runCcLibraryStaticTestCase(t, bp2buildTestCase{
blueprint: fmt.Sprintf(`cc_library_static {
name: "foo",
include_build_directory: false,
%s
}`, tc.prop),
expectedBazelTargets: []string{
makeBazelTarget("cc_library_static", "foo", tc.attr),
},
})
})
}
}

View file

@ -376,7 +376,8 @@ func (ca *compilerAttributes) convertStlProps(ctx android.ArchVariantContext, mo
return
}
if ca.stl == nil {
ca.stl = stlProps.Stl
stl := deduplicateStlInput(*stlProps.Stl)
ca.stl = &stl
} else if ca.stl != stlProps.Stl {
ctx.ModuleErrorf("Unsupported conversion: module with different stl for different variants: %s and %s", *ca.stl, stlProps.Stl)
}

View file

@ -25,6 +25,16 @@ func getNdkStlFamily(m LinkableInterface) string {
return family
}
func deduplicateStlInput(stl string) string {
switch stl {
case "c++_shared":
return "libc++"
case "c++_static":
return "libc++_static"
}
return stl
}
func getNdkStlFamilyAndLinkType(m LinkableInterface) (string, string) {
stl := m.SelectedStl()
switch stl {
@ -66,18 +76,18 @@ func (stl *stl) begin(ctx BaseModuleContext) {
} else if ctx.header() {
s = "none"
}
if s == "none" {
return ""
}
s = deduplicateStlInput(s)
if ctx.useSdk() && ctx.Device() {
switch s {
case "", "system":
return "ndk_system"
case "c++_shared", "c++_static":
return "ndk_lib" + s
case "libc++":
return "ndk_libc++_shared"
case "libc++_static":
return "ndk_libc++_static"
case "none":
return ""
default:
ctx.ModuleErrorf("stl: %q is not a supported STL with sdk_version set", s)
return ""
@ -87,8 +97,6 @@ func (stl *stl) begin(ctx BaseModuleContext) {
case "libc++", "libc++_static", "":
// Only use static libc++ for Windows.
return "libc++_static"
case "none":
return ""
default:
ctx.ModuleErrorf("stl: %q is not a supported STL for windows", s)
return ""
@ -97,12 +105,6 @@ func (stl *stl) begin(ctx BaseModuleContext) {
switch s {
case "libc++", "libc++_static":
return s
case "c++_shared":
return "libc++"
case "c++_static":
return "libc++_static"
case "none":
return ""
case "", "system":
if ctx.static() {
return "libc++_static"