From df1efd7251a82394e576bad2490e1301d2f0827a Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Fri, 8 Dec 2023 12:27:24 -0800 Subject: [PATCH] Add compile_data for android apps Compile_data is a property on rust rules to declare extra files that are used by the compiler. In rust's case this happens commonly with `include_str!()`. Other compilers like javac or aapt2 don't often reach out to other files, so it's not as neccessary. But they will follow symlinks. We're making a change to only include symlinks themselves in sbox sandboxes, and the targets of the symlinks must be listed explicitly. For this, we need compile_data to list the targets of symlinks. Bug: 307824623 Test: m out/soong/.intermediates/frameworks/base/tools/aapt2/integration-tests/SymlinkTest/AaptSymlinkTest/android_common/lint/lint-baseline.xml with the symlink change Change-Id: I33eb9cbe4b6eb25e3f33ea0ac9dade88c3d4a624 --- java/app.go | 8 ++++++++ java/lint.go | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/java/app.go b/java/app.go index 0f46b4ec8..e48e45c4d 100755 --- a/java/app.go +++ b/java/app.go @@ -23,6 +23,7 @@ import ( "strings" "android/soong/testing" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -139,6 +140,12 @@ type appProperties struct { // PRODUCT_CHARACTERISTICS. Generate_product_characteristics_rro *bool + // A list of files or dependencies to make available to the build sandbox. This is + // useful if source files are symlinks, the targets of the symlinks must be listed here. + // Note that currently not all actions implemented by android_apps are sandboxed, so you + // may only see this being necessary in lint builds. + Compile_data []string + ProductCharacteristicsRROPackageName *string `blueprint:"mutated"` ProductCharacteristicsRROManifestModuleName *string `blueprint:"mutated"` } @@ -798,6 +805,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { a.linter.mergedManifest = a.aapt.mergedManifestFile a.linter.manifest = a.aapt.manifestPath a.linter.resources = a.aapt.resourceFiles + a.linter.compile_data = android.PathsForModuleSrc(ctx, a.appProperties.Compile_data) a.linter.buildModuleReportZip = ctx.Config().UnbundledBuildApps() dexJarFile, packageResources := a.dexBuildActions(ctx) diff --git a/java/lint.go b/java/lint.go index 34720e51d..874ceee09 100644 --- a/java/lint.go +++ b/java/lint.go @@ -93,6 +93,7 @@ type linter struct { outputs lintOutputs properties LintProperties extraMainlineLintErrors []string + compile_data android.Paths reports android.Paths @@ -448,7 +449,7 @@ func (l *linter) lint(ctx android.ModuleContext) { srcsList := android.PathForModuleOut(ctx, "lint", "lint-srcs.list") srcsListRsp := android.PathForModuleOut(ctx, "lint-srcs.list.rsp") - rule.Command().Text("cp").FlagWithRspFileInputList("", srcsListRsp, l.srcs).Output(srcsList) + rule.Command().Text("cp").FlagWithRspFileInputList("", srcsListRsp, l.srcs).Output(srcsList).Implicits(l.compile_data) lintPaths := l.writeLintProjectXML(ctx, rule, srcsList)