brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · ec177d3 Raw
54 lines · plain
1# This file introduces a templates for defining fuzzers.2#3# All parameters valid for executable() targets are valid (cflags, defines,4# deps, include_dirs, sources, ...). In addition to that:5#6#   dummy_main (required)7#       Path to a cpp file containing main(), used when neither8#       llvm_use_sanitize_coverage nor llvm_use_sanitize_coverage are set.9#10# Example of usage:11#12#   fuzzer("llvm-opt-fuzzer") {13#     deps = [ ... ]14#     dummy_main = "DummyOptFuzzer.cpp"15#     sources = [ "llvm-opt-fuzzer.cpp" ]16#   }17 18declare_args() {19  # Set to the path of a static library containing a fuzzing engine, e.g.20  # oss-fuzz's $LIB_FUZZING_ENGINE.21  llvm_lib_fuzzing_engine = ""22 23  # If true, pass -fsanitize=fuzzer to the compiler for fuzzer() targets.24  # Likely only makes sense to set if you know that the host compiler is clang.25  llvm_use_sanitize_coverage = false26}27 28template("fuzzer") {29  assert(defined(invoker.dummy_main), "must set 'dummy_main' in $target_name")30  assert(defined(invoker.sources), "must set 'sources' for $target_name")31  executable(target_name) {32    forward_variables_from(invoker, "*", [ "dummy_main" ])33    if (llvm_lib_fuzzing_engine != "") {34      if (!defined(libs)) {35        libs = []36      }37      libs += [ llvm_lib_fuzzing_engine ]38      not_needed(invoker, [ "dummy_main" ])39    } else if (llvm_use_sanitize_coverage) {40      if (!defined(cflags)) {41        cflags = []42      }43      if (!defined(ldflags)) {44        ldflags = []45      }46      cflags += [ "-fsanitize=fuzzer" ]47      ldflags += [ "-fsanitize=fuzzer" ]48      not_needed(invoker, [ "dummy_main" ])49    } else {50      sources += [ invoker.dummy_main ]51    }52  }53}54