Revert "mixed builds correctly reference stubs libs"

This reverts commit ca438e6b72.

Reason for revert: ci post-submit failures in aosp-master-bazel of targets mixed-droid-clean and mixed-droid-incremental:
FAILED: ninja: 'out/target/product/generic_arm64/obj/SHARED_LIBRARIES/libc_intermediates/libc.so.toc', needed by 'out/target/product/generic_arm64/obj/EXECUTABLES/updater_intermediates/LINKED/updater', missing and no known rule to make it
12:21:27 ninja failed with: exit status 1

Change-Id: I081b499d23f2568cdf6227c4e3b0278164086b69
This commit is contained in:
Usta (Tsering) Shrestha 2023-04-19 14:02:52 +00:00 committed by Gerrit Code Review
parent ca438e6b72
commit 1db4348734
6 changed files with 13 additions and 201 deletions

View file

@ -149,7 +149,6 @@ sharedLibraries = []
rootSharedLibraries = [] rootSharedLibraries = []
shared_info_tag = "//build/bazel/rules/cc:cc_library_shared.bzl%CcSharedLibraryOutputInfo" shared_info_tag = "//build/bazel/rules/cc:cc_library_shared.bzl%CcSharedLibraryOutputInfo"
stubs_tag = "//build/bazel/rules/cc:cc_stub_library.bzl%CcStubInfo"
unstripped_tag = "//build/bazel/rules/cc:stripped_cc_common.bzl%CcUnstrippedInfo" unstripped_tag = "//build/bazel/rules/cc:stripped_cc_common.bzl%CcUnstrippedInfo"
unstripped = "" unstripped = ""
@ -161,8 +160,6 @@ if shared_info_tag in p:
unstripped = path unstripped = path
if unstripped_tag in p: if unstripped_tag in p:
unstripped = p[unstripped_tag].unstripped.path unstripped = p[unstripped_tag].unstripped.path
elif stubs_tag in p:
rootSharedLibraries.extend([f.path for f in target.files.to_list()])
else: else:
for linker_input in linker_inputs: for linker_input in linker_inputs:
for library in linker_input.libraries: for library in linker_input.libraries:

View file

@ -1249,40 +1249,3 @@ cc_library_shared {
}, },
}) })
} }
func TestCcLibrarySharedStubsDessertVersionConversion(t *testing.T) {
runCcLibrarySharedTestCase(t, Bp2buildTestCase{
Description: "cc_library_shared converts dessert codename versions to numerical versions",
Blueprint: `
cc_library_shared {
name: "a",
include_build_directory: false,
stubs: {
symbol_file: "a.map.txt",
versions: [
"Q",
"R",
"31",
"current",
],
},
}
`,
ExpectedBazelTargets: []string{
makeCcStubSuiteTargets("a", AttrNameToString{
"soname": `"a.so"`,
"source_library_label": `"//:a"`,
"stubs_symbol_file": `"a.map.txt"`,
"stubs_versions": `[
"29",
"30",
"31",
"current",
]`,
}),
MakeBazelTarget("cc_library_shared", "a", AttrNameToString{
"stubs_symbol_file": `"a.map.txt"`,
}),
},
})
}

View file

@ -762,10 +762,8 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
if libraryProps, ok := archVariantLibraryProperties[axis][cfg].(*LibraryProperties); ok { if libraryProps, ok := archVariantLibraryProperties[axis][cfg].(*LibraryProperties); ok {
if axis == bazel.NoConfigAxis { if axis == bazel.NoConfigAxis {
versions := android.CopyOf(libraryProps.Stubs.Versions)
normalizeVersions(ctx, versions)
compilerAttrs.stubsSymbolFile = libraryProps.Stubs.Symbol_file compilerAttrs.stubsSymbolFile = libraryProps.Stubs.Symbol_file
compilerAttrs.stubsVersions.SetSelectValue(axis, cfg, versions) compilerAttrs.stubsVersions.SetSelectValue(axis, cfg, libraryProps.Stubs.Versions)
} }
if suffix := libraryProps.Suffix; suffix != nil { if suffix := libraryProps.Suffix; suffix != nil {
compilerAttrs.suffix.SetSelectValue(axis, cfg, suffix) compilerAttrs.suffix.SetSelectValue(axis, cfg, suffix)

View file

@ -1960,17 +1960,6 @@ func (c *Module) ProcessBazelQueryResponse(ctx android.ModuleContext) {
c.maybeInstall(mctx, apexInfo) c.maybeInstall(mctx, apexInfo)
} }
func moduleContextFromAndroidModuleContext(actx android.ModuleContext, c *Module) ModuleContext {
ctx := &moduleContext{
ModuleContext: actx,
moduleContextImpl: moduleContextImpl{
mod: c,
},
}
ctx.ctx = ctx
return ctx
}
func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
// Handle the case of a test module split by `test_per_src` mutator. // Handle the case of a test module split by `test_per_src` mutator.
// //
@ -1990,7 +1979,13 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
c.makeLinkType = GetMakeLinkType(actx, c) c.makeLinkType = GetMakeLinkType(actx, c)
ctx := moduleContextFromAndroidModuleContext(actx, c) ctx := &moduleContext{
ModuleContext: actx,
moduleContextImpl: moduleContextImpl{
mod: c,
},
}
ctx.ctx = ctx
deps := c.depsToPaths(ctx) deps := c.depsToPaths(ctx)
if ctx.Failed() { if ctx.Failed() {

View file

@ -3680,133 +3680,6 @@ func TestStubsForLibraryInMultipleApexes(t *testing.T) {
} }
} }
func TestMixedBuildUsesStubs(t *testing.T) {
// TODO(b/275313114): Test exposes non-determinism which should be corrected and the test
// reenabled.
t.Skip()
t.Parallel()
bp := `
cc_library_shared {
name: "libFoo",
bazel_module: { label: "//:libFoo" },
srcs: ["foo.c"],
stubs: {
symbol_file: "foo.map.txt",
versions: ["current"],
},
apex_available: ["bar", "a1"],
}
cc_library_shared {
name: "libBar",
srcs: ["bar.c"],
shared_libs: ["libFoo"],
apex_available: ["a1"],
}
cc_library_shared {
name: "libA1",
srcs: ["a1.c"],
shared_libs: ["libFoo"],
apex_available: ["a1"],
}
cc_library_shared {
name: "libBarA1",
srcs: ["bara1.c"],
shared_libs: ["libFoo"],
apex_available: ["bar", "a1"],
}
cc_library_shared {
name: "libAnyApex",
srcs: ["anyApex.c"],
shared_libs: ["libFoo"],
apex_available: ["//apex_available:anyapex"],
}
cc_library_shared {
name: "libBaz",
srcs: ["baz.c"],
shared_libs: ["libFoo"],
apex_available: ["baz"],
}
cc_library_shared {
name: "libQux",
srcs: ["qux.c"],
shared_libs: ["libFoo"],
apex_available: ["qux", "bar"],
}`
result := android.GroupFixturePreparers(
prepareForCcTest,
android.FixtureModifyConfig(func(config android.Config) {
config.BazelContext = android.MockBazelContext{
OutputBaseDir: "out/bazel",
LabelToCcInfo: map[string]cquery.CcInfo{
"//:libFoo": {
RootDynamicLibraries: []string{"libFoo.so"},
},
"//:libFoo_stub_libs-current": {
RootDynamicLibraries: []string{"libFoo_stub_libs-current.so"},
},
},
}
}),
).RunTestWithBp(t, bp)
ctx := result.TestContext
variants := ctx.ModuleVariantsForTests("libFoo")
expectedVariants := []string{
"android_arm64_armv8-a_shared",
"android_arm64_armv8-a_shared_current",
"android_arm_armv7-a-neon_shared",
"android_arm_armv7-a-neon_shared_current",
}
variantsMismatch := false
if len(variants) != len(expectedVariants) {
variantsMismatch = true
} else {
for _, v := range expectedVariants {
if !inList(v, variants) {
variantsMismatch = false
}
}
}
if variantsMismatch {
t.Errorf("variants of libFoo expected:\n")
for _, v := range expectedVariants {
t.Errorf("%q\n", v)
}
t.Errorf(", but got:\n")
for _, v := range variants {
t.Errorf("%q\n", v)
}
}
linkAgainstFoo := []string{"libBarA1"}
linkAgainstFooStubs := []string{"libBar", "libA1", "libBaz", "libQux", "libAnyApex"}
libFooPath := "out/bazel/execroot/__main__/libFoo.so"
for _, lib := range linkAgainstFoo {
libLinkRule := ctx.ModuleForTests(lib, "android_arm64_armv8-a_shared").Rule("ld")
libFlags := libLinkRule.Args["libFlags"]
if !strings.Contains(libFlags, libFooPath) {
t.Errorf("%q: %q is not found in %q", lib, libFooPath, libFlags)
}
}
libFooStubPath := "out/bazel/execroot/__main__/libFoo_stub_libs-current.so"
for _, lib := range linkAgainstFooStubs {
libLinkRule := ctx.ModuleForTests(lib, "android_arm64_armv8-a_shared").Rule("ld")
libFlags := libLinkRule.Args["libFlags"]
if !strings.Contains(libFlags, libFooStubPath) {
t.Errorf("%q: %q is not found in %q", lib, libFooStubPath, libFlags)
}
}
}
func TestVersioningMacro(t *testing.T) { func TestVersioningMacro(t *testing.T) {
t.Parallel() t.Parallel()
for _, tc := range []struct{ moduleName, expected string }{ for _, tc := range []struct{ moduleName, expected string }{

View file

@ -931,17 +931,9 @@ func (handler *ccLibraryBazelHandler) generateSharedBazelBuildActions(ctx androi
func (handler *ccLibraryBazelHandler) QueueBazelCall(ctx android.BaseModuleContext, label string) { func (handler *ccLibraryBazelHandler) QueueBazelCall(ctx android.BaseModuleContext, label string) {
bazelCtx := ctx.Config().BazelContext bazelCtx := ctx.Config().BazelContext
bazelCtx.QueueBazelRequest(label, cquery.GetCcInfo, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx))) bazelCtx.QueueBazelRequest(label, cquery.GetCcInfo, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx)))
if v := handler.module.library.stubsVersion(); v != "" {
stubsLabel := label + "_stub_libs-" + v
bazelCtx.QueueBazelRequest(stubsLabel, cquery.GetCcInfo, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx)))
}
} }
func (handler *ccLibraryBazelHandler) ProcessBazelQueryResponse(ctx android.ModuleContext, label string) { func (handler *ccLibraryBazelHandler) ProcessBazelQueryResponse(ctx android.ModuleContext, label string) {
if v := handler.module.library.stubsVersion(); v != "" {
// if we are a stubs variant, just use the Bazel stubs target
label = label + "_stub_libs-" + v
}
bazelCtx := ctx.Config().BazelContext bazelCtx := ctx.Config().BazelContext
ccInfo, err := bazelCtx.GetCcInfo(label, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx))) ccInfo, err := bazelCtx.GetCcInfo(label, android.GetConfigKeyApexVariant(ctx, GetApexConfigKey(ctx)))
if err != nil { if err != nil {
@ -970,9 +962,6 @@ func (handler *ccLibraryBazelHandler) ProcessBazelQueryResponse(ctx android.Modu
} }
handler.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo) handler.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo)
cctx := moduleContextFromAndroidModuleContext(ctx, handler.module)
addStubDependencyProviders(cctx)
} }
func (library *libraryDecorator) setFlagExporterInfoFromCcInfo(ctx android.ModuleContext, ccInfo cquery.CcInfo) { func (library *libraryDecorator) setFlagExporterInfoFromCcInfo(ctx android.ModuleContext, ccInfo cquery.CcInfo) {
@ -1798,12 +1787,6 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext,
Target: ctx.Target(), Target: ctx.Target(),
}) })
addStubDependencyProviders(ctx)
return unstrippedOutputFile
}
func addStubDependencyProviders(ctx ModuleContext) {
stubs := ctx.GetDirectDepsWithTag(stubImplDepTag) stubs := ctx.GetDirectDepsWithTag(stubImplDepTag)
if len(stubs) > 0 { if len(stubs) > 0 {
var stubsInfo []SharedStubLibrary var stubsInfo []SharedStubLibrary
@ -1818,9 +1801,12 @@ func addStubDependencyProviders(ctx ModuleContext) {
} }
ctx.SetProvider(SharedLibraryStubsProvider, SharedLibraryStubsInfo{ ctx.SetProvider(SharedLibraryStubsProvider, SharedLibraryStubsInfo{
SharedStubLibraries: stubsInfo, SharedStubLibraries: stubsInfo,
IsLLNDK: ctx.IsLlndk(),
IsLLNDK: ctx.IsLlndk(),
}) })
} }
return unstrippedOutputFile
} }
func (library *libraryDecorator) unstrippedOutputFilePath() android.Path { func (library *libraryDecorator) unstrippedOutputFilePath() android.Path {
@ -2662,7 +2648,7 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) {
// normalizeVersions modifies `versions` in place, so that each raw version // normalizeVersions modifies `versions` in place, so that each raw version
// string becomes its normalized canonical form. // string becomes its normalized canonical form.
// Validates that the versions in `versions` are specified in least to greatest order. // Validates that the versions in `versions` are specified in least to greatest order.
func normalizeVersions(ctx android.BazelConversionPathContext, versions []string) { func normalizeVersions(ctx android.BaseModuleContext, versions []string) {
var previous android.ApiLevel var previous android.ApiLevel
for i, v := range versions { for i, v := range versions {
ver, err := android.ApiLevelFromUser(ctx, v) ver, err := android.ApiLevelFromUser(ctx, v)