aboutsummaryrefslogtreecommitdiff
path: root/java/fuzz.go
diff options
context:
space:
mode:
authormosimchah <mosimchah@gmail.com>2025-12-02 09:27:38 -0500
committermosimchah <mosimchah@gmail.com>2025-12-02 09:27:38 -0500
commitc7bade461dc55726f62997d13a48582f7c4b4655 (patch)
treeea0588da76060a2038f54f67efd046ca77634b10 /java/fuzz.go
parent0f5414d19317805e8bbbe7c4db5f0fd78769bad5 (diff)
parent89d78cff8b00d3b20a90074635c3fe5a2ee49474 (diff)
Merge branch 'lineage-23.1' of https://github.com/LineageOS/android_build_soong into HEADw16.1
* 'lineage-23.1' of https://github.com/LineageOS/android_build_soong: (528 commits) Revert "install_symlink: Make symlink target configurable" Reapply "Clear as much of cc.Module as possible after GenerateBuildActions" Revert "rust: config: Fix missing CPU variant LD flags in Rust" Rename build-flag in outdir Revert^4 "cipd: Default CIPD proxy server to on, add opt-out" Convert check-vintf-all to phony with actions Create a partial implementation of check-vintf-all for soong-only Configure RBE rust pool based on build variant Revert^3 "Add sdk version check to arr" Add jdk.internal.invoke to the allowlist Make droid always depend on symbols zip Import Device and Odm skus Don't install gob_gen in Soong Remove bazel reference from run_integration_tests.sh Fix bootstrap_test.sh Don't panic in aconfig libraries when AllowMissingDependencies is set Avoid returning nil paths from PathForModuleSrc Revert "Flag controled clang version" Rework module target dependencies on required deps Revert^2 "Add sdk version check to arr" ... Change-Id: I6e9a63fa14fda917a42e426e5dcebbad7f67e1de
Diffstat (limited to 'java/fuzz.go')
-rw-r--r--java/fuzz.go87
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) {