]> granicus.if.org Git - llvm/commitdiff
[gn build] Add fuzzers in llvm/tools that are needed for check-llvm
authorNico Weber <nicolasweber@gmx.de>
Wed, 2 Jan 2019 18:13:14 +0000 (18:13 +0000)
committerNico Weber <nicolasweber@gmx.de>
Wed, 2 Jan 2019 18:13:14 +0000 (18:13 +0000)
Also add a fuzzer() template for defining fuzzers that's similar to
add_llvm_fuzzer in the CMake build, and a build file for dependency
llvm/lib/FuzzMutate.

Also make `assert(defined(...` error strings a bit more self-consistent.

Differential Revision: https://reviews.llvm.org/D56194

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350238 91177308-0d34-0410-b5e6-96231b3b80d8

utils/gn/build/fuzzer.gni [new file with mode: 0644]
utils/gn/secondary/BUILD.gn
utils/gn/secondary/llvm/include/llvm/Config/BUILD.gn
utils/gn/secondary/llvm/lib/FuzzMutate/BUILD.gn [new file with mode: 0644]
utils/gn/secondary/llvm/tools/llvm-isel-fuzzer/BUILD.gn [new file with mode: 0644]
utils/gn/secondary/llvm/tools/llvm-opt-fuzzer/BUILD.gn [new file with mode: 0644]
utils/gn/secondary/llvm/utils/TableGen/tablegen.gni

diff --git a/utils/gn/build/fuzzer.gni b/utils/gn/build/fuzzer.gni
new file mode 100644 (file)
index 0000000..b5aaf94
--- /dev/null
@@ -0,0 +1,49 @@
+# 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 ]
+    }
+  }
+}
index 369e03fec2b2c0115a29437a30152dff303b8315..f31851386ed670ecc1e88b5294b7425888c2a0e2 100644 (file)
@@ -20,9 +20,11 @@ group("default") {
     "//llvm/tools/llvm-dwp",
     "//llvm/tools/llvm-exegesis",
     "//llvm/tools/llvm-extract",
+    "//llvm/tools/llvm-isel-fuzzer",
     "//llvm/tools/llvm-link",
     "//llvm/tools/llvm-mca",
     "//llvm/tools/llvm-mt",
+    "//llvm/tools/llvm-opt-fuzzer",
     "//llvm/tools/llvm-opt-report",
     "//llvm/tools/llvm-rc",
     "//llvm/tools/llvm-rtdyld",
index 08924e36dab9126a92dbfab864f4acaf82e50d30..38ec86d82f36eb7147e8b31d32f25a8d9c72d949 100644 (file)
@@ -370,8 +370,8 @@ action("llvm-config") {
 # .def files used by llvm/lib/Target
 
 template("write_target_def_file") {
-  assert(defined(invoker.key), "callers must set key")
-  assert(defined(invoker.value), "callers must set value")
+  assert(defined(invoker.key), "must set 'key' in $target_name")
+  assert(defined(invoker.value), "must set 'value' in $target_name")
 
   action(target_name) {
     visibility = [ ":write_target_def_files" ]
diff --git a/utils/gn/secondary/llvm/lib/FuzzMutate/BUILD.gn b/utils/gn/secondary/llvm/lib/FuzzMutate/BUILD.gn
new file mode 100644 (file)
index 0000000..57a6b57
--- /dev/null
@@ -0,0 +1,19 @@
+static_library("FuzzMutate") {
+  output_name = "LLVMFuzzMutate"
+  deps = [
+    "//llvm/lib/Analysis",
+    "//llvm/lib/Bitcode/Reader",
+    "//llvm/lib/Bitcode/Writer",
+    "//llvm/lib/IR",
+    "//llvm/lib/Support",
+    "//llvm/lib/Target",
+    "//llvm/lib/Transforms/Scalar",
+  ]
+  sources = [
+    "FuzzerCLI.cpp",
+    "IRMutator.cpp",
+    "OpDescriptor.cpp",
+    "Operations.cpp",
+    "RandomIRBuilder.cpp",
+  ]
+}
diff --git a/utils/gn/secondary/llvm/tools/llvm-isel-fuzzer/BUILD.gn b/utils/gn/secondary/llvm/tools/llvm-isel-fuzzer/BUILD.gn
new file mode 100644 (file)
index 0000000..d9ef7fc
--- /dev/null
@@ -0,0 +1,24 @@
+import("//llvm/utils/gn/build/fuzzer.gni")
+
+fuzzer("llvm-isel-fuzzer") {
+  deps = [
+    "//llvm/lib/Analysis",
+    "//llvm/lib/Bitcode/Reader",
+    "//llvm/lib/Bitcode/Writer",
+    "//llvm/lib/CodeGen",
+    "//llvm/lib/CodeGen/AsmPrinter",
+    "//llvm/lib/CodeGen/SelectionDAG",
+    "//llvm/lib/FuzzMutate",
+    "//llvm/lib/IR",
+    "//llvm/lib/IRReader",
+    "//llvm/lib/MC",
+    "//llvm/lib/Support",
+    "//llvm/lib/Target",
+    "//llvm/lib/Target:TargetsToBuild",
+    "//llvm/lib/Transforms/Scalar",
+  ]
+  dummy_main = "DummyISelFuzzer.cpp"
+  sources = [
+    "llvm-isel-fuzzer.cpp",
+  ]
+}
diff --git a/utils/gn/secondary/llvm/tools/llvm-opt-fuzzer/BUILD.gn b/utils/gn/secondary/llvm/tools/llvm-opt-fuzzer/BUILD.gn
new file mode 100644 (file)
index 0000000..cb95dda
--- /dev/null
@@ -0,0 +1,31 @@
+import("//llvm/utils/gn/build/fuzzer.gni")
+
+fuzzer("llvm-opt-fuzzer") {
+  deps = [
+    "//llvm/lib/Analysis",
+    "//llvm/lib/Bitcode/Reader",
+    "//llvm/lib/Bitcode/Writer",
+    "//llvm/lib/CodeGen",
+    "//llvm/lib/FuzzMutate",
+    "//llvm/lib/IR",
+    "//llvm/lib/IRReader",
+    "//llvm/lib/MC",
+    "//llvm/lib/Passes",
+    "//llvm/lib/Support",
+    "//llvm/lib/Target",
+    "//llvm/lib/Target:TargetsToBuild",
+    "//llvm/lib/Transforms/AggressiveInstCombine",
+    "//llvm/lib/Transforms/Coroutines",
+    "//llvm/lib/Transforms/IPO",
+    "//llvm/lib/Transforms/InstCombine",
+    "//llvm/lib/Transforms/Instrumentation",
+    "//llvm/lib/Transforms/ObjCARC",
+    "//llvm/lib/Transforms/Scalar",
+    "//llvm/lib/Transforms/Utils",
+    "//llvm/lib/Transforms/Vectorize",
+  ]
+  dummy_main = "DummyOptFuzzer.cpp"
+  sources = [
+    "llvm-opt-fuzzer.cpp",
+  ]
+}
index 3762923598216d1b15281d671542e8fba2486b2f..d98ed6b376ed0e6a279574f2fad4caceb9c27176 100644 (file)
@@ -25,7 +25,7 @@
 #   }
 
 template("tablegen") {
-  assert(defined(invoker.args), "args must be defined for $target_name")
+  assert(defined(invoker.args), "must set 'args' in $target_name")
 
   config_name = "${target_name}_config"
   config(config_name) {