Add a stub "vertex routine" fuzzer

Bug: swiftshader:86

Change-Id: I351e433123abfaf010e3b1641383054e77dc6383
Reviewed-on: https://swiftshader-review.googlesource.com/13228
Tested-by: Corentin Wallez <cwallez@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 0ef68d9..db96bae 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -97,6 +97,18 @@
   }
 }
 
+source_set("vertex_routine_fuzzer") {
+  sources = [
+    "tests/fuzzers/VertexRoutineFuzzer.cpp"
+  ]
+  include_dirs = [
+    "src/",
+  ]
+  deps = [
+    "src/OpenGL/libGLESv2:swiftshader_libGLESv2_static",
+  ]
+}
+
 group("swiftshader") {
   data_deps = [
     "src/OpenGL/libGLESv2:swiftshader_libGLESv2",
diff --git a/src/OpenGL/libGLESv2/BUILD.gn b/src/OpenGL/libGLESv2/BUILD.gn
index f29df3e..2e97c10 100644
--- a/src/OpenGL/libGLESv2/BUILD.gn
+++ b/src/OpenGL/libGLESv2/BUILD.gn
@@ -50,17 +50,11 @@
   }
 }
 
-swiftshader_shared_library("swiftshader_libGLESv2") {
-  if (!is_mac) {
-    output_name = "libGLESv2"
-    output_dir = "$root_out_dir/swiftshader"
-  }
-
+swiftshader_static_library("swiftshader_libGLESv2_static") {
   deps = [
     "../../OpenGL/compiler:swiftshader_opengl_compiler",
     "../../Reactor:swiftshader_reactor",
     "../../Renderer:swiftshader_renderer",
-    "//build/config:exe_and_shlib_deps",
   ]
 
   sources = [
@@ -80,14 +74,37 @@
     "VertexArray.cpp",
     "VertexDataManager.cpp",
     "libGLESv2.cpp",
-    "libGLESv2.def",
-    "libGLESv2.rc",
     "libGLESv3.cpp",
     "main.cpp",
     "resource.h",
     "utilities.cpp",
   ]
 
+  configs = [ ":swiftshader_libGLESv2_private_config" ]
+
+  include_dirs = [
+    "../../../include",
+    "../..",
+    "..",
+  ]
+}
+
+swiftshader_shared_library("swiftshader_libGLESv2") {
+  if (!is_mac) {
+    output_name = "libGLESv2"
+    output_dir = "$root_out_dir/swiftshader"
+  }
+
+  deps = [
+    ":swiftshader_libGLESv2_static",
+    "//build/config:exe_and_shlib_deps",
+  ]
+
+  sources = [
+    "libGLESv2.def",
+    "libGLESv2.rc",
+  ]
+
   if (is_win) {
     ldflags = [ "/DEF:" + rebase_path("libGLESv2.def", root_build_dir) ]
   } else if (is_mac) {
diff --git a/src/swiftshader.gni b/src/swiftshader.gni
index 9148762..01efa20 100644
--- a/src/swiftshader.gni
+++ b/src/swiftshader.gni
@@ -45,3 +45,14 @@
     }
   }
 }
+
+template("swiftshader_static_library") {
+  static_library(target_name) {
+    configs -= configs_to_delete
+    configs += configs_to_add
+    forward_variables_from(invoker, "*", [ "configs" ])
+    if (defined(invoker.configs)) {
+      configs += invoker.configs
+    }
+  }
+}
diff --git a/tests/fuzzers/VertexRoutineFuzzer.cpp b/tests/fuzzers/VertexRoutineFuzzer.cpp
new file mode 100644
index 0000000..43d05ad
--- /dev/null
+++ b/tests/fuzzers/VertexRoutineFuzzer.cpp
@@ -0,0 +1,7 @@
+#include "OpenGL/libGLESv2/Device.hpp"
+
+#include <cstdint>
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+    return 0;
+}