From 79a33a7433b55de4f5e749524b9a22f7b72b5f4e 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 | 40 ++++++++++++++++++------------ 2 files changed, 62 insertions(+), 29 deletions(-) diff --git a/tools/icu/icu-generic.gyp b/tools/icu/icu-generic.gyp index 2655b9e694f..f007c65232c 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 03b83790a93..27ee2a21a19 100644 --- a/tools/v8_gypfiles/v8.gyp +++ b/tools/v8_gypfiles/v8.gyp @@ -1890,7 +1890,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': [ @@ -1939,20 +1963,6 @@ }], ] }], - ['OS=="win" and clang==0', { - '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"', { - 'sources': [ - '<(V8_ROOT)/src/heap/base/asm/arm64/push_registers_masm.S', - ], - }], - ], - }], ], }, }, # v8_heap_base