From bacf34d986011a37dc45ebbd59d464950cd7574d Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Sat, 21 Mar 2020 13:58:19 +0000 Subject: [PATCH] Revert "Enforce min_sdk_version of apex(use_vendor:true)" This reverts commit 380fc3615cf8c837e25dd7c480f8ce579ffd5d90. Reason for revert: breaking one of internal targets Change-Id: Ica96c44078e5a7f674410828af3ba851317775dd Exempt-From-Owner-Approval: revert to fix build failure --- apex/apex_test.go | 123 +++++++++++++++++--------------------------- cc/cc.go | 40 +------------- cc/cc_test.go | 28 ---------- cc/library.go | 45 +++++----------- cc/llndk_library.go | 13 ----- cc/vndk.go | 3 -- 6 files changed, 63 insertions(+), 189 deletions(-) diff --git a/apex/apex_test.go b/apex/apex_test.go index 21d517fc6..babc27b43 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -858,89 +858,58 @@ func TestApexWithRuntimeLibsDependency(t *testing.T) { } -func TestApexDependsOnLLNDKTransitively(t *testing.T) { - testcases := []struct { - name string - minSdkVersion string - shouldLink string - shouldNotLink []string - }{ - { - name: "should link to test latest", - minSdkVersion: "current", - shouldLink: "30", - shouldNotLink: []string{"29"}, - }, - { - name: "should link to llndk#29", - minSdkVersion: "29", - shouldLink: "29", - shouldNotLink: []string{"30"}, - }, - } - for _, tc := range testcases { - t.Run(tc.name, func(t *testing.T) { - ctx, _ := testApex(t, ` - apex { - name: "myapex", - key: "myapex.key", - use_vendor: true, - native_shared_libs: ["mylib"], - min_sdk_version: "`+tc.minSdkVersion+`", - } +func TestApexDependencyToLLNDK(t *testing.T) { + ctx, _ := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + use_vendor: true, + native_shared_libs: ["mylib"], + } - apex_key { - name: "myapex.key", - public_key: "testkey.avbpubkey", - private_key: "testkey.pem", - } + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } - cc_library { - name: "mylib", - srcs: ["mylib.cpp"], - vendor_available: true, - shared_libs: ["libbar"], - system_shared_libs: [], - stl: "none", - apex_available: [ "myapex" ], - } + cc_library { + name: "mylib", + srcs: ["mylib.cpp"], + vendor_available: true, + shared_libs: ["libbar"], + system_shared_libs: [], + stl: "none", + apex_available: [ "myapex" ], + } - cc_library { - name: "libbar", - srcs: ["mylib.cpp"], - system_shared_libs: [], - stl: "none", - stubs: { versions: ["29","30"] }, - } + cc_library { + name: "libbar", + srcs: ["mylib.cpp"], + system_shared_libs: [], + stl: "none", + } - llndk_library { - name: "libbar", - symbol_file: "", - } - `, func(fs map[string][]byte, config android.Config) { - setUseVendorWhitelistForTest(config, []string{"myapex"}) - }, withUnbundledBuild) + llndk_library { + name: "libbar", + symbol_file: "", + } + `, func(fs map[string][]byte, config android.Config) { + setUseVendorWhitelistForTest(config, []string{"myapex"}) + }) - // Ensure that LLNDK dep is not included - ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{ - "lib64/mylib.so", - }) + apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule") + copyCmds := apexRule.Args["copy_commands"] - // Ensure that LLNDK dep is required - apexManifestRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule") - ensureListEmpty(t, names(apexManifestRule.Args["provideNativeLibs"])) - ensureListContains(t, names(apexManifestRule.Args["requireNativeLibs"]), "libbar.so") + // Ensure that LLNDK dep is not included + ensureNotContains(t, copyCmds, "image.apex/lib64/libbar.so") - mylibLdFlags := ctx.ModuleForTests("mylib", "android_vendor.VER_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"] - ensureContains(t, mylibLdFlags, "libbar.llndk/android_vendor.VER_arm64_armv8-a_shared_"+tc.shouldLink+"/libbar.so") - for _, ver := range tc.shouldNotLink { - ensureNotContains(t, mylibLdFlags, "libbar.llndk/android_vendor.VER_arm64_armv8-a_shared_"+ver+"/libbar.so") - } + apexManifestRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule") + ensureListEmpty(t, names(apexManifestRule.Args["provideNativeLibs"])) + + // Ensure that LLNDK dep is required + ensureListContains(t, names(apexManifestRule.Args["requireNativeLibs"]), "libbar.so") - mylibCFlags := ctx.ModuleForTests("mylib", "android_vendor.VER_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] - ensureContains(t, mylibCFlags, "__LIBBAR_API__="+tc.shouldLink) - }) - } } func TestApexWithSystemLibsStubs(t *testing.T) { @@ -1270,6 +1239,10 @@ func TestQTargetApexUseStaticUnwinder(t *testing.T) { // note that platform variant is not. cm = ctx.ModuleForTests("libc++", "android_arm64_armv8-a_shared").Module().(*cc.Module) ensureListNotContains(t, cm.Properties.AndroidMkStaticLibs, "libgcc_stripped") + + libFlags := ctx.ModuleForTests("libx", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"] + ensureContains(t, libFlags, "android_arm64_armv8-a_shared_myapex/libc++.so") + ensureContains(t, libFlags, "android_arm64_armv8-a_shared_29/libc.so") // min_sdk_version applied } func TestInvalidMinSdkVersion(t *testing.T) { diff --git a/cc/cc.go b/cc/cc.go index 2009d91ec..61ae10a02 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -622,10 +622,6 @@ func (c *Module) SetBuildStubs() { c.Properties.PreventInstall = true return } - if _, ok := c.linker.(*llndkStubDecorator); ok { - c.Properties.HideFromMake = true - return - } } panic(fmt.Errorf("SetBuildStubs called on non-library module: %q", c.BaseModuleName())) } @@ -645,10 +641,6 @@ func (c *Module) SetStubsVersions(version string) { library.MutatedProperties.StubsVersion = version return } - if llndk, ok := c.linker.(*llndkStubDecorator); ok { - llndk.libraryDecorator.MutatedProperties.StubsVersion = version - return - } } panic(fmt.Errorf("SetStubsVersions called on non-library module: %q", c.BaseModuleName())) } @@ -658,9 +650,6 @@ func (c *Module) StubsVersion() string { if library, ok := c.linker.(*libraryDecorator); ok { return library.MutatedProperties.StubsVersion } - if llndk, ok := c.linker.(*llndkStubDecorator); ok { - return llndk.libraryDecorator.MutatedProperties.StubsVersion - } } panic(fmt.Errorf("StubsVersion called on non-library module: %q", c.BaseModuleName())) } @@ -1862,7 +1851,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { addSharedLibDependencies := func(depTag DependencyTag, name string, version string) { var variations []blueprint.Variation variations = append(variations, blueprint.Variation{Mutator: "link", Variation: "shared"}) - versionVariantAvail := !c.InRecovery() && !c.InRamdisk() + versionVariantAvail := !ctx.useVndk() && !c.InRecovery() && !c.InRamdisk() if version != "" && versionVariantAvail { // Version is explicitly specified. i.e. libFoo#30 variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version}) @@ -2197,17 +2186,13 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { if depTag == android.ProtoPluginDepTag { return } - if depTag == llndkImplDep { - return - } if dep.Target().Os != ctx.Os() { ctx.ModuleErrorf("OS mismatch between %q and %q", ctx.ModuleName(), depName) return } if dep.Target().Arch.ArchType != ctx.Arch().ArchType { - ctx.ModuleErrorf("Arch mismatch between %q(%v) and %q(%v)", - ctx.ModuleName(), ctx.Arch().ArchType, depName, dep.Target().Arch.ArchType) + ctx.ModuleErrorf("Arch mismatch between %q and %q", ctx.ModuleName(), depName) return } @@ -2302,27 +2287,6 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { return // stop processing this dep } } - if c.UseVndk() { - if m, ok := ccDep.(*Module); ok && m.IsStubs() { // LLNDK - // by default, use current version of LLNDK - versionToUse := "" - versions := stubsVersionsFor(ctx.Config())[depName] - if c.ApexName() != "" && len(versions) > 0 { - // if this is for use_vendor apex && dep has stubsVersions - // apply the same rule of apex sdk enforcement to choose right version - var err error - useLatest := c.ShouldSupportAndroid10() && !ctx.Config().UnbundledBuild() - versionToUse, err = c.ChooseSdkVersion(versions, useLatest) - if err != nil { - ctx.OtherModuleErrorf(dep, err.Error()) - return - } - } - if versionToUse != ccDep.StubsVersion() { - return - } - } - } depPaths.IncludeDirs = append(depPaths.IncludeDirs, ccDep.IncludeDirs()...) diff --git a/cc/cc_test.go b/cc/cc_test.go index 67eb248d2..9a9678f1d 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -2398,34 +2398,6 @@ func checkEquals(t *testing.T, message string, expected, actual interface{}) { } } -func TestLlndkLibrary(t *testing.T) { - ctx := testCc(t, ` - cc_library { - name: "libllndk", - stubs: { versions: ["1", "2"] }, - } - llndk_library { - name: "libllndk", - } - `) - actual := ctx.ModuleVariantsForTests("libllndk.llndk") - expected := []string{ - "android_vendor.VER_arm64_armv8-a_shared", - "android_vendor.VER_arm64_armv8-a_shared_1", - "android_vendor.VER_arm64_armv8-a_shared_2", - "android_vendor.VER_arm_armv7-a-neon_shared", - "android_vendor.VER_arm_armv7-a-neon_shared_1", - "android_vendor.VER_arm_armv7-a-neon_shared_2", - } - checkEquals(t, "variants for llndk stubs", expected, actual) - - params := ctx.ModuleForTests("libllndk.llndk", "android_vendor.VER_arm_armv7-a-neon_shared").Description("generate stub") - checkEquals(t, "use VNDK version for default stubs", "current", params.Args["apiLevel"]) - - params = ctx.ModuleForTests("libllndk.llndk", "android_vendor.VER_arm_armv7-a-neon_shared_1").Description("generate stub") - checkEquals(t, "override apiLevel for versioned stubs", "1", params.Args["apiLevel"]) -} - func TestLlndkHeaders(t *testing.T) { ctx := testCc(t, ` llndk_headers { diff --git a/cc/library.go b/cc/library.go index 7d3bdc218..335b18e18 100644 --- a/cc/library.go +++ b/cc/library.go @@ -1486,19 +1486,6 @@ func checkVersions(ctx android.BaseModuleContext, versions []string) { } } -func createVersionVariations(mctx android.BottomUpMutatorContext, versions []string) { - // "" is for the non-stubs variant - versions = append([]string{""}, versions...) - - modules := mctx.CreateVariations(versions...) - for i, m := range modules { - if versions[i] != "" { - m.(LinkableInterface).SetBuildStubs() - m.(LinkableInterface).SetStubsVersions(versions[i]) - } - } -} - // Version mutator splits a module into the mandatory non-stubs variant // (which is unnamed) and zero or more stubs variants. func VersionMutator(mctx android.BottomUpMutatorContext) { @@ -1510,30 +1497,24 @@ func VersionMutator(mctx android.BottomUpMutatorContext) { return } + // save the list of versions for later use stubsVersionsLock.Lock() defer stubsVersionsLock.Unlock() - // save the list of versions for later use stubsVersionsFor(mctx.Config())[mctx.ModuleName()] = versions - createVersionVariations(mctx, versions) - return + // "" is for the non-stubs variant + versions = append([]string{""}, versions...) + + modules := mctx.CreateVariations(versions...) + for i, m := range modules { + if versions[i] != "" { + m.(LinkableInterface).SetBuildStubs() + m.(LinkableInterface).SetStubsVersions(versions[i]) + } + } + } else { + mctx.CreateVariations("") } - - if c, ok := library.(*Module); ok && c.IsStubs() { - stubsVersionsLock.Lock() - defer stubsVersionsLock.Unlock() - // For LLNDK llndk_library, we borrow vstubs.ersions from its implementation library. - // Since llndk_library has dependency to its implementation library, - // we can safely access stubsVersionsFor() with its baseModuleName. - versions := stubsVersionsFor(mctx.Config())[c.BaseModuleName()] - // save the list of versions for later use - stubsVersionsFor(mctx.Config())[mctx.ModuleName()] = versions - - createVersionVariations(mctx, versions) - return - } - - mctx.CreateVariations("") return } if genrule, ok := mctx.Module().(*genrule.Module); ok { diff --git a/cc/llndk_library.go b/cc/llndk_library.go index 09050aa34..3dee6920a 100644 --- a/cc/llndk_library.go +++ b/cc/llndk_library.go @@ -19,14 +19,8 @@ import ( "strings" "android/soong/android" - - "github.com/google/blueprint" ) -var llndkImplDep = struct { - blueprint.DependencyTag -}{} - var ( llndkLibrarySuffix = ".llndk" llndkHeadersSuffix = ".llndk" @@ -87,9 +81,6 @@ func (stub *llndkStubDecorator) compile(ctx ModuleContext, flags Flags, deps Pat // For non-enforcing devices, vndkVer is empty. Use "current" in that case, too. vndkVer = "current" } - if stub.stubsVersion() != "" { - vndkVer = stub.stubsVersion() - } objs, versionScript := compileStubLibrary(ctx, flags, String(stub.Properties.Symbol_file), vndkVer, "--llndk") stub.versionScriptPath = versionScript return objs @@ -163,10 +154,6 @@ func (stub *llndkStubDecorator) link(ctx ModuleContext, flags Flags, deps PathDe stub.libraryDecorator.flagExporter.Properties.Export_include_dirs = []string{} } - if stub.stubsVersion() != "" { - stub.reexportFlags("-D" + versioningMacroName(ctx.baseModuleName()) + "=" + stub.stubsVersion()) - } - return stub.libraryDecorator.link(ctx, flags, deps, objs) } diff --git a/cc/vndk.go b/cc/vndk.go index 4888dcf07..e02e7b534 100644 --- a/cc/vndk.go +++ b/cc/vndk.go @@ -297,9 +297,6 @@ func processLlndkLibrary(mctx android.BottomUpMutatorContext, m *Module) { if !Bool(lib.Properties.Vendor_available) { vndkPrivateLibraries(mctx.Config())[name] = filename } - if mctx.OtherModuleExists(name) { - mctx.AddFarVariationDependencies(m.Target().Variations(), llndkImplDep, name) - } } func processVndkLibrary(mctx android.BottomUpMutatorContext, m *Module) {