From e38e305a351de54ff3ea570c7d895d0b99751214 Mon Sep 17 00:00:00 2001 From: Stefan Stojanovic Date: Mon, 9 Sep 2024 12:26:00 +0200 Subject: [PATCH] build,win: enable clang-cl compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This uses the backported ICU fix needed for compiling with ClangCL. Refs: https://github.com/nodejs/node/pull/54502 Fixes: https://github.com/nodejs/node/issues/34201 PR-URL: https://github.com/nodejs/node/pull/54655 Refs: https://github.com/nodejs/node/issues/52809 Reviewed-By: Michaƫl Zasso Reviewed-By: Steven R Loomis --- tools/icu/icu-generic.gyp | 51 ++++++++++++++++++++++++++++----------- tools/v8_gypfiles/v8.gyp | 26 +++++++++++++++++++- 2 files changed, 62 insertions(+), 15 deletions(-) diff --git a/tools/icu/icu-generic.gyp b/tools/icu/icu-generic.gyp index 2655b9e694fc13..f007c65232c0d6 100644 --- a/tools/icu/icu-generic.gyp +++ b/tools/icu/icu-generic.gyp @@ -139,20 +139,43 @@ # full data - just build the full data file, then we are done. 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness)_dat.<(icu_asm_ext)' ], 'dependencies': [ 'genccode#host' ], - 'actions': [ - { - 'action_name': 'icudata', - 'msvs_quote_cmd': 0, - 'inputs': [ '<(icu_data_in)' ], - 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness)_dat.<(icu_asm_ext)' ], - # on Windows, we can go directly to .obj file (-o) option. - 'action': [ '<(PRODUCT_DIR)/genccode<(EXECUTABLE_SUFFIX)', - '<@(icu_asm_opts)', # -o - '-d', '<(SHARED_INTERMEDIATE_DIR)', - '-n', 'icudata', - '-e', 'icudt<(icu_ver_major)', - '<@(_inputs)' ], - }, + 'conditions': [ + [ 'clang==1', { + 'actions': [ + { + 'action_name': 'icudata', + 'msvs_quote_cmd': 0, + 'inputs': [ '<(icu_data_in)' ], + 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness)_dat.<(icu_asm_ext)' ], + # on Windows, we can go directly to .obj file (-o) option. + # for Clang use "-c <(target_arch)" option + 'action': [ '<(PRODUCT_DIR)/genccode<(EXECUTABLE_SUFFIX)', + '<@(icu_asm_opts)', # -o + '-c', '<(target_arch)', + '-d', '<(SHARED_INTERMEDIATE_DIR)', + '-n', 'icudata', + '-e', 'icudt<(icu_ver_major)', + '<@(_inputs)' ], + }, + ], + }, { + 'actions': [ + { + 'action_name': 'icudata', + 'msvs_quote_cmd': 0, + 'inputs': [ '<(icu_data_in)' ], + 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness)_dat.<(icu_asm_ext)' ], + # on Windows, we can go directly to .obj file (-o) option. + # for MSVC do not use "-c <(target_arch)" option + 'action': [ '<(PRODUCT_DIR)/genccode<(EXECUTABLE_SUFFIX)', + '<@(icu_asm_opts)', # -o + '-d', '<(SHARED_INTERMEDIATE_DIR)', + '-n', 'icudata', + '-e', 'icudt<(icu_ver_major)', + '<@(_inputs)' ], + }, + ], + }] ], }, { # icu_small == TRUE and OS == win # link against stub data primarily diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp index 9d385515a28722..c680132f80617e 100644 --- a/tools/v8_gypfiles/v8.gyp +++ b/tools/v8_gypfiles/v8.gyp @@ -1897,7 +1897,31 @@ ['enable_lto=="true"', { 'cflags_cc': [ '-fno-lto' ], }], - ['clang==1 or OS!="win"', { + # Chnges in push_registers_asm.cc in V8 v12.8 requires using + # push_registers_masm on Windows even with ClangCL on x64 + ['OS=="win"', { + 'conditions': [ + ['_toolset == "host" and host_arch == "x64" or _toolset == "target" and target_arch=="x64"', { + 'sources': [ + '<(V8_ROOT)/src/heap/base/asm/x64/push_registers_masm.asm', + ], + }], + ['_toolset == "host" and host_arch == "arm64" or _toolset == "target" and target_arch=="arm64"', { + 'conditions': [ + ['clang==1', { + 'sources': [ + '<(V8_ROOT)/src/heap/base/asm/arm64/push_registers_asm.cc', + ], + }], + ['clang==0', { + 'sources': [ + '<(V8_ROOT)/src/heap/base/asm/arm64/push_registers_masm.S', + ], + }], + ], + }], + ], + }, { # 'OS!="win"' 'conditions': [ ['_toolset == "host" and host_arch == "x64" or _toolset == "target" and target_arch=="x64"', { 'sources': [