diff options
| -rw-r--r-- | apex/apex_test.go | 137 | ||||
| -rw-r--r-- | cc/cc.go | 40 | ||||
| -rw-r--r-- | cc/cc_test.go | 28 | ||||
| -rw-r--r-- | cc/compiler.go | 15 | ||||
| -rw-r--r-- | cc/library.go | 43 | ||||
| -rw-r--r-- | cc/llndk_library.go | 13 | ||||
| -rw-r--r-- | cc/vndk.go | 3 | ||||
| -rw-r--r-- | cuj/cuj.go | 50 | ||||
| -rw-r--r-- | dexpreopt/dexpreopt.go | 2 | ||||
| -rw-r--r-- | java/androidmk.go | 1 | ||||
| -rw-r--r-- | java/java.go | 13 | ||||
| -rw-r--r-- | java/java_test.go | 24 | ||||
| -rw-r--r-- | java/sdk.go | 2 | ||||
| -rw-r--r-- | java/sdk_test.go | 4 | ||||
| -rw-r--r-- | java/testing.go | 4 | ||||
| -rwxr-xr-x | scripts/transitive-deps.sh | 2 |
16 files changed, 294 insertions, 87 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go index 5468c77bf..0bae1244f 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -874,58 +874,89 @@ func TestApexWithRuntimeLibsDependency(t *testing.T) { } -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", - } - - 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", - } - - llndk_library { - name: "libbar", - symbol_file: "", - } - `, func(fs map[string][]byte, config android.Config) { - setUseVendorWhitelistForTest(config, []string{"myapex"}) - }) +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+`", + } - apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule") - copyCmds := apexRule.Args["copy_commands"] + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } - // Ensure that LLNDK dep is not included - ensureNotContains(t, copyCmds, "image.apex/lib64/libbar.so") + cc_library { + name: "mylib", + srcs: ["mylib.cpp"], + vendor_available: true, + shared_libs: ["libbar"], + system_shared_libs: [], + stl: "none", + apex_available: [ "myapex" ], + } - apexManifestRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule") - ensureListEmpty(t, names(apexManifestRule.Args["provideNativeLibs"])) + cc_library { + name: "libbar", + srcs: ["mylib.cpp"], + system_shared_libs: [], + stl: "none", + stubs: { versions: ["29","30"] }, + } - // Ensure that LLNDK dep is required - ensureListContains(t, names(apexManifestRule.Args["requireNativeLibs"]), "libbar.so") + llndk_library { + name: "libbar", + symbol_file: "", + } + `, func(fs map[string][]byte, config android.Config) { + setUseVendorWhitelistForTest(config, []string{"myapex"}) + }, withUnbundledBuild) + + // Ensure that LLNDK dep is not included + ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{ + "lib64/mylib.so", + }) + + // 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") + + 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") + } + 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) { @@ -1255,10 +1286,6 @@ 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) { @@ -1797,6 +1824,7 @@ func TestMacro(t *testing.T) { "myapex", "otherapex", ], + recovery_available: true, } cc_library { name: "mylib2", @@ -1814,7 +1842,7 @@ func TestMacro(t *testing.T) { // non-APEX variant does not have __ANDROID_APEX__ defined mylibCFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") - ensureContains(t, mylibCFlags, "-D__ANDROID_SDK_VERSION__=10000") + ensureNotContains(t, mylibCFlags, "-D__ANDROID_SDK_VERSION__=10000") // APEX variant has __ANDROID_APEX__ and __ANDROID_APEX_SDK__ defined mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] @@ -1846,6 +1874,11 @@ func TestMacro(t *testing.T) { ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") ensureContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") + + // recovery variant does not set __ANDROID_SDK_VERSION__ + mylibCFlags = ctx.ModuleForTests("mylib", "android_recovery_arm64_armv8-a_static").Rule("cc").Args["cFlags"] + ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") + ensureNotContains(t, mylibCFlags, "-D__ANDROID_SDK_VERSION__") } func TestHeaderLibsDependency(t *testing.T) { @@ -622,6 +622,10 @@ 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())) } @@ -641,6 +645,10 @@ 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())) } @@ -650,6 +658,9 @@ 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())) } @@ -1851,7 +1862,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 := !ctx.useVndk() && !c.InRecovery() && !c.InRamdisk() + versionVariantAvail := !c.InRecovery() && !c.InRamdisk() if version != "" && versionVariantAvail { // Version is explicitly specified. i.e. libFoo#30 variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version}) @@ -2186,13 +2197,17 @@ 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 and %q", ctx.ModuleName(), depName) + ctx.ModuleErrorf("Arch mismatch between %q(%v) and %q(%v)", + ctx.ModuleName(), ctx.Arch().ArchType, depName, dep.Target().Arch.ArchType) return } @@ -2287,6 +2302,27 @@ 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 9a9678f1d..67eb248d2 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -2398,6 +2398,34 @@ 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/compiler.go b/cc/compiler.go index fe81bd0a4..681b1ab90 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -315,18 +315,6 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps "-isystem "+getCurrentIncludePath(ctx).Join(ctx, config.NDKTriple(tc)).String()) } - if ctx.canUseSdk() { - sdkVersion := ctx.sdkVersion() - if sdkVersion == "" || sdkVersion == "current" { - if ctx.isForPlatform() { - sdkVersion = strconv.Itoa(android.FutureApiLevel) - } else { - sdkVersion = strconv.Itoa(ctx.apexSdkVersion()) - } - } - flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_SDK_VERSION__="+sdkVersion) - } - if ctx.useVndk() { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VNDK__") } @@ -340,6 +328,9 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps if Bool(compiler.Properties.Use_apex_name_macro) { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_APEX_"+makeDefineString(ctx.apexName())+"__") } + if ctx.Device() { + flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_SDK_VERSION__="+strconv.Itoa(ctx.apexSdkVersion())) + } } instructionSet := String(compiler.Properties.Instruction_set) diff --git a/cc/library.go b/cc/library.go index 2ced2c5dc..cd64fd1b5 100644 --- a/cc/library.go +++ b/cc/library.go @@ -1502,6 +1502,19 @@ 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) { @@ -1513,24 +1526,30 @@ 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 - // "" is for the non-stubs variant - versions = append([]string{""}, versions...) + createVersionVariations(mctx, versions) + return + } - 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 3dee6920a..09050aa34 100644 --- a/cc/llndk_library.go +++ b/cc/llndk_library.go @@ -19,8 +19,14 @@ import ( "strings" "android/soong/android" + + "github.com/google/blueprint" ) +var llndkImplDep = struct { + blueprint.DependencyTag +}{} + var ( llndkLibrarySuffix = ".llndk" llndkHeadersSuffix = ".llndk" @@ -81,6 +87,9 @@ 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 @@ -154,6 +163,10 @@ 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 e02e7b534..4888dcf07 100644 --- a/cc/vndk.go +++ b/cc/vndk.go @@ -297,6 +297,9 @@ 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) { diff --git a/cuj/cuj.go b/cuj/cuj.go index c7ff8ffa8..333301268 100644 --- a/cuj/cuj.go +++ b/cuj/cuj.go @@ -33,8 +33,9 @@ import ( ) type Test struct { - name string - args []string + name string + args []string + before func() error results TestResults } @@ -119,6 +120,15 @@ func (t *Test) Run(logsDir string) { t.results.metrics = met } +// Touch the Intent.java file to cause a rebuild of the frameworks to monitor the +// incremental build speed as mentioned b/152046247. Intent.java file was chosen +// as it is a key component of the framework and is often modified. +func touchIntentFile() error { + const intentFileName = "frameworks/base/core/java/android/content/Intent.java" + currentTime := time.Now().Local() + return os.Chtimes(intentFileName, currentTime, currentTime) +} + func main() { outDir := os.Getenv("OUT_DIR") if outDir == "" { @@ -170,6 +180,36 @@ func main() { name: "framework_rebuild_twice", args: []string{"framework"}, }, + { + // Scenario major_inc_build (b/152046247): tracking build speed of major incremental build. + name: "major_inc_build_droid", + args: []string{"droid"}, + }, + { + name: "major_inc_build_framework_minus_apex_after_droid_build", + args: []string{"framework-minus-apex"}, + before: touchIntentFile, + }, + { + name: "major_inc_build_framework_after_droid_build", + args: []string{"framework"}, + before: touchIntentFile, + }, + { + name: "major_inc_build_sync_after_droid_build", + args: []string{"sync"}, + before: touchIntentFile, + }, + { + name: "major_inc_build_droid_rebuild", + args: []string{"droid"}, + before: touchIntentFile, + }, + { + name: "major_inc_build_update_api_after_droid_rebuild", + args: []string{"update-api"}, + before: touchIntentFile, + }, } cujMetrics := metrics.NewCriticalUserJourneysMetrics() @@ -178,6 +218,12 @@ func main() { for i, t := range tests { logsSubDir := fmt.Sprintf("%02d_%s", i, t.name) logsDir := filepath.Join(cujDir, "logs", logsSubDir) + if t.before != nil { + if err := t.before(); err != nil { + fmt.Printf("error running before function on test %q: %v\n", t.name, err) + break + } + } t.Run(logsDir) if t.results.err != nil { fmt.Printf("error running test %q: %s\n", t.name, t.results.err) diff --git a/dexpreopt/dexpreopt.go b/dexpreopt/dexpreopt.go index 02e54b3ee..0e1bfc615 100644 --- a/dexpreopt/dexpreopt.go +++ b/dexpreopt/dexpreopt.go @@ -589,7 +589,7 @@ func NonUpdatableSystemServerJars(ctx android.PathContext, global *GlobalConfig) // at that time (Soong processes the jars in dependency order, which may be different from the // the system server classpath order). func SystemServerDexJarHostPath(ctx android.PathContext, jar string) android.OutputPath { - return android.PathForOutput(ctx, ctx.Config().BuildDir(), "system_server_dexjars", jar+".jar") + return android.PathForOutput(ctx, "system_server_dexjars", jar+".jar") } func contains(l []string, s string) bool { diff --git a/java/androidmk.go b/java/androidmk.go index d76e29b21..a220cce70 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -542,6 +542,7 @@ func (ddoc *Droiddoc) AndroidMkEntries() []android.AndroidMkEntries { func (dstubs *Droidstubs) AndroidMkEntries() []android.AndroidMkEntries { return []android.AndroidMkEntries{android.AndroidMkEntries{ Class: "JAVA_LIBRARIES", + DistFile: android.OptionalPathForPath(dstubs.apiFile), OutputFile: android.OptionalPathForPath(dstubs.stubsSrcJar), Include: "$(BUILD_SYSTEM)/soong_droiddoc_prebuilt.mk", ExtraEntries: []android.AndroidMkExtraEntriesFunc{ diff --git a/java/java.go b/java/java.go index 22d14ecfe..0188cf1a2 100644 --- a/java/java.go +++ b/java/java.go @@ -800,7 +800,7 @@ func (m *Module) getLinkType(name string) (ret linkType, stubs bool) { return javaModule, true case ver.kind == sdkModule: return javaModule, false - case name == "services-stubs": + case name == "android_system_server_stubs_current": return javaSystemServer, true case ver.kind == sdkSystemServer: return javaSystemServer, false @@ -2338,6 +2338,12 @@ type ImportProperties struct { // set the name of the output Stem *string + + Aidl struct { + // directories that should be added as include directories for any aidl sources of modules + // that depend on this module, as well as to aidl for this module. + Export_include_dirs []string + } } type Import struct { @@ -2351,6 +2357,7 @@ type Import struct { combinedClasspathFile android.Path exportedSdkLibs []string + exportAidlIncludeDirs android.Paths } func (j *Import) sdkVersion() sdkSpec { @@ -2424,6 +2431,8 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"), jarName, outputFile) } + + j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs) } var _ Dependency = (*Import)(nil) @@ -2458,7 +2467,7 @@ func (j *Import) DexJar() android.Path { } func (j *Import) AidlIncludeDirs() android.Paths { - return nil + return j.exportAidlIncludeDirs } func (j *Import) ExportedSdkLibs() []string { diff --git a/java/java_test.go b/java/java_test.go index 6d972bebd..e8a1a7c83 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -1491,3 +1491,27 @@ func checkBootClasspathForSystemModule(t *testing.T, ctx *android.TestContext, m t.Errorf("bootclasspath of %q must start with --system and end with %q, but was %#v.", moduleName, expectedSuffix, bootClasspath) } } + +func TestAidlExportIncludeDirsFromImports(t *testing.T) { + ctx, _ := testJava(t, ` + java_library { + name: "foo", + srcs: ["aidl/foo/IFoo.aidl"], + libs: ["bar"], + } + + java_import { + name: "bar", + jars: ["a.jar"], + aidl: { + export_include_dirs: ["aidl/bar"], + }, + } + `) + + aidlCommand := ctx.ModuleForTests("foo", "android_common").Rule("aidl").RuleParams.Command + expectedAidlFlag := "-Iaidl/bar" + if !strings.Contains(aidlCommand, expectedAidlFlag) { + t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) + } +} diff --git a/java/sdk.go b/java/sdk.go index ded2a061b..0e132d399 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -406,7 +406,7 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep return toModule([]string{"android_module_lib_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx)) case sdkSystemServer: // TODO(146757305): provide .apk and .aidl that have more APIs for modules - return toModule([]string{"android_module_lib_stubs_current", "services-stubs"}, "framework-res", sdkFrameworkAidlPath(ctx)) + return toModule([]string{"android_system_server_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx)) default: panic(fmt.Errorf("invalid sdk %q", sdkVersion.raw)) } diff --git a/java/sdk_test.go b/java/sdk_test.go index ea6733d86..088db9e70 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -222,9 +222,9 @@ func TestClasspath(t *testing.T) { { name: "system_server_current", properties: `sdk_version: "system_server_current",`, - bootclasspath: []string{"android_module_lib_stubs_current", "services-stubs", "core-lambda-stubs"}, + bootclasspath: []string{"android_system_server_stubs_current", "core-lambda-stubs"}, system: "core-current-stubs-system-modules", - java9classpath: []string{"android_module_lib_stubs_current", "services-stubs"}, + java9classpath: []string{"android_system_server_stubs_current"}, aidl: "-p" + buildDir + "/framework.aidl", }, } diff --git a/java/testing.go b/java/testing.go index 5b6a39b2a..6929bb724 100644 --- a/java/testing.go +++ b/java/testing.go @@ -50,6 +50,8 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string "api/test-current.txt": nil, "api/test-removed.txt": nil, "framework/aidl/a.aidl": nil, + "aidl/foo/IFoo.aidl": nil, + "aidl/bar/IBar.aidl": nil, "assets_a/a": nil, "assets_b/b": nil, @@ -148,7 +150,7 @@ func GatherRequiredDepsForTest() string { "android_system_stubs_current", "android_test_stubs_current", "android_module_lib_stubs_current", - "services-stubs", + "android_system_server_stubs_current", "core.current.stubs", "core.platform.api.stubs", "kotlin-stdlib", diff --git a/scripts/transitive-deps.sh b/scripts/transitive-deps.sh index 23121c6b7..c6f8b76e4 100755 --- a/scripts/transitive-deps.sh +++ b/scripts/transitive-deps.sh @@ -469,7 +469,9 @@ case "${notices_out}" in fi readonly hashedNotice="${tmpFiles}/hashednotices" ( # md5sum outputs checksum space indicator(space or *) filename newline + set +e sort -u "${allNotice}" | tr '\n' '\0' | xargs -0 -r md5sum 2>/dev/null + set -e # use sed to replace space and indicator with separator ) > "${hashedNotice}" if ${showProgress}; then |