Limit the number of the Java source files in a single compilation unit

KYTHE_JAVA_SOURCE_BATCH_SIZE environment variable controls this setting.
The limit is 1000 if this variable is not set.

Fixes: 179932118
Test: run prebuilts/build-tools/build-prebuilts.sh, use it to build kzips, check
Change-Id: I9ad57dfd1d2c2dce5cff755b1bd61cf933420bd3
This commit is contained in:
Sasha Smundak 2021-02-16 10:39:40 -08:00
parent 36eb24b3ab
commit b0addafd93
3 changed files with 26 additions and 1 deletions

View file

@ -24,6 +24,7 @@ import (
"os"
"path/filepath"
"runtime"
"strconv"
"strings"
"sync"
@ -911,6 +912,25 @@ func (c *config) XrefCuEncoding() string {
return "json"
}
// XrefCuJavaSourceMax returns the maximum number of the Java source files
// in a single compilation unit
const xrefJavaSourceFileMaxDefault = "1000"
func (c Config) XrefCuJavaSourceMax() string {
v := c.Getenv("KYTHE_JAVA_SOURCE_BATCH_SIZE")
if v == "" {
return xrefJavaSourceFileMaxDefault
}
if _, err := strconv.ParseUint(v, 0, 0); err != nil {
fmt.Fprintf(os.Stderr,
"bad KYTHE_JAVA_SOURCE_BATCH_SIZE value: %s, will use %s",
err, xrefJavaSourceFileMaxDefault)
return xrefJavaSourceFileMaxDefault
}
return v
}
func (c *config) EmitXrefRules() bool {
return c.XrefCorpusName() != ""
}

View file

@ -7,14 +7,16 @@
# BUILD_NUMBER build number, used to generate unique ID (will use UUID if not set)
# DIST_DIR where the resulting all.kzip will be placed
# KYTHE_KZIP_ENCODING proto or json (proto is default)
# KYTHE_JAVA_SOURCE_BATCH_SIZE maximum number of the Java source files in a compilation unit
# OUT_DIR output directory (out if not specified})
# TARGET_BUILD_VARIANT variant, e.g., `userdebug`
# TARGET_PRODUCT target device name, e.g., 'aosp_blueline'
# XREF_CORPUS source code repository URI, e.g., 'android.googlesource.com/platform/superproject'
: ${BUILD_NUMBER:=$(uuidgen)}
: ${KYTHE_JAVA_SOURCE_BATCH_SIZE:=500}
: ${KYTHE_KZIP_ENCODING:=proto}
export KYTHE_KZIP_ENCODING
export KYTHE_JAVA_SOURCE_BATCH_SIZE KYTHE_KZIP_ENCODING
# The extraction might fail for some source files, so run with -k and then check that
# sufficiently many files were generated.

View file

@ -80,6 +80,8 @@ var (
func(ctx android.PackageVarContext) string { return ctx.Config().XrefCorpusName() })
_ = pctx.VariableFunc("kytheCuEncoding",
func(ctx android.PackageVarContext) string { return ctx.Config().XrefCuEncoding() })
_ = pctx.VariableFunc("kytheCuJavaSourceMax",
func(ctx android.PackageVarContext) string { return ctx.Config().XrefCuJavaSourceMax() })
_ = pctx.SourcePathVariable("kytheVnames", "build/soong/vnames.json")
// Run it with -add-opens=java.base/java.nio=ALL-UNNAMED to avoid JDK9's warning about
// "Illegal reflective access by com.google.protobuf.Utf8$UnsafeProcessor ...
@ -93,6 +95,7 @@ var (
`KYTHE_CORPUS=${kytheCorpus} ` +
`KYTHE_VNAMES=${kytheVnames} ` +
`KYTHE_KZIP_ENCODING=${kytheCuEncoding} ` +
`KYTHE_JAVA_SOURCE_BATCH_SIZE=${kytheCuJavaSourceMax} ` +
`${config.SoongJavacWrapper} ${config.JavaCmd} ` +
`--add-opens=java.base/java.nio=ALL-UNNAMED ` +
`-jar ${config.JavaKytheExtractorJar} ` +