1load("@bazel_skylib//rules:write_file.bzl", "write_file") 2load("@com_github_johnynek_bazel_jar_jar//:jar_jar.bzl", "jar_jar") 3load("@rules_jvm_external//:defs.bzl", "javadoc") 4load("//:maven.bzl", "JAZZER_VERSION") 5load("//bazel:jar.bzl", "strip_jar") 6load("//sanitizers:sanitizers.bzl", "SANITIZER_CLASSES") 7 8java_binary( 9 name = "jazzer_standalone", 10 main_class = "com.code_intelligence.jazzer.Jazzer", 11 visibility = [ 12 "//:__pkg__", 13 "//launcher:__pkg__", 14 ], 15 runtime_deps = [ 16 ":jazzer_import", 17 "//deploy:jazzer-api", 18 ], 19) 20 21strip_jar( 22 name = "jazzer", 23 out = "jazzer.jar", 24 jar = ":jazzer_shaded", 25 paths_to_keep = [ 26 "com/code_intelligence/jazzer/**", 27 "jaz/**", 28 "META-INF/MANIFEST.MF", 29 "win32-x86/**", 30 "win32-x86-64/**", 31 ], 32 visibility = ["//visibility:public"], 33) 34 35java_library( 36 name = "constants", 37 srcs = [":constants_java"], 38 visibility = ["//visibility:public"], 39) 40 41java_import( 42 name = "jazzer_import", 43 jars = [":jazzer"], 44 visibility = ["//:__subpackages__"], 45 deps = ["//deploy:jazzer-api"], 46) 47 48jar_jar( 49 name = "jazzer_shaded", 50 input_jar = "jazzer_unshaded_deploy.jar", 51 rules = "jazzer_shade_rules.jarjar", 52) 53 54java_binary( 55 name = "jazzer_unshaded", 56 # Note: We can't add 57 # //src/main/java/com/code_intelligence/jazzer/runtime:java_bootstrap_unshaded itself as 58 # that would also strip out external dependencies common between Jazzer and its bootstrap jar, 59 # such as e.g. RulesJni, which should be shaded into distinct classes. 60 deploy_env = [ 61 "//src/main/java/com/code_intelligence/jazzer/api:api_deploy_env", 62 "//src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_env", 63 ], 64 main_class = "com.code_intelligence.jazzer.Jazzer", 65 runtime_deps = [":jazzer_lib"], 66) 67 68# Docs are only generated for the com.code_intelligence.jazzer package. Everything else is not 69# considered a public interface. 70javadoc( 71 name = "jazzer-docs", 72 javadocopts = select({ 73 "//deploy:emit_linked_javadoc": [ 74 "-link", 75 "https://docs.oracle.com/en/java/javase/17/docs/api/", 76 "-link", 77 "https://codeintelligencetesting.github.io/jazzer-docs/jazzer-api/", 78 ], 79 "//conditions:default": [], 80 }), 81 visibility = ["//deploy:__pkg__"], 82 deps = [":jazzer_lib"], 83) 84 85strip_jar( 86 name = "jazzer-sources", 87 jar = ":jazzer_transitive_sources_deploy-src.jar", 88 paths_to_keep = [ 89 "com/code_intelligence/jazzer/**", 90 "jaz/**", 91 "META-INF/MANIFEST.MF", 92 ], 93 visibility = ["//deploy:__pkg__"], 94) 95 96# The _deploy-src.jar for this target includes the sources for the jazzer_bootstrap library. 97java_binary( 98 name = "jazzer_transitive_sources", 99 main_class = "com.code_intelligence.jazzer.Jazzer", 100 runtime_deps = [ 101 ":jazzer_lib", 102 "//src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_lib", 103 ], 104) 105 106java_library( 107 name = "jazzer_lib", 108 srcs = ["Jazzer.java"], 109 visibility = ["//deploy:__pkg__"], 110 runtime_deps = select({ 111 "@platforms//os:windows": [], 112 "//conditions:default": ["//src/main/native/com/code_intelligence/jazzer:jazzer_preload"], 113 }) + [ 114 # Only used by JUnit, but including it here means we don't need to shade ASM in 115 # jazzer-junit. 116 "//src/main/java/com/code_intelligence/jazzer/utils:unsafe_utils", 117 ], 118 deps = [ 119 "//src/main/java/com/code_intelligence/jazzer/android:android_runtime", 120 "//src/main/java/com/code_intelligence/jazzer/driver", 121 "//src/main/java/com/code_intelligence/jazzer/runtime:constants", 122 "//src/main/java/com/code_intelligence/jazzer/utils:log", 123 "//src/main/java/com/code_intelligence/jazzer/utils:zip_utils", 124 "@fmeum_rules_jni//jni/tools/native_loader", 125 ], 126) 127 128write_file( 129 name = "constants_java", 130 out = "Constants.java", 131 content = [ 132 "package com.code_intelligence.jazzer;", 133 "public final class Constants {", 134 " public static final String JAZZER_VERSION = \"%s\";" % JAZZER_VERSION, 135 "}", 136 ], 137) 138