Merge "Remove alternative stl names in bp2build"

This commit is contained in:
Treehugger Robot
2022-07-01 14:54:20 +00:00
committed by Gerrit Code Review
3 changed files with 88 additions and 15 deletions

View File

@@ -18,6 +18,7 @@ import (
"android/soong/android" "android/soong/android"
"android/soong/cc" "android/soong/cc"
"android/soong/genrule" "android/soong/genrule"
"fmt"
"testing" "testing"
) )
@@ -204,8 +205,8 @@ cc_library_static {
":whole_static_lib_1", ":whole_static_lib_1",
":whole_static_lib_2", ":whole_static_lib_2",
]`, ]`,
"sdk_version": `"current"`, "sdk_version": `"current"`,
"min_sdk_version": `"29"`, "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 return
} }
if ca.stl == nil { if ca.stl == nil {
ca.stl = stlProps.Stl stl := deduplicateStlInput(*stlProps.Stl)
ca.stl = &stl
} else if ca.stl != stlProps.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) 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 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) { func getNdkStlFamilyAndLinkType(m LinkableInterface) (string, string) {
stl := m.SelectedStl() stl := m.SelectedStl()
switch stl { switch stl {
@@ -66,18 +76,18 @@ func (stl *stl) begin(ctx BaseModuleContext) {
} else if ctx.header() { } else if ctx.header() {
s = "none" s = "none"
} }
if s == "none" {
return ""
}
s = deduplicateStlInput(s)
if ctx.useSdk() && ctx.Device() { if ctx.useSdk() && ctx.Device() {
switch s { switch s {
case "", "system": case "", "system":
return "ndk_system" return "ndk_system"
case "c++_shared", "c++_static":
return "ndk_lib" + s
case "libc++": case "libc++":
return "ndk_libc++_shared" return "ndk_libc++_shared"
case "libc++_static": case "libc++_static":
return "ndk_libc++_static" return "ndk_libc++_static"
case "none":
return ""
default: default:
ctx.ModuleErrorf("stl: %q is not a supported STL with sdk_version set", s) ctx.ModuleErrorf("stl: %q is not a supported STL with sdk_version set", s)
return "" return ""
@@ -87,8 +97,6 @@ func (stl *stl) begin(ctx BaseModuleContext) {
case "libc++", "libc++_static", "": case "libc++", "libc++_static", "":
// Only use static libc++ for Windows. // Only use static libc++ for Windows.
return "libc++_static" return "libc++_static"
case "none":
return ""
default: default:
ctx.ModuleErrorf("stl: %q is not a supported STL for windows", s) ctx.ModuleErrorf("stl: %q is not a supported STL for windows", s)
return "" return ""
@@ -97,12 +105,6 @@ func (stl *stl) begin(ctx BaseModuleContext) {
switch s { switch s {
case "libc++", "libc++_static": case "libc++", "libc++_static":
return s return s
case "c++_shared":
return "libc++"
case "c++_static":
return "libc++_static"
case "none":
return ""
case "", "system": case "", "system":
if ctx.static() { if ctx.static() {
return "libc++_static" return "libc++_static"