Fix mac debug, and add debug builds to bots

Change-Id: I9129ca8a22b5bbb9c1e7370aed06299c8207b36a
Reviewed-on: https://gn-review.googlesource.com/1401
Reviewed-by: Scott Graham <scottmg@chromium.org>
diff --git a/build/gen.py b/build/gen.py
index 6c73d4e..0534e1a 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -725,6 +725,7 @@
         'base/mac/bundle_locations.mm',
         'base/mac/call_with_eh_frame.cc',
         'base/mac/call_with_eh_frame_asm.S',
+        'base/mac/dispatch_source_mach.cc',
         'base/mac/foundation_util.mm',
         'base/mac/mach_logging.cc',
         'base/mac/scoped_mach_port.cc',
diff --git a/infra/recipes/gn.expected/ci_linux.json b/infra/recipes/gn.expected/ci_linux.json
index 46e2bac..d725497 100644
--- a/infra/recipes/gn.expected/ci_linux.json
+++ b/infra/recipes/gn.expected/ci_linux.json
@@ -75,7 +75,65 @@
   },
   {
     "cmd": [],
-    "name": "build"
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[START_DIR]/gn/build/gen.py",
+      "-d"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+    },
+    "name": "debug.build.generate",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out"
+    ],
+    "name": "debug.build.ninja",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/gn/out/gn_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "name": "debug.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "release"
+  },
+  {
+    "cmd": [],
+    "name": "release.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "cmd": [
@@ -90,9 +148,9 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
     },
-    "name": "build.generate",
+    "name": "release.build.generate",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -101,9 +159,9 @@
       "-C",
       "[START_DIR]/gn/out"
     ],
-    "name": "build.ninja",
+    "name": "release.build.ninja",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -111,7 +169,10 @@
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "cwd": "[START_DIR]/gn",
-    "name": "test"
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.expected/ci_mac.json b/infra/recipes/gn.expected/ci_mac.json
index 7f8dd06..8f39168 100644
--- a/infra/recipes/gn.expected/ci_mac.json
+++ b/infra/recipes/gn.expected/ci_mac.json
@@ -71,18 +71,26 @@
   },
   {
     "cmd": [],
-    "name": "build"
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "cmd": [
       "python",
       "-u",
-      "[START_DIR]/gn/build/gen.py"
+      "[START_DIR]/gn/build/gen.py",
+      "-d"
     ],
     "cwd": "[START_DIR]/gn",
-    "name": "build.generate",
+    "name": "debug.build.generate",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -91,9 +99,9 @@
       "-C",
       "[START_DIR]/gn/out"
     ],
-    "name": "build.ninja",
+    "name": "debug.build.ninja",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -101,7 +109,54 @@
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "cwd": "[START_DIR]/gn",
-    "name": "test"
+    "name": "debug.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "release"
+  },
+  {
+    "cmd": [],
+    "name": "release.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[START_DIR]/gn/build/gen.py"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "name": "release.build.generate",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out"
+    ],
+    "name": "release.build.ninja",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/gn/out/gn_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.expected/ci_win.json b/infra/recipes/gn.expected/ci_win.json
index 1e6e6b2..b69295b 100644
--- a/infra/recipes/gn.expected/ci_win.json
+++ b/infra/recipes/gn.expected/ci_win.json
@@ -71,18 +71,26 @@
   },
   {
     "cmd": [],
-    "name": "build"
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "cmd": [
       "python",
       "-u",
-      "[START_DIR]\\gn\\build\\gen.py"
+      "[START_DIR]\\gn\\build\\gen.py",
+      "-d"
     ],
     "cwd": "[START_DIR]\\gn",
-    "name": "build.generate",
+    "name": "debug.build.generate",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -91,9 +99,9 @@
       "-C",
       "[START_DIR]\\gn\\out"
     ],
-    "name": "build.ninja",
+    "name": "debug.build.ninja",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -101,7 +109,54 @@
       "[START_DIR]\\gn\\out\\gn_unittests"
     ],
     "cwd": "[START_DIR]\\gn",
-    "name": "test"
+    "name": "debug.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "release"
+  },
+  {
+    "cmd": [],
+    "name": "release.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[START_DIR]\\gn\\build\\gen.py"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "name": "release.build.generate",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]\\cipd\\ninja",
+      "-C",
+      "[START_DIR]\\gn\\out"
+    ],
+    "name": "release.build.ninja",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]\\gn\\out\\gn_unittests"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.expected/cq_linux.json b/infra/recipes/gn.expected/cq_linux.json
index b449c10..b810ef3 100644
--- a/infra/recipes/gn.expected/cq_linux.json
+++ b/infra/recipes/gn.expected/cq_linux.json
@@ -102,7 +102,65 @@
   },
   {
     "cmd": [],
-    "name": "build"
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[START_DIR]/gn/build/gen.py",
+      "-d"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+    },
+    "name": "debug.build.generate",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out"
+    ],
+    "name": "debug.build.ninja",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/gn/out/gn_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "name": "debug.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "release"
+  },
+  {
+    "cmd": [],
+    "name": "release.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "cmd": [
@@ -117,9 +175,9 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
     },
-    "name": "build.generate",
+    "name": "release.build.generate",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -128,9 +186,9 @@
       "-C",
       "[START_DIR]/gn/out"
     ],
-    "name": "build.ninja",
+    "name": "release.build.ninja",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -138,7 +196,10 @@
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "cwd": "[START_DIR]/gn",
-    "name": "test"
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.expected/cq_mac.json b/infra/recipes/gn.expected/cq_mac.json
index de1bc86..8630599 100644
--- a/infra/recipes/gn.expected/cq_mac.json
+++ b/infra/recipes/gn.expected/cq_mac.json
@@ -98,18 +98,26 @@
   },
   {
     "cmd": [],
-    "name": "build"
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "cmd": [
       "python",
       "-u",
-      "[START_DIR]/gn/build/gen.py"
+      "[START_DIR]/gn/build/gen.py",
+      "-d"
     ],
     "cwd": "[START_DIR]/gn",
-    "name": "build.generate",
+    "name": "debug.build.generate",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -118,9 +126,9 @@
       "-C",
       "[START_DIR]/gn/out"
     ],
-    "name": "build.ninja",
+    "name": "debug.build.ninja",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -128,7 +136,54 @@
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "cwd": "[START_DIR]/gn",
-    "name": "test"
+    "name": "debug.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "release"
+  },
+  {
+    "cmd": [],
+    "name": "release.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[START_DIR]/gn/build/gen.py"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "name": "release.build.generate",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out"
+    ],
+    "name": "release.build.ninja",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/gn/out/gn_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.expected/cq_win.json b/infra/recipes/gn.expected/cq_win.json
index 394a362..b1beb7e 100644
--- a/infra/recipes/gn.expected/cq_win.json
+++ b/infra/recipes/gn.expected/cq_win.json
@@ -98,18 +98,26 @@
   },
   {
     "cmd": [],
-    "name": "build"
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "cmd": [
       "python",
       "-u",
-      "[START_DIR]\\gn\\build\\gen.py"
+      "[START_DIR]\\gn\\build\\gen.py",
+      "-d"
     ],
     "cwd": "[START_DIR]\\gn",
-    "name": "build.generate",
+    "name": "debug.build.generate",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -118,9 +126,9 @@
       "-C",
       "[START_DIR]\\gn\\out"
     ],
-    "name": "build.ninja",
+    "name": "debug.build.ninja",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
+      "@@@STEP_NEST_LEVEL@2@@@"
     ]
   },
   {
@@ -128,7 +136,54 @@
       "[START_DIR]\\gn\\out\\gn_unittests"
     ],
     "cwd": "[START_DIR]\\gn",
-    "name": "test"
+    "name": "debug.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "release"
+  },
+  {
+    "cmd": [],
+    "name": "release.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "python",
+      "-u",
+      "[START_DIR]\\gn\\build\\gen.py"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "name": "release.build.generate",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]\\cipd\\ninja",
+      "-C",
+      "[START_DIR]\\gn\\out"
+    ],
+    "name": "release.build.ninja",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]\\gn\\out\\gn_unittests"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.py b/infra/recipes/gn.py
index a02357d..81d3f07 100644
--- a/infra/recipes/gn.py
+++ b/infra/recipes/gn.py
@@ -63,14 +63,29 @@
       'win': {},
   }[api.platform.name]
 
-  with api.step.nest('build'):
-    with api.context(env=environ, cwd=src_dir):
-      api.python('generate', src_dir.join('build', 'gen.py'))
+  configs = [
+      {
+          'name': 'debug',
+          'args': ['-d']
+      },
+      {
+          'name': 'release',
+          'args': []
+      },
+  ]
 
-    api.step('ninja', [cipd_dir.join('ninja'), '-C', src_dir.join('out')])
+  for config in configs:
+    with api.step.nest(config['name']):
+      with api.step.nest('build'):
+        with api.context(env=environ, cwd=src_dir):
+          api.python('generate',
+                     src_dir.join('build', 'gen.py'),
+                     args=config['args'])
 
-  with api.context(cwd=src_dir):
-    api.step('test', [src_dir.join('out', 'gn_unittests')])
+        api.step('ninja', [cipd_dir.join('ninja'), '-C', src_dir.join('out')])
+
+      with api.context(cwd=src_dir):
+        api.step('test', [src_dir.join('out', 'gn_unittests')])
 
 
 def GenTests(api):