https://github.com/yao-pkg/pkg-fetch/blob/main/patches/node.v18.18.2.cpp.patch + local FreeBSD patches --- yao-pkg/node_modules/@yao-pkg/pkg-fetch/patches/node.v18.18.2.cpp.patch 2021-12-30 20:04:18.203959000 +0100 +++ yao-pkg/node_modules/@yao-pkg/pkg-fetch/patches/node.v18.18.2.cpp.patch @@ -11,6 +11,15 @@ + 'lto': ' -flto=4 -ffat-lto-objects ', # }, { 'lto': ' -flto ', # Clang }], +@@ -399,7 +399,7 @@ + }], + [ 'OS in "linux freebsd openbsd solaris android aix cloudabi"', { + 'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ], +- 'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++17' ], ++ 'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++17', '-Wno-error=enum-constexpr-conversion' ], + 'defines': [ '__STDC_FORMAT_MACROS' ], + 'ldflags': [ '-rdynamic' ], + 'target_conditions': [ diff --git node/configure.py node/configure.py index 7006ee6581..12fb2ac8d1 100755 --- node/configure.py @@ -580,3 +589,349 @@ + 'cflags_cc': [ '-frtti', '-fno-lto' ], 'cflags_cc!': [ '-fno-rtti' ], }], [ 'OS == "mac" or OS == "ios"', { +--- nodes/deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi.orig 2023-04-12 04:09:13 UTC ++++ nodes/deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi +@@ -13,7 +13,7 @@ + '-Wall -O3 -fomit-frame-pointer', + ], + 'openssl_ex_libs_linux-elf': [ +- '-ldl -pthread', ++ '-pthread', + ], + 'openssl_cli_srcs_linux-elf': [ + 'openssl/apps/lib/cmp_mock_srv.c', +--- nodes/deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi.orig 2023-04-12 04:09:13 UTC ++++ nodes/deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi +@@ -977,7 +977,7 @@ + '-Wall -O3 -fomit-frame-pointer', + ], + 'openssl_ex_libs_linux-elf': [ +- '-ldl -pthread', ++ '-pthread', + ], + }, + 'include_dirs': [ +--- nodes/deps/openssl/openssl_no_asm.gypi.orig 2023-04-12 04:09:14 UTC ++++ nodes/deps/openssl/openssl_no_asm.gypi +@@ -44,7 +44,7 @@ + 'includes': ['config/archs/linux64-riscv64/no-asm/openssl.gypi'], + }, { + # Other architectures don't use assembly +- 'includes': ['config/archs/linux-x86_64/no-asm/openssl.gypi'], ++ 'includes': ['config/archs/linux-elf/no-asm/openssl.gypi'], + }], + ], + } +--- nodes/deps/openssl/openssl-cl_no_asm.gypi.orig 2023-04-12 04:09:13 UTC ++++ nodes/deps/openssl/openssl-cl_no_asm.gypi +@@ -1,4 +1,5 @@ + { ++ 'defines': ['OPENSSL_NO_ASM'], + 'conditions': [ + ['target_arch=="ppc64" and OS=="aix"', { + 'includes': ['config/archs/aix64-gcc-as/no-asm/openssl-cl.gypi'], +@@ -43,7 +44,7 @@ + 'includes': ['config/archs/linux64-riscv64/no-asm/openssl-cl.gypi'], + }, { + # Other architectures don't use assembly +- 'includes': ['config/archs/linux-x86_64/no-asm/openssl-cl.gypi'], ++ 'includes': ['config/archs/linux-elf/no-asm/openssl-cl.gypi'], + }], + ], + } +--- nodes/deps/v8/src/base/platform/platform-freebsd.cc.orig 2023-04-12 04:09:14 UTC ++++ nodes/deps/v8/src/base/platform/platform-freebsd.cc +@@ -82,8 +82,8 @@ std::vector OS::GetSharedLib + lib_name = std::string(path); + } + result.push_back(SharedLibraryAddress( +- lib_name, reinterpret_cast(map->kve_start), +- reinterpret_cast(map->kve_end))); ++ lib_name, static_cast(map->kve_start), ++ static_cast(map->kve_end))); + } + + start += ssize; +--- nodes/deps/v8/src/codegen/arm/cpu-arm.cc.orig 2023-04-12 04:09:15 UTC ++++ nodes/deps/v8/src/codegen/arm/cpu-arm.cc +@@ -2,12 +2,15 @@ + // Use of this source code is governed by a BSD-style license that can be + // found in the LICENSE file. + ++#include "include/v8config.h" ++ + // CPU specific code for arm independent of OS goes here. + #ifdef __arm__ + #ifdef __QNXNTO__ + #include // for cache flushing. + #undef MAP_TYPE + #elif V8_OS_FREEBSD ++#include + #include // for cache flushing + #include + #elif V8_OS_STARBOARD +--- nodes/deps/v8/src/codegen/ppc/constants-ppc.h.orig 2023-04-12 04:09:15 UTC ++++ nodes/deps/v8/src/codegen/ppc/constants-ppc.h +@@ -36,7 +36,7 @@ + #endif + + #if !(V8_HOST_ARCH_PPC || V8_HOST_ARCH_PPC64) || !V8_TARGET_ARCH_PPC64 || \ +- V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2) ++ (defined(_CALL_ELF) && _CALL_ELF == 2) + #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 1 + #else + #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 0 +@@ -44,7 +44,7 @@ + + #if !(V8_HOST_ARCH_PPC || V8_HOST_ARCH_PPC64) || \ + (V8_TARGET_ARCH_PPC64 && \ +- (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2))) ++ (defined(_CALL_ELF) && _CALL_ELF == 2)) + #define ABI_CALL_VIA_IP 1 + #else + #define ABI_CALL_VIA_IP 0 +--- nodes/deps/v8/src/libsampler/sampler.cc.orig 2023-04-12 04:09:15 UTC ++++ nodes/deps/v8/src/libsampler/sampler.cc +@@ -497,6 +497,10 @@ void SignalHandler::FillRegisterState(void* context, R + state->pc = reinterpret_cast(mcontext.__gregs[_REG_PC]); + state->sp = reinterpret_cast(mcontext.__gregs[_REG_SP]); + state->fp = reinterpret_cast(mcontext.__gregs[_REG_FP]); ++#elif V8_TARGET_ARCH_PPC64 ++ state->pc = reinterpret_cast(mcontext.mc_srr0); ++ state->sp = reinterpret_cast(mcontext.mc_frame[1]); ++ state->fp = reinterpret_cast(mcontext.mc_frame[31]); + #endif // V8_HOST_ARCH_* + #elif V8_OS_NETBSD + #if V8_HOST_ARCH_IA32 +--- nodes/node.gypi.orig 2023-04-12 04:09:19 UTC ++++ nodes/node.gypi +@@ -349,6 +349,9 @@ + [ 'node_use_openssl=="true"', { + 'defines': [ 'HAVE_OPENSSL=1' ], + 'conditions': [ ++ ['openssl_no_asm==1', { ++ 'defines': [ 'OPENSSL_NO_ASM' ], ++ }], + [ 'node_shared_openssl=="false"', { + 'defines': [ 'OPENSSL_API_COMPAT=0x10100000L', ], + 'dependencies': [ +--- nodes/src/crypto/crypto_util.cc.orig 2023-04-12 04:09:19 UTC ++++ nodes/src/crypto/crypto_util.cc +@@ -195,10 +195,12 @@ void InitCryptoOnce() { + // No-op with OPENSSL_NO_COMP builds of OpenSSL. + sk_SSL_COMP_zero(SSL_COMP_get_compression_methods()); + ++#if OPENSSL_VERSION_MAJOR < 3 + #ifndef OPENSSL_NO_ENGINE + ERR_load_ENGINE_strings(); + ENGINE_load_builtin_engines(); + #endif // !OPENSSL_NO_ENGINE ++#endif + } + + void GetFipsCrypto(const FunctionCallbackInfo& args) { +--- nodes/src/cares_wrap.h.orig 2023-04-12 04:09:19 UTC ++++ nodes/src/cares_wrap.h +@@ -23,7 +23,7 @@ + # include + #endif // __POSIX__ + +-# include ++# include + + namespace node { + namespace cares_wrap { +--- nodes/tools/v8_gypfiles/v8.gyp.orig 2023-04-12 04:09:21 UTC ++++ nodes/tools/v8_gypfiles/v8.gyp +@@ -977,7 +977,7 @@ + }], + # Platforms that don't have Compare-And-Swap (CAS) support need to link atomic library + # to implement atomic memory access +- ['v8_current_cpu in ["mips", "mipsel", "mips64", "mips64el", "ppc", "arm", "riscv64", "loong64"]', { ++ ['v8_current_cpu in ["mips", "mipsel", "mips64", "mips64el", "ppc", "riscv64", "loong64"]', { + 'link_settings': { + 'libraries': ['-latomic', ], + }, +commit 182d9c05e78b1ddb1cb8242cd3628a7855a0336f +Author: Andrey Kosyakov +Date: 2023-08-17T13:50:11-07:00 + + Define UChar as char16_t + + We used to have UChar defined as uint16_t which does not go along + with STL these days if you try to have an std::basic_string<> of it, + as there are no standard std::char_traits<> specialization for uint16_t. + + This switches UChar to char16_t where practical, introducing a few + compatibility shims to keep CL size small, as (1) this would likely + have to be back-ported and (2) crdtp extensively uses uint16_t for + wide chars. + + Bug: b:296390693 + Change-Id: I66a32d8f0050915225b187de56896c26dd76163d + Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4789966 + Reviewed-by: Jaroslav Sevcik + Commit-Queue: Jaroslav Sevcik + Auto-Submit: Andrey Kosyakov + Cr-Commit-Position: refs/heads/main@{#89559} + +diff --git deps/v8/src/inspector/string-16.cc deps/v8/src/inspector/string-16.cc +index a8b786a8166..6df9963e970 100644 +--- node/deps/v8/src/inspector/string-16.cc ++++ node/deps/v8/src/inspector/string-16.cc +@@ -27,7 +27,7 @@ bool isSpaceOrNewLine(UChar c) { + return isASCII(c) && c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); + } + +-int64_t charactersToInteger(const UChar* characters, size_t length, ++int64_t charactersToInteger(const uint16_t* characters, size_t length, + bool* ok = nullptr) { + std::vector buffer; + buffer.reserve(length + 1); +@@ -50,6 +50,8 @@ int64_t charactersToInteger(const UChar* characters, size_t length, + + String16::String16(const UChar* characters, size_t size) + : m_impl(characters, size) {} ++String16::String16(const uint16_t* characters, size_t size) ++ : m_impl(reinterpret_cast(characters), size) {} + + String16::String16(const UChar* characters) : m_impl(characters) {} + +@@ -241,6 +243,10 @@ String16 String16::fromUTF16LE(const UChar* stringStart, size_t length) { + #endif // V8_TARGET_BIG_ENDIAN + } + ++String16 String16::fromUTF16LE(const uint16_t* stringStart, size_t length) { ++ return fromUTF16LE(reinterpret_cast(stringStart), length); ++} ++ + std::string String16::utf8() const { + return UTF16ToUTF8(m_impl.data(), m_impl.size()); + } + +diff --git deps/v8/src/inspector/string-16.h deps/v8/src/inspector/string-16.h +index 1678ffb2e1e..d9f6c466ab1 100644 +--- node/deps/v8/src/inspector/string-16.h ++++ node/deps/v8/src/inspector/string-16.h +@@ -6,6 +6,7 @@ + #define V8_INSPECTOR_STRING_16_H_ + + #include ++#include + + #include + #include +@@ -17,7 +18,7 @@ namespace v8_inspector { + + namespace v8_inspector { + +-using UChar = uint16_t; ++using UChar = char16_t; + + class String16 { + public: +@@ -27,6 +28,7 @@ class String16 { + String16(const String16&) V8_NOEXCEPT = default; + String16(String16&&) V8_NOEXCEPT = default; + String16(const UChar* characters, size_t size); ++ String16(const uint16_t* characters, size_t size); + V8_EXPORT String16(const UChar* characters); + V8_EXPORT String16(const char* characters); + String16(const char* characters, size_t size); +@@ -47,7 +49,9 @@ class String16 { + uint64_t toUInt64(bool* ok = nullptr) const; + int toInteger(bool* ok = nullptr) const; + String16 stripWhiteSpace() const; +- const UChar* characters16() const { return m_impl.c_str(); } ++ const uint16_t* characters16() const { ++ return reinterpret_cast(m_impl.c_str()); ++ } + size_t length() const { return m_impl.length(); } + bool isEmpty() const { return !m_impl.length(); } + UChar operator[](size_t index) const { return m_impl[index]; } +@@ -76,6 +80,8 @@ class String16 { + // Instantiates a String16 in native endianness from UTF16 LE. + // On Big endian architectures, byte order needs to be flipped. + V8_EXPORT static String16 fromUTF16LE(const UChar* stringStart, ++ size_t length); ++ V8_EXPORT static String16 fromUTF16LE(const uint16_t* stringStart, + size_t length); + + std::size_t hash() const { + +--- node/deps/v8/src/inspector/v8-string-conversions.cc ++++ node/deps/v8/src/inspector/v8-string-conversions.cc +@@ -12,7 +12,7 @@ + + namespace v8_inspector { + namespace { +-using UChar = uint16_t; ++using UChar = char16_t; + using UChar32 = uint32_t; + + bool isASCII(UChar c) { return !(c & ~0x7F); } +@@ -386,7 +386,7 @@ std::string UTF16ToUTF8(const UChar* stringStart, size_t length) { + + std::basic_string UTF8ToUTF16(const char* stringStart, size_t length) { + if (!stringStart || !length) return std::basic_string(); +- std::vector buffer(length); ++ std::vector buffer(length); + UChar* bufferStart = buffer.data(); + + UChar* bufferCurrent = bufferStart; +@@ -395,7 +395,7 @@ std::basic_string UTF8ToUTF16(const char* stringStart, size_t length) { + reinterpret_cast(stringStart + length), + &bufferCurrent, bufferCurrent + buffer.size(), nullptr, + true) != conversionOK) +- return std::basic_string(); ++ return std::basic_string(); + size_t utf16Length = bufferCurrent - bufferStart; + return std::basic_string(bufferStart, bufferStart + utf16Length); + } +diff --git deps/v8/src/inspector/v8-string-conversions.h deps/v8/src/inspector/v8-string-conversions.h +index eb33c6816a5..1126255dac2 100644 +--- node/deps/v8/src/inspector/v8-string-conversions.h.orig 2024-11-03 17:30:05.387600000 +0100 ++++ node/deps/v8/src/inspector/v8-string-conversions.h 2024-11-03 17:30:27.156398000 +0100 +@@ -5,14 +5,15 @@ + #ifndef V8_INSPECTOR_V8_STRING_CONVERSIONS_H_ + #define V8_INSPECTOR_V8_STRING_CONVERSIONS_H_ + ++#include + #include + #include + + // Conversion routines between UT8 and UTF16, used by string-16.{h,cc}. You may + // want to use string-16.h directly rather than these. + namespace v8_inspector { +-std::basic_string UTF8ToUTF16(const char* stringStart, size_t length); +-std::string UTF16ToUTF8(const uint16_t* stringStart, size_t length); ++std::basic_string UTF8ToUTF16(const char* stringStart, size_t length); ++std::string UTF16ToUTF8(const char16_t* stringStart, size_t length); + } // namespace v8_inspector + + #endif // V8_INSPECTOR_V8_STRING_CONVERSIONS_H_ + + + +--- node/deps/v8/third_party/inspector_protocol/crdtp/test_platform_v8.cc ++++ node/deps/v8/third_party/inspector_protocol/crdtp/test_platform_v8.cc +@@ -11,13 +11,16 @@ + namespace v8_crdtp { + + std::string UTF16ToUTF8(span in) { +- return v8_inspector::UTF16ToUTF8(in.data(), in.size()); ++ return v8_inspector::UTF16ToUTF8(reinterpret_cast(in.data()), ++ in.size()); + } + + std::vector UTF8ToUTF16(span in) { +- std::basic_string utf16 = v8_inspector::UTF8ToUTF16( ++ std::basic_string utf16 = v8_inspector::UTF8ToUTF16( + reinterpret_cast(in.data()), in.size()); +- return std::vector(utf16.begin(), utf16.end()); ++ return std::vector( ++ reinterpret_cast(utf16.data()), ++ reinterpret_cast(utf16.data()) + utf16.size()); + } + + } // namespace v8_crdtp