diff options
author | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2021-02-26 14:35:53 +0100 |
---|---|---|
committer | Fabian Meumertzheim <fabian@meumertzhe.im> | 2021-03-22 15:05:37 +0100 |
commit | 2c8c48f4d252c77c2bb35347f260a1a9385ad684 (patch) | |
tree | edb68ce2997a57570e983976e4948e56156b926c | |
parent | 6e3d256bb8c9c72e420cf10b99c1689f86031cc3 (diff) | |
download | jazzer-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.bazel | 10 | ||||
-rw-r--r-- | driver/BUILD.bazel | 5 | ||||
-rw-r--r-- | third_party/BUILD.bazel | 1 | ||||
-rw-r--r-- | third_party/libFuzzer.BUILD | 21 |
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"], +) |