Move checkbuild targets of Soong modules into Soong

Pass the name of Soong's checkbuild target for each module to
Make so that it can depend on it from the main checkbuild rule.
This will give better control over which files get built, allowing
checkbuild to skip the jar combining step when transitive classpath
jars are enabled.  The per-module checkbuild targets are passed to
make instead of added directly as a dependency of checkbuild in order
to maintain the existing behavior of only building modules exposed
to make in checkbuild.

Also tweak the existing calls to CheckbuildFile and add
InstallFileWithoutCheckbuild to match the files that are
in the Make-based checkbuild.

Bug: 308016794
Test: m checkbuild
Change-Id: Ic5140819381d58f4d00f23a7a12447950c4cf268
This commit is contained in:
Colin Cross
2024-08-21 10:47:44 -07:00
parent c965be6ca2
commit a6182ab2fa
14 changed files with 131 additions and 36 deletions

View File

@@ -554,6 +554,14 @@ func (a *AndroidMkEntries) fillInEntries(ctx fillInEntriesContext, mod blueprint
a.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", proptools.Bool(base.commonProperties.No_full_install)) a.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", proptools.Bool(base.commonProperties.No_full_install))
} }
if info.UncheckedModule {
a.SetBool("LOCAL_DONT_CHECK_MODULE", true)
} else if info.CheckbuildTarget != nil {
a.SetPath("LOCAL_CHECKED_MODULE", info.CheckbuildTarget)
} else {
a.SetOptionalPath("LOCAL_CHECKED_MODULE", a.OutputFile)
}
if len(info.TestData) > 0 { if len(info.TestData) > 0 {
a.AddStrings("LOCAL_TEST_DATA", androidMkDataPaths(info.TestData)...) a.AddStrings("LOCAL_TEST_DATA", androidMkDataPaths(info.TestData)...)
} }

View File

@@ -1545,26 +1545,43 @@ func (m *ModuleBase) VintfFragmentModuleNames(ctx ConfigAndErrorContext) []strin
return m.base().commonProperties.Vintf_fragment_modules.GetOrDefault(m.ConfigurableEvaluator(ctx), nil) return m.base().commonProperties.Vintf_fragment_modules.GetOrDefault(m.ConfigurableEvaluator(ctx), nil)
} }
func (m *ModuleBase) generateVariantTarget(ctx *moduleContext) {
namespacePrefix := ctx.Namespace().id
if namespacePrefix != "" {
namespacePrefix = namespacePrefix + "-"
}
if !ctx.uncheckedModule {
name := namespacePrefix + ctx.ModuleName() + "-" + ctx.ModuleSubDir() + "-checkbuild"
ctx.Phony(name, ctx.checkbuildFiles...)
ctx.checkbuildTarget = PathForPhony(ctx, name)
}
}
func (m *ModuleBase) generateModuleTarget(ctx *moduleContext) { func (m *ModuleBase) generateModuleTarget(ctx *moduleContext) {
var allInstalledFiles InstallPaths var allInstalledFiles InstallPaths
var allCheckbuildFiles Paths var allCheckbuildTargets Paths
ctx.VisitAllModuleVariants(func(module Module) { ctx.VisitAllModuleVariants(func(module Module) {
a := module.base() a := module.base()
var checkBuilds Paths var checkbuildTarget Path
var uncheckedModule bool
if a == m { if a == m {
allInstalledFiles = append(allInstalledFiles, ctx.installFiles...) allInstalledFiles = append(allInstalledFiles, ctx.installFiles...)
checkBuilds = ctx.checkbuildFiles checkbuildTarget = ctx.checkbuildTarget
uncheckedModule = ctx.uncheckedModule
} else { } else {
info := OtherModuleProviderOrDefault(ctx, module, InstallFilesProvider) info := OtherModuleProviderOrDefault(ctx, module, InstallFilesProvider)
allInstalledFiles = append(allInstalledFiles, info.InstallFiles...) allInstalledFiles = append(allInstalledFiles, info.InstallFiles...)
checkBuilds = info.CheckbuildFiles checkbuildTarget = info.CheckbuildTarget
uncheckedModule = info.UncheckedModule
} }
// A module's -checkbuild phony targets should // A module's -checkbuild phony targets should
// not be created if the module is not exported to make. // not be created if the module is not exported to make.
// Those could depend on the build target and fail to compile // Those could depend on the build target and fail to compile
// for the current build target. // for the current build target.
if !ctx.Config().KatiEnabled() || !shouldSkipAndroidMkProcessing(ctx, a) { if (!ctx.Config().KatiEnabled() || !shouldSkipAndroidMkProcessing(ctx, a)) && !uncheckedModule && checkbuildTarget != nil {
allCheckbuildFiles = append(allCheckbuildFiles, checkBuilds...) allCheckbuildTargets = append(allCheckbuildTargets, checkbuildTarget)
} }
}) })
@@ -1585,11 +1602,10 @@ func (m *ModuleBase) generateModuleTarget(ctx *moduleContext) {
deps = append(deps, info.InstallTarget) deps = append(deps, info.InstallTarget)
} }
if len(allCheckbuildFiles) > 0 { if len(allCheckbuildTargets) > 0 {
name := namespacePrefix + ctx.ModuleName() + "-checkbuild" name := namespacePrefix + ctx.ModuleName() + "-checkbuild"
ctx.Phony(name, allCheckbuildFiles...) ctx.Phony(name, allCheckbuildTargets...)
info.CheckbuildTarget = PathForPhony(ctx, name) deps = append(deps, PathForPhony(ctx, name))
deps = append(deps, info.CheckbuildTarget)
} }
if len(deps) > 0 { if len(deps) > 0 {
@@ -1706,9 +1722,11 @@ func (m *ModuleBase) archModuleContextFactory(ctx archModuleContextFactoryContex
} }
type InstallFilesInfo struct { type InstallFilesInfo struct {
InstallFiles InstallPaths InstallFiles InstallPaths
CheckbuildFiles Paths CheckbuildFiles Paths
PackagingSpecs []PackagingSpec CheckbuildTarget Path
UncheckedModule bool
PackagingSpecs []PackagingSpec
// katiInstalls tracks the install rules that were created by Soong but are being exported // katiInstalls tracks the install rules that were created by Soong but are being exported
// to Make to convert to ninja rules so that Make can add additional dependencies. // to Make to convert to ninja rules so that Make can add additional dependencies.
KatiInstalls katiInstalls KatiInstalls katiInstalls
@@ -1945,9 +1963,13 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext)
return return
} }
m.generateVariantTarget(ctx)
installFiles.LicenseMetadataFile = ctx.licenseMetadataFile installFiles.LicenseMetadataFile = ctx.licenseMetadataFile
installFiles.InstallFiles = ctx.installFiles installFiles.InstallFiles = ctx.installFiles
installFiles.CheckbuildFiles = ctx.checkbuildFiles installFiles.CheckbuildFiles = ctx.checkbuildFiles
installFiles.CheckbuildTarget = ctx.checkbuildTarget
installFiles.UncheckedModule = ctx.uncheckedModule
installFiles.PackagingSpecs = ctx.packagingSpecs installFiles.PackagingSpecs = ctx.packagingSpecs
installFiles.KatiInstalls = ctx.katiInstalls installFiles.KatiInstalls = ctx.katiInstalls
installFiles.KatiSymlinks = ctx.katiSymlinks installFiles.KatiSymlinks = ctx.katiSymlinks

View File

@@ -122,6 +122,16 @@ type ModuleContext interface {
// dependency tags for which IsInstallDepNeeded returns true. // dependency tags for which IsInstallDepNeeded returns true.
InstallFile(installPath InstallPath, name string, srcPath Path, deps ...InstallPath) InstallPath InstallFile(installPath InstallPath, name string, srcPath Path, deps ...InstallPath) InstallPath
// InstallFileWithoutCheckbuild creates a rule to copy srcPath to name in the installPath directory,
// with the given additional dependencies, but does not add the file to the list of files to build
// during `m checkbuild`.
//
// The installed file will be returned by FilesToInstall(), and the PackagingSpec for the
// installed file will be returned by PackagingSpecs() on this module or by
// TransitivePackagingSpecs() on modules that depend on this module through dependency tags
// for which IsInstallDepNeeded returns true.
InstallFileWithoutCheckbuild(installPath InstallPath, name string, srcPath Path, deps ...InstallPath) InstallPath
// InstallFileWithExtraFilesZip creates a rule to copy srcPath to name in the installPath // InstallFileWithExtraFilesZip creates a rule to copy srcPath to name in the installPath
// directory, and also unzip a zip file containing extra files to install into the same // directory, and also unzip a zip file containing extra files to install into the same
// directory. // directory.
@@ -168,7 +178,8 @@ type ModuleContext interface {
// dependency tags for which IsInstallDepNeeded returns true. // dependency tags for which IsInstallDepNeeded returns true.
PackageFile(installPath InstallPath, name string, srcPath Path) PackagingSpec PackageFile(installPath InstallPath, name string, srcPath Path) PackagingSpec
CheckbuildFile(srcPath Path) CheckbuildFile(srcPaths ...Path)
UncheckedModule()
InstallInData() bool InstallInData() bool
InstallInTestcases() bool InstallInTestcases() bool
@@ -237,11 +248,13 @@ type ModuleContext interface {
type moduleContext struct { type moduleContext struct {
bp blueprint.ModuleContext bp blueprint.ModuleContext
baseModuleContext baseModuleContext
packagingSpecs []PackagingSpec packagingSpecs []PackagingSpec
installFiles InstallPaths installFiles InstallPaths
checkbuildFiles Paths checkbuildFiles Paths
module Module checkbuildTarget Path
phonies map[string]Paths uncheckedModule bool
module Module
phonies map[string]Paths
// outputFiles stores the output of a module by tag and is used to set // outputFiles stores the output of a module by tag and is used to set
// the OutputFilesProvider in GenerateBuildActions // the OutputFilesProvider in GenerateBuildActions
outputFiles OutputFilesInfo outputFiles OutputFilesInfo
@@ -512,17 +525,22 @@ func (m *moduleContext) requiresFullInstall() bool {
func (m *moduleContext) InstallFile(installPath InstallPath, name string, srcPath Path, func (m *moduleContext) InstallFile(installPath InstallPath, name string, srcPath Path,
deps ...InstallPath) InstallPath { deps ...InstallPath) InstallPath {
return m.installFile(installPath, name, srcPath, deps, false, true, nil) return m.installFile(installPath, name, srcPath, deps, false, true, true, nil)
}
func (m *moduleContext) InstallFileWithoutCheckbuild(installPath InstallPath, name string, srcPath Path,
deps ...InstallPath) InstallPath {
return m.installFile(installPath, name, srcPath, deps, false, true, false, nil)
} }
func (m *moduleContext) InstallExecutable(installPath InstallPath, name string, srcPath Path, func (m *moduleContext) InstallExecutable(installPath InstallPath, name string, srcPath Path,
deps ...InstallPath) InstallPath { deps ...InstallPath) InstallPath {
return m.installFile(installPath, name, srcPath, deps, true, true, nil) return m.installFile(installPath, name, srcPath, deps, true, true, true, nil)
} }
func (m *moduleContext) InstallFileWithExtraFilesZip(installPath InstallPath, name string, srcPath Path, func (m *moduleContext) InstallFileWithExtraFilesZip(installPath InstallPath, name string, srcPath Path,
extraZip Path, deps ...InstallPath) InstallPath { extraZip Path, deps ...InstallPath) InstallPath {
return m.installFile(installPath, name, srcPath, deps, false, true, &extraFilesZip{ return m.installFile(installPath, name, srcPath, deps, false, true, true, &extraFilesZip{
zip: extraZip, zip: extraZip,
dir: installPath, dir: installPath,
}) })
@@ -559,7 +577,7 @@ func (m *moduleContext) packageFile(fullInstallPath InstallPath, srcPath Path, e
} }
func (m *moduleContext) installFile(installPath InstallPath, name string, srcPath Path, deps []InstallPath, func (m *moduleContext) installFile(installPath InstallPath, name string, srcPath Path, deps []InstallPath,
executable bool, hooks bool, extraZip *extraFilesZip) InstallPath { executable bool, hooks bool, checkbuild bool, extraZip *extraFilesZip) InstallPath {
fullInstallPath := installPath.Join(m, name) fullInstallPath := installPath.Join(m, name)
if hooks { if hooks {
@@ -626,7 +644,9 @@ func (m *moduleContext) installFile(installPath InstallPath, name string, srcPat
m.packageFile(fullInstallPath, srcPath, executable) m.packageFile(fullInstallPath, srcPath, executable)
m.checkbuildFiles = append(m.checkbuildFiles, srcPath) if checkbuild {
m.checkbuildFiles = append(m.checkbuildFiles, srcPath)
}
return fullInstallPath return fullInstallPath
} }
@@ -667,7 +687,6 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src
} }
m.installFiles = append(m.installFiles, fullInstallPath) m.installFiles = append(m.installFiles, fullInstallPath)
m.checkbuildFiles = append(m.checkbuildFiles, srcPath)
} }
m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{ m.packagingSpecs = append(m.packagingSpecs, PackagingSpec{
@@ -734,15 +753,21 @@ func (m *moduleContext) InstallTestData(installPath InstallPath, data []DataPath
ret := make(InstallPaths, 0, len(data)) ret := make(InstallPaths, 0, len(data))
for _, d := range data { for _, d := range data {
relPath := d.ToRelativeInstallPath() relPath := d.ToRelativeInstallPath()
installed := m.installFile(installPath, relPath, d.SrcPath, nil, false, false, nil) installed := m.installFile(installPath, relPath, d.SrcPath, nil, false, false, true, nil)
ret = append(ret, installed) ret = append(ret, installed)
} }
return ret return ret
} }
func (m *moduleContext) CheckbuildFile(srcPath Path) { // CheckbuildFile specifies the output files that should be built by checkbuild.
m.checkbuildFiles = append(m.checkbuildFiles, srcPath) func (m *moduleContext) CheckbuildFile(srcPaths ...Path) {
m.checkbuildFiles = append(m.checkbuildFiles, srcPaths...)
}
// UncheckedModule marks the current module has having no files that should be built by checkbuild.
func (m *moduleContext) UncheckedModule() {
m.uncheckedModule = true
} }
func (m *moduleContext) blueprintModuleContext() blueprint.ModuleContext { func (m *moduleContext) blueprintModuleContext() blueprint.ModuleContext {

View File

@@ -136,6 +136,11 @@ func (a *apexBundle) androidMkForFiles(w io.Writer, apexBundleName, moduleDir st
fmt.Fprintln(w, "LOCAL_SOONG_INSTALLED_MODULE :=", filepath.Join(modulePath, fi.stem())) fmt.Fprintln(w, "LOCAL_SOONG_INSTALLED_MODULE :=", filepath.Join(modulePath, fi.stem()))
fmt.Fprintln(w, "LOCAL_SOONG_INSTALL_PAIRS :=", fi.builtFile.String()+":"+filepath.Join(modulePath, fi.stem())) fmt.Fprintln(w, "LOCAL_SOONG_INSTALL_PAIRS :=", fi.builtFile.String()+":"+filepath.Join(modulePath, fi.stem()))
fmt.Fprintln(w, "LOCAL_PREBUILT_MODULE_FILE :=", fi.builtFile.String()) fmt.Fprintln(w, "LOCAL_PREBUILT_MODULE_FILE :=", fi.builtFile.String())
if fi.checkbuildTarget != nil {
fmt.Fprintln(w, "LOCAL_CHECKED_MODULE :=", fi.checkbuildTarget.String())
} else {
fmt.Fprintln(w, "LOCAL_CHECKED_MODULE :=", fi.builtFile.String())
}
fmt.Fprintln(w, "LOCAL_MODULE_CLASS :=", fi.class.nameInMake()) fmt.Fprintln(w, "LOCAL_MODULE_CLASS :=", fi.class.nameInMake())
if fi.module != nil { if fi.module != nil {
// This apexFile's module comes from Soong // This apexFile's module comes from Soong

View File

@@ -577,6 +577,8 @@ type apexFile struct {
customStem string customStem string
symlinks []string // additional symlinks symlinks []string // additional symlinks
checkbuildTarget android.Path
// Info for Android.mk Module name of `module` in AndroidMk. Note the generated AndroidMk // Info for Android.mk Module name of `module` in AndroidMk. Note the generated AndroidMk
// module for apexFile is named something like <AndroidMk module name>.<apex name>[<apex // module for apexFile is named something like <AndroidMk module name>.<apex name>[<apex
// suffix>] // suffix>]
@@ -612,6 +614,9 @@ func newApexFile(ctx android.BaseModuleContext, builtFile android.Path, androidM
module: module, module: module,
} }
if module != nil { if module != nil {
if installFilesInfo, ok := android.OtherModuleProvider(ctx, module, android.InstallFilesProvider); ok {
ret.checkbuildTarget = installFilesInfo.CheckbuildTarget
}
ret.moduleDir = ctx.OtherModuleDir(module) ret.moduleDir = ctx.OtherModuleDir(module)
ret.partition = module.PartitionTag(ctx.DeviceConfig()) ret.partition = module.PartitionTag(ctx.DeviceConfig())
ret.requiredModuleNames = module.RequiredModuleNames(ctx) ret.requiredModuleNames = module.RequiredModuleNames(ctx)

View File

@@ -403,6 +403,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio
packageName: a.manifestValues.applicationId, packageName: a.manifestValues.applicationId,
} }
a.mergedManifestFile = manifestMerger(ctx, transitiveManifestPaths[0], manifestMergerParams) a.mergedManifestFile = manifestMerger(ctx, transitiveManifestPaths[0], manifestMergerParams)
ctx.CheckbuildFile(a.mergedManifestFile)
if !a.isLibrary { if !a.isLibrary {
// Only use the merged manifest for applications. For libraries, the transitive closure of manifests // Only use the merged manifest for applications. For libraries, the transitive closure of manifests
// will be propagated to the final application and merged there. The merged manifest for libraries is // will be propagated to the final application and merged there. The merged manifest for libraries is
@@ -537,6 +538,8 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio
aapt2Link(ctx, packageRes, srcJar, proguardOptionsFile, rTxt, aapt2Link(ctx, packageRes, srcJar, proguardOptionsFile, rTxt,
linkFlags, linkDeps, compiledRes, compiledOverlay, transitiveAssets, splitPackages, linkFlags, linkDeps, compiledRes, compiledOverlay, transitiveAssets, splitPackages,
opts.aconfigTextFiles) opts.aconfigTextFiles)
ctx.CheckbuildFile(packageRes)
// Extract assets from the resource package output so that they can be used later in aapt2link // Extract assets from the resource package output so that they can be used later in aapt2link
// for modules that depend on this one. // for modules that depend on this one.
if android.PrefixInList(linkFlags, "-A ") { if android.PrefixInList(linkFlags, "-A ") {
@@ -887,7 +890,6 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
var res android.Paths var res android.Paths
if a.androidLibraryProperties.BuildAAR { if a.androidLibraryProperties.BuildAAR {
BuildAAR(ctx, a.aarFile, a.outputFile, a.manifestPath, a.rTxt, res) BuildAAR(ctx, a.aarFile, a.outputFile, a.manifestPath, a.rTxt, res)
ctx.CheckbuildFile(a.aarFile)
} }
prebuiltJniPackages := android.Paths{} prebuiltJniPackages := android.Paths{}
@@ -1252,10 +1254,12 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
transitiveAssets := android.ReverseSliceInPlace(staticDeps.assets()) transitiveAssets := android.ReverseSliceInPlace(staticDeps.assets())
aapt2Link(ctx, exportPackage, nil, proguardOptionsFile, aaptRTxt, aapt2Link(ctx, exportPackage, nil, proguardOptionsFile, aaptRTxt,
linkFlags, linkDeps, nil, overlayRes, transitiveAssets, nil, nil) linkFlags, linkDeps, nil, overlayRes, transitiveAssets, nil, nil)
ctx.CheckbuildFile(exportPackage)
a.exportPackage = exportPackage a.exportPackage = exportPackage
rJar := android.PathForModuleOut(ctx, "busybox/R.jar") rJar := android.PathForModuleOut(ctx, "busybox/R.jar")
resourceProcessorBusyBoxGenerateBinaryR(ctx, a.rTxt, a.manifest, rJar, nil, true, nil, false) resourceProcessorBusyBoxGenerateBinaryR(ctx, a.rTxt, a.manifest, rJar, nil, true, nil, false)
ctx.CheckbuildFile(rJar)
a.rJar = rJar a.rJar = rJar
aapt2ExtractExtraPackages(ctx, extraAaptPackagesFile, a.rJar) aapt2ExtractExtraPackages(ctx, extraAaptPackagesFile, a.rJar)
@@ -1350,6 +1354,9 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
a.headerJarFile = classpathFile a.headerJarFile = classpathFile
} }
ctx.CheckbuildFile(a.headerJarFile)
ctx.CheckbuildFile(a.implementationJarFile)
android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{
HeaderJars: android.PathsIfNonNil(a.headerJarFile), HeaderJars: android.PathsIfNonNil(a.headerJarFile),
ResourceJars: android.PathsIfNonNil(resourceJarFile), ResourceJars: android.PathsIfNonNil(resourceJarFile),

View File

@@ -1009,6 +1009,8 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
ctx.InstallFile(a.installDir, a.outputFile.Base(), a.outputFile, extraInstalledPaths...) ctx.InstallFile(a.installDir, a.outputFile.Base(), a.outputFile, extraInstalledPaths...)
} }
ctx.CheckbuildFile(a.outputFile)
a.buildAppDependencyInfo(ctx) a.buildAppDependencyInfo(ctx)
providePrebuiltInfo(ctx, providePrebuiltInfo(ctx,

View File

@@ -1272,6 +1272,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
} }
j.headerJarFile = combinedHeaderJarFile j.headerJarFile = combinedHeaderJarFile
ctx.CheckbuildFile(j.headerJarFile)
android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{
HeaderJars: android.PathsIfNonNil(j.headerJarFile), HeaderJars: android.PathsIfNonNil(j.headerJarFile),
TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars, TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars,
@@ -1740,6 +1742,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
j.dexpreopt(ctx, libName, dexOutputFile) j.dexpreopt(ctx, libName, dexOutputFile)
outputFile = dexOutputFile outputFile = dexOutputFile
ctx.CheckbuildFile(dexOutputFile)
} else { } else {
// There is no code to compile into a dex jar, make sure the resources are propagated // There is no code to compile into a dex jar, make sure the resources are propagated
// to the APK if this is an app. // to the APK if this is an app.
@@ -1783,7 +1787,8 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
j.collectTransitiveSrcFiles(ctx, srcFiles) j.collectTransitiveSrcFiles(ctx, srcFiles)
ctx.CheckbuildFile(outputFile) ctx.CheckbuildFile(j.implementationJarFile)
ctx.CheckbuildFile(j.headerJarFile)
android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{ android.SetProvider(ctx, JavaInfoProvider, &JavaInfo{
HeaderJars: android.PathsIfNonNil(j.headerJarFile), HeaderJars: android.PathsIfNonNil(j.headerJarFile),
@@ -1951,6 +1956,8 @@ func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars
TransformJarsToJar(ctx, combinedHeaderJarOutputPath, "for turbine", jars, android.OptionalPath{}, TransformJarsToJar(ctx, combinedHeaderJarOutputPath, "for turbine", jars, android.OptionalPath{},
false, nil, []string{"META-INF/TRANSITIVE"}) false, nil, []string{"META-INF/TRANSITIVE"})
ctx.CheckbuildFile(combinedHeaderJarOutputPath)
return headerJar, combinedHeaderJarOutputPath return headerJar, combinedHeaderJarOutputPath
} }

View File

@@ -489,6 +489,7 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, libName string, dexJa
d.configPath = android.PathForModuleOut(ctx, "dexpreopt", dexJarStem, "dexpreopt.config") d.configPath = android.PathForModuleOut(ctx, "dexpreopt", dexJarStem, "dexpreopt.config")
dexpreopt.WriteModuleConfig(ctx, dexpreoptConfig, d.configPath) dexpreopt.WriteModuleConfig(ctx, dexpreoptConfig, d.configPath)
ctx.CheckbuildFile(d.configPath)
if d.dexpreoptDisabled(ctx, libName) { if d.dexpreoptDisabled(ctx, libName) {
return return
@@ -592,7 +593,8 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, libName string, dexJa
} }
} else if !d.preventInstall { } else if !d.preventInstall {
ctx.InstallFile(installPath, installBase, install.From) // Install without adding to checkbuild to match behavior of previous Make-based checkbuild rules
ctx.InstallFileWithoutCheckbuild(installPath, installBase, install.From)
} }
} }

View File

@@ -2735,6 +2735,8 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs) j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs)
ctx.CheckbuildFile(outputFile)
if ctx.Device() { if ctx.Device() {
// If this is a variant created for a prebuilt_apex then use the dex implementation jar // If this is a variant created for a prebuilt_apex then use the dex implementation jar
// obtained from the associated deapexer module. // obtained from the associated deapexer module.
@@ -2801,6 +2803,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
if ctx.Failed() { if ctx.Failed() {
return return
} }
ctx.CheckbuildFile(dexOutputFile)
// Initialize the hiddenapi structure. // Initialize the hiddenapi structure.
j.initHiddenAPI(ctx, makeDexJarPathFromPath(dexOutputFile), outputFile, j.dexProperties.Uncompress_dex) j.initHiddenAPI(ctx, makeDexJarPathFromPath(dexOutputFile), outputFile, j.dexProperties.Uncompress_dex)

View File

@@ -1595,6 +1595,11 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
module.hostdexInstallFile = module.implLibraryModule.hostdexInstallFile module.hostdexInstallFile = module.implLibraryModule.hostdexInstallFile
} }
if installFilesInfo, ok := android.OtherModuleProvider(ctx, module.implLibraryModule, android.InstallFilesProvider); ok {
if installFilesInfo.CheckbuildTarget != nil {
ctx.CheckbuildFile(installFilesInfo.CheckbuildTarget)
}
}
android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: module.implLibraryModule.uniqueSrcFiles.Strings()}) android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: module.implLibraryModule.uniqueSrcFiles.Strings()})
} }

View File

@@ -947,6 +947,7 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
sourceLib := sourceMod.(*Module).compiler.(*libraryDecorator) sourceLib := sourceMod.(*Module).compiler.(*libraryDecorator)
mod.sourceProvider.setOutputFiles(sourceLib.sourceProvider.Srcs()) mod.sourceProvider.setOutputFiles(sourceLib.sourceProvider.Srcs())
} }
ctx.CheckbuildFile(mod.sourceProvider.Srcs()...)
android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: mod.sourceProvider.Srcs().Strings()}) android.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: mod.sourceProvider.Srcs().Strings()})
} }
@@ -957,15 +958,13 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
return return
} }
mod.outputFile = android.OptionalPathForPath(buildOutput.outputFile) mod.outputFile = android.OptionalPathForPath(buildOutput.outputFile)
ctx.CheckbuildFile(buildOutput.outputFile)
if buildOutput.kytheFile != nil { if buildOutput.kytheFile != nil {
mod.kytheFiles = append(mod.kytheFiles, buildOutput.kytheFile) mod.kytheFiles = append(mod.kytheFiles, buildOutput.kytheFile)
} }
bloaty.MeasureSizeForPaths(ctx, mod.compiler.strippedOutputFilePath(), android.OptionalPathForPath(mod.compiler.unstrippedOutputFilePath())) bloaty.MeasureSizeForPaths(ctx, mod.compiler.strippedOutputFilePath(), android.OptionalPathForPath(mod.compiler.unstrippedOutputFilePath()))
mod.docTimestampFile = mod.compiler.rustdoc(ctx, flags, deps) mod.docTimestampFile = mod.compiler.rustdoc(ctx, flags, deps)
if mod.docTimestampFile.Valid() {
ctx.CheckbuildFile(mod.docTimestampFile.Path())
}
apexInfo, _ := android.ModuleProvider(actx, android.ApexInfoProvider) apexInfo, _ := android.ModuleProvider(actx, android.ApexInfoProvider)
if !proptools.BoolDefault(mod.Installable(), mod.EverInstallable()) && !mod.ProcMacro() { if !proptools.BoolDefault(mod.Installable(), mod.EverInstallable()) && !mod.ProcMacro() {

View File

@@ -211,6 +211,11 @@ func (s *sdk) AndroidMkEntries() []android.AndroidMkEntries {
OutputFile: s.snapshotFile, OutputFile: s.snapshotFile,
DistFiles: android.MakeDefaultDistFiles(s.snapshotFile.Path(), s.infoFile.Path()), DistFiles: android.MakeDefaultDistFiles(s.snapshotFile.Path(), s.infoFile.Path()),
Include: "$(BUILD_PHONY_PACKAGE)", Include: "$(BUILD_PHONY_PACKAGE)",
ExtraEntries: []android.AndroidMkExtraEntriesFunc{
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
entries.SetBool("LOCAL_DONT_CHECK_MODULE", true)
},
},
ExtraFooters: []android.AndroidMkExtraFootersFunc{ ExtraFooters: []android.AndroidMkExtraFootersFunc{
func(w io.Writer, name, prefix, moduleDir string) { func(w io.Writer, name, prefix, moduleDir string) {
// Allow the sdk to be built by simply passing its name on the command line. // Allow the sdk to be built by simply passing its name on the command line.

View File

@@ -563,11 +563,11 @@ be unnecessary as every module in the sdk already has its own licenses property.
} }
builder.infoContents = string(output) builder.infoContents = string(output)
android.WriteFileRuleVerbatim(ctx, info, builder.infoContents) android.WriteFileRuleVerbatim(ctx, info, builder.infoContents)
installedInfo := ctx.InstallFile(android.PathForMainlineSdksInstall(ctx), info.Base(), info) installedInfo := ctx.InstallFileWithoutCheckbuild(android.PathForMainlineSdksInstall(ctx), info.Base(), info)
s.infoFile = android.OptionalPathForPath(installedInfo) s.infoFile = android.OptionalPathForPath(installedInfo)
// Install the zip, making sure that the info file has been installed as well. // Install the zip, making sure that the info file has been installed as well.
installedZip := ctx.InstallFile(android.PathForMainlineSdksInstall(ctx), outputZipFile.Base(), outputZipFile, installedInfo) installedZip := ctx.InstallFileWithoutCheckbuild(android.PathForMainlineSdksInstall(ctx), outputZipFile.Base(), outputZipFile, installedInfo)
s.snapshotFile = android.OptionalPathForPath(installedZip) s.snapshotFile = android.OptionalPathForPath(installedZip)
} }