From 886060a6889a91a4c3f612438ba8b2f74ac5a815 Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Tue, 29 Jun 2021 13:36:34 +0100 Subject: [PATCH] Defer error reporting of missing prebuilt dex jar files Unless the prebuilt dex jar files are explicitly required to build system images or dex preopting defer reporting of any missing dex boot jars from Soong to Ninja. This will prevent builds that contain prebuilt sdks, containing prebuilt bootclasspath_fragment modules but without a corresponding apex_set or prebuilt_apex module from failing even when it is not building against the prebuilt sdk. Bug: 179354495 Test: m nothing Merged-In: Ibde3bf840a7413785cd32bd6cea1c322f90c59af Change-Id: Ibde3bf840a7413785cd32bd6cea1c322f90c59af (cherry picked from commit ef083c9556c53738e5d7a3ab791c49ef00501f73) --- java/hiddenapi_modular.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/java/hiddenapi_modular.go b/java/hiddenapi_modular.go index af124842c..c4832d2f8 100644 --- a/java/hiddenapi_modular.go +++ b/java/hiddenapi_modular.go @@ -1161,6 +1161,14 @@ func deferReportingMissingBootDexJar(ctx android.ModuleContext, module android.M return true } + // A bootclasspath module that is part of a versioned sdk never provides a boot dex jar as there + // is no equivalently versioned prebuilt APEX file from which it can be obtained. However, + // versioned bootclasspath modules are processed by Soong so in order to avoid them causing build + // failures missing boot dex jars need to be deferred. + if android.IsModuleInVersionedSdk(ctx.Module()) { + return true + } + // This is called for both platform_bootclasspath and bootclasspath_fragment modules. // // A bootclasspath_fragment module should only use the APEX variant of source or prebuilt modules. @@ -1197,6 +1205,14 @@ func deferReportingMissingBootDexJar(ctx android.ModuleContext, module android.M // // TODO(b/187910671): Remove this once platform variants are no longer created unnecessarily. if android.IsModulePrebuilt(module) { + // An inactive source module can still contribute to the APEX but an inactive prebuilt module + // should not contribute to anything. So, rather than have a missing dex jar cause a Soong + // failure defer the error reporting to Ninja. Unless the prebuilt build target is explicitly + // built Ninja should never use the dex jar file. + if !isActiveModule(module) { + return true + } + if am, ok := module.(android.ApexModule); ok && am.InAnyApex() { apexInfo := ctx.OtherModuleProvider(module, android.ApexInfoProvider).(android.ApexInfo) if apexInfo.IsForPlatform() { @@ -1205,14 +1221,6 @@ func deferReportingMissingBootDexJar(ctx android.ModuleContext, module android.M } } - // A bootclasspath module that is part of a versioned sdk never provides a boot dex jar as there - // is no equivalently versioned prebuilt APEX file from which it can be obtained. However, - // versioned bootclasspath modules are processed by Soong so in order to avoid them causing build - // failures missing boot dex jars need to be deferred. - if android.IsModuleInVersionedSdk(ctx.Module()) { - return true - } - return false }