From 30b268dd7d8da498c15907470bc5d7b642664317 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Fri, 7 Sep 2018 20:19:44 +0200 Subject: [PATCH] build: override host_toolchain on windows to use sccache with v8 --- build_extra/toolchain/validate.gni | 22 +++++++++++++--------- tools/setup.py | 11 ++++++----- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/build_extra/toolchain/validate.gni b/build_extra/toolchain/validate.gni index 79c013e8df..a1fe7189bf 100644 --- a/build_extra/toolchain/validate.gni +++ b/build_extra/toolchain/validate.gni @@ -2,14 +2,18 @@ import("//build/toolchain/cc_wrapper.gni") -# Verify that cc_wrapper is correctly set up on Windows. -if (is_win && cc_wrapper != "" && custom_toolchain == "") { - suggested_toolchain = "//build_extra/toolchain/win:win_clang_$target_cpu" +# Verify that the cc_wrapper/toolchain combo correctly set up on Windows. +if (is_win && cc_wrapper != "") { + cc_wrapper_toolchain = "//build_extra/toolchain/win:win_clang_$target_cpu" + toolchain_supports_cc_wrapper = cc_wrapper_toolchain == default_toolchain && + cc_wrapper_toolchain == host_toolchain - # Use print instead of assert with message for readability. - print( - "The 'cc_wrapper' option isn't supported by the default Windows toolchain.") - print("To make it work, add the option:") - print(" custom_toolchain=\"$suggested_toolchain\"") - assert(custom_toolchain != "") + if (!toolchain_supports_cc_wrapper) { + # Using print instead of assert-with-message for readability of the output. + print("The 'cc_wrapper' option isn't supported by the default Windows" + + " toolchain. To make it work, add these gn arguments:") + print(" custom_toolchain=\"$cc_wrapper_toolchain\"") + print(" host_toolchain=\"$cc_wrapper_toolchain\"") + assert(toolchain_supports_cc_wrapper) + } } diff --git a/tools/setup.py b/tools/setup.py index 9dff9eb207..737f80017f 100755 --- a/tools/setup.py +++ b/tools/setup.py @@ -59,12 +59,13 @@ def get_gn_args(): # Check if ccache or sccache are in the path, and if so we set cc_wrapper. cc_wrapper = find_executable("ccache") or find_executable("sccache") if cc_wrapper: - out += [r'cc_wrapper="%s"' % cc_wrapper] - # Windows needs a custom toolchain for cc_wrapper to work. + out += ['cc_wrapper="%s"' % cc_wrapper] + # For cc_wrapper to work on Windows, we need to select our own toolchain + # by overriding 'custom_toolchain' and 'host_toolchain'. + # TODO: Is there a way to use it without the involvement of args.gn? if os.name == "nt": - out += [ - 'custom_toolchain="//build_extra/toolchain/win:win_clang_x64"' - ] + tc = "//build_extra/toolchain/win:win_clang_x64" + out += ['custom_toolchain="%s"' % tc, 'host_toolchain="%s"' % tc] print "DENO_BUILD_ARGS:", out