JS Temporal is not Built into v8_monolith for MacOS / Windows

105 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.
Reply all
Reply to author
Forward
0 new messages