Update skslc compiler script to allow for output path flexibility.

Previously, the script was hardcoded to use the input file's path, plus
"/golden/". In a followup CL, we are going to move the input files into
the resources/ directory but keep the output files in tests/, so we
needed additional flexibility here.

Change-Id: I8d5a78f6a8efd9a0e7f2a6d1ad8ad72a46cf70ce
Bug: skia:11009
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/357280
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index c651048..18a2c1b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -708,16 +708,25 @@
         ":sksl_pre_includes",
         ":skslc(//gn/toolchain:$host_toolchain)",
       ]
-      sources = invoker.sources
+      sources = []
       outputs = []
-      foreach(src, sources) {
+      args = [
+        rebase_path(skslc_path),
+        invoker.lang,
+        invoker.settings,
+      ]
+
+      foreach(src, invoker.sources) {
         dir = get_path_info(src, "dir")
         name = get_path_info(src, "name")
         ext = get_path_info(src, "extension")
-        foreach(outputPattern, invoker.outputPatterns) {
-          outDirectory = outputPattern[0]
-          outExtension = outputPattern[1]
+        args += rebase_path([
+                              src,
+                              dir + "/golden/",
+                            ])
+        sources += [ src ]
 
+        foreach(outExtension, invoker.outExtensions) {
           # SPIR-V uses separate extensions for .vert and .geom shaders.
           if (outExtension == ".asm.frag" && ext == "vert") {
             outExtension = ".asm.vert"
@@ -725,75 +734,48 @@
             outExtension = ".asm.geom"
           }
           outputs += [ target_out_dir + "/" +
-                       rebase_path(dir + outDirectory + name + outExtension,
+                       rebase_path(dir + "/golden/" + name + outExtension,
                                    target_out_dir) ]
         }
       }
-      args = [
-        rebase_path(skslc_path),
-        invoker.lang,
-        invoker.settings,
-      ]
-      args += rebase_path(sources)
     }
   }
   compile_sksl("fp_tests") {
     sources = sksl_fp_tests_sources
-    outputPatterns = [
-      [
-        "/golden/",
-        ".cpp",
-      ],
-      [
-        "/golden/",
-        ".h",
-      ],
+    outExtensions = [
+      ".cpp",
+      ".h",
     ]
     lang = "--fp"
     settings = "--settings"
   }
   compile_sksl("glsl_tests") {
     sources = sksl_glsl_tests_sources + sksl_glsl_settings_tests_sources
-    outputPatterns = [ [
-          "/golden/",
-          ".glsl",
-        ] ]
+    outExtensions = [ ".glsl" ]
     lang = "--glsl"
     settings = "--settings"
   }
   compile_sksl("glsl_nosettings_tests") {
     sources = sksl_glsl_settings_tests_sources
-    outputPatterns = [ [
-          "/golden/",
-          "StandaloneSettings.glsl",
-        ] ]
+    outExtensions = [ "StandaloneSettings.glsl" ]
     lang = "--glsl"
     settings = "--nosettings"
   }
   compile_sksl("metal_tests") {
     sources = sksl_metal_tests_sources
-    outputPatterns = [ [
-          "/golden/",
-          ".metal",
-        ] ]
+    outExtensions = [ ".metal" ]
     lang = "--metal"
     settings = "--settings"
   }
   compile_sksl("skvm_tests") {
     sources = sksl_skvm_tests_sources
-    outputPatterns = [ [
-          "/golden/",
-          ".skvm",
-        ] ]
+    outExtensions = [ ".skvm" ]
     lang = "--skvm"
     settings = "--settings"
   }
   compile_sksl("spirv_tests") {
     sources = sksl_spirv_tests_sources
-    outputPatterns = [ [
-          "/golden/",
-          ".asm.frag",
-        ] ]
+    outExtensions = [ ".asm.frag" ]
     lang = "--spirv"
     settings = "--settings"
   }