DO NOT MERGE - Merge Android 10 into master
Bug: 139893257 Change-Id: I7c1b81ded862765968ef14d10ae76359e2972f27
This commit is contained in:
@@ -71,6 +71,7 @@ func getApiLevelsMap(config Config) map[string]int {
|
||||
"O": 26,
|
||||
"O-MR1": 27,
|
||||
"P": 28,
|
||||
"Q": 29,
|
||||
}
|
||||
for i, codename := range config.PlatformVersionCombinedCodenames() {
|
||||
apiLevelsMap[codename] = baseApiLevel + i
|
||||
|
@@ -51,6 +51,7 @@ func init() {
|
||||
AddNeverAllowRules(createIncludeDirsRules()...)
|
||||
AddNeverAllowRules(createTrebleRules()...)
|
||||
AddNeverAllowRules(createLibcoreRules()...)
|
||||
AddNeverAllowRules(createMediaRules()...)
|
||||
AddNeverAllowRules(createJavaDeviceForHostRules()...)
|
||||
}
|
||||
|
||||
@@ -110,7 +111,7 @@ func createTrebleRules() []Rule {
|
||||
|
||||
// TODO(b/67974785): always enforce the manifest
|
||||
NeverAllow().
|
||||
Without("name", "libhidltransport").
|
||||
Without("name", "libhidltransport-impl-internal").
|
||||
With("product_variables.enforce_vintf_manifest.cflags", "*").
|
||||
Because("manifest enforcement should be independent of ."),
|
||||
|
||||
@@ -151,6 +152,14 @@ func createLibcoreRules() []Rule {
|
||||
return rules
|
||||
}
|
||||
|
||||
func createMediaRules() []Rule {
|
||||
return []Rule{
|
||||
NeverAllow().
|
||||
With("libs", "updatable-media").
|
||||
Because("updatable-media includes private APIs. Use updatable_media_stubs instead."),
|
||||
}
|
||||
}
|
||||
|
||||
func createJavaDeviceForHostRules() []Rule {
|
||||
javaDeviceForHostProjectsWhitelist := []string{
|
||||
"external/guava",
|
||||
|
@@ -157,20 +157,6 @@ var neverallowTests = []struct {
|
||||
"manifest enforcement should be independent",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "libhidltransport enforce_vintf_manifest.cflags",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
cc_library {
|
||||
name: "libhidltransport",
|
||||
product_variables: {
|
||||
enforce_vintf_manifest: {
|
||||
cflags: ["-DSHOULD_NOT_EXIST"],
|
||||
},
|
||||
},
|
||||
}`),
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "no treble_linker_namespaces.cflags",
|
||||
@@ -203,6 +189,19 @@ var neverallowTests = []struct {
|
||||
}`),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "dependency on updatable-media",
|
||||
fs: map[string][]byte{
|
||||
"Blueprints": []byte(`
|
||||
java_library {
|
||||
name: "needs_updatable_media",
|
||||
libs: ["updatable-media"],
|
||||
}`),
|
||||
},
|
||||
expectedErrors: []string{
|
||||
"updatable-media includes private APIs. Use updatable_media_stubs instead.",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "java_device_for_host",
|
||||
fs: map[string][]byte{
|
||||
|
@@ -101,9 +101,8 @@ func init() {
|
||||
// not emit the table by default on Android since NDK still uses GNU binutils.
|
||||
"-faddrsig",
|
||||
|
||||
// Make implicit fallthrough an error in the future.
|
||||
// -Wimplicit-fallthrough is not enabled by -Wall.
|
||||
"-Wimplicit-fallthrough",
|
||||
"-Wno-error=implicit-fallthrough",
|
||||
|
||||
// Help catch common 32/64-bit errors.
|
||||
"-Werror=int-conversion",
|
||||
@@ -169,11 +168,6 @@ func init() {
|
||||
"-Wno-tautological-constant-compare",
|
||||
"-Wno-tautological-type-limit-compare",
|
||||
|
||||
// http://b/72330874 Disable -Wenum-compare until the instances detected by this new
|
||||
// warning are fixed.
|
||||
"-Wno-enum-compare",
|
||||
"-Wno-enum-compare-switch",
|
||||
|
||||
// Disable c++98-specific warning since Android is not concerned with C++98
|
||||
// compatibility.
|
||||
"-Wno-c++98-compat-extra-semi",
|
||||
@@ -182,9 +176,11 @@ func init() {
|
||||
"-Wno-return-std-move-in-c++11",
|
||||
}, " "))
|
||||
|
||||
// Extra cflags for projects under external/ directory
|
||||
// Extra cflags for projects under external/ directory to disable warnings that are infeasible
|
||||
// to fix in all the external projects and their upstream repos.
|
||||
pctx.StaticVariable("ClangExtraExternalCflags", strings.Join([]string{
|
||||
// TODO(yikong): Move -Wno flags here
|
||||
"-Wno-enum-compare",
|
||||
"-Wno-enum-compare-switch",
|
||||
|
||||
// http://b/72331524 Allow null pointer arithmetic until the instances detected by
|
||||
// this new warning are fixed.
|
||||
|
@@ -56,7 +56,8 @@ var (
|
||||
|
||||
minimalRuntimeFlags = []string{"-fsanitize-minimal-runtime", "-fno-sanitize-trap=integer,undefined",
|
||||
"-fno-sanitize-recover=integer,undefined"}
|
||||
hwasanGlobalOptions = []string{"heap_history_size=1023,stack_history_size=512"}
|
||||
hwasanGlobalOptions = []string{"heap_history_size=1023", "stack_history_size=512",
|
||||
"export_memory_stats=0", "max_malloc_fill_size=0"}
|
||||
)
|
||||
|
||||
type sanitizerType int
|
||||
|
@@ -180,6 +180,11 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
// Fix up the source tree due to a repo bug where it doesn't remove
|
||||
// linkfiles that have been removed
|
||||
fixBadDanglingLink(buildCtx, "hardware/qcom/sdm710/Android.bp")
|
||||
fixBadDanglingLink(buildCtx, "hardware/qcom/sdm710/Android.mk")
|
||||
|
||||
f := build.NewSourceFinder(buildCtx, config)
|
||||
defer f.Shutdown()
|
||||
build.FindSources(buildCtx, config, f)
|
||||
@@ -187,6 +192,20 @@ func main() {
|
||||
c.run(buildCtx, config, args, logsDir)
|
||||
}
|
||||
|
||||
func fixBadDanglingLink(ctx build.Context, name string) {
|
||||
_, err := os.Lstat(name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, err = os.Stat(name)
|
||||
if os.IsNotExist(err) {
|
||||
err = os.Remove(name)
|
||||
if err != nil {
|
||||
ctx.Fatalf("Failed to remove dangling link %q: %v", name, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func dumpVar(ctx build.Context, config build.Config, args []string, _ string) {
|
||||
flags := flag.NewFlagSet("dumpvar", flag.ExitOnError)
|
||||
flags.Usage = func() {
|
||||
|
@@ -29,7 +29,7 @@ var (
|
||||
|
||||
DefaultBootclasspathLibraries = []string{"core.platform.api.stubs", "core-lambda-stubs"}
|
||||
DefaultSystemModules = "core-platform-api-stubs-system-modules"
|
||||
DefaultLibraries = []string{"ext", "framework"}
|
||||
DefaultLibraries = []string{"ext", "framework", "updatable_media_stubs"}
|
||||
DefaultLambdaStubsLibrary = "core-lambda-stubs"
|
||||
SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar"
|
||||
|
||||
@@ -45,6 +45,7 @@ var (
|
||||
"core-icu4j",
|
||||
"core-oj",
|
||||
"core-libart",
|
||||
"updatable-media",
|
||||
}
|
||||
)
|
||||
|
||||
|
@@ -1108,7 +1108,7 @@ func TestPatchModule(t *testing.T) {
|
||||
checkPatchModuleFlag(t, ctx, "foo", "")
|
||||
expected := "java.base=.:" + buildDir
|
||||
checkPatchModuleFlag(t, ctx, "bar", expected)
|
||||
expected = "java.base=" + strings.Join([]string{".", buildDir, moduleToPath("ext"), moduleToPath("framework")}, ":")
|
||||
expected = "java.base=" + strings.Join([]string{".", buildDir, moduleToPath("ext"), moduleToPath("framework"), moduleToPath("updatable_media_stubs")}, ":")
|
||||
checkPatchModuleFlag(t, ctx, "baz", expected)
|
||||
})
|
||||
}
|
||||
|
@@ -34,10 +34,17 @@ var robolectricDefaultLibs = []string{
|
||||
"truth-prebuilt",
|
||||
}
|
||||
|
||||
var (
|
||||
roboCoverageLibsTag = dependencyTag{name: "roboSrcs"}
|
||||
)
|
||||
|
||||
type robolectricProperties struct {
|
||||
// The name of the android_app module that the tests will run against.
|
||||
Instrumentation_for *string
|
||||
|
||||
// Additional libraries for which coverage data should be generated
|
||||
Coverage_libs []string
|
||||
|
||||
Test_options struct {
|
||||
// Timeout in seconds when running the tests.
|
||||
Timeout *int64
|
||||
@@ -54,6 +61,8 @@ type robolectricTest struct {
|
||||
|
||||
libs []string
|
||||
tests []string
|
||||
|
||||
roboSrcJar android.Path
|
||||
}
|
||||
|
||||
func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
@@ -66,11 +75,35 @@ func (r *robolectricTest) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
}
|
||||
|
||||
ctx.AddVariationDependencies(nil, libTag, robolectricDefaultLibs...)
|
||||
|
||||
ctx.AddVariationDependencies(nil, roboCoverageLibsTag, r.robolectricProperties.Coverage_libs...)
|
||||
}
|
||||
|
||||
func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
roboTestConfig := android.PathForModuleGen(ctx, "robolectric").
|
||||
Join(ctx, "com/android/tools/test_config.properties")
|
||||
|
||||
// TODO: this inserts paths to built files into the test, it should really be inserting the contents.
|
||||
instrumented := ctx.GetDirectDepsWithTag(instrumentationForTag)
|
||||
|
||||
if len(instrumented) != 1 {
|
||||
panic(fmt.Errorf("expected exactly 1 instrumented dependency, got %d", len(instrumented)))
|
||||
}
|
||||
|
||||
instrumentedApp, ok := instrumented[0].(*AndroidApp)
|
||||
if !ok {
|
||||
ctx.PropertyErrorf("instrumentation_for", "dependency must be an android_app")
|
||||
}
|
||||
|
||||
generateRoboTestConfig(ctx, roboTestConfig, instrumentedApp)
|
||||
r.extraResources = android.Paths{roboTestConfig}
|
||||
|
||||
r.Library.GenerateAndroidBuildActions(ctx)
|
||||
|
||||
roboSrcJar := android.PathForModuleGen(ctx, "robolectric", ctx.ModuleName()+".srcjar")
|
||||
r.generateRoboSrcJar(ctx, roboSrcJar, instrumentedApp)
|
||||
r.roboSrcJar = roboSrcJar
|
||||
|
||||
for _, dep := range ctx.GetDirectDepsWithTag(libTag) {
|
||||
r.libs = append(r.libs, ctx.OtherModuleName(dep))
|
||||
}
|
||||
@@ -109,6 +142,41 @@ func shardTests(paths []string, shards int) [][]string {
|
||||
return ret
|
||||
}
|
||||
|
||||
func generateRoboTestConfig(ctx android.ModuleContext, outputFile android.WritablePath, instrumentedApp *AndroidApp) {
|
||||
manifest := instrumentedApp.mergedManifestFile
|
||||
resourceApk := instrumentedApp.outputFile
|
||||
|
||||
rule := android.NewRuleBuilder()
|
||||
|
||||
rule.Command().Text("rm -f").Output(outputFile)
|
||||
rule.Command().
|
||||
Textf(`echo "android_merged_manifest=%s" >>`, manifest.String()).Output(outputFile).Text("&&").
|
||||
Textf(`echo "android_resource_apk=%s" >>`, resourceApk.String()).Output(outputFile).
|
||||
// Make it depend on the files to which it points so the test file's timestamp is updated whenever the
|
||||
// contents change
|
||||
Implicit(manifest).
|
||||
Implicit(resourceApk)
|
||||
|
||||
rule.Build(pctx, ctx, "generate_test_config", "generate test_config.properties")
|
||||
}
|
||||
|
||||
func (r *robolectricTest) generateRoboSrcJar(ctx android.ModuleContext, outputFile android.WritablePath,
|
||||
instrumentedApp *AndroidApp) {
|
||||
|
||||
srcJarArgs := copyOf(instrumentedApp.srcJarArgs)
|
||||
srcJarDeps := append(android.Paths(nil), instrumentedApp.srcJarDeps...)
|
||||
|
||||
for _, m := range ctx.GetDirectDepsWithTag(roboCoverageLibsTag) {
|
||||
if dep, ok := m.(Dependency); ok {
|
||||
depSrcJarArgs, depSrcJarDeps := dep.SrcJarArgs()
|
||||
srcJarArgs = append(srcJarArgs, depSrcJarArgs...)
|
||||
srcJarDeps = append(srcJarDeps, depSrcJarDeps...)
|
||||
}
|
||||
}
|
||||
|
||||
TransformResourcesToJar(ctx, outputFile, srcJarArgs, srcJarDeps)
|
||||
}
|
||||
|
||||
func (r *robolectricTest) AndroidMk() android.AndroidMkData {
|
||||
data := r.Library.AndroidMk()
|
||||
|
||||
@@ -144,6 +212,7 @@ func (r *robolectricTest) writeTestRunner(w io.Writer, module, name string, test
|
||||
fmt.Fprintln(w, "LOCAL_JAVA_LIBRARIES :=", module)
|
||||
fmt.Fprintln(w, "LOCAL_JAVA_LIBRARIES += ", strings.Join(r.libs, " "))
|
||||
fmt.Fprintln(w, "LOCAL_TEST_PACKAGE :=", String(r.robolectricProperties.Instrumentation_for))
|
||||
fmt.Fprintln(w, "LOCAL_INSTRUMENT_SRCJARS :=", r.roboSrcJar.String())
|
||||
fmt.Fprintln(w, "LOCAL_ROBOTEST_FILES :=", strings.Join(tests, " "))
|
||||
if t := r.robolectricProperties.Test_options.Timeout; t != nil {
|
||||
fmt.Fprintln(w, "LOCAL_ROBOTEST_TIMEOUT :=", *t)
|
||||
|
@@ -38,6 +38,7 @@ func GatherRequiredDepsForTest() string {
|
||||
extraModules := []string{
|
||||
"core-lambda-stubs",
|
||||
"ext",
|
||||
"updatable_media_stubs",
|
||||
"android_stubs_current",
|
||||
"android_system_stubs_current",
|
||||
"android_test_stubs_current",
|
||||
|
Reference in New Issue
Block a user