aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Meumertzheim <meumertzheim@code-intelligence.com>2021-02-26 14:35:53 +0100
committerFabian Meumertzheim <fabian@meumertzhe.im>2021-03-22 15:05:37 +0100
commit2c8c48f4d252c77c2bb35347f260a1a9385ad684 (patch)
treeedb68ce2997a57570e983976e4948e56156b926c
parent6e3d256bb8c9c72e420cf10b99c1689f86031cc3 (diff)
downloadjazzer-api-2c8c48f4d252c77c2bb35347f260a1a9385ad684.tar.gz
Build libFuzzer from source
Building libFuzzer from source is easy and has multiple advantages: * The clang distributed with XCode on macOS does not include libFuzzer. * Applying a small patch to libFuzzer will allow us to replace the --wrap linker feature, which is not supported on platforms other than Linux.
-rw-r--r--WORKSPACE.bazel10
-rw-r--r--driver/BUILD.bazel5
-rw-r--r--third_party/BUILD.bazel1
-rw-r--r--third_party/libFuzzer.BUILD21
4 files changed, 35 insertions, 2 deletions
diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel
index 4fad5909..1d9d944e 100644
--- a/WORKSPACE.bazel
+++ b/WORKSPACE.bazel
@@ -197,3 +197,13 @@ http_archive(
strip_prefix = "jacoco-%s" % jacoco_commit,
url = "https://github.com/jacoco/jacoco/archive/178d49870056b8a1f8ea6915e804d28b0dda5609.tar.gz",
)
+
+# libFuzzer
+
+http_archive(
+ name = "libFuzzer",
+ build_file = "//third_party:libFuzzer.BUILD",
+ sha256 = "8ad4ddbafac4f2c8f2ea523c2c4196f940e8e16f9e635210537582a48622a5d5",
+ strip_prefix = "llvm-project-llvmorg-11.0.0",
+ url = "https://github.com/llvm/llvm-project/archive/llvmorg-11.0.0.tar.gz",
+)
diff --git a/driver/BUILD.bazel b/driver/BUILD.bazel
index b5c4d3ab..471fd1cf 100644
--- a/driver/BUILD.bazel
+++ b/driver/BUILD.bazel
@@ -61,11 +61,11 @@ cc_binary(
],
linkopts = [
"-Wl,--wrap=__sanitizer_set_death_callback",
- "-fsanitize=fuzzer",
],
visibility = ["//visibility:public"],
deps = [
":jvm_tooling_lib",
+ "@libFuzzer",
],
)
@@ -77,11 +77,12 @@ cc_binary(
],
linkopts = [
"-Wl,--wrap=__sanitizer_set_death_callback",
- "-fsanitize=fuzzer,address",
+ "-fsanitize=address",
],
visibility = ["//visibility:public"],
deps = [
":jvm_tooling_lib",
+ "@libFuzzer",
],
)
diff --git a/third_party/BUILD.bazel b/third_party/BUILD.bazel
index fd65eb9b..dd84abb5 100644
--- a/third_party/BUILD.bazel
+++ b/third_party/BUILD.bazel
@@ -2,5 +2,6 @@ exports_files([
"gflags-use-double-dash-args.patch",
"jacoco-make-probe-inserter-subclassable.patch",
"jacoco_internal.BUILD",
+ "libFuzzer.BUILD",
"libjpeg_turbo.BUILD",
])
diff --git a/third_party/libFuzzer.BUILD b/third_party/libFuzzer.BUILD
new file mode 100644
index 00000000..4bd464a4
--- /dev/null
+++ b/third_party/libFuzzer.BUILD
@@ -0,0 +1,21 @@
+# Based on https://github.com/llvm/llvm-project/blob/llvmorg-11.1.0/compiler-rt/lib/fuzzer/build.sh
+LIB_FUZZER_PATH = "compiler-rt/lib/fuzzer"
+
+cc_library(
+ name = "libFuzzer",
+ srcs = glob([
+ LIB_FUZZER_PATH + "/*.cpp",
+ ]),
+ hdrs = glob([
+ LIB_FUZZER_PATH + "/*.h",
+ LIB_FUZZER_PATH + "/*.def",
+ ]),
+ copts = [
+ "-g",
+ "-O2",
+ "-fno-omit-frame-pointer",
+ "-std=c++11",
+ ],
+ alwayslink = True,
+ visibility = ["//visibility:public"],
+)