JS Temporal is not Built into v8_monolith for MacOS / Windows

200 views
Skip to first unread message

Sam Cao

unread,
Jun 22, 2025, 4:05:38 PMJun 22
to v8-users
Hi V8 Dev Team,

I tried to turn on v8_enable_temporal_support for my V8 embedder, but found the related JS temporal symbols are only built into libv8_monolith.a on Linux. On MacOS or Windows, I experienced js_temporal_* symbol not found errors.

Could you check it out? Thank you.

Best regards,
Sam

Manish Goregaokar

unread,
Jun 23, 2025, 12:02:12 PMJun 23
to v8-users
Hi!

I don't know how to replicate this problem, but have you tried adding `:v8_maybe_temporal` as a dependency to `v8_static_library("v8_monolith")` in `BUILD.gn`?

Let me know if that works and i can fix it upstream.

Sam Cao

unread,
Jun 23, 2025, 1:16:41 PMJun 23
to v8-u...@googlegroups.com
Hi Manish,

Thank you for the info. I'll try it later and let you know if it works.

Best regards,
Sam

--
--
v8-users mailing list
v8-u...@googlegroups.com
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to a topic in the Google Groups "v8-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/v8-users/nI21ZCjYJwo/unsubscribe.
To unsubscribe from this group and all its topics, send an email to v8-users+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/v8-users/e3eee9bb-bf9b-42ef-b215-6b89d2768f28n%40googlegroups.com.


--
-- Sam
Message has been deleted

Sam Cao

unread,
Jun 24, 2025, 6:32:52 AMJun 24
to v8-users
Hi Manish,

I just tried the following flags (V8 v13.8.258.19) on Windows.
dcheck_always_on = false
is_component_build = false
is_debug = false
symbol_level = 0
target_cpu = "x64"
use_custom_libcxx = false
v8_enable_i18n_support = false
v8_enable_pointer_compression = false
v8_enable_sandbox = false
v8_enable_temporal_support = true
v8_monolithic = true
v8_monolithic_for_shared_library = true
v8_static_library = true
v8_target_cpu = "x64"
v8_use_external_startup_data = false


It still doesn't work. Here are the errors.
MSBuild version 17.13.19+0d9f5a35a for .NET Framework

  1>Checking Build System
  Building Custom Rule C:/****/CMakeLists.txt
lld-link : error : undefined symbol: temporal_rs_Instant_try_new [C:\****.vcxproj]
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(class v8::internal::MaybeDirectHandle<class v8::internal::JSTemporalInstant> __cdecl v8::internal::temporal::CreateTemporalInstantWithValidityCheck(
  class v8::internal::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSFunction>, class v8::internal::DirectHandle<class v8::internal::HeapObject>, class v8::internal::DirectHandle<class v8::in
  ternal::BigInt>))

lld-link : error : undefined symbol: temporal_rs_Instant_destroy [C:\****.vcxproj]
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(class v8::internal::MaybeDirectHandle<class v8::internal::JSTemporalInstant> __cdecl v8::internal::temporal::CreateTemporalInstantWithValidityCheck(
  class v8::internal::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSFunction>, class v8::internal::DirectHandle<class v8::internal::HeapObject>, class v8::internal::DirectHandle<class v8::in
  ternal::BigInt>))
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(public: static class v8::internal::MaybeDirectHandle<class v8::internal::JSTemporalInstant> __cdecl v8::internal::JSTemporalInstant::Round(class v8:
  :internal::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSTemporalInstant>, class v8::internal::DirectHandle<class v8::internal::Object>))
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(private: virtual void __cdecl std::_Ref_count_resource<class temporal_rs::Instant *, struct std::default_delete<class temporal_rs::Instant>>::_Destr
  oy(void))

lld-link : error : undefined symbol: temporal_rs_Instant_round [C:\****.vcxproj]
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(public: static class v8::internal::MaybeDirectHandle<class v8::internal::JSTemporalInstant> __cdecl v8::internal::JSTemporalInstant::Round(class v8:
  :internal::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSTemporalInstant>, class v8::internal::DirectHandle<class v8::internal::Object>))

lld-link : error : undefined symbol: temporal_rs_Instant_epoch_milliseconds [C:\****.vcxproj]
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(public: static class v8::internal::MaybeDirectHandle<class v8::internal::Union<class v8::internal::Smi, class v8::internal::HeapNumber>> __cdecl v8:
  :internal::JSTemporalInstant::EpochMilliseconds(class v8::internal::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSTemporalInstant>))
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(public: static class v8::internal::MaybeDirectHandle<class v8::internal::String> __cdecl v8::internal::JSTemporalInstant::ToString(class v8::interna
  l::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSTemporalInstant>, class v8::internal::DirectHandle<class v8::internal::Object>))

lld-link : error : undefined symbol: temporal_rs_Instant_epoch_nanoseconds [C:\****.vcxproj]
  >>> referenced by v8_monolith.lib(js-temporal-objects.obj):(public: static class v8::internal::MaybeDirectHandle<class v8::internal::BigInt> __cdecl v8::internal::JSTemporalInstant::EpochNanoseconds(class v8:
  :internal::Isolate *, class v8::internal::DirectHandle<class v8::internal::JSTemporalInstant>))
Build Failed

I'm not sure what went wrong.

Best regards,
Sam

Manish Goregaokar

unread,
Jun 24, 2025, 10:55:48 AMJun 24
to v8-u...@googlegroups.com
Did you make the requested change to BUILD.gn, or just change args? Again, I'm recommending adding `:v8_maybe_temporal` to the dependencies section of the `v8_monolith` build rule.

When I get a chance I can try and replicate these flags locally.

Sam Cao

unread,
Jun 24, 2025, 2:11:35 PMJun 24
to v8-users
Hi Manish,

Yes, I made the change to BUILD.gn on Windows. I'll try on MacOS this weekend.

Best regards,
Sam

jmr

unread,
Jul 19, 2025, 7:51:15 PMJul 19
to v8-users
Hitting the same issue.

Adding:

  v8_static_library("v8_monolith") {
    deps = [
      ":v8",
      ":v8_libbase",
      ":v8_libplatform",
      ":v8_maybe_temporal",
      "//build/win:default_exe_manifest",
    ]

    configs = [ ":internal_config" ]
  }

Does not help.

jmr

unread,
Jul 19, 2025, 8:01:34 PMJul 19
to v8-users
This does not help either:

  v8_static_library("v8_monolith") {
    deps = [
      ":v8",
      ":v8_libbase",
      ":v8_libplatform",
      ":v8_maybe_temporal",
      "//third_party/rust/temporal_capi",
      "//build/win:default_exe_manifest",
    ]
    public_deps = [ "//third_party/rust/temporal_capi" ]
    ....

jmr

unread,
Jul 19, 2025, 8:28:44 PMJul 19
to v8-users
Disabling temporal support works as a workaround for now:

v8_enable_temporal_support = false

snek

unread,
Jul 28, 2025, 9:16:46 AMJul 28
to v8-users
I'm seeing the same linker issue while trying to enable temporal in rusty_v8: https://github.com/denoland/rusty_v8/pull/1825

I tried adding the `:v8_maybe_temporal` group as a dependency of the static lib target, but it didn't resolve the issue.

Alexandra Wheeler

unread,
Oct 30, 2025, 4:21:32 PMOct 30
to v8-users
Hi, was there ever a fix? I'm running into this problem now on macos.

Manish Goregaokar

unread,
Oct 30, 2025, 5:59:33 PMOct 30
to v8-u...@googlegroups.com
No, but you can track this issue at https://g-issues.chromium.org/issues/434763436.

I believe some work needs to be done on the Rust GN rules to fix this. That work is currently not being worked on (or planned).

Reply all
Reply to author
Forward
0 new messages