Explicitly specify sysroot for Linux and macOS

Only use the Debian sysroot on bots and fetch it directly from CIPD.
Ths sysroot shouldn't be necessary for regular GN development.

Change-Id: I5b6d411fc9b89240adab41cebc0686adea54ae22
Reviewed-on: https://gn-review.googlesource.com/c/3200
Reviewed-by: Scott Graham <scottmg@chromium.org>
diff --git a/build/gen.py b/build/gen.py
index 6e23486..aa99775 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -87,8 +87,6 @@
                     help='Enable the use of LTO')
   parser.add_option('--use-icf', action='store_true',
                     help='Enable the use of Identical Code Folding')
-  parser.add_option('--no-sysroot', action='store_true',
-                    help='(Linux only) Do not build with the Debian sysroot.')
   parser.add_option('--no-last-commit-position', action='store_true',
                     help='Do not generate last_commit_position.h.')
   parser.add_option('--out-path',
@@ -104,18 +102,13 @@
   else:
     host = platform
 
-  linux_sysroot = None
-  if platform.is_linux() and not options.no_sysroot:
-    linux_sysroot = UpdateLinuxSysroot()
-
   out_dir = options.out_path or os.path.join(REPO_ROOT, 'out')
   if not os.path.isdir(out_dir):
     os.makedirs(out_dir)
   if not options.no_last_commit_position:
     GenerateLastCommitPosition(host,
                                os.path.join(out_dir, 'last_commit_position.h'))
-  WriteGNNinja(os.path.join(out_dir, 'build.ninja'), platform, host, options,
-               linux_sysroot)
+  WriteGNNinja(os.path.join(out_dir, 'build.ninja'), platform, host, options)
   return 0
 
 
@@ -298,7 +291,7 @@
             os.path.relpath(template_filename, os.path.dirname(path)) + '\n')
 
 
-def WriteGNNinja(path, platform, host, options, linux_sysroot):
+def WriteGNNinja(path, platform, host, options):
   if platform.is_msvc():
     cc = os.environ.get('CC', 'cl.exe')
     cxx = os.environ.get('CXX', 'cl.exe')
@@ -364,10 +357,6 @@
     cflags_cc.extend(['-std=c++14', '-Wno-c++11-narrowing'])
 
     if platform.is_linux():
-      if linux_sysroot:
-        # Use the sid sysroot that UpdateLinuxSysroot() downloads.
-        cflags.append('--sysroot=' + linux_sysroot)
-        ldflags.append('--sysroot=' + linux_sysroot)
       ldflags.extend([
           '-static-libstdc++',
           '-Wl,--as-needed',
diff --git a/infra/recipes/gn.expected/ci_linux.json b/infra/recipes/gn.expected/ci_linux.json
index 5cf23e8..6abc913 100644
--- a/infra/recipes/gn.expected/ci_linux.json
+++ b/infra/recipes/gn.expected/ci_linux.json
@@ -50,7 +50,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma\n@Subdir sysroot\nfuchsia/sysroot/${platform} git_revision:a28dfa20af063e5ca00634024c85732e20220419",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -68,6 +68,12 @@
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\", @@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/${platform}\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"sysroot\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revision:a28\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/sysroot/${platform}\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    ]@@@",
       "@@@STEP_LOG_LINE@json.output@  }@@@",
       "@@@STEP_LOG_LINE@json.output@}@@@",
@@ -96,8 +102,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.generate",
     "~followup_annotations": [
@@ -114,8 +121,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.ninja",
     "~followup_annotations": [
@@ -152,8 +160,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.generate",
     "~followup_annotations": [
@@ -170,8 +179,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.ninja",
     "~followup_annotations": [
diff --git a/infra/recipes/gn.expected/ci_mac.json b/infra/recipes/gn.expected/ci_mac.json
index 01c5006..c2398c7 100644
--- a/infra/recipes/gn.expected/ci_mac.json
+++ b/infra/recipes/gn.expected/ci_mac.json
@@ -75,17 +75,6 @@
     ]
   },
   {
-    "cmd": [],
-    "name": "debug"
-  },
-  {
-    "cmd": [],
-    "name": "debug.build",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
     "cmd": [
       "cipd",
       "ensure",
@@ -96,17 +85,9 @@
       "-json-output",
       "/path/to/tmp/json"
     ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
     "infra_step": true,
-    "name": "debug.build.ensure_installed",
+    "name": "ensure_installed (2)",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
@@ -131,18 +112,8 @@
       "-output-dir",
       "[CACHE]/macos_sdk/XCode.app"
     ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
     "infra_step": true,
-    "name": "debug.build.install xcode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
+    "name": "install xcode"
   },
   {
     "cmd": [
@@ -151,17 +122,30 @@
       "--switch",
       "[CACHE]/macos_sdk/XCode.app"
     ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
     "infra_step": true,
-    "name": "debug.build.select XCode",
+    "name": "select XCode"
+  },
+  {
+    "cmd": [
+      "xcrun",
+      "--show-sdk-path"
+    ],
+    "name": "xcrun",
+    "stdout": "/path/to/tmp/",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_LOG_LINE@raw_io.output[sdk-path]@/some/xcode/path@@@",
+      "@@@STEP_LOG_END@raw_io.output[sdk-path]@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
     ]
   },
   {
@@ -175,8 +159,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "debug.build.generate",
     "~followup_annotations": [
@@ -193,8 +178,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "debug.build.ninja",
     "~followup_annotations": [
@@ -203,25 +189,6 @@
   },
   {
     "cmd": [
-      "sudo",
-      "xcode-select",
-      "--reset"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "debug.build.reset XCode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "name": "debug.test",
@@ -242,85 +209,6 @@
   },
   {
     "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[CACHE]/macos_sdk",
-      "-ensure-file",
-      "infra/tools/mac_toolchain/${platform} git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revision:796\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/mac_toolchain/${platform}\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[CACHE]/macos_sdk/mac_toolchain",
-      "install",
-      "-kind",
-      "mac",
-      "-xcode-version",
-      "9c40b",
-      "-output-dir",
-      "[CACHE]/macos_sdk/XCode.app"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.install xcode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "sudo",
-      "xcode-select",
-      "--switch",
-      "[CACHE]/macos_sdk/XCode.app"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.select XCode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py"
@@ -329,8 +217,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "release.build.generate",
     "~followup_annotations": [
@@ -347,8 +236,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "release.build.ninja",
     "~followup_annotations": [
@@ -357,25 +247,6 @@
   },
   {
     "cmd": [
-      "sudo",
-      "xcode-select",
-      "--reset"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.reset XCode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "name": "release.test",
@@ -385,6 +256,15 @@
   },
   {
     "cmd": [
+      "sudo",
+      "xcode-select",
+      "--reset"
+    ],
+    "infra_step": true,
+    "name": "reset XCode"
+  },
+  {
+    "cmd": [
       "cipd",
       "pkg-build",
       "-pkg-def",
diff --git a/infra/recipes/gn.expected/ci_win.json b/infra/recipes/gn.expected/ci_win.json
index 1d46c58..b68df04 100644
--- a/infra/recipes/gn.expected/ci_win.json
+++ b/infra/recipes/gn.expected/ci_win.json
@@ -71,17 +71,6 @@
     ]
   },
   {
-    "cmd": [],
-    "name": "debug"
-  },
-  {
-    "cmd": [],
-    "name": "debug.build",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
     "cmd": [
       "cipd.bat",
       "ensure",
@@ -92,11 +81,9 @@
       "-json-output",
       "/path/to/tmp/json"
     ],
-    "cwd": "[START_DIR]\\gn",
     "infra_step": true,
-    "name": "debug.build.ensure_installed",
+    "name": "ensure_installed (2)",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
@@ -118,10 +105,8 @@
       "[CACHE]\\windows_sdk\\win_sdk\\bin\\SetEnv.x64.json",
       "/path/to/tmp/json"
     ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "debug.build.read SetEnv.x64.json",
+    "name": "read SetEnv.x64.json",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"env\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"PATH\": [@@@",
@@ -145,6 +130,33 @@
     ]
   },
   {
+    "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [
       "python",
       "-u",
@@ -187,22 +199,16 @@
   },
   {
     "cmd": [
-      "taskkill.exe",
-      "/f",
-      "/t",
-      "/im",
-      "mspdbsrv.exe"
-    ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "debug.build.taskkill mspdbsrv",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "[START_DIR]\\gn\\out\\gn_unittests"
     ],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
     "name": "debug.test",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
@@ -210,10 +216,26 @@
   },
   {
     "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
     "name": "release"
   },
   {
     "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
     "name": "release.build",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
@@ -221,69 +243,6 @@
   },
   {
     "cmd": [
-      "cipd.bat",
-      "ensure",
-      "-root",
-      "[CACHE]\\windows_sdk",
-      "-ensure-file",
-      "chrome_internal/third_party/sdk/windows uploaded:2018-06-13",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[START_DIR]\\gn",
-    "infra_step": true,
-    "name": "release.build.ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-uploaded:2018-06\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"chrome_internal/third_party/sdk/windows\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
-      "[CACHE]\\windows_sdk\\win_sdk\\bin\\SetEnv.x64.json",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "release.build.read SetEnv.x64.json",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"env\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"PATH\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      [@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"win_sdk\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"bin\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"x64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      ]@@@",
-      "@@@STEP_LOG_LINE@json.output@    ], @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"VSINSTALLDIR\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      [@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\\\\\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      ]@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
       "python",
       "-u",
       "[START_DIR]\\gn\\build\\gen.py"
@@ -324,26 +283,30 @@
   },
   {
     "cmd": [
+      "[START_DIR]\\gn\\out\\gn_unittests"
+    ],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "taskkill.exe",
       "/f",
       "/t",
       "/im",
       "mspdbsrv.exe"
     ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "release.build.taskkill mspdbsrv",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]\\gn\\out\\gn_unittests"
-    ],
-    "name": "release.test",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
+    "name": "taskkill mspdbsrv"
   },
   {
     "cmd": [
diff --git a/infra/recipes/gn.expected/cipd_exists.json b/infra/recipes/gn.expected/cipd_exists.json
index 50d8879..e1c3baf 100644
--- a/infra/recipes/gn.expected/cipd_exists.json
+++ b/infra/recipes/gn.expected/cipd_exists.json
@@ -50,7 +50,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma\n@Subdir sysroot\nfuchsia/sysroot/${platform} git_revision:a28dfa20af063e5ca00634024c85732e20220419",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -68,6 +68,12 @@
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\", @@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/${platform}\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"sysroot\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revision:a28\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/sysroot/${platform}\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    ]@@@",
       "@@@STEP_LOG_LINE@json.output@  }@@@",
       "@@@STEP_LOG_LINE@json.output@}@@@",
@@ -96,8 +102,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.generate",
     "~followup_annotations": [
@@ -114,8 +121,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.ninja",
     "~followup_annotations": [
@@ -152,8 +160,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.generate",
     "~followup_annotations": [
@@ -170,8 +179,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.ninja",
     "~followup_annotations": [
diff --git a/infra/recipes/gn.expected/cipd_register.json b/infra/recipes/gn.expected/cipd_register.json
index f075c99..36985d4 100644
--- a/infra/recipes/gn.expected/cipd_register.json
+++ b/infra/recipes/gn.expected/cipd_register.json
@@ -50,7 +50,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma\n@Subdir sysroot\nfuchsia/sysroot/${platform} git_revision:a28dfa20af063e5ca00634024c85732e20220419",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -68,6 +68,12 @@
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\", @@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/${platform}\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"sysroot\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revision:a28\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/sysroot/${platform}\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    ]@@@",
       "@@@STEP_LOG_LINE@json.output@  }@@@",
       "@@@STEP_LOG_LINE@json.output@}@@@",
@@ -96,8 +102,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.generate",
     "~followup_annotations": [
@@ -114,8 +121,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.ninja",
     "~followup_annotations": [
@@ -152,8 +160,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.generate",
     "~followup_annotations": [
@@ -170,8 +179,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.ninja",
     "~followup_annotations": [
diff --git a/infra/recipes/gn.expected/cq_linux.json b/infra/recipes/gn.expected/cq_linux.json
index f7309c0..6154c08 100644
--- a/infra/recipes/gn.expected/cq_linux.json
+++ b/infra/recipes/gn.expected/cq_linux.json
@@ -77,7 +77,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/clang/${platform} goma\n@Subdir sysroot\nfuchsia/sysroot/${platform} git_revision:a28dfa20af063e5ca00634024c85732e20220419",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -95,6 +95,12 @@
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\", @@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/${platform}\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
+      "@@@STEP_LOG_LINE@json.output@    ], @@@",
+      "@@@STEP_LOG_LINE@json.output@    \"sysroot\": [@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revision:a28\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/sysroot/${platform}\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    ]@@@",
       "@@@STEP_LOG_LINE@json.output@  }@@@",
       "@@@STEP_LOG_LINE@json.output@}@@@",
@@ -123,8 +129,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.generate",
     "~followup_annotations": [
@@ -141,8 +148,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "debug.build.ninja",
     "~followup_annotations": [
@@ -179,8 +187,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.generate",
     "~followup_annotations": [
@@ -197,8 +206,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=[START_DIR]/cipd/sysroot",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-static-libstdc++ -ldl -lpthread"
+      "LDFLAGS": "--sysroot=[START_DIR]/cipd/sysroot -static-libstdc++ -ldl -lpthread"
     },
     "name": "release.build.ninja",
     "~followup_annotations": [
diff --git a/infra/recipes/gn.expected/cq_mac.json b/infra/recipes/gn.expected/cq_mac.json
index 9eccbfe..64234cc 100644
--- a/infra/recipes/gn.expected/cq_mac.json
+++ b/infra/recipes/gn.expected/cq_mac.json
@@ -102,17 +102,6 @@
     ]
   },
   {
-    "cmd": [],
-    "name": "debug"
-  },
-  {
-    "cmd": [],
-    "name": "debug.build",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
     "cmd": [
       "cipd",
       "ensure",
@@ -123,17 +112,9 @@
       "-json-output",
       "/path/to/tmp/json"
     ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
     "infra_step": true,
-    "name": "debug.build.ensure_installed",
+    "name": "ensure_installed (2)",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
@@ -158,18 +139,8 @@
       "-output-dir",
       "[CACHE]/macos_sdk/XCode.app"
     ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
     "infra_step": true,
-    "name": "debug.build.install xcode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
+    "name": "install xcode"
   },
   {
     "cmd": [
@@ -178,17 +149,30 @@
       "--switch",
       "[CACHE]/macos_sdk/XCode.app"
     ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
     "infra_step": true,
-    "name": "debug.build.select XCode",
+    "name": "select XCode"
+  },
+  {
+    "cmd": [
+      "xcrun",
+      "--show-sdk-path"
+    ],
+    "name": "xcrun",
+    "stdout": "/path/to/tmp/",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
+      "@@@STEP_LOG_LINE@raw_io.output[sdk-path]@/some/xcode/path@@@",
+      "@@@STEP_LOG_END@raw_io.output[sdk-path]@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
     ]
   },
   {
@@ -202,8 +186,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "debug.build.generate",
     "~followup_annotations": [
@@ -220,8 +205,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "debug.build.ninja",
     "~followup_annotations": [
@@ -230,25 +216,6 @@
   },
   {
     "cmd": [
-      "sudo",
-      "xcode-select",
-      "--reset"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "debug.build.reset XCode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "name": "debug.test",
@@ -269,85 +236,6 @@
   },
   {
     "cmd": [
-      "cipd",
-      "ensure",
-      "-root",
-      "[CACHE]/macos_sdk",
-      "-ensure-file",
-      "infra/tools/mac_toolchain/${platform} git_revision:796d2b92cff93fc2059623ce0a66284373ceea0a",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revision:796\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/tools/mac_toolchain/${platform}\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[CACHE]/macos_sdk/mac_toolchain",
-      "install",
-      "-kind",
-      "mac",
-      "-xcode-version",
-      "9c40b",
-      "-output-dir",
-      "[CACHE]/macos_sdk/XCode.app"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.install xcode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "sudo",
-      "xcode-select",
-      "--switch",
-      "[CACHE]/macos_sdk/XCode.app"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.select XCode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py"
@@ -356,8 +244,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "release.build.generate",
     "~followup_annotations": [
@@ -374,8 +263,9 @@
     "env": {
       "AR": "[START_DIR]/cipd/bin/llvm-ar",
       "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--sysroot=/some/xcode/path",
       "CXX": "[START_DIR]/cipd/bin/clang++",
-      "LDFLAGS": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
+      "LDFLAGS": "--sysroot=/some/xcode/path -nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
     },
     "name": "release.build.ninja",
     "~followup_annotations": [
@@ -384,25 +274,6 @@
   },
   {
     "cmd": [
-      "sudo",
-      "xcode-select",
-      "--reset"
-    ],
-    "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": "-nostdlib++ [START_DIR]/cipd/lib/libc++.a [START_DIR]/cipd/lib/libc++abi.a [START_DIR]/cipd/lib/libunwind.a"
-    },
-    "infra_step": true,
-    "name": "release.build.reset XCode",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "[START_DIR]/gn/out/gn_unittests"
     ],
     "name": "release.test",
@@ -411,6 +282,15 @@
     ]
   },
   {
+    "cmd": [
+      "sudo",
+      "xcode-select",
+      "--reset"
+    ],
+    "infra_step": true,
+    "name": "reset XCode"
+  },
+  {
     "name": "$result",
     "recipe_result": null,
     "status_code": 0
diff --git a/infra/recipes/gn.expected/cq_win.json b/infra/recipes/gn.expected/cq_win.json
index 57dea98..658c445 100644
--- a/infra/recipes/gn.expected/cq_win.json
+++ b/infra/recipes/gn.expected/cq_win.json
@@ -98,17 +98,6 @@
     ]
   },
   {
-    "cmd": [],
-    "name": "debug"
-  },
-  {
-    "cmd": [],
-    "name": "debug.build",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
     "cmd": [
       "cipd.bat",
       "ensure",
@@ -119,11 +108,9 @@
       "-json-output",
       "/path/to/tmp/json"
     ],
-    "cwd": "[START_DIR]\\gn",
     "infra_step": true,
-    "name": "debug.build.ensure_installed",
+    "name": "ensure_installed (2)",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
@@ -145,10 +132,8 @@
       "[CACHE]\\windows_sdk\\win_sdk\\bin\\SetEnv.x64.json",
       "/path/to/tmp/json"
     ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "debug.build.read SetEnv.x64.json",
+    "name": "read SetEnv.x64.json",
     "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"env\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"PATH\": [@@@",
@@ -172,6 +157,33 @@
     ]
   },
   {
+    "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
+    "name": "debug"
+  },
+  {
+    "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
+    "name": "debug.build",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [
       "python",
       "-u",
@@ -214,22 +226,16 @@
   },
   {
     "cmd": [
-      "taskkill.exe",
-      "/f",
-      "/t",
-      "/im",
-      "mspdbsrv.exe"
-    ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "debug.build.taskkill mspdbsrv",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
       "[START_DIR]\\gn\\out\\gn_unittests"
     ],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
     "name": "debug.test",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
@@ -237,10 +243,26 @@
   },
   {
     "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
     "name": "release"
   },
   {
     "cmd": [],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
     "name": "release.build",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@"
@@ -248,69 +270,6 @@
   },
   {
     "cmd": [
-      "cipd.bat",
-      "ensure",
-      "-root",
-      "[CACHE]\\windows_sdk",
-      "-ensure-file",
-      "chrome_internal/third_party/sdk/windows uploaded:2018-06-13",
-      "-json-output",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[START_DIR]\\gn",
-    "infra_step": true,
-    "name": "release.build.ensure_installed",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      {@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-uploaded:2018-06\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"package\": \"chrome_internal/third_party/sdk/windows\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      }@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
-      "[CACHE]\\windows_sdk\\win_sdk\\bin\\SetEnv.x64.json",
-      "/path/to/tmp/json"
-    ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "release.build.read SetEnv.x64.json",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@",
-      "@@@STEP_LOG_LINE@json.output@{@@@",
-      "@@@STEP_LOG_LINE@json.output@  \"env\": {@@@",
-      "@@@STEP_LOG_LINE@json.output@    \"PATH\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      [@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"win_sdk\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"bin\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"x64\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      ]@@@",
-      "@@@STEP_LOG_LINE@json.output@    ], @@@",
-      "@@@STEP_LOG_LINE@json.output@    \"VSINSTALLDIR\": [@@@",
-      "@@@STEP_LOG_LINE@json.output@      [@@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\", @@@",
-      "@@@STEP_LOG_LINE@json.output@        \"..\\\\\"@@@",
-      "@@@STEP_LOG_LINE@json.output@      ]@@@",
-      "@@@STEP_LOG_LINE@json.output@    ]@@@",
-      "@@@STEP_LOG_LINE@json.output@  }@@@",
-      "@@@STEP_LOG_LINE@json.output@}@@@",
-      "@@@STEP_LOG_END@json.output@@@"
-    ]
-  },
-  {
-    "cmd": [
       "python",
       "-u",
       "[START_DIR]\\gn\\build\\gen.py"
@@ -351,26 +310,30 @@
   },
   {
     "cmd": [
+      "[START_DIR]\\gn\\out\\gn_unittests"
+    ],
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]\\windows_sdk\\win_sdk\\bin\\x64"
+      ]
+    },
+    "name": "release.test",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "taskkill.exe",
       "/f",
       "/t",
       "/im",
       "mspdbsrv.exe"
     ],
-    "cwd": "[START_DIR]\\gn",
-    "name": "release.build.taskkill mspdbsrv",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]\\gn\\out\\gn_unittests"
-    ],
-    "name": "release.test",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
+    "name": "taskkill mspdbsrv"
   },
   {
     "name": "$result",
diff --git a/infra/recipes/gn.py b/infra/recipes/gn.py
index 208e795..15c404a 100644
--- a/infra/recipes/gn.py
+++ b/infra/recipes/gn.py
@@ -55,27 +55,12 @@
     pkgs.add_package('infra/ninja/${platform}', 'version:1.8.2')
     if api.platform.is_linux or api.platform.is_mac:
       pkgs.add_package('fuchsia/clang/${platform}', 'goma')
+    if api.platform.is_linux:
+      pkgs.add_package('fuchsia/sysroot/${platform}',
+                       'git_revision:a28dfa20af063e5ca00634024c85732e20220419',
+                       'sysroot')
     api.cipd.ensure(cipd_dir, pkgs)
 
-  stdlib = '%s %s %s' % (cipd_dir.join('lib', 'libc++.a'),
-                         cipd_dir.join('lib', 'libc++abi.a'),
-                         cipd_dir.join('lib', 'libunwind.a'))
-  env = {
-      'linux': {
-          'CC': cipd_dir.join('bin', 'clang'),
-          'CXX': cipd_dir.join('bin', 'clang++'),
-          'AR': cipd_dir.join('bin', 'llvm-ar'),
-          'LDFLAGS': '-static-libstdc++ -ldl -lpthread',
-      },
-      'mac': {
-          'CC': cipd_dir.join('bin', 'clang'),
-          'CXX': cipd_dir.join('bin', 'clang++'),
-          'AR': cipd_dir.join('bin', 'llvm-ar'),
-          'LDFLAGS': '-nostdlib++ ' + stdlib,
-      },
-      'win': {},
-  }[api.platform.name]
-
   # The order is important since release build will get uploaded to CIPD.
   configs = [
       {
@@ -88,18 +73,46 @@
       },
   ]
 
-  for config in configs:
-    with api.step.nest(config['name']):
-      with api.step.nest('build'):
-        with api.context(
-            env=env, cwd=src_dir), api.macos_sdk(), api.windows_sdk():
+  with api.macos_sdk(), api.windows_sdk():
+    if api.platform.is_linux:
+      sysroot = '--sysroot=%s' % cipd_dir.join('sysroot')
+      env = {
+          'CC': cipd_dir.join('bin', 'clang'),
+          'CXX': cipd_dir.join('bin', 'clang++'),
+          'AR': cipd_dir.join('bin', 'llvm-ar'),
+          'CFLAGS': sysroot,
+          'LDFLAGS': '%s -static-libstdc++ -ldl -lpthread' % sysroot,
+      }
+    elif api.platform.is_mac:
+      sysroot = '--sysroot=%s' % api.step(
+          'xcrun', ['xcrun', '--show-sdk-path'],
+          stdout=api.raw_io.output(name='sdk-path', add_output_log=True),
+          step_test_data=
+          lambda: api.raw_io.test_api.stream_output('/some/xcode/path')
+      ).stdout.strip()
+      stdlib = '%s %s %s' % (cipd_dir.join('lib', 'libc++.a'),
+                             cipd_dir.join('lib', 'libc++abi.a'),
+                             cipd_dir.join('lib', 'libunwind.a'))
+      env = {
+          'CC': cipd_dir.join('bin', 'clang'),
+          'CXX': cipd_dir.join('bin', 'clang++'),
+          'AR': cipd_dir.join('bin', 'llvm-ar'),
+          'CFLAGS': sysroot,
+          'LDFLAGS': '%s -nostdlib++ %s' % (sysroot, stdlib),
+      }
+    else:
+      env = {}
+
+    for config in configs:
+      with api.step.nest(config['name']):
+        with api.step.nest('build'), api.context(env=env, cwd=src_dir):
           api.python(
               'generate', src_dir.join('build', 'gen.py'), args=config['args'])
 
           # Windows requires the environment modifications when building too.
           api.step('ninja', [cipd_dir.join('ninja'), '-C', src_dir.join('out')])
 
-      api.step('test', [src_dir.join('out', 'gn_unittests')])
+        api.step('test', [src_dir.join('out', 'gn_unittests')])
 
   if build_input.gerrit_changes:
     return