Revert "Revert "Switch to the new SkSL lexer.""

This reverts commit 358515491a0d6891e6a709688a30ad087df1beb1.

Bug: skia:
Change-Id: I013fac0ed83774d8ae7c6ee6819045cab37f5e97
Reviewed-on: https://skia-review.googlesource.com/45180
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 1c328b0..ef2ac07 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -45,6 +45,7 @@
   skia_vulkan_sdk = getenv("VULKAN_SDK")
   skia_qt_path = getenv("QT_PATH")
   skia_compile_processors = false
+  skia_lex = false
 
   skia_jumper_clang = ""
   skia_jumper_objdump = ""
@@ -411,7 +412,7 @@
   ]
 }
 
-if (skia_compile_processors) {
+if (skia_lex) {
   executable("sksllex") {
     sources = [
       "src/sksl/lex/Main.cpp",
@@ -422,6 +423,38 @@
     include_dirs = [ "src/sksl/lex" ]
   }
 
+  action("run_sksllex") {
+    script = "gn/run_sksllex.py"
+    sources = [
+      "src/sksl/lex/layout.lex",
+      "src/sksl/lex/sksl.lex",
+    ]
+
+    # GN insists its outputs should go somewhere underneath target_out_dir, so we trick it with a
+    # path that starts with target_out_dir and then uses ".." to back up into the src dir.
+    outputs = [
+      "$target_out_dir/" +
+          rebase_path("src/sksl/lex/SkSLLexer.h", target_out_dir),
+      # the script also modifies the corresponding .cpp file, but if we tell GN that it gets
+      # confused due to the same file being named by two different paths
+    ]
+    sksllex_path = "$root_out_dir/"
+    sksllex_path += "sksllex"
+    if (host_os == "win") {
+      sksllex_path += ".exe"
+    }
+    args = [
+      rebase_path(sksllex_path),
+      rebase_path("bin/clang-format"),
+      rebase_path("src"),
+    ]
+  }
+} else {
+  group("run_sksllex") {
+  }
+}
+
+if (skia_compile_processors) {
   executable("skslc") {
     defines = [ "SKSL_STANDALONE" ]
     sources = [
@@ -482,6 +515,7 @@
   enabled = skia_enable_gpu
   deps = [
     ":compile_processors",
+    ":run_sksllex",
   ]
   public_defines = []