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:
@@ -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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user