Skip to content

deps: merve: Don't include the vendored simdutf with --shared-simdutf - #67410

Open
ziyao233 wants to merge 1 commit into
nodejs:mainfrom
ziyao233:build/merve-simdutf-include
Open

ziyao233 wants to merge 1 commit into
nodejs:mainfrom
ziyao233:build/merve-simdutf-include

Conversation

@ziyao233

Copy link
Copy Markdown
Contributor

Different versions of simdutf may provide different implementations for the same name, for example, the vendored version provides a symbol for simdutf::find(),

simdutf_warn_unused const char *find(const char *start, const char *end,
char character) noexcept;

while upstream simdutf 9.3.3 inlines it,

simdutf_warn_unused simdutf_really_inline simdutf_constexpr23 const char * find(const char *start, const char end, char character) noexcept {
/
An inline function */
...
}

However, the vendored simdutf's headers are currently unconditionally included for merve, regardless whether the shared simdutf is linked against or not, leading to missing symbols at linking time like

mold: error: undefined symbol: simdutf::find(char const*, char const*, char)

referenced by merve.cpp
obj/deps/merve/libmerve.a(obj/deps/merve/merve.merve.o):(lexer::CJSLexer::addReexport(std::__1::basic_string_view<char, std::__1::char_traits>, unsigned int))
referenced by merve.cpp
obj/deps/merve/libmerve.a(obj/deps/merve/merve.merve.o):(lexer::CJSLexer::addExport(std::__1::basic_string_view<char, std::__1::char_traits>, unsigned int))

Do not include the vendored simdutf when compiling merve if shared simdutf is used to ensure the headers match the linked library.

Different versions of simdutf may provide different implementations for
the same name, for example, the vendored version provides a symbol for
simdutf::find(),

simdutf_warn_unused const char *find(const char *start, const char *end,
                                     char character) noexcept;

while upstream simdutf 9.3.3 inlines it,

simdutf_warn_unused simdutf_really_inline simdutf_constexpr23 const char *
find(const char *start, const char *end, char character) noexcept {
    /* An inline function */
    ...
}

However, the vendored simdutf's headers are currently unconditionally
included for merve, regardless whether the shared simdutf is linked
against or not, leading to missing symbols at linking time like

mold: error: undefined symbol: simdutf::find(char const*, char const*, char)
>>> referenced by merve.cpp
>>>               obj/deps/merve/libmerve.a(obj/deps/merve/merve.merve.o):(lexer::CJSLexer::addReexport(std::__1::basic_string_view<char, std::__1::char_traits<char>>, unsigned int))
>>> referenced by merve.cpp
>>>               obj/deps/merve/libmerve.a(obj/deps/merve/merve.merve.o):(lexer::CJSLexer::addExport(std::__1::basic_string_view<char, std::__1::char_traits<char>>, unsigned int))

Do not include the vendored simdutf when compiling merve if shared
simdutf is used to ensure the headers match the linked library.

Signed-off-by: Yao Zi <me@ziyao.cc>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/gyp
  • @nodejs/security-wg

@nodejs-github-bot nodejs-github-bot added dependencies PRs that add, update, or configure Node.js dependencies. needs-ci PRs that need a full CI run. labels Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies PRs that add, update, or configure Node.js dependencies. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants