build regenerating SkJumper stages into GN

I _think_ this makes it so changes to _stages.cpp or _lowp.cpp get
noticed, regenerated, and baked into Skia all in the same Ninja
invocation.

Now you just need to set up the tools we use in GN:

  skia_jumper_clang = ...
  skia_jumper_objdump = ...
  skia_jumper_ccache = ...

Change-Id: I09fb54d965644ff6e5825056fb0be2c7cab2ea92
Reviewed-on: https://skia-review.googlesource.com/21140
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
diff --git a/BUILD.gn b/BUILD.gn
index 9ba71b2..0401d08 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -41,6 +41,10 @@
   skia_enable_tools = is_skia_dev_build
   skia_enable_vulkan_debug_layers = is_skia_dev_build && is_debug
   skia_vulkan_sdk = getenv("VULKAN_SDK")
+
+  skia_jumper_clang = ""
+  skia_jumper_objdump = ""
+  skia_jumper_ccache = ""
 }
 declare_args() {
   skia_use_dng_sdk = !is_fuchsia && skia_use_libjpeg_turbo && skia_use_zlib
@@ -1542,3 +1546,28 @@
     }
   }
 }
+
+if (skia_jumper_clang != "") {
+  action("regen_jumper") {
+    script = "src/jumper/build_stages.py"
+
+    inputs = [
+      "src/jumper/SkJumper_stages.cpp",
+      "src/jumper/SkJumper_stages_lowp.cpp",
+    ]
+
+    # GN insists its outputs should go somewhere underneath target_out_dir, so we trick it.
+    outputs = [
+      "$target_out_dir/" +
+          rebase_path("src/jumper/SkJumper_generated.S", target_out_dir),
+      "$target_out_dir/" +
+          rebase_path("src/jumper/SkJumper_generated_win.S", target_out_dir),
+    ]
+
+    args = [
+             skia_jumper_clang,
+             skia_jumper_objdump,
+             skia_jumper_ccache,
+           ] + rebase_path(inputs) + rebase_path(outputs)
+  }
+}