From cb1bc28f3731b07380a37be600f6ba8108b2a7a7 Mon Sep 17 00:00:00 2001 From: "Ian (Hee) Cha" Date: Wed, 28 Aug 2024 00:37:38 -0700 Subject: [PATCH] [7.4.0] Fix ml path for Windows clang-cl cc toolchain (#23406) Assembly files are not valid inputs for `clang-cl.exe`; the MSVC `ml64.exe` must be used instead. Fixes #23128. Closes #23337. PiperOrigin-RevId: 666406544 Change-Id: Ia7a5fc4702f08a5754145ca286c079d1a4f0e204 Commit https://github.com/bazelbuild/bazel/commit/e5a083d47e7174357997c851c20521e03a9c80ce --------- Co-authored-by: Michael Siegrist --- src/test/py/bazel/bazel_windows_cpp_test.py | 75 +++++++++++++++------ tools/cpp/windows_cc_configure.bzl | 3 +- 2 files changed, 57 insertions(+), 21 deletions(-) diff --git a/src/test/py/bazel/bazel_windows_cpp_test.py b/src/test/py/bazel/bazel_windows_cpp_test.py index 1d28826e43769f..1c4edbd8c3c4e3 100644 --- a/src/test/py/bazel/bazel_windows_cpp_test.py +++ b/src/test/py/bazel/bazel_windows_cpp_test.py @@ -775,26 +775,61 @@ def testBuildWithClangClByToolchainResolution(self): ' "@local_config_cc//:cc-toolchain-x64_windows-clang-cl",', ')', ]) - self.ScratchFile('BUILD', [ - 'platform(', - ' name = "windows_clang",', - ' constraint_values = [', - ' "@platforms//cpu:x86_64",', - ' "@platforms//os:windows",', - ' "@bazel_tools//tools/cpp:clang-cl",', - ' ]', - ')', - '', - 'cc_binary(', - ' name = "main",', - ' srcs = ["main.cc"],', - ')', - ]) - self.ScratchFile('main.cc', [ - 'int main() {', - ' return 0;', - '}', - ]) + self.ScratchFile( + 'BUILD', + [ + 'platform(', + ' name = "windows_clang",', + ' constraint_values = [', + ' "@platforms//cpu:x86_64",', + ' "@platforms//os:windows",', + ' "@bazel_tools//tools/cpp:clang-cl",', + ' ]', + ')', + '', + 'cc_binary(', + ' name = "main",', + ' srcs = [ "main.cc",', + ' "inc.asm",', # Test assemble action_config + ' "dec.S",', # Test preprocess-assemble action_config + ' ],', + ')', + ], + ) + self.ScratchFile( + 'main.cc', + [ + 'int main() {', + ' return 0;', + '}', + ], + ) + self.ScratchFile( + 'inc.asm', + [ + '.code', + 'PUBLIC increment', + 'increment PROC x:WORD', + ' xchg rcx,rax', + ' inc rax', + ' ret', + 'increment EndP', + 'END', + ], + ) + self.ScratchFile( + 'dec.S', + [ + '.code', + 'PUBLIC decrement', + 'decrement PROC x:WORD', + ' xchg rcx,rax', + ' dec rax', + ' ret', + 'decrement EndP', + 'END', + ], + ) exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--incompatible_enable_cc_toolchain_resolution=true', '//:main' diff --git a/tools/cpp/windows_cc_configure.bzl b/tools/cpp/windows_cc_configure.bzl index 4c3e367b22b4f8..fe41e469bcbe2d 100644 --- a/tools/cpp/windows_cc_configure.bzl +++ b/tools/cpp/windows_cc_configure.bzl @@ -793,7 +793,8 @@ def _get_clang_cl_vars(repository_ctx, paths, msvc_vars, target_arch): "%{clang_cl_cl_path_" + target_arch + "}": clang_cl_path, "%{clang_cl_link_path_" + target_arch + "}": lld_link_path, "%{clang_cl_lib_path_" + target_arch + "}": llvm_lib_path, - "%{clang_cl_ml_path_" + target_arch + "}": clang_cl_path, + # clang-cl does not support assembly files as input. + "%{clang_cl_ml_path_" + target_arch + "}": msvc_vars["%{msvc_ml_path_" + target_arch + "}"], # LLVM's lld-link.exe doesn't support /DEBUG:FASTLINK. "%{clang_cl_dbg_mode_debug_flag_" + target_arch + "}": "/DEBUG", "%{clang_cl_fastbuild_mode_debug_flag_" + target_arch + "}": "/DEBUG",