Embed NOTICE output as an APEX asset.

Instead of outputting an aggregated NOTICE file as an intermediate build
resource to allow Make to include it in the final system-wide NOTICE,
process and embed it as an asset in the final APEX. This allows us to
update the NOTICE contents automatically when an APEX is updated.

Fixes: 135218846
Test: Built mainline modules, apex_test.go
Change-Id: Ic851b330fe93be1f602907d44ecc7886c3b0171b
This commit is contained in:
Jaewoong Jung
2019-06-18 13:09:13 -07:00
parent 5b425e2e20
commit 14f5ff62c9
2 changed files with 21 additions and 14 deletions

View File

@@ -394,8 +394,6 @@ type apexBundle struct {
container_certificate_file android.Path
container_private_key_file android.Path
mergedNoticeFile android.WritablePath
// list of files to be included in this apex
filesInfo []apexFile
@@ -828,8 +826,6 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
a.installDir = android.PathForModuleInstall(ctx, "apex")
a.filesInfo = filesInfo
a.buildNoticeFile(ctx)
if a.apexTypes.zip() {
a.buildUnflattenedApex(ctx, zipApex)
}
@@ -843,7 +839,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}
}
func (a *apexBundle) buildNoticeFile(ctx android.ModuleContext) {
func (a *apexBundle) buildNoticeFile(ctx android.ModuleContext, apexFileName string) android.OptionalPath {
noticeFiles := []android.Path{}
for _, f := range a.filesInfo {
if f.module != nil {
@@ -858,10 +854,12 @@ func (a *apexBundle) buildNoticeFile(ctx android.ModuleContext) {
noticeFiles = append(noticeFiles, a.NoticeFile().Path())
}
if len(noticeFiles) > 0 {
a.mergedNoticeFile = android.PathForModuleOut(ctx, "NOTICE")
android.MergeNotices(ctx, a.mergedNoticeFile, noticeFiles)
if len(noticeFiles) == 0 {
return android.OptionalPath{}
}
return android.OptionalPathForPath(
android.BuildNoticeOutput(ctx, a.installDir, apexFileName, android.FirstUniquePaths(noticeFiles)))
}
func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext, apexType apexPackaging) {
@@ -986,6 +984,13 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext, apexType ap
}
optFlags = append(optFlags, "--target_sdk_version "+targetSdkVersion)
noticeFile := a.buildNoticeFile(ctx, ctx.ModuleName()+suffix)
if noticeFile.Valid() {
// If there's a NOTICE file, embed it as an asset file in the APEX.
implicitInputs = append(implicitInputs, noticeFile.Path())
optFlags = append(optFlags, "--assets_dir "+filepath.Dir(noticeFile.String()))
}
ctx.Build(pctx, android.BuildParams{
Rule: apexRule,
Implicits: implicitInputs,
@@ -1232,9 +1237,6 @@ func (a *apexBundle) androidMkForType(apexType apexPackaging) android.AndroidMkD
fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join("$(OUT_DIR)", a.installDir.RelPathString()))
fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", name+apexType.suffix())
fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE :=", !a.installable())
if a.installable() && a.mergedNoticeFile != nil {
fmt.Fprintln(w, "LOCAL_NOTICE_FILE :=", a.mergedNoticeFile.String())
}
if len(moduleNames) > 0 {
fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " "))
}