• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1load("@fmeum_rules_jni//jni:defs.bzl", "cc_jni_library")
2load("//bazel:compat.bzl", "MULTI_PLATFORM", "SKIP_ON_WINDOWS")
3
4cc_jni_library(
5    name = "jazzer_driver",
6    platforms = MULTI_PLATFORM,
7    visibility = [
8        "//src/jmh:__subpackages__",
9        "//src/main/java/com/code_intelligence/jazzer/driver:__pkg__",
10        "//src/main/java/com/code_intelligence/jazzer/junit:__pkg__",
11        "//src/main/java/com/code_intelligence/jazzer/runtime:__pkg__",
12        "//src/test:__subpackages__",
13    ],
14    deps = [
15        ":jazzer_driver_lib",
16        "@jazzer_libfuzzer//:libfuzzer_no_main",
17    ] + select({
18        # Windows doesn't have a concept analogous to RTLD_GLOBAL.
19        "@platforms//os:windows": [],
20        "//conditions:default": [":init_jazzer_preload"],
21    }),
22)
23
24cc_library(
25    name = "jazzer_driver_lib",
26    visibility = ["//src/test/native/com/code_intelligence/jazzer/driver/mocks:__pkg__"],
27    deps = [
28        ":coverage_tracker",
29        ":fuzz_target_runner",
30        ":jazzer_fuzzer_callbacks",
31        ":libfuzzer_callbacks",
32        ":mutator",
33    ],
34)
35
36cc_jni_library(
37    name = "jazzer_android_tooling",
38    srcs = ["android_tooling.cpp"],
39    platforms = MULTI_PLATFORM,
40    target_compatible_with = SKIP_ON_WINDOWS,
41    visibility = ["//src/main/java/com/code_intelligence/jazzer/android:__pkg__"],
42    deps = [
43        "//src/main/java/com/code_intelligence/jazzer/android:android_runtime.hdrs",
44    ],
45)
46
47cc_library(
48    name = "coverage_tracker",
49    srcs = ["coverage_tracker.cpp"],
50    hdrs = ["coverage_tracker.h"],
51    deps = ["//src/main/java/com/code_intelligence/jazzer/runtime:coverage_map.hdrs"],
52    # Symbols are only referenced dynamically via JNI.
53    alwayslink = True,
54)
55
56cc_library(
57    name = "fuzz_target_runner",
58    srcs = ["fuzz_target_runner.cpp"],
59    hdrs = ["fuzz_target_runner.h"],
60    linkopts = select({
61        "@platforms//os:windows": [],
62        "//conditions:default": ["-ldl"],
63    }),
64    deps = [
65        ":sanitizer_symbols",
66        "//src/main/java/com/code_intelligence/jazzer/runtime:fuzz_target_runner_natives.hdrs",
67    ],
68    # With sanitizers, symbols are only referenced dynamically via JNI.
69    alwayslink = True,
70)
71
72cc_library(
73    name = "fuzzed_data_provider",
74    srcs = ["fuzzed_data_provider.cpp"],
75    visibility = [
76        "//launcher:__pkg__",
77    ],
78    deps = [
79        "//src/main/java/com/code_intelligence/jazzer/driver:fuzzed_data_provider_impl.hdrs",
80    ],
81    # Symbols may only be referenced dynamically via JNI.
82    alwayslink = True,
83)
84
85cc_jni_library(
86    name = "jazzer_fuzzed_data_provider",
87    platforms = MULTI_PLATFORM,
88    visibility = ["//src/main/java/com/code_intelligence/jazzer/driver:__pkg__"],
89    deps = [":fuzzed_data_provider"],
90)
91
92cc_library(
93    name = "jazzer_fuzzer_callbacks",
94    srcs = ["jazzer_fuzzer_callbacks.cpp"],
95    deps = [
96        ":sanitizer_hooks_with_pc",
97        "//src/main/java/com/code_intelligence/jazzer/runtime:trace_data_flow_native_callbacks.hdrs",
98    ],
99    alwayslink = True,
100)
101
102cc_jni_library(
103    name = "jazzer_signal_handler",
104    srcs = ["signal_handler.cpp"],
105    platforms = MULTI_PLATFORM,
106    visibility = ["//src/main/java/com/code_intelligence/jazzer/driver:__pkg__"],
107    deps = ["//src/main/java/com/code_intelligence/jazzer/driver:signal_handler.hdrs"],
108)
109
110cc_library(
111    name = "libfuzzer_callbacks",
112    srcs = ["libfuzzer_callbacks.cpp"],
113    deps = [
114        "//src/main/java/com/code_intelligence/jazzer/runtime:trace_data_flow_native_callbacks.hdrs",
115        "@com_google_absl//absl/strings",
116    ],
117    # Symbols are only referenced dynamically via JNI.
118    alwayslink = True,
119)
120
121cc_library(
122    name = "mutator",
123    srcs = ["mutator.cpp"],
124    deps = ["//src/main/java/com/code_intelligence/jazzer/runtime:mutator.hdrs"],
125    # Symbols are only referenced dynamically via JNI.
126    alwayslink = True,
127)
128
129cc_library(
130    name = "init_jazzer_preload",
131    srcs = ["init_jazzer_preload.cpp"],
132    linkopts = ["-ldl"],
133    target_compatible_with = SKIP_ON_WINDOWS,
134    deps = ["@fmeum_rules_jni//jni"],
135    # Symbols are only referenced dynamically via JNI.
136    alwayslink = True,
137)
138
139cc_library(
140    name = "sanitizer_hooks_with_pc",
141    hdrs = ["sanitizer_hooks_with_pc.h"],
142    visibility = ["//:__subpackages__"],
143)
144
145cc_library(
146    name = "sanitizer_symbols",
147    srcs = ["sanitizer_symbols.cpp"],
148    # Symbols are referenced dynamically by libFuzzer.
149    alwayslink = True,
150)
151
152cc_test(
153    name = "fuzzed_data_provider_test",
154    size = "small",
155    srcs = ["fuzzed_data_provider_test.cpp"],
156    copts = select({
157        "@platforms//os:windows": ["/std:c++17"],
158        "//conditions:default": ["-std=c++17"],
159    }),
160    deps = [
161        ":fuzzed_data_provider",
162        "@fmeum_rules_jni//jni",
163        "@googletest//:gtest",
164        "@googletest//:gtest_main",
165    ],
166)
167