libclang_rt_prebuilt_library_shared mixed builds

Also fix nil deref in setting $LOCAL_SOONG_UNSTRIPPED_BINARY

Bug: 201802518
Test: request_type_test.go
Test: prebuilt_test.go:TestPrebuiltLibrarySharedWithBazel
Test: mixed_{libc,droid}.sh
Change-Id: I22afb56c4b42d3412c2b2e1f079f1bcf8f3129a7
This commit is contained in:
Alex Márquez Pérez Muñíz Díaz Púras Thaureaux
2021-10-05 13:43:23 -04:00
parent 2c32bbfd73
commit c3b97c3568
5 changed files with 216 additions and 28 deletions

View File

@@ -19,7 +19,7 @@ import (
"testing"
"android/soong/android"
"android/soong/bazel/cquery"
"github.com/google/blueprint"
)
@@ -378,3 +378,74 @@ func TestPrebuiltLibrarySanitized(t *testing.T) {
static2 = ctx.ModuleForTests("libtest_static", "android_arm64_armv8-a_static_hwasan").Module().(*Module)
assertString(t, static2.OutputFile().Path().Base(), "libf.hwasan.a")
}
func TestPrebuiltLibrarySharedWithBazelWithoutToc(t *testing.T) {
const bp = `
cc_prebuilt_library_shared {
name: "foo",
srcs: ["foo.so"],
bazel_module: { label: "//foo/bar:bar" },
}`
outBaseDir := "outputbase"
config := TestConfig(t.TempDir(), android.Android, nil, bp, nil)
config.BazelContext = android.MockBazelContext{
OutputBaseDir: outBaseDir,
LabelToCcInfo: map[string]cquery.CcInfo{
"//foo/bar:bar": cquery.CcInfo{
CcSharedLibraryFiles: []string{"foo.so"},
},
},
}
ctx := testCcWithConfig(t, config)
sharedFoo := ctx.ModuleForTests("foo", "android_arm_armv7-a-neon_shared").Module()
pathPrefix := outBaseDir + "/execroot/__main__/"
info := ctx.ModuleProvider(sharedFoo, SharedLibraryInfoProvider).(SharedLibraryInfo)
android.AssertPathRelativeToTopEquals(t, "prebuilt shared library",
pathPrefix+"foo.so", info.SharedLibrary)
android.AssertPathRelativeToTopEquals(t, "prebuilt's 'nullary' ToC",
pathPrefix+"foo.so", info.TableOfContents.Path())
outputFiles, err := sharedFoo.(android.OutputFileProducer).OutputFiles("")
if err != nil {
t.Errorf("Unexpected error getting cc_object outputfiles %s", err)
}
expectedOutputFiles := []string{pathPrefix + "foo.so"}
android.AssertDeepEquals(t, "output files", expectedOutputFiles, outputFiles.Strings())
}
func TestPrebuiltLibrarySharedWithBazelWithToc(t *testing.T) {
const bp = `
cc_prebuilt_library_shared {
name: "foo",
srcs: ["foo.so"],
bazel_module: { label: "//foo/bar:bar" },
}`
outBaseDir := "outputbase"
config := TestConfig(t.TempDir(), android.Android, nil, bp, nil)
config.BazelContext = android.MockBazelContext{
OutputBaseDir: outBaseDir,
LabelToCcInfo: map[string]cquery.CcInfo{
"//foo/bar:bar": cquery.CcInfo{
CcSharedLibraryFiles: []string{"foo.so"},
TocFile: "toc",
},
},
}
ctx := testCcWithConfig(t, config)
sharedFoo := ctx.ModuleForTests("foo", "android_arm_armv7-a-neon_shared").Module()
pathPrefix := outBaseDir + "/execroot/__main__/"
info := ctx.ModuleProvider(sharedFoo, SharedLibraryInfoProvider).(SharedLibraryInfo)
android.AssertPathRelativeToTopEquals(t, "prebuilt shared library's ToC",
pathPrefix+"toc", info.TableOfContents.Path())
android.AssertPathRelativeToTopEquals(t, "prebuilt shared library",
pathPrefix+"foo.so", info.SharedLibrary)
outputFiles, err := sharedFoo.(android.OutputFileProducer).OutputFiles("")
if err != nil {
t.Errorf("Unexpected error getting cc_object outputfiles %s", err)
}
expectedOutputFiles := []string{pathPrefix + "foo.so"}
android.AssertDeepEquals(t, "output files", expectedOutputFiles, outputFiles.Strings())
}