mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
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:
1 parent
346ac563dc
commit
84087531dc
5 files changed
+54
-5
No files matched your search
+1
-1
@@ -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 #####
|
||||
|
||||
|
||||
Vendored
+1
@@ -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>
|
||||
|
||||
Vendored
+4
@@ -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
|
||||
|
||||
Vendored
+4
@@ -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
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user