[lit] Improve lit.Run class
[llvm-complete.git] / utils / gn / build / fuzzer.gni
blobb5aaf9425a4048e6bd6f9e4dad69432630f0955c
1 # This file introduces a templates for defining fuzzers.
3 # All parameters valid for executable() targets are valid (cflags, defines,
4 # deps, include_dirs, sources, ...). In addition to that:
6 #   dummy_main (required)
7 #       Path to a cpp file containing main(), used when neither
8 #       llvm_use_sanitize_coverage nor llvm_use_sanitize_coverage are set.
10 # Example of usage:
12 #   fuzzer("llvm-opt-fuzzer") {
13 #     deps = [ ... ]
14 #     dummy_main = "DummyOptFuzzer.cpp"
15 #     sources = [ "llvm-opt-fuzzer.cpp" ]
16 #   }
18 declare_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 = ""
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 = false
28 template("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       cflags += [ "-fsanitize=fuzzer" ]
44       not_needed(invoker, [ "dummy_main" ])
45     } else {
46       sources += [ invoker.dummy_main ]
47     }
48   }