From 054897952213f87d40a901ed8546ce6375c93347 Mon Sep 17 00:00:00 2001 From: Inseob Kim Date: Thu, 20 Apr 2023 10:16:14 +0900 Subject: Remove deps from Soong intermediate to symbols These should be handled by Makefile dependency (LOCAL_REQUIRED_MODULES). Bug: 278832320 Test: build and see symbol files (cherry picked from https://android-review.googlesource.com/q/commit:5bedfee4484a8786ccd761212057f8aac9a02eb7) Merged-In: I80ad9d8e7e8384e2ae3537cc681bc1d1b327d04c Change-Id: I80ad9d8e7e8384e2ae3537cc681bc1d1b327d04c --- apex/apex_test.go | 15 ++++++++++++--- apex/builder.go | 11 +---------- 2 files changed, 13 insertions(+), 13 deletions(-) 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 -- cgit v1.2.3 From 2b6b7af8f4c760860331352fedd10029b3a79928 Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Tue, 11 Apr 2023 18:20:07 +0900 Subject: Include license information for vendor and host snapshots In addition to the license text files, include license kinds information to json file. Also, use the original paths of license text files that are copied to NOTICE_FILES directory. This will be used when generating snapshots from the snapshot build. Bug: 271539873 Test: m vendor-snapshot Merged-In: I0c0427bb66f2c1fca322d5554aa66220a3b62fb3 Change-Id: I0c0427bb66f2c1fca322d5554aa66220a3b62fb3 (cherry picked from commit 1db9748805147a69792b2a1a556689253c5b82f6) --- cc/util.go | 11 ----------- cc/vendor_snapshot.go | 19 ++++++++----------- etc/prebuilt_etc.go | 27 ++++++++------------------- snapshot/host_snapshot.go | 18 +++++++++++------- snapshot/snapshot.go | 28 ++++++++++++++++++++++++++-- snapshot/snapshot_base.go | 15 +++++++++++++++ snapshot/util.go | 16 ++++++++++++---- 7 files changed, 80 insertions(+), 54 deletions(-) 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 } -- cgit v1.2.3 From ec0e5a3e9706c8dfbe645d5ed37826f59bae4d89 Mon Sep 17 00:00:00 2001 From: Alexei Nicoara Date: Thu, 27 Apr 2023 09:12:44 +0000 Subject: DO NOT MERGE: Changing the udc-dev version to 345990000 The udc-dev version is now lower than the prebuilts b/278817494. Increasing it so it's higher than prebuilts but still low enough, b/231691162 suggested initially to use xx5990000 for x-dev. I've checked tm-dev and the latest prebuilt was 3318, so 3459 prefix should be enough for udc-dev. Change-Id: Idc85a121825aea754b258b306660ca71c6b1fdd9 BUG: 278817494 Ignore-AOSP-First: This change is needed in udc-dev only --- android/updatable_modules.go | 4 ++-- 1 file changed, 2 insertions(+), 2 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" -- cgit v1.2.3