Fix: Flattend APEX is breaking build
When TARGET_FLATTEN_APEX=true, individual files in an APEX are exported to make. However, because they lack LOCAL_SOONG_CLASSES_JAR, soong_java_prebuilt.mk get confused and the build breaks. Fixing the bug by correctly emitting LOCAL_SOONG_CLASSES_JAR and LOCAL_SOONG_HEADER_JAR. Test: TARGET_FLATTEN_APEX=true m out/target/common/obj/JAVA_LIBRARIES/com.android.conscrypt.conscrypt_intermediates/classes.jar Change-Id: I65ce86ec825f978a43715146bbd5c1d5af513de0
This commit is contained in:
16
apex/apex.go
16
apex/apex.go
@@ -328,6 +328,7 @@ type apexFile struct {
|
||||
archType android.ArchType
|
||||
installDir string
|
||||
class apexFileClass
|
||||
module android.Module
|
||||
}
|
||||
|
||||
type apexBundle struct {
|
||||
@@ -517,7 +518,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
case sharedLibTag:
|
||||
if cc, ok := child.(*cc.Module); ok {
|
||||
fileToCopy, dirInApex := getCopyManifestForNativeLibrary(cc)
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, cc.Arch().ArchType, dirInApex, nativeSharedLib})
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, cc.Arch().ArchType, dirInApex, nativeSharedLib, cc})
|
||||
return true
|
||||
} else {
|
||||
ctx.PropertyErrorf("native_shared_libs", "%q is not a cc_library or cc_library_shared module", depName)
|
||||
@@ -525,7 +526,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
case executableTag:
|
||||
if cc, ok := child.(*cc.Module); ok {
|
||||
fileToCopy, dirInApex := getCopyManifestForExecutable(cc)
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, cc.Arch().ArchType, dirInApex, nativeExecutable})
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, cc.Arch().ArchType, dirInApex, nativeExecutable, cc})
|
||||
return true
|
||||
} else {
|
||||
ctx.PropertyErrorf("binaries", "%q is not a cc_binary module", depName)
|
||||
@@ -536,7 +537,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
if fileToCopy == nil {
|
||||
ctx.PropertyErrorf("java_libs", "%q is not configured to be compiled into dex", depName)
|
||||
} else {
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, java.Arch().ArchType, dirInApex, javaSharedLib})
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, java.Arch().ArchType, dirInApex, javaSharedLib, java})
|
||||
}
|
||||
return true
|
||||
} else {
|
||||
@@ -545,7 +546,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
case prebuiltTag:
|
||||
if prebuilt, ok := child.(*android.PrebuiltEtc); ok {
|
||||
fileToCopy, dirInApex := getCopyManifestForPrebuiltEtc(prebuilt)
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, prebuilt.Arch().ArchType, dirInApex, etc})
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, prebuilt.Arch().ArchType, dirInApex, etc, prebuilt})
|
||||
return true
|
||||
} else {
|
||||
ctx.PropertyErrorf("prebuilts", "%q is not a prebuilt_etc module", depName)
|
||||
@@ -574,7 +575,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
}
|
||||
depName := ctx.OtherModuleName(child)
|
||||
fileToCopy, dirInApex := getCopyManifestForNativeLibrary(cc)
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, cc.Arch().ArchType, dirInApex, nativeSharedLib})
|
||||
filesInfo = append(filesInfo, apexFile{fileToCopy, depName, cc.Arch().ArchType, dirInApex, nativeSharedLib, cc})
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -793,7 +794,7 @@ func (a *apexBundle) buildFlattenedApex(ctx android.ModuleContext) {
|
||||
// For flattened APEX, do nothing but make sure that apex_manifest.json file is also copied along
|
||||
// with other ordinary files.
|
||||
manifest := android.PathForModuleSrc(ctx, proptools.StringDefault(a.properties.Manifest, "apex_manifest.json"))
|
||||
a.filesInfo = append(a.filesInfo, apexFile{manifest, ctx.ModuleName() + ".apex_manifest.json", android.Common, ".", etc})
|
||||
a.filesInfo = append(a.filesInfo, apexFile{manifest, ctx.ModuleName() + ".apex_manifest.json", android.Common, ".", etc, nil})
|
||||
|
||||
for _, fi := range a.filesInfo {
|
||||
dir := filepath.Join("apex", ctx.ModuleName(), fi.installDir)
|
||||
@@ -849,6 +850,9 @@ func (a *apexBundle) androidMkForType(apexType apexPackaging) android.AndroidMkD
|
||||
fmt.Fprintln(w, "LOCAL_MODULE_TARGET_ARCH :=", archStr)
|
||||
}
|
||||
if fi.class == javaSharedLib {
|
||||
javaModule := fi.module.(*java.Library)
|
||||
fmt.Fprintln(w, "LOCAL_SOONG_CLASSES_JAR :=", javaModule.ImplementationAndResourcesJars()[0].String())
|
||||
fmt.Fprintln(w, "LOCAL_SOONG_HEADER_JAR :=", javaModule.HeaderJars()[0].String())
|
||||
fmt.Fprintln(w, "LOCAL_SOONG_DEX_JAR :=", fi.builtFile.String())
|
||||
fmt.Fprintln(w, "LOCAL_DEX_PREOPT := false")
|
||||
fmt.Fprintln(w, "include $(BUILD_SYSTEM)/soong_java_prebuilt.mk")
|
||||
|
Reference in New Issue
Block a user