deps: V8: backport 9fb4444bfc46

Original commit message:

    Fix Temporal compilation with system or no ICU

    build: Fix Temporal compilation with system or no ICU

    Add new build flag, v8_enable_temporal_systemicu, off by default When
    on, it will remove references to the internal ICU udatamem.h header file

    Obviates CLs 7769990 / 7831715

    See: https://unicode-org.atlassian.net/browse/ICU-23400 See: Node:
    https://github.com/nodejs/node/issues/62676 See: V8:
    https://chromium-review.googlesource.com/c/v8/v8/+/7831715 See:
    Homebrew: https://github.com/Homebrew/homebrew-core/pull/281707
    Change-Id: Ibc460c68189d32e154c53eddfcda56bc7bca4fc6

    Also includes:

    fix: fix for no-icu build

    thanks @aduh95
    https://github.com/nodejs/node/issues/62676#issuecomment-5371270979

    NO_IFTTT=No Temporal via Bazel

    Change-Id: Ibc460c68189d32e154c53eddfcda56bc7bca4fc6
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/8281487
    Reviewed-by: Toon Verwaest <verwaest@chromium.org>
    Commit-Queue: Chengzhong Wu <cwu631@bloomberg.net>
    Reviewed-by: Olivier Flückiger <olivf@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#110039}

Refs: https://github.com/v8/v8/commit/9fb4444bfc464a5e54219acb04f0828b83dd15b5
Fixes: https://github.com/nodejs/node/issues/62676
Refs: https://github.com/srl295/v8/commit/cd89fe6f7acb6f5d069f6cc741fa68303214e98f
Signed-off-by: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/65161
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
This commit is contained in:
Steven R. Loomis authored and Antoine du Hamel committed 2026-10-04 22:40:43 +02:00
1 parent 346ac563dc
commit 84087531dc
5 files changed
+54 -5

No files matched your search

+1 -1
View File
@@ -44,7 +44,7 @@
# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.19',
'v8_embedder_string': '-node.20',
##### V8 defaults for Node.js #####
+1
View File
@@ -303,6 +303,7 @@ Stefan Penner <stefan.penner@gmail.com>
Stefan Stojanovic <stefko.stojanovic@gmail.com>
Stephan Hartmann <stha09@googlemail.com>
Stephen Belanger <stephen.belanger@datadoghq.com>
Steven R. Loomis <srl295@gmail.com>
Sylvestre Ledru <sledru@mozilla.com>
Takeshi Yoneda <takeshi@tetrate.io>
Taketoshi Aono <brn@b6n.ch>
+4
View File
@@ -1391,6 +1391,9 @@ config("features") {
if (v8_enable_temporal_support) {
defines += [ "V8_TEMPORAL_SUPPORT" ]
}
if (v8_enable_temporal_systemicu) {
defines += [ "V8_ENABLE_TEMPORAL_SYSTEMICU" ]
}
if (v8_enable_local_handle_zapping) {
defines += [ "ENABLE_LOCAL_HANDLE_ZAPPING" ]
}
@@ -3233,6 +3236,7 @@ generated_file("v8_generate_features_json") {
v8_enable_hugepage = v8_enable_hugepage
v8_enable_i18n_support = v8_enable_i18n_support
v8_enable_temporal_support = v8_enable_temporal_support
v8_enable_temporal_systemicu = v8_enable_temporal_systemicu
v8_enable_javascript_promise_hooks = v8_enable_javascript_promise_hooks
v8_enable_lite_mode = v8_enable_lite_mode
v8_enable_map_packing = v8_enable_map_packing
+4
View File
@@ -62,6 +62,10 @@ declare_args() {
# Furthermore, some architectures don't have Rust toolchains in Chromium
v8_enable_temporal_support = !(defined(build_with_node) && build_with_node)
# by default, don't enable compiling Temporal with a system ICU4C
# (assume private headers are available)
v8_enable_temporal_systemicu = false
# Use static libraries instead of source_sets.
v8_static_library = false
+44 -4
View File
@@ -11,8 +11,36 @@
#include "temporal_rs/TimeZone.hpp"
#ifdef V8_INTL_SUPPORT
#ifndef V8_ENABLE_TEMPORAL_SYSTEMICU
// ICU internal header file
#include "udatamem.h"
#else
/**
* Shadow definition of UDataMemory
* This is functionally identical to the definition in udatamem.h
* Irrelevant fields are marked 'ignored' and should not be used.
*
* This definition is copied here so that the result of udata_open()
* can be used and length-checked without needing to resort to
* calling internal ICU functions.
*
* Note, there is an ICU ticket,
* https://unicode-org.atlassian.net/browse/ICU-23400
* to consider whether the API surface should be changed
* here. If and when this is done, such an API could be used.
*/
struct UDataMemoryShadow {
const void* ignored1;
const void* data; //< pointer to header of data object
const void* ignored2;
UBool ignored3;
void* ignored4;
void* ignored5;
int32_t
length; //< length of entire region pointed to by data if known, else -1
};
#endif
#else
// Defined in builtins-temporal-zoneinfo64-data.cc, generated by
// include-file-as-bytes.py
extern "C" uint32_t zoneinfo64_static_data[];
@@ -30,17 +58,29 @@ ZoneInfo64Provider::ZoneInfo64Provider() {
provider = temporal_rs::Provider::empty();
return;
}
#ifndef V8_ENABLE_TEMPORAL_SYSTEMICU
// NOT udata_getLength: this ignores the header,
// and we're parsing resb files with the header
auto length = memory->length;
const void* data = udata_getRawMemory(memory);
DCHECK_WITH_MSG(length % 4 == 0, "ICU4C should align udata to uint32_t");
if (length % 4 != 0) {
// This really shouldn't happen: ICU4C aligns these files
// to 4 when baking them in
#else
// reinterpret with a local struct
const UDataMemoryShadow* shadowMemory =
reinterpret_cast<const UDataMemoryShadow*>(memory);
// just need the length and data
auto length = shadowMemory->length;
auto data = shadowMemory->data;
#endif
// This really shouldn't happen: ICU4C pads these files
// to 4 when baking them in
DCHECK_WITH_MSG(length % 4 == 0, "ICU4C should pad udata to uint32_t");
// Length may not be known. If we're not OK with that, don't proceed.
DCHECK_WITH_MSG(length != -1, "ICU4C usually knows the length");
if (length % 4 != 0 || length == -1) {
provider = temporal_rs::Provider::empty();
return;
}
DCHECK_WITH_MSG(data != nullptr, "ICU4C returned nullptr");
const uint32_t* data_32 = static_cast<const uint32_t*>(data);
std::span<const uint32_t> data_span(data_32, length / 4);