diff options
Diffstat (limited to 'java/fuzz.go')
| -rw-r--r-- | java/fuzz.go | 87 |
1 files changed, 66 insertions, 21 deletions
diff --git a/java/fuzz.go b/java/fuzz.go index 0e239f0ec..922585b8d 100644 --- a/java/fuzz.go +++ b/java/fuzz.go @@ -51,6 +51,12 @@ type JavaFuzzTest struct { jniFilePaths android.Paths } +type JavaFuzzTestInfo struct { + JniFilePaths android.Paths +} + +var JavaFuzzTestInfoProvider = blueprint.NewProvider[JavaFuzzTestInfo]() + // java_fuzz builds and links sources into a `.jar` file for the device. // This generates .class files in a jar which can then be instrumented before // fuzzing in Android Runtime (ART: Android OS on emulator or device) @@ -131,9 +137,41 @@ func (j *JavaFuzzTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { } - j.Test.GenerateAndroidBuildActions(ctx) + checkMinSdkVersionMts(ctx, j.MinSdkVersion(ctx)) + j.Test.generateAndroidBuildActionsWithConfig(ctx, nil) + + var compatibilitySupportFiles android.Paths + compatibilitySupportFiles = append(compatibilitySupportFiles, j.implementationJarFile) + compatibilitySupportFiles = append(compatibilitySupportFiles, j.jniFilePaths...) + compatibilitySupportFiles = append(compatibilitySupportFiles, j.fuzzPackagedModule.Corpus...) + if j.fuzzPackagedModule.Dictionary != nil { + compatibilitySupportFiles = append(compatibilitySupportFiles, j.fuzzPackagedModule.Dictionary) + } + + ctx.SetTestSuiteInfo(android.TestSuiteInfo{ + TestSuites: j.testProperties.Test_suites, + MainFile: j.outputFile, + MainFileStem: j.Stem(), + MainFileExt: ".jar", + ConfigFile: j.testConfig, + ExtraConfigs: j.extraTestConfigs, + NeedsArchFolder: ctx.Device(), + CompatibilitySupportFiles: compatibilitySupportFiles, + PerTestcaseDirectory: proptools.Bool(j.testProperties.Per_testcase_directory), + }) + + fuzzModuleValidator := fuzz.FuzzModule{ + j.ModuleBase, + j.DefaultableModuleBase, + j.ApexModuleBase, + } - fuzz.SetFuzzPackagedModuleInfo(ctx, &j.fuzzPackagedModule) + if fuzz.IsValid(ctx, fuzzModuleValidator) { + fuzz.SetFuzzPackagedModuleInfo(ctx, &j.fuzzPackagedModule) + android.SetProvider(ctx, JavaFuzzTestInfoProvider, JavaFuzzTestInfo{ + JniFilePaths: j.jniFilePaths, + }) + } } type javaFuzzPackager struct { @@ -149,9 +187,9 @@ func (s *javaFuzzPackager) GenerateBuildActions(ctx android.SingletonContext) { archDirs := make(map[fuzz.ArchOs][]fuzz.FileToZip) s.FuzzTargets = make(map[string]bool) - ctx.VisitAllModules(func(module android.Module) { + ctx.VisitAllModuleProxies(func(module android.ModuleProxy) { // Discard non-fuzz targets. - javaFuzzModule, ok := module.(*JavaFuzzTest) + javaInfo, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider) if !ok { return } @@ -159,25 +197,21 @@ func (s *javaFuzzPackager) GenerateBuildActions(ctx android.SingletonContext) { if !ok { return } + javaFuzzTestInfo, ok := android.OtherModuleProvider(ctx, module, JavaFuzzTestInfoProvider) + if !ok { + return + } + + commonInfo := android.OtherModuleProviderOrDefault(ctx, module, android.CommonModuleInfoProvider) hostOrTargetString := "target" - if javaFuzzModule.Target().HostCross { + if commonInfo.Target.HostCross { hostOrTargetString = "host_cross" - } else if javaFuzzModule.Host() { + } else if commonInfo.Host { hostOrTargetString = "host" } - fuzzModuleValidator := fuzz.FuzzModule{ - javaFuzzModule.ModuleBase, - javaFuzzModule.DefaultableModuleBase, - javaFuzzModule.ApexModuleBase, - } - - if ok := fuzz.IsValid(ctx, fuzzModuleValidator); !ok { - return - } - - archString := javaFuzzModule.Arch().ArchType.String() + archString := commonInfo.Target.Arch.ArchType.String() archDir := android.PathForIntermediates(ctx, "fuzz", hostOrTargetString, archString) archOs := fuzz.ArchOs{HostOrTarget: hostOrTargetString, Arch: archString, Dir: archDir.String()} @@ -188,14 +222,17 @@ func (s *javaFuzzPackager) GenerateBuildActions(ctx android.SingletonContext) { files = s.PackageArtifacts(ctx, module, &fuzzInfo, archDir, builder) // Add .jar - if !javaFuzzModule.Host() { - files = append(files, fuzz.FileToZip{SourceFilePath: javaFuzzModule.implementationJarFile, DestinationPathPrefix: "classes"}) + if !commonInfo.Host { + for _, jar := range javaInfo.ImplementationJars { + files = append(files, fuzz.FileToZip{SourceFilePath: jar, DestinationPathPrefix: "classes"}) + } } - files = append(files, fuzz.FileToZip{SourceFilePath: javaFuzzModule.outputFile}) + outputFile := android.OutputFileForModule(ctx, module, "") + files = append(files, fuzz.FileToZip{SourceFilePath: outputFile}) // Add jni .so files - for _, fPath := range javaFuzzModule.jniFilePaths { + for _, fPath := range javaFuzzTestInfo.JniFilePaths { files = append(files, fuzz.FileToZip{SourceFilePath: fPath}) } @@ -205,6 +242,14 @@ func (s *javaFuzzPackager) GenerateBuildActions(ctx android.SingletonContext) { } }) s.CreateFuzzPackage(ctx, archDirs, fuzz.Java, pctx) + + // Create the phony and dist rules + ctx.Phony("haiku-java", s.Packages...) + ctx.DistForGoals([]string{"haiku-java"}, s.Packages...) + for _, target := range android.SortedKeys(s.FuzzTargets) { + ctx.Phony("haiku-java", android.PathForPhony(ctx, target)) + } + } func (s *javaFuzzPackager) MakeVars(ctx android.MakeVarsContext) { |
