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/android:android_runtime", "//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", "//src/main/java/com/code_intelligence/jazzer/utils:zip_utils", "@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, "}", ], )