SkQP: make_gmkb, gm_knowledge (GM Knowledgebase)

Add a real implementation for gm_knowledge.h  This depends on
the presence of files in the form $GMK_DIR/foo/{max,min}.png

The implementation also writes out failures in a report directory.

Add a utility: experimental/make_gmkb which is a stand-alone
go executable that generates the foo/{max,min}.png data.

tools/skqp/README.md has instructions on running SkQP.

Also: add SkFontMgrPriv.h

Change-Id: Ibe1e9a7e7de143d14eee3877f5f2d2d8713f7f49
Reviewed-on: https://skia-review.googlesource.com/65380
Reviewed-by: Yuqian Li <liyuqian@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 4d1850a..b03f111 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1701,19 +1701,30 @@
     ]
   }
 
-  if (!is_win) {
-    test_app("gpucts") {
+  if (!is_win && skia_enable_gpu) {
+    test_lib("skqp_lib") {
+      public_include_dirs = [ "tools/skqp" ]
       sources = [
+        "dm/DMFontMgr.cpp",
         "dm/DMGpuTestProcs.cpp",
-        "tools/gpucts/gm_knowledge.c",
-        "tools/gpucts/gm_runner.cpp",
-        "tools/gpucts/gpucts.cpp",
+        "tools/skqp/gm_knowledge.cpp",
+        "tools/skqp/gm_runner.cpp",
       ]
       deps = [
         ":gm",
         ":gpu_tool_utils",
         ":skia",
         ":tests",
+        ":tool_utils",
+      ]
+    }
+    test_app("skqp") {
+      sources = [
+        "tools/skqp/skqp.cpp",
+      ]
+      deps = [
+        ":skia",
+        ":skqp_lib",
         "//third_party/googletest",
       ]
     }