Merge "Dist build.ninja and Android.bp.list" am: 3e2a34dd8d

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1350603

Change-Id: I1f9b292bb8e3e39e0c8df67088ad96293cc7dd97
This commit is contained in:
Treehugger Robot
2020-06-25 22:38:46 +00:00
committed by Automerger Merge Worker
5 changed files with 99 additions and 8 deletions

View File

@@ -243,6 +243,8 @@ func Build(ctx Context, config Config, what int) {
// Write combined ninja file // Write combined ninja file
createCombinedBuildNinjaFile(ctx, config) createCombinedBuildNinjaFile(ctx, config)
distGzipFile(ctx, config, config.CombinedNinjaFile())
if what&RunBuildTests != 0 { if what&RunBuildTests != 0 {
testForDanglingRules(ctx, config) testForDanglingRules(ctx, config)
} }
@@ -256,3 +258,47 @@ func Build(ctx Context, config Config, what int) {
runNinja(ctx, config) runNinja(ctx, config)
} }
} }
// distGzipFile writes a compressed copy of src to the distDir if dist is enabled. Failures
// are printed but non-fatal.
func distGzipFile(ctx Context, config Config, src string, subDirs ...string) {
if !config.Dist() {
return
}
subDir := filepath.Join(subDirs...)
destDir := filepath.Join(config.DistDir(), "soong_ui", subDir)
err := os.MkdirAll(destDir, 0777)
if err != nil {
ctx.Printf("failed to mkdir %s: %s", destDir, err.Error())
}
err = gzipFileToDir(src, destDir)
if err != nil {
ctx.Printf("failed to dist %s: %s", filepath.Base(src), err.Error())
}
}
// distFile writes a copy of src to the distDir if dist is enabled. Failures are printed but
// non-fatal.
func distFile(ctx Context, config Config, src string, subDirs ...string) {
if !config.Dist() {
return
}
subDir := filepath.Join(subDirs...)
destDir := filepath.Join(config.DistDir(), "soong_ui", subDir)
err := os.MkdirAll(destDir, 0777)
if err != nil {
ctx.Printf("failed to mkdir %s: %s", destDir, err.Error())
}
_, err = copyFile(src, filepath.Join(destDir, filepath.Base(src)))
if err != nil {
ctx.Printf("failed to dist %s: %s", filepath.Base(src), err.Error())
}
}

View File

@@ -86,7 +86,7 @@ func FindSources(ctx Context, config Config, f *finder.Finder) {
os.MkdirAll(dumpDir, 0777) os.MkdirAll(dumpDir, 0777)
androidMks := f.FindFirstNamedAt(".", "Android.mk") androidMks := f.FindFirstNamedAt(".", "Android.mk")
err := dumpListToFile(androidMks, filepath.Join(dumpDir, "Android.mk.list")) err := dumpListToFile(ctx, config, androidMks, filepath.Join(dumpDir, "Android.mk.list"))
if err != nil { if err != nil {
ctx.Fatalf("Could not export module list: %v", err) ctx.Fatalf("Could not export module list: %v", err)
} }
@@ -94,25 +94,25 @@ func FindSources(ctx Context, config Config, f *finder.Finder) {
androidProductsMks := f.FindNamedAt("device", "AndroidProducts.mk") androidProductsMks := f.FindNamedAt("device", "AndroidProducts.mk")
androidProductsMks = append(androidProductsMks, f.FindNamedAt("vendor", "AndroidProducts.mk")...) androidProductsMks = append(androidProductsMks, f.FindNamedAt("vendor", "AndroidProducts.mk")...)
androidProductsMks = append(androidProductsMks, f.FindNamedAt("product", "AndroidProducts.mk")...) androidProductsMks = append(androidProductsMks, f.FindNamedAt("product", "AndroidProducts.mk")...)
err = dumpListToFile(androidProductsMks, filepath.Join(dumpDir, "AndroidProducts.mk.list")) err = dumpListToFile(ctx, config, androidProductsMks, filepath.Join(dumpDir, "AndroidProducts.mk.list"))
if err != nil { if err != nil {
ctx.Fatalf("Could not export product list: %v", err) ctx.Fatalf("Could not export product list: %v", err)
} }
cleanSpecs := f.FindFirstNamedAt(".", "CleanSpec.mk") cleanSpecs := f.FindFirstNamedAt(".", "CleanSpec.mk")
err = dumpListToFile(cleanSpecs, filepath.Join(dumpDir, "CleanSpec.mk.list")) err = dumpListToFile(ctx, config, cleanSpecs, filepath.Join(dumpDir, "CleanSpec.mk.list"))
if err != nil { if err != nil {
ctx.Fatalf("Could not export module list: %v", err) ctx.Fatalf("Could not export module list: %v", err)
} }
owners := f.FindNamedAt(".", "OWNERS") owners := f.FindNamedAt(".", "OWNERS")
err = dumpListToFile(owners, filepath.Join(dumpDir, "OWNERS.list")) err = dumpListToFile(ctx, config, owners, filepath.Join(dumpDir, "OWNERS.list"))
if err != nil { if err != nil {
ctx.Fatalf("Could not find OWNERS: %v", err) ctx.Fatalf("Could not find OWNERS: %v", err)
} }
testMappings := f.FindNamedAt(".", "TEST_MAPPING") testMappings := f.FindNamedAt(".", "TEST_MAPPING")
err = dumpListToFile(testMappings, filepath.Join(dumpDir, "TEST_MAPPING.list")) err = dumpListToFile(ctx, config, testMappings, filepath.Join(dumpDir, "TEST_MAPPING.list"))
if err != nil { if err != nil {
ctx.Fatalf("Could not find TEST_MAPPING: %v", err) ctx.Fatalf("Could not find TEST_MAPPING: %v", err)
} }
@@ -122,18 +122,24 @@ func FindSources(ctx Context, config Config, f *finder.Finder) {
if len(androidBps) == 0 { if len(androidBps) == 0 {
ctx.Fatalf("No Android.bp found") ctx.Fatalf("No Android.bp found")
} }
err = dumpListToFile(androidBps, filepath.Join(dumpDir, "Android.bp.list")) err = dumpListToFile(ctx, config, androidBps, filepath.Join(dumpDir, "Android.bp.list"))
if err != nil { if err != nil {
ctx.Fatalf("Could not find modules: %v", err) ctx.Fatalf("Could not find modules: %v", err)
} }
} }
func dumpListToFile(list []string, filePath string) (err error) { func dumpListToFile(ctx Context, config Config, list []string, filePath string) (err error) {
desiredText := strings.Join(list, "\n") desiredText := strings.Join(list, "\n")
desiredBytes := []byte(desiredText) desiredBytes := []byte(desiredText)
actualBytes, readErr := ioutil.ReadFile(filePath) actualBytes, readErr := ioutil.ReadFile(filePath)
if readErr != nil || !bytes.Equal(desiredBytes, actualBytes) { if readErr != nil || !bytes.Equal(desiredBytes, actualBytes) {
err = ioutil.WriteFile(filePath, desiredBytes, 0777) err = ioutil.WriteFile(filePath, desiredBytes, 0777)
} if err != nil {
return err return err
}
}
distFile(ctx, config, filePath, "module_paths")
return nil
} }

View File

@@ -156,6 +156,8 @@ func runKatiBuild(ctx Context, config Config) {
runKati(ctx, config, katiBuildSuffix, args, func(env *Environment) {}) runKati(ctx, config, katiBuildSuffix, args, func(env *Environment) {})
distGzipFile(ctx, config, config.KatiBuildNinjaFile())
cleanCopyHeaders(ctx, config) cleanCopyHeaders(ctx, config)
cleanOldInstalledFiles(ctx, config) cleanOldInstalledFiles(ctx, config)
} }
@@ -251,6 +253,8 @@ func runKatiPackage(ctx Context, config Config) {
env.Set("DIST_DIR", config.DistDir()) env.Set("DIST_DIR", config.DistDir())
} }
}) })
distGzipFile(ctx, config, config.KatiPackageNinjaFile())
} }
func runKatiCleanSpec(ctx Context, config Config) { func runKatiCleanSpec(ctx Context, config Config) {

View File

@@ -139,6 +139,13 @@ func runSoong(ctx Context, config Config) {
soongBuildMetrics := loadSoongBuildMetrics(ctx, config) soongBuildMetrics := loadSoongBuildMetrics(ctx, config)
logSoongBuildMetrics(ctx, soongBuildMetrics) logSoongBuildMetrics(ctx, soongBuildMetrics)
distGzipFile(ctx, config, config.SoongNinjaFile(), "soong")
if !config.SkipMake() {
distGzipFile(ctx, config, config.SoongAndroidMk(), "soong")
distGzipFile(ctx, config, config.SoongMakeVarsMk(), "soong")
}
if ctx.Metrics != nil { if ctx.Metrics != nil {
ctx.Metrics.SetSoongBuildMetrics(soongBuildMetrics) ctx.Metrics.SetSoongBuildMetrics(soongBuildMetrics)
} }

View File

@@ -15,6 +15,8 @@
package build package build
import ( import (
"compress/gzip"
"fmt"
"io" "io"
"os" "os"
"path/filepath" "path/filepath"
@@ -142,3 +144,29 @@ func copyFile(src, dst string) (int64, error) {
return io.Copy(destination, source) return io.Copy(destination, source)
} }
// gzipFileToDir writes a compressed copy of src to destDir with the suffix ".gz".
func gzipFileToDir(src, destDir string) error {
in, err := os.Open(src)
if err != nil {
return fmt.Errorf("failed to open %s: %s", src, err.Error())
}
defer in.Close()
dest := filepath.Join(destDir, filepath.Base(src)+".gz")
out, err := os.OpenFile(dest, os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
return fmt.Errorf("failed to open %s: %s", dest, err.Error())
}
defer out.Close()
gz := gzip.NewWriter(out)
defer gz.Close()
_, err = io.Copy(gz, in)
if err != nil {
return fmt.Errorf("failed to gzip %s: %s", dest, err.Error())
}
return nil
}