diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-04-27 23:01:19 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-04-27 23:01:19 +0000 |
commit | 917cc066668c3fcbe6b476a8b31eb732e0283e4c (patch) | |
tree | fa427ed98170479aadeb5e687ae7791ed9c00437 | |
parent | 8ad2d8af893830796e497d3710c98349b7ad0472 (diff) | |
parent | ec0e5a3e9706c8dfbe645d5ed37826f59bae4d89 (diff) | |
download | soong-917cc066668c3fcbe6b476a8b31eb732e0283e4c.tar.gz |
Snap for 10025836 from ec0e5a3e9706c8dfbe645d5ed37826f59bae4d89 to udc-release
Change-Id: I4745cb2d7c7426e8fc9600fd08ffd3aab4daa683
-rw-r--r-- | android/updatable_modules.go | 4 | ||||
-rw-r--r-- | apex/apex_test.go | 15 | ||||
-rw-r--r-- | apex/builder.go | 11 | ||||
-rw-r--r-- | cc/util.go | 11 | ||||
-rw-r--r-- | cc/vendor_snapshot.go | 19 | ||||
-rw-r--r-- | etc/prebuilt_etc.go | 27 | ||||
-rw-r--r-- | snapshot/host_snapshot.go | 18 | ||||
-rw-r--r-- | snapshot/snapshot.go | 28 | ||||
-rw-r--r-- | snapshot/snapshot_base.go | 15 | ||||
-rw-r--r-- | snapshot/util.go | 16 |
10 files changed, 95 insertions, 69 deletions
diff --git a/android/updatable_modules.go b/android/updatable_modules.go index 6d0eeb716..1de73c4f8 100644 --- a/android/updatable_modules.go +++ b/android/updatable_modules.go @@ -29,8 +29,8 @@ package android // based on the branch such that the builds from testing and development // branches will have a version higher than the prebuilts. // Versions per branch: -// * x-dev - xx0090000 (where xx is the branch SDK level) +// * x-dev - xx5990000 (where xx is the branch SDK level) // * AOSP - xx9990000 // * x-mainline-prod - xx9990000 // * master - 990090000 -const DefaultUpdatableModuleVersion = "340090000" +const DefaultUpdatableModuleVersion = "345990000" diff --git a/apex/apex_test.go b/apex/apex_test.go index 4e063cb73..440afec97 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -5716,6 +5716,7 @@ func TestPrebuiltSkipsSymbols(t *testing.T) { // Source module apex { name: "myapex", + binaries: ["foo"], key: "myapex.key", updatable: false, } @@ -5731,11 +5732,19 @@ func TestPrebuiltSkipsSymbols(t *testing.T) { set: "myapex.apks", `+preferProperty+` } + + cc_binary { + name: "foo", + srcs: ["mylib.cpp"], + system_shared_libs: [], + stl: "none", + apex_available: [ "myapex" ], + } `) // Symbol files are installed by installing entries under ${OUT}/apex/{apex name} - android.AssertStringListContainsEquals(t, "Implicits", - ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule").Implicits.Strings(), - "out/soong/target/product/test_device/apex/myapex/apex_manifest.pb", + android.AssertStringListContainsEquals(t, "Installs", + ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().FilesToInstall().Strings(), + filepath.Join(ctx.Config().SoongOutDir(), "target/product/test_device/apex/myapex/bin/foo"), tc.installSymbolFiles) }) } diff --git a/apex/builder.go b/apex/builder.go index 2f8a4ec09..3c7671b00 100644 --- a/apex/builder.go +++ b/apex/builder.go @@ -517,9 +517,6 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { } } implicitInputs = append(implicitInputs, fi.builtFile) - if installSymbolFiles { - implicitInputs = append(implicitInputs, installedPath) - } // Create additional symlinks pointing the file inside the APEX (if any). Note that // this is independent from the symlink optimization. @@ -527,8 +524,7 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { symlinkDest := imageDir.Join(ctx, symlinkPath).String() copyCommands = append(copyCommands, "ln -sfn "+filepath.Base(destPath)+" "+symlinkDest) if installSymbolFiles { - installedSymlink := ctx.InstallSymlink(apexDir.Join(ctx, filepath.Dir(symlinkPath)), filepath.Base(symlinkPath), installedPath) - implicitInputs = append(implicitInputs, installedSymlink) + ctx.InstallSymlink(apexDir.Join(ctx, filepath.Dir(symlinkPath)), filepath.Base(symlinkPath), installedPath) } } @@ -553,11 +549,6 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext) { installMapSet[installMapPath.String()+":"+fi.installDir+"/"+fi.builtFile.Base()] = true } implicitInputs = append(implicitInputs, a.manifestPbOut) - if installSymbolFiles { - installedManifest := ctx.InstallFile(apexDir, "apex_manifest.pb", a.manifestPbOut) - installedKey := ctx.InstallFile(apexDir, "apex_pubkey", a.publicKeyFile) - implicitInputs = append(implicitInputs, installedManifest, installedKey) - } if len(installMapSet) > 0 { var installs []string diff --git a/cc/util.go b/cc/util.go index aa0f6b5d6..6d8ac435f 100644 --- a/cc/util.go +++ b/cc/util.go @@ -100,17 +100,6 @@ func makeSymlinkCmd(linkDirOnDevice string, linkName string, target string) stri "ln -sf " + target + " " + filepath.Join(dir, linkName) } -func combineNoticesRule(ctx android.SingletonContext, paths android.Paths, out string) android.OutputPath { - outPath := android.PathForOutput(ctx, out) - ctx.Build(pctx, android.BuildParams{ - Rule: android.Cat, - Inputs: paths, - Output: outPath, - Description: "combine notices for " + out, - }) - return outPath -} - // Dump a map to a list file as: // // {key1} {value1} diff --git a/cc/vendor_snapshot.go b/cc/vendor_snapshot.go index aed37753a..e6e566025 100644 --- a/cc/vendor_snapshot.go +++ b/cc/vendor_snapshot.go @@ -160,7 +160,7 @@ type snapshotJsonFlags struct { MinSdkVersion string `json:",omitempty"` } -var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotSingleton, ctx android.SingletonContext, snapshotArchDir string) android.Paths { +var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotSingleton, ctx android.SingletonContext, snapshotArchDir string) snapshot.SnapshotPaths { /* Vendor snapshot zipped artifacts directory structure for cc modules: {SNAPSHOT_ARCH}/ @@ -195,10 +195,10 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS */ var snapshotOutputs android.Paths + var snapshotNotices android.Paths includeDir := filepath.Join(snapshotArchDir, "include") configsDir := filepath.Join(snapshotArchDir, "configs") - noticeDir := filepath.Join(snapshotArchDir, "NOTICE_FILES") installedNotices := make(map[string]bool) installedConfigs := make(map[string]bool) @@ -228,7 +228,7 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS prop := snapshotJsonFlags{} // Common properties among snapshots. - prop.ModuleName = ctx.ModuleName(m) + prop.InitBaseSnapshotPropsWithName(m, ctx.ModuleName(m)) if supportsVndkExt(s.Image) && m.IsVndkExt() { // vndk exts are installed to /vendor/lib(64)?/vndk(-sp)? if m.IsVndkSp() { @@ -406,13 +406,10 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS headers = append(headers, m.SnapshotHeaders()...) } - if len(m.EffectiveLicenseFiles()) > 0 { - noticeName := ctx.ModuleName(m) + ".txt" - noticeOut := filepath.Join(noticeDir, noticeName) - // skip already copied notice file - if !installedNotices[noticeOut] { - installedNotices[noticeOut] = true - snapshotOutputs = append(snapshotOutputs, combineNoticesRule(ctx, m.EffectiveLicenseFiles(), noticeOut)) + for _, notice := range m.EffectiveLicenseFiles() { + if _, ok := installedNotices[notice.String()]; !ok { + installedNotices[notice.String()] = true + snapshotNotices = append(snapshotNotices, notice) } } }) @@ -422,7 +419,7 @@ var ccSnapshotAction snapshot.GenerateSnapshotAction = func(s snapshot.SnapshotS snapshotOutputs = append(snapshotOutputs, copyFile(ctx, header, filepath.Join(includeDir, header.String()), s.Fake)) } - return snapshotOutputs + return snapshot.SnapshotPaths{OutputFiles: snapshotOutputs, NoticeFiles: snapshotNotices} } func init() { diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go index dcd7fdcb9..6817dcef0 100644 --- a/etc/prebuilt_etc.go +++ b/etc/prebuilt_etc.go @@ -617,7 +617,7 @@ func isSnapshotAware(ctx android.SingletonContext, m *PrebuiltEtc, image snapsho return true } -func generatePrebuiltSnapshot(s snapshot.SnapshotSingleton, ctx android.SingletonContext, snapshotArchDir string) android.Paths { +func generatePrebuiltSnapshot(s snapshot.SnapshotSingleton, ctx android.SingletonContext, snapshotArchDir string) snapshot.SnapshotPaths { /* Snapshot zipped artifacts directory structure for etc modules: {SNAPSHOT_ARCH}/ @@ -631,7 +631,7 @@ func generatePrebuiltSnapshot(s snapshot.SnapshotSingleton, ctx android.Singleto (notice files) */ var snapshotOutputs android.Paths - noticeDir := filepath.Join(snapshotArchDir, "NOTICE_FILES") + var snapshotNotices android.Paths installedNotices := make(map[string]bool) ctx.VisitAllModules(func(module android.Module) { @@ -651,7 +651,7 @@ func generatePrebuiltSnapshot(s snapshot.SnapshotSingleton, ctx android.Singleto prop := snapshot.SnapshotJsonFlags{} propOut := snapshotLibOut + ".json" - prop.ModuleName = m.BaseModuleName() + prop.InitBaseSnapshotProps(m) if m.subdirProperties.Relative_install_path != nil { prop.RelativeInstallPath = *m.subdirProperties.Relative_install_path } @@ -667,27 +667,16 @@ func generatePrebuiltSnapshot(s snapshot.SnapshotSingleton, ctx android.Singleto } snapshotOutputs = append(snapshotOutputs, snapshot.WriteStringToFileRule(ctx, string(j), propOut)) - if len(m.EffectiveLicenseFiles()) > 0 { - noticeName := ctx.ModuleName(m) + ".txt" - noticeOut := filepath.Join(noticeDir, noticeName) - // skip already copied notice file - if !installedNotices[noticeOut] { - installedNotices[noticeOut] = true - - noticeOutPath := android.PathForOutput(ctx, noticeOut) - ctx.Build(pctx, android.BuildParams{ - Rule: android.Cat, - Inputs: m.EffectiveLicenseFiles(), - Output: noticeOutPath, - Description: "combine notices for " + noticeOut, - }) - snapshotOutputs = append(snapshotOutputs, noticeOutPath) + for _, notice := range m.EffectiveLicenseFiles() { + if _, ok := installedNotices[notice.String()]; !ok { + installedNotices[notice.String()] = true + snapshotNotices = append(snapshotNotices, notice) } } }) - return snapshotOutputs + return snapshot.SnapshotPaths{OutputFiles: snapshotOutputs, NoticeFiles: snapshotNotices} } // For Bazel / bp2build diff --git a/snapshot/host_snapshot.go b/snapshot/host_snapshot.go index 9793218a3..edcc16348 100644 --- a/snapshot/host_snapshot.go +++ b/snapshot/host_snapshot.go @@ -96,6 +96,7 @@ func (f *hostSnapshot) CreateMetaData(ctx android.ModuleContext, fileName string var jsonData []SnapshotJsonFlags var metaPaths android.Paths + installedNotices := make(map[string]bool) metaZipFile := android.PathForModuleOut(ctx, fileName).OutputPath // Create JSON file based on the direct dependencies @@ -104,12 +105,14 @@ func (f *hostSnapshot) CreateMetaData(ctx android.ModuleContext, fileName string if desc != nil { jsonData = append(jsonData, *desc) } - if len(dep.EffectiveLicenseFiles()) > 0 { - noticeFile := android.PathForModuleOut(ctx, "NOTICE_FILES", dep.Name()+".txt").OutputPath - android.CatFileRule(ctx, dep.EffectiveLicenseFiles(), noticeFile) - metaPaths = append(metaPaths, noticeFile) + for _, notice := range dep.EffectiveLicenseFiles() { + if _, ok := installedNotices[notice.String()]; !ok { + installedNotices[notice.String()] = true + noticeOut := android.PathForModuleOut(ctx, "NOTICE_FILES", notice.String()).OutputPath + CopyFileToOutputPathRule(pctx, ctx, notice, noticeOut) + metaPaths = append(metaPaths, noticeOut) + } } - }) // Sort notice paths and json data for repeatble build sort.Slice(jsonData, func(i, j int) bool { @@ -220,8 +223,7 @@ func hostJsonDesc(m android.Module) *SnapshotJsonFlags { } if path.Valid() && path.String() != "" { - return &SnapshotJsonFlags{ - ModuleName: m.Name(), + props := &SnapshotJsonFlags{ ModuleStemName: moduleStem, Filename: path.String(), Required: append(m.HostRequiredModuleNames(), m.RequiredModuleNames()...), @@ -229,6 +231,8 @@ func hostJsonDesc(m android.Module) *SnapshotJsonFlags { RustProcMacro: procMacro, CrateName: crateName, } + props.InitBaseSnapshotProps(m) + return props } return nil } diff --git a/snapshot/snapshot.go b/snapshot/snapshot.go index 206ecc947..c95a53774 100644 --- a/snapshot/snapshot.go +++ b/snapshot/snapshot.go @@ -26,6 +26,10 @@ import ( var pctx = android.NewPackageContext("android/soong/snapshot") +func init() { + pctx.Import("android/soong/android") +} + type SnapshotSingleton struct { // Name, e.g., "vendor", "recovery", "ramdisk". name string @@ -48,8 +52,18 @@ type SnapshotSingleton struct { Fake bool } +// The output files to be included in the snapshot. +type SnapshotPaths struct { + // All files to be included in the snapshot + OutputFiles android.Paths + + // Notice files of the snapshot output files + NoticeFiles android.Paths +} + // Interface of function to capture snapshot from each module -type GenerateSnapshotAction func(snapshot SnapshotSingleton, ctx android.SingletonContext, snapshotArchDir string) android.Paths +// Returns snapshot ouputs and notice files. +type GenerateSnapshotAction func(snapshot SnapshotSingleton, ctx android.SingletonContext, snapshotArchDir string) SnapshotPaths var snapshotActionList []GenerateSnapshotAction @@ -74,9 +88,19 @@ func (c *SnapshotSingleton) GenerateBuildActions(ctx android.SingletonContext) { snapshotDir = filepath.Join("fake", snapshotDir) } snapshotArchDir := filepath.Join(snapshotDir, ctx.DeviceConfig().DeviceArch()) + noticeDir := filepath.Join(snapshotArchDir, "NOTICE_FILES") + installedNotices := make(map[string]bool) for _, f := range snapshotActionList { - snapshotOutputs = append(snapshotOutputs, f(*c, ctx, snapshotArchDir)...) + snapshotPaths := f(*c, ctx, snapshotArchDir) + snapshotOutputs = append(snapshotOutputs, snapshotPaths.OutputFiles...) + for _, notice := range snapshotPaths.NoticeFiles { + if _, ok := installedNotices[notice.String()]; !ok { + installedNotices[notice.String()] = true + snapshotOutputs = append(snapshotOutputs, CopyFileRule( + pctx, ctx, notice, filepath.Join(noticeDir, notice.String()))) + } + } } // All artifacts are ready. Sort them to normalize ninja and then zip. diff --git a/snapshot/snapshot_base.go b/snapshot/snapshot_base.go index 809ca3d11..fb4ee0c83 100644 --- a/snapshot/snapshot_base.go +++ b/snapshot/snapshot_base.go @@ -120,4 +120,19 @@ type SnapshotJsonFlags struct { // dependencies Required []string `json:",omitempty"` Overrides []string `json:",omitempty"` + + // license information + LicenseKinds []string `json:",omitempty"` + LicenseTexts []string `json:",omitempty"` +} + +func (prop *SnapshotJsonFlags) InitBaseSnapshotPropsWithName(m android.Module, name string) { + prop.ModuleName = name + + prop.LicenseKinds = m.EffectiveLicenseKinds() + prop.LicenseTexts = m.EffectiveLicenseFiles().Strings() +} + +func (prop *SnapshotJsonFlags) InitBaseSnapshotProps(m android.Module) { + prop.InitBaseSnapshotPropsWithName(m, m.Name()) } diff --git a/snapshot/util.go b/snapshot/util.go index 806ac90fa..c87c508e6 100644 --- a/snapshot/util.go +++ b/snapshot/util.go @@ -21,17 +21,25 @@ func WriteStringToFileRule(ctx android.SingletonContext, content, out string) an return outPath } -func CopyFileRule(pctx android.PackageContext, ctx android.SingletonContext, path android.Path, out string) android.OutputPath { - outPath := android.PathForOutput(ctx, out) +type buildContext interface { + Build(pctx android.PackageContext, params android.BuildParams) +} + +func CopyFileToOutputPathRule(pctx android.PackageContext, ctx buildContext, path android.Path, outPath android.OutputPath) { ctx.Build(pctx, android.BuildParams{ Rule: android.Cp, Input: path, Output: outPath, - Description: "copy " + path.String() + " -> " + out, + Description: "copy " + path.String() + " -> " + outPath.String(), Args: map[string]string{ - "cpFlags": "-f -L", + "cpFlags": "-L", }, }) +} + +func CopyFileRule(pctx android.PackageContext, ctx android.SingletonContext, path android.Path, out string) android.OutputPath { + outPath := android.PathForOutput(ctx, out) + CopyFileToOutputPathRule(pctx, ctx, path, outPath) return outPath } |