aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/code_intelligence/jazzer/BUILD.bazel
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/code_intelligence/jazzer/BUILD.bazel')
-rw-r--r--src/main/java/com/code_intelligence/jazzer/BUILD.bazel137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/main/java/com/code_intelligence/jazzer/BUILD.bazel b/src/main/java/com/code_intelligence/jazzer/BUILD.bazel
new file mode 100644
index 00000000..aed6769d
--- /dev/null
+++ b/src/main/java/com/code_intelligence/jazzer/BUILD.bazel
@@ -0,0 +1,137 @@
+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,
+ "}",
+ ],
+)