diff options
Diffstat (limited to 'chromium/build/toolchain/win/BUILD.gn')
-rw-r--r-- | chromium/build/toolchain/win/BUILD.gn | 75 |
1 files changed, 53 insertions, 22 deletions
diff --git a/chromium/build/toolchain/win/BUILD.gn b/chromium/build/toolchain/win/BUILD.gn index de31ceb25cb..25e95f164a5 100644 --- a/chromium/build/toolchain/win/BUILD.gn +++ b/chromium/build/toolchain/win/BUILD.gn @@ -130,23 +130,55 @@ template("msvc_toolchain") { # ninja does not have -t msvc other than windows, and lld doesn't depend on # mt.exe in PATH on non-Windows, so it's not needed there anyways. - if (defined(invoker.sys_lib_flags)) { + if (host_os != "win") { linker_wrapper = "" sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space - } else if (use_lld) { + } else if (defined(invoker.sys_lib_flags)) { # Invoke ninja as wrapper instead of tool wrapper, because python # invocation requires higher cpu usage compared to ninja invocation, and # the python wrapper is only needed to work around link.exe problems. # TODO(thakis): Remove wrapper once lld-link can merge manifests without # relying on mt.exe being in %PATH% on Windows, https://crbug.com/872740 linker_wrapper = "ninja -t msvc -e $env -- " # Note trailing space. - sys_lib_flags = "" + sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space } else { linker_wrapper = "$python_path $tool_wrapper_path link-wrapper $env False " # Note trailing space. sys_lib_flags = "" } + if (defined(toolchain_args.use_clang_coverage)) { + toolchain_use_clang_coverage = toolchain_args.use_clang_coverage + } else { + toolchain_use_clang_coverage = use_clang_coverage + } + + if (toolchain_use_clang_coverage) { + assert(toolchain_args.is_clang, + "use_clang_coverage should only be used with Clang") + if (defined(toolchain_args.coverage_instrumentation_input_file)) { + toolchain_coverage_instrumentation_input_file = + toolchain_args.coverage_instrumentation_input_file + } else { + toolchain_coverage_instrumentation_input_file = + coverage_instrumentation_input_file + } + + coverage_wrapper = + rebase_path("//build/toolchain/clang_code_coverage_wrapper.py", + root_build_dir) + coverage_wrapper = coverage_wrapper + " --target-os=" + target_os + if (toolchain_coverage_instrumentation_input_file != "") { + coverage_wrapper = + coverage_wrapper + " --files-to-instrument=" + + rebase_path(toolchain_coverage_instrumentation_input_file, + root_build_dir) + } + coverage_wrapper = "$python_path " + coverage_wrapper + " " + } else { + coverage_wrapper = "" + } + tool("cc") { precompiled_header_type = "msvc" pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" @@ -160,7 +192,7 @@ template("msvc_toolchain") { "$object_subdir/{{source_name_part}}.obj", ] - command = "$env_wrapper$cl /nologo /showIncludes $sys_include_flags{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" + command = "$coverage_wrapper$env_wrapper$cl /nologo /showIncludes $sys_include_flags{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" } tool("cxx") { @@ -176,7 +208,7 @@ template("msvc_toolchain") { "$object_subdir/{{source_name_part}}.obj", ] - command = "$env_wrapper$cl /nologo /showIncludes $sys_include_flags{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" + command = "$coverage_wrapper$env_wrapper$cl /nologo /showIncludes $sys_include_flags{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" } tool("rc") { @@ -356,21 +388,23 @@ template("win_toolchains") { ], "scope") - msvc_toolchain(target_name) { - environment = "environment." + toolchain_arch - cl = "${goma_prefix}\"${win_toolchain_data.vc_bin_dir}/cl.exe\"" - if (host_os != "win") { - # For win cross build - sys_lib_flags = "${win_toolchain_data.libpath_flags}" - } + # The toolchain using MSVC only makes sense when not doing cross builds. + # Chromium exclusively uses the win_clang_ toolchain below, but V8 and + # WebRTC still use this MSVC toolchain in some cases. + if (host_os == "win") { + msvc_toolchain(target_name) { + environment = "environment." + toolchain_arch + cl = "${goma_prefix}\"${win_toolchain_data.vc_bin_dir}/cl.exe\"" - toolchain_args = { - if (defined(invoker.toolchain_args)) { - forward_variables_from(invoker.toolchain_args, "*") + toolchain_args = { + if (defined(invoker.toolchain_args)) { + forward_variables_from(invoker.toolchain_args, "*") + } + is_clang = false + use_clang_coverage = false + current_os = "win" + current_cpu = toolchain_arch } - is_clang = false - current_os = "win" - current_cpu = toolchain_arch } } @@ -383,10 +417,7 @@ template("win_toolchains") { cl = string_replace(cl, "/", "\\") } sys_include_flags = "${win_toolchain_data.include_flags_imsvc}" - if (host_os != "win") { - # For win cross build - sys_lib_flags = "${win_toolchain_data.libpath_flags}" - } + sys_lib_flags = "${win_toolchain_data.libpath_flags}" toolchain_args = { if (defined(invoker.toolchain_args)) { |