aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/code_intelligence/jazzer/BUILD.bazel
blob: aed6769d0cf806d9b8d90f60252c17bde60ef7c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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,
        "}",
    ],
)