Attempt at making Windows bots work The compiler/linker/sdk should work now, once the ninja cipd package is available. Change-Id: Ic518b5ebab10529dcdf8f79b6741f96959fd424d Reviewed-on: https://gn-review.googlesource.com/1460 Reviewed-by: Petr Hosek <phosek@google.com> Commit-Queue: Scott Graham <scottmg@chromium.org>
diff --git a/infra/README.recipes.md b/infra/README.recipes.md index 8ee6bd2..7e43239 100644 --- a/infra/README.recipes.md +++ b/infra/README.recipes.md
@@ -8,15 +8,16 @@ ### *recipes* / [gn](/infra/recipes/gn.py) -[DEPS](/infra/recipes/gn.py#6): [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step] +[DEPS](/infra/recipes/gn.py#6): [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/python][recipe_engine/recipe_modules/python], [recipe\_engine/step][recipe_engine/recipe_modules/step] Recipe for building GN. -— **def [RunSteps](/infra/recipes/gn.py#18)(api):** +— **def [RunSteps](/infra/recipes/gn.py#19)(api):** [recipe_engine/recipe_modules/buildbucket]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-buildbucket [recipe_engine/recipe_modules/cipd]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-cipd [recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-context +[recipe_engine/recipe_modules/json]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-json [recipe_engine/recipe_modules/path]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-path [recipe_engine/recipe_modules/platform]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-platform [recipe_engine/recipe_modules/properties]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/40699af88c76d65ef1b3d364de221611603e2dc6/README.recipes.md#recipe_modules-properties
diff --git a/infra/recipes/gn.expected/ci_win.json b/infra/recipes/gn.expected/ci_win.json index b69295b..ddcdc94 100644 --- a/infra/recipes/gn.expected/ci_win.json +++ b/infra/recipes/gn.expected/ci_win.json
@@ -49,7 +49,7 @@ "-root", "[START_DIR]\\cipd", "-ensure-file", - "infra/ninja/${platform} version:1.8.2", + "chrome_internal/third_party/sdk/windows latest\ninfra/ninja/${platform} version:1.8.2", "-json-output", "/path/to/tmp/json" ], @@ -60,6 +60,10 @@ "@@@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-latest----------\", @@@", + "@@@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@ \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\", @@@", "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/ninja/${platform}\"@@@", "@@@STEP_LOG_LINE@json.output@ }@@@", @@ -70,6 +74,76 @@ ] }, { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[START_DIR]\\cipd\\win_sdk\\bin\\SetEnv.x64.json", + "/path/to/tmp/json" + ], + "name": "SetEnv.x64.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"INCLUDE\": [@@@", + "@@@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@ \"Include\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"um\"@@@", + "@@@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@ \"win_sdk\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Include\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"shared\"@@@", + "@@@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@ \"win_sdk\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Include\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"winrt\"@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@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@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"x64\"@@@", + "@@@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@ \"VC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Tools\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"14.14.26428\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"bin\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"HostX64\", @@@", + "@@@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": [], "name": "debug" }, @@ -88,6 +162,16 @@ "-d" ], "cwd": "[START_DIR]\\gn", + "env": { + "INCLUDE": "[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\um;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\shared;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\winrt", + "VSINSTALLDIR": "[START_DIR]\\cipd" + }, + "env_prefixes": { + "PATH": [ + "[START_DIR]\\cipd\\win_sdk\\bin\\10.0.17134.0\\x64", + "[START_DIR]\\cipd\\VC\\Tools\\MSVC\\14.14.26428\\bin\\HostX64\\x64" + ] + }, "name": "debug.build.generate", "~followup_annotations": [ "@@@STEP_NEST_LEVEL@2@@@" @@ -132,6 +216,16 @@ "[START_DIR]\\gn\\build\\gen.py" ], "cwd": "[START_DIR]\\gn", + "env": { + "INCLUDE": "[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\um;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\shared;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\winrt", + "VSINSTALLDIR": "[START_DIR]\\cipd" + }, + "env_prefixes": { + "PATH": [ + "[START_DIR]\\cipd\\win_sdk\\bin\\10.0.17134.0\\x64", + "[START_DIR]\\cipd\\VC\\Tools\\MSVC\\14.14.26428\\bin\\HostX64\\x64" + ] + }, "name": "release.build.generate", "~followup_annotations": [ "@@@STEP_NEST_LEVEL@2@@@"
diff --git a/infra/recipes/gn.expected/cq_win.json b/infra/recipes/gn.expected/cq_win.json index b1beb7e..b3f46ba 100644 --- a/infra/recipes/gn.expected/cq_win.json +++ b/infra/recipes/gn.expected/cq_win.json
@@ -76,7 +76,7 @@ "-root", "[START_DIR]\\cipd", "-ensure-file", - "infra/ninja/${platform} version:1.8.2", + "chrome_internal/third_party/sdk/windows latest\ninfra/ninja/${platform} version:1.8.2", "-json-output", "/path/to/tmp/json" ], @@ -87,6 +87,10 @@ "@@@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-latest----------\", @@@", + "@@@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@ \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\", @@@", "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/ninja/${platform}\"@@@", "@@@STEP_LOG_LINE@json.output@ }@@@", @@ -97,6 +101,76 @@ ] }, { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[START_DIR]\\cipd\\win_sdk\\bin\\SetEnv.x64.json", + "/path/to/tmp/json" + ], + "name": "SetEnv.x64.json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"INCLUDE\": [@@@", + "@@@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@ \"Include\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"um\"@@@", + "@@@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@ \"win_sdk\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Include\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"shared\"@@@", + "@@@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@ \"win_sdk\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Include\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"winrt\"@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@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@ \"10.0.17134.0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"x64\"@@@", + "@@@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@ \"VC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Tools\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"14.14.26428\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"bin\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"HostX64\", @@@", + "@@@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": [], "name": "debug" }, @@ -115,6 +189,16 @@ "-d" ], "cwd": "[START_DIR]\\gn", + "env": { + "INCLUDE": "[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\um;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\shared;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\winrt", + "VSINSTALLDIR": "[START_DIR]\\cipd" + }, + "env_prefixes": { + "PATH": [ + "[START_DIR]\\cipd\\win_sdk\\bin\\10.0.17134.0\\x64", + "[START_DIR]\\cipd\\VC\\Tools\\MSVC\\14.14.26428\\bin\\HostX64\\x64" + ] + }, "name": "debug.build.generate", "~followup_annotations": [ "@@@STEP_NEST_LEVEL@2@@@" @@ -159,6 +243,16 @@ "[START_DIR]\\gn\\build\\gen.py" ], "cwd": "[START_DIR]\\gn", + "env": { + "INCLUDE": "[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\um;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\shared;[START_DIR]\\cipd\\win_sdk\\Include\\10.0.17134.0\\winrt", + "VSINSTALLDIR": "[START_DIR]\\cipd" + }, + "env_prefixes": { + "PATH": [ + "[START_DIR]\\cipd\\win_sdk\\bin\\10.0.17134.0\\x64", + "[START_DIR]\\cipd\\VC\\Tools\\MSVC\\14.14.26428\\bin\\HostX64\\x64" + ] + }, "name": "release.build.generate", "~followup_annotations": [ "@@@STEP_NEST_LEVEL@2@@@"
diff --git a/infra/recipes/gn.py b/infra/recipes/gn.py index 81d3f07..212cd96 100644 --- a/infra/recipes/gn.py +++ b/infra/recipes/gn.py
@@ -7,6 +7,7 @@ 'recipe_engine/buildbucket', 'recipe_engine/cipd', 'recipe_engine/context', + 'recipe_engine/json', 'recipe_engine/path', 'recipe_engine/platform', 'recipe_engine/properties', @@ -48,10 +49,51 @@ 'fuchsia/clang/${platform}': 'goma', }, 'mac': {}, - 'win': {}, + 'win': { + 'chrome_internal/third_party/sdk/windows': 'uploaded:2018-06-13', + }, }[api.platform.name]) api.cipd.ensure(cipd_dir, packages) + environ_pre = {} + + win_env = {} + if api.platform.name == 'win': + # Load .../win_sdk/bin/SetEnv.x64.json to extract the required environment. + # It contains a dict that looks like this: + # { + # "env": { + # "VAR": [["..", "..", "x"], ["..", "..", "y"]], + # ... + # } + # } + # All these environment variables need to be added to the environment + # for the compiler and linker to work. + + json_file = cipd_dir.join('win_sdk', 'bin', 'SetEnv.x64.json') + env = api.json.read('SetEnv.x64.json', json_file).json.output.get('env') + for k in env: + # recipes' Path() does not like .., ., \, or /, so this is cumbersome. + # What we want to do is: + # [sdk_bin_dir.join(*e) for e in env[k]] + # Instead do that badly, and rely (but verify) on the fact that the paths + # are all specified relative to the root, but specified relative to + # win_sdk/bin (i.e. everything starts with "../../".) + results = [] + for data in env[k]: + assert data[0] == '..' and (data[1] == '..' or data[1] == '..\\') + root_relative = data[2:] + results.append('%s' % cipd_dir.join(*root_relative)) + + # PATH is special-cased because we don't want to overwrite other things + # like C:\Windows\System32. Others are replacements because prepending + # doesn't necessarily makes sense, like VSINSTALLDIR. + if k.lower() == 'path': + # env_prefixes wants a list, not a string like env. + environ_pre[k] = results + else: + win_env[k] = ';'.join(results) + environ = { 'linux': { 'CC': cipd_dir.join('bin', 'clang'), @@ -60,7 +102,7 @@ 'LDFLAGS': '-static-libstdc++ -ldl -lpthread', }, 'mac': {}, - 'win': {}, + 'win': win_env, }[api.platform.name] configs = [ @@ -77,7 +119,7 @@ for config in configs: with api.step.nest(config['name']): with api.step.nest('build'): - with api.context(env=environ, cwd=src_dir): + with api.context(env=environ, env_prefixes=environ_pre, cwd=src_dir): api.python('generate', src_dir.join('build', 'gen.py'), args=config['args']) @@ -89,22 +131,37 @@ def GenTests(api): + WIN_TOOLCHAIN_DATA = { + "env": { + "VSINSTALLDIR": [["..", "..\\"]], + "INCLUDE": [["..", "..", "win_sdk", "Include", "10.0.17134.0", "um"], ["..", "..", "win_sdk", "Include", "10.0.17134.0", "shared"], ["..", "..", "win_sdk", "Include", "10.0.17134.0", "winrt"]], + "PATH": [["..", "..", "win_sdk", "bin", "10.0.17134.0", "x64"], ["..", "..", "VC", "Tools", "MSVC", "14.14.26428", "bin", "HostX64", "x64"]], + } + } for platform in ('linux', 'mac', 'win'): - yield (api.test('ci_' + platform) + api.platform.name(platform) + - api.properties(buildbucket={ - 'build': { - 'tags': [ - 'buildset:commit/gitiles/gn.googlesource.com/gn/+/' - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', - ] - } - })) - yield ( - api.test('cq_' + platform) + api.platform.name(platform) + - api.properties(buildbucket={ - 'build': { - 'tags': [ - 'buildset:patch/gerrit/gn-review.googlesource.com/1000/1', - ] - } - })) + to_yield = (api.test('ci_' + platform) + api.platform.name(platform) + + api.properties(buildbucket={ + 'build': { + 'tags': [ + 'buildset:commit/gitiles/gn.googlesource.com/gn/+/' + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + ] + } + })) + if platform == 'win': + to_yield += api.override_step_data('SetEnv.x64.json', + api.json.output(WIN_TOOLCHAIN_DATA)) + yield to_yield + + to_yield = (api.test('cq_' + platform) + api.platform.name(platform) + + api.properties(buildbucket={ + 'build': { + 'tags': [ + 'buildset:patch/gerrit/gn-review.googlesource.com/1000/1', + ] + } + })) + if platform == 'win': + to_yield += api.override_step_data('SetEnv.x64.json', + api.json.output(WIN_TOOLCHAIN_DATA)) + yield to_yield