• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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