# This file introduces a templates for defining fuzzers.
#
# All parameters valid for executable() targets are valid (cflags, defines,
# deps, include_dirs, sources, ...). In addition to that:
#
#   dummy_main (required)
#       Path to a cpp file containing main(), used when neither
#       llvm_use_sanitize_coverage nor llvm_use_sanitize_coverage are set.
#
# Example of usage:
#
#   fuzzer("llvm-opt-fuzzer") {
#     deps = [ ... ]
#     dummy_main = "DummyOptFuzzer.cpp"
#     sources = [ "llvm-opt-fuzzer.cpp" ]
#   }

declare_args() {
  # Set to the path of a static library containing a fuzzing engine, e.g.
  # oss-fuzz's $LIB_FUZZING_ENGINE.
  llvm_lib_fuzzing_engine = ""

  # If true, pass -fsanitize=fuzzer to the compiler for fuzzer() targets.
  # Likely only makes sense to set if you know that the host compiler is clang.
  llvm_use_sanitize_coverage = false
}

template("fuzzer") {
  assert(defined(invoker.dummy_main), "must set 'dummy_main' in $target_name")
  assert(defined(invoker.sources), "must set 'sources' for $target_name")
  executable(target_name) {
    forward_variables_from(invoker, "*", [ "dummy_main" ])
    if (llvm_lib_fuzzing_engine != "") {
      if (!defined(libs)) {
        libs = []
      }
      libs += [ llvm_lib_fuzzing_engine ]
      not_needed(invoker, [ "dummy_main" ])
    } else if (llvm_use_sanitize_coverage) {
      if (!defined(cflags)) {
        cflags = []
      }
      cflags += [ "-fsanitize=fuzzer" ]
      not_needed(invoker, [ "dummy_main" ])
    } else {
      sources += [ invoker.dummy_main ]
    }
  }
}
