Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 928cb6d5 authored by Yu Liu's avatar Yu Liu Committed by Gerrit Code Review
Browse files

Merge "Write ninja file in parallel." into main

parents 1c07aaac 1b2ddc80
Loading
Loading
Loading
Loading
+4 −18
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import (
	"sort"
	"strings"
	"sync"

	"github.com/google/blueprint/proptools"
)

// CopyOf returns a new slice that has the same contents as s.
@@ -542,25 +544,9 @@ func SplitFileExt(name string) (string, string, string) {
	return root, suffix, ext
}

func shard[T ~[]E, E any](toShard T, shardSize int) []T {
	if len(toShard) == 0 {
		return nil
	}

	ret := make([]T, 0, (len(toShard)+shardSize-1)/shardSize)
	for len(toShard) > shardSize {
		ret = append(ret, toShard[0:shardSize])
		toShard = toShard[shardSize:]
	}
	if len(toShard) > 0 {
		ret = append(ret, toShard)
	}
	return ret
}

// ShardPaths takes a Paths, and returns a slice of Paths where each one has at most shardSize paths.
func ShardPaths(paths Paths, shardSize int) []Paths {
	return shard(paths, shardSize)
	return proptools.ShardBySize(paths, shardSize)
}

// ShardString takes a string and returns a slice of strings where the length of each one is
@@ -583,7 +569,7 @@ func ShardString(s string, shardSize int) []string {
// ShardStrings takes a slice of strings, and returns a slice of slices of strings where each one has at most shardSize
// elements.
func ShardStrings(s []string, shardSize int) [][]string {
	return shard(s, shardSize)
	return proptools.ShardBySize(s, shardSize)
}

// CheckDuplicate checks if there are duplicates in given string list.
+16 −3
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
package build

import (
	"android/soong/ui/tracer"
	"fmt"
	"io/fs"
	"os"
@@ -26,6 +25,8 @@ import (
	"sync/atomic"
	"time"

	"android/soong/ui/tracer"

	"android/soong/bazel"
	"android/soong/ui/metrics"
	"android/soong/ui/metrics/metrics_proto"
@@ -270,7 +271,13 @@ func bootstrapEpochCleanup(ctx Context, config Config) {
	} else if !exists {
		// The tree is out of date for the current epoch, delete files used by bootstrap
		// and force the primary builder to rerun.
		os.Remove(config.SoongNinjaFile())
		soongNinjaFile := config.SoongNinjaFile()
		os.Remove(soongNinjaFile)
		for _, file := range blueprint.GetNinjaShardFiles(soongNinjaFile) {
			if ok, _ := fileExists(file); ok {
				os.Remove(file)
			}
		}
		for _, globFile := range bootstrapGlobFileList(config) {
			os.Remove(globFile)
		}
@@ -680,7 +687,13 @@ func runSoong(ctx Context, config Config) {

	loadSoongBuildMetrics(ctx, config, beforeSoongTimestamp)

	distGzipFile(ctx, config, config.SoongNinjaFile(), "soong")
	soongNinjaFile := config.SoongNinjaFile()
	distGzipFile(ctx, config, soongNinjaFile, "soong")
	for _, file := range blueprint.GetNinjaShardFiles(soongNinjaFile) {
		if ok, _ := fileExists(file); ok {
			distGzipFile(ctx, config, file, "soong")
		}
	}
	distFile(ctx, config, config.SoongVarsFile(), "soong")

	if !config.SkipKati() {