# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # LibFuzzer is a LLVM tool for coverage-guided fuzz testing. # See http://www.chromium.org/developers/testing/libfuzzer # # To enable libfuzzer, 'use_libfuzzer' GN option should be set to true. import("//build/config/features.gni") import("//build/config/sanitizers/sanitizers.gni") static_library("libfuzzer_main") { # libfuzzer should be compiled without coverage (infinite loop in trace_cmp). configs -= [ "//build/config/sanitizers:default_sanitizer_coverage_flags" ] sources = [] if (use_libfuzzer) { sources += [ "../../third_party/llvm/lib/Fuzzer/FuzzerCrossOver.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerDriver.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerFlags.def", "../../third_party/llvm/lib/Fuzzer/FuzzerIO.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerInterface.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerLoop.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerMain.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerMutate.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerSHA1.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerTracePC.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerTraceState.cpp", "../../third_party/llvm/lib/Fuzzer/FuzzerUtil.cpp", ] } else if (use_drfuzz) { sources += [ "drfuzz_main.cc" ] } else { sources += [ "unittest_main.cc" ] } } # A config used by all fuzzer_tests. config("fuzzer_test_config") { if (use_libfuzzer && is_mac) { ldflags = [ "-Wl,-U,_LLVMFuzzerCustomMutator", "-Wl,-U,_LLVMFuzzerInitialize", ] } } # Noop config used to tag fuzzer tests excluded from clusterfuzz. # Libfuzzer build bot uses this to filter out targets while # building an archive for clusterfuzz. config("no_clusterfuzz") { } # noop to tag seed corpus rules. source_set("seed_corpus") { }