| load("@bazel_skylib//rules:write_file.bzl", "write_file") |
| load("@com_github_johnynek_bazel_jar_jar//:jar_jar.bzl", "jar_jar") |
| load("@rules_jvm_external//:defs.bzl", "javadoc") |
| load("//:maven.bzl", "JAZZER_VERSION") |
| load("//bazel:jar.bzl", "strip_jar") |
| load("//sanitizers:sanitizers.bzl", "SANITIZER_CLASSES") |
| |
| java_binary( |
| name = "jazzer_standalone", |
| main_class = "com.code_intelligence.jazzer.Jazzer", |
| visibility = [ |
| "//:__pkg__", |
| "//launcher:__pkg__", |
| ], |
| runtime_deps = [ |
| ":jazzer_import", |
| "//deploy:jazzer-api", |
| ], |
| ) |
| |
| strip_jar( |
| name = "jazzer", |
| out = "jazzer.jar", |
| jar = ":jazzer_shaded", |
| paths_to_keep = [ |
| "com/code_intelligence/jazzer/**", |
| "jaz/**", |
| "META-INF/MANIFEST.MF", |
| "win32-x86/**", |
| "win32-x86-64/**", |
| ], |
| visibility = ["//visibility:public"], |
| ) |
| |
| java_library( |
| name = "constants", |
| srcs = [":constants_java"], |
| visibility = ["//visibility:public"], |
| ) |
| |
| java_import( |
| name = "jazzer_import", |
| jars = [":jazzer"], |
| visibility = ["//:__subpackages__"], |
| deps = ["//deploy:jazzer-api"], |
| ) |
| |
| jar_jar( |
| name = "jazzer_shaded", |
| input_jar = "jazzer_unshaded_deploy.jar", |
| rules = "jazzer_shade_rules.jarjar", |
| ) |
| |
| java_binary( |
| name = "jazzer_unshaded", |
| # Note: We can't add |
| # //src/main/java/com/code_intelligence/jazzer/runtime:java_bootstrap_unshaded itself as |
| # that would also strip out external dependencies common between Jazzer and its bootstrap jar, |
| # such as e.g. RulesJni, which should be shaded into distinct classes. |
| deploy_env = [ |
| "//src/main/java/com/code_intelligence/jazzer/api:api_deploy_env", |
| "//src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_env", |
| ], |
| main_class = "com.code_intelligence.jazzer.Jazzer", |
| runtime_deps = [":jazzer_lib"], |
| ) |
| |
| # Docs are only generated for the com.code_intelligence.jazzer package. Everything else is not |
| # considered a public interface. |
| javadoc( |
| name = "jazzer-docs", |
| javadocopts = select({ |
| "//deploy:emit_linked_javadoc": [ |
| "-link", |
| "https://docs.oracle.com/en/java/javase/17/docs/api/", |
| "-link", |
| "https://codeintelligencetesting.github.io/jazzer-docs/jazzer-api/", |
| ], |
| "//conditions:default": [], |
| }), |
| visibility = ["//deploy:__pkg__"], |
| deps = [":jazzer_lib"], |
| ) |
| |
| strip_jar( |
| name = "jazzer-sources", |
| jar = ":jazzer_transitive_sources_deploy-src.jar", |
| paths_to_keep = [ |
| "com/code_intelligence/jazzer/**", |
| "jaz/**", |
| "META-INF/MANIFEST.MF", |
| ], |
| visibility = ["//deploy:__pkg__"], |
| ) |
| |
| # The _deploy-src.jar for this target includes the sources for the jazzer_bootstrap library. |
| java_binary( |
| name = "jazzer_transitive_sources", |
| main_class = "com.code_intelligence.jazzer.Jazzer", |
| runtime_deps = [ |
| ":jazzer_lib", |
| "//src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_lib", |
| ], |
| ) |
| |
| java_library( |
| name = "jazzer_lib", |
| srcs = ["Jazzer.java"], |
| visibility = ["//deploy:__pkg__"], |
| runtime_deps = select({ |
| "@platforms//os:windows": [], |
| "//conditions:default": ["//src/main/native/com/code_intelligence/jazzer:jazzer_preload"], |
| }) + [ |
| # Only used by JUnit, but including it here means we don't need to shade ASM in |
| # jazzer-junit. |
| "//src/main/java/com/code_intelligence/jazzer/utils:unsafe_utils", |
| ], |
| deps = [ |
| "//src/main/java/com/code_intelligence/jazzer/driver", |
| "//src/main/java/com/code_intelligence/jazzer/runtime:constants", |
| "//src/main/java/com/code_intelligence/jazzer/utils:log", |
| "@fmeum_rules_jni//jni/tools/native_loader", |
| ], |
| ) |
| |
| write_file( |
| name = "constants_java", |
| out = "Constants.java", |
| content = [ |
| "package com.code_intelligence.jazzer;", |
| "public final class Constants {", |
| " public static final String JAZZER_VERSION = \"%s\";" % JAZZER_VERSION, |
| "}", |
| ], |
| ) |