Loading cc/util.go +0 −11 Original line number Diff line number Diff line Loading @@ -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} Loading cc/vendor_snapshot.go +8 −11 Original line number Diff line number Diff line Loading @@ -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}/ Loading Loading @@ -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) Loading Loading @@ -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() { Loading Loading @@ -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) } } }) Loading @@ -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() { Loading etc/prebuilt_etc.go +8 −19 Original line number Diff line number Diff line Loading @@ -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}/ Loading @@ -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) { Loading @@ -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 } Loading @@ -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 Loading snapshot/host_snapshot.go +11 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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()...), Loading @@ -229,6 +231,8 @@ func hostJsonDesc(m android.Module) *SnapshotJsonFlags { RustProcMacro: procMacro, CrateName: crateName, } props.InitBaseSnapshotProps(m) return props } return nil } snapshot/snapshot.go +26 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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. Loading Loading
cc/util.go +0 −11 Original line number Diff line number Diff line Loading @@ -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} Loading
cc/vendor_snapshot.go +8 −11 Original line number Diff line number Diff line Loading @@ -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}/ Loading Loading @@ -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) Loading Loading @@ -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() { Loading Loading @@ -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) } } }) Loading @@ -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() { Loading
etc/prebuilt_etc.go +8 −19 Original line number Diff line number Diff line Loading @@ -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}/ Loading @@ -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) { Loading @@ -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 } Loading @@ -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 Loading
snapshot/host_snapshot.go +11 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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()...), Loading @@ -229,6 +231,8 @@ func hostJsonDesc(m android.Module) *SnapshotJsonFlags { RustProcMacro: procMacro, CrateName: crateName, } props.InitBaseSnapshotProps(m) return props } return nil }
snapshot/snapshot.go +26 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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. Loading