# 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.
# Or to enable afl, 'use_afl' GN option should be set to true.

import("//build/config/features.gni")
import("//build/config/sanitizers/sanitizers.gni")

source_set("libfuzzer_main") {
  deps = []
  sources = []
  if (use_libfuzzer) {
    deps += [ "//third_party/libFuzzer:libfuzzer" ]
  } else if (use_afl) {
    deps += [ "//third_party/libFuzzer:afl_driver" ]
  } else {
    sources += [ "unittest_main.cc" ]
  }
  if (use_clang_coverage) {
    # For purposes of code coverage calculation, fuzzer targets are run through
    # a wrapper script in this directory, which handles corpus retrieval and
    # appropriate parameter passing to run the target in an isolate. This
    # directive makes this script and its dependencies to be included in the
    # target's isolate.
    data = [
      "//tools/code_coverage/",
    ]
  }
}

# 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") {
}
