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