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