Merge static_h branch from upstream Hermes repo#264
Merged
Conversation
NikoAri
approved these changes
Feb 24, 2026
static_h branch from upstream Hermes repo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Integrates the upstream
static_hbranch from facebook/hermes(commit
657380912e) into hermes-windows. Thestatic_hbranch is thenew default development branch in upstream Hermes, replacing
main.This PR also introduces a pluggable Intl (ECMA-402) implementation for
Windows, adopts the
@rnx-kit/fork-synctool for future upstream syncs,and fixes previously suppressed JS test failures.
1. Upstream
static_hIntegrationThe
static_hbranch brings a major architectural change to Hermes:a new static compilation pipeline and accompanying runtime support.
Merging it required resolving conflicts across ~6,000 files and adapting
the Windows build for new upstream patterns.
Key integration fixes:
external/boosttoexternal/boost2to avoid conflict withthe upstream-added Boost dependency.
and MSVC (lld-link specifics, visibility, stack alignment).
shermes(stack frame size differencebetween 32-bit and 64-bit).
2. Fork Sync Tooling & Developer Script
Adopted
@rnx-kit/fork-syncto manage upstream synchronization. Configfiles added:
sync-config.json— tracks the upstream repo, branch, and last-syncedcommit.
sync-manifest.json— declares sync dependencies (hermes core,icu-small, test262).
tools/fork-sync/package.json— local fork-sync package.Added
dev.ps1— a PowerShell task runner as a single entry point forcommon developer tasks:
.\dev build [args]— builds Hermes (wrapsbuild.js)..\dev fork-sync --dep <name>— runs fork-sync for a dependency.3. Pluggable Intl Implementation (Experimental)
Added a new ECMA-402 (Intl) implementation for Windows with a
runtime-selectable ICU provider architecture. All Windows-specific code
lives in
lib/Platform/Intl/impl_win/, minimizing upstream mergefriction.
Architecture: A pure-C ICU vtable (
hermes_icu.h) with ~260function pointers matching ICU C API signatures. No static ICU linking
— all ICU access is via
LoadLibrary/GetProcAddressat runtime.Providers (resolved at runtime):
hermes-icu.dllbuilt from vendored ICU 78(sourced from Node.js
icu-small). Full ECMA-402 compliance.icu.dll. Full ECMA-402for most features.
support without ICU.
Test results:
features Hermes does not implement, e.g. Locale, PluralRules,
Segmenter).
(x86).
New test infrastructure:
tools/hermes_rt/— lightweight JS runner using the public C API,supports
--intl-providerflag for testing each provider.external/test262/— pinned Test262 suite for intl402 conformance.build.js --test262-intl— new CI integration for running intl tests.Note on ICU landscape (from investigation): The ICU C API has
significant gaps vs. the C++ API, making full ECMA-402 compliance
through C-only wrappers challenging. The bundled
hermes-icu.dll(which uses C++ internally) is the recommended path. System ICU and
WinGlob providers have inherent limitations.
4. JS Test Fixes
Removed
lit.local.cfgtest suppressions introduced in commit725f1bd8(issue #230) by fixing the underlying test issues:TypedArray.js,array-functions.js,number-functions.js,proxy.js,string-functions.js— all fixed and re-enabled.test/BCGen/HBC/deltamode/string-functions-update.js— re-enabled.test/hermes/intl/— re-enabled (now backed by the new Intlimplementation).
5. Vendored Dependencies
external/icu-small/— ICU 78 source from Node.js, buildshermes-icu.dll(~35 MB). Single export:hermes_icu_get_vtable.external/test262/— Pinned ECMA-402 test suite.Build & Test
All platforms compile. JS tests pass on x64 and x86. ARM64 and ARM64EC
compile but tests are not run (cross-compilation).