diff --git a/net-libs/nodejs/nodejs20-20.9.0.recipe b/net-libs/nodejs/nodejs20-20.9.0.recipe new file mode 100644 index 000000000..d9301487a --- /dev/null +++ b/net-libs/nodejs/nodejs20-20.9.0.recipe @@ -0,0 +1,90 @@ +SUMMARY="A JavaScript runtime built on Chrome's V8 Engine" +DESCRIPTION="Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. \ +As an asynchronous event driven JavaScript runtime, Node is designed to build scalable \ +network applications. In the following \"hello world\" example, many connections can be \ +handled concurrently. Upon each connection the callback is fired, but if there is no work \ +to be done, Node will sleep." +HOMEPAGE="https://nodejs.org/" +COPYRIGHT="2006-2019 The Node.js Foundation" +LICENSE="BSD (2-clause)" +REVISION="1" +SOURCE_URI="https://github.com/nodejs/node/archive/v$portVersion/nodejs-$portVersion.tar.gz" +SOURCE_DIR="node-$portVersion" +CHECKSUM_SHA256="97fa9283e5472d4252794c930ad59270e4851cc523fe5469f37f65a344f5f2e2" +PATCHES="nodejs-$portVersion.patchset" + +ARCHITECTURES="all !x86_gcc2" +SECONDARY_ARCHITECTURES="?x86" + +PROVIDES=" + nodejs20$secondaryArchSuffix = $portVersion + cmd:corepack = $portVersion compat >= 16 + cmd:node = $portVersion compat >= 16 + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libcares$secondaryArchSuffix + lib:libcrypto$secondaryArchSuffix + lib:libexecinfo$secondaryArchSuffix + lib:libnghttp2$secondaryArchSuffix + lib:libssl$secondaryArchSuffix + lib:libuv$secondaryArchSuffix + lib:libz$secondaryArchSuffix + " + +PROVIDES_devel=" + nodejs20${secondaryArchSuffix}_devel + " +REQUIRES_devel=" + nodejs20$secondaryArchSuffix == $portVersion base + " + +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + devel:libcares$secondaryArchSuffix + devel:libexecinfo$secondaryArchSuffix + devel:libnghttp2$secondaryArchSuffix + devel:libssl$secondaryArchSuffix + devel:libuv$secondaryArchSuffix + devel:libz$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + cmd:find + cmd:gcc$secondaryArchSuffix + cmd:ld$secondaryArchSuffix + cmd:make + cmd:ninja + cmd:python3 + cmd:which + " + +BUILD() +{ + ./configure --with-intl=none --dest-os=haiku \ + --shared-cares --shared-libuv --shared-nghttp2 --shared-openssl \ + --shared-zlib \ + --prefix=$prefix --without-npm + + make $jobArgs +} + +INSTALL() +{ + make install + + mkdir -p $(dirname $docDir $includeDir $manDir) + mv $prefix/include $includeDir + mv $prefix/share/man $manDir + mv $prefix/share/doc $docDir + + packageEntries devel \ + $developDir + + strip $prefix/bin/node + rm -rf $prefix/share +} + +TEST() +{ + make test-only +} diff --git a/net-libs/nodejs/patches/nodejs-20.9.0.patchset b/net-libs/nodejs/patches/nodejs-20.9.0.patchset new file mode 100644 index 000000000..b44f1b8e4 --- /dev/null +++ b/net-libs/nodejs/patches/nodejs-20.9.0.patchset @@ -0,0 +1,689 @@ +From 1d11fef6b118c120ad364caefae40ac97333c01f Mon Sep 17 00:00:00 2001 +From: Calvin Hill +Date: Wed, 22 May 2019 11:23:37 +0000 +Subject: Initial support for Node.js + + +diff --git a/common.gypi b/common.gypi +index d783c7f..8c06be8 100644 +--- a/common.gypi ++++ b/common.gypi +@@ -275,6 +275,9 @@ + '_target_name!="<(node_core_target_name)")', { + 'cflags!': ['-Werror'], + }], ++ ['OS=="haiku"', { ++ 'clang%': 0, ++ }], + ], + 'msvs_settings': { + 'VCCLCompilerTool': { +@@ -307,6 +310,10 @@ + ['target_arch=="arm64"', { + 'TargetMachine' : 0, # NotSet. MACHINE:ARM64 is inferred from the input files. + }], ++ ['OS == "haiku"', { ++ 'cflags': [ '-fPIC' ], ++ 'ldflags': [ '-fPIC'] ++ }], + ], + 'GenerateDebugInformation': 'true', + 'SuppressStartupBanner': 'true', +@@ -367,6 +374,10 @@ + ['_type!="static_library"', { + 'xcode_settings': {'OTHER_LDFLAGS': ['-fsanitize=address']}, + }], ++ ['OS == "haiku"', { ++ 'cflags': [ '-fPIC' ], ++ 'ldflags': [ '-fPIC'] ++ }], + ], + }], + ['v8_enable_pointer_compression == 1', { +@@ -397,7 +408,7 @@ + 'cflags': [ '-pthread' ], + 'ldflags': [ '-pthread' ], + }], +- [ 'OS in "linux freebsd openbsd solaris android aix os400 cloudabi"', { ++ [ 'OS in "linux freebsd openbsd solaris android aix os400 cloudabi haiku"', { + 'cflags': [ '-Wall', '-Wextra', '-Wno-unused-parameter', ], + 'cflags_cc': [ '-fno-rtti', '-fno-exceptions', '-std=gnu++17' ], + 'defines': [ '__STDC_FORMAT_MACROS' ], +@@ -411,6 +422,10 @@ + 'cflags': [ '-I/usr/local/include' ], + 'ldflags': [ '-Wl,-z,wxneeded' ], + }], ++ ['OS=="haiku"', { ++ 'cflags': [ '-fPIC' ], ++ 'ldflags': [ '-fPIC' ], ++ }], + ['_toolset=="host"', { + 'conditions': [ + [ 'host_arch=="ia32"', { +@@ -590,6 +605,12 @@ + 'OPENSSL_NO_PINSHARED' + ], + }], ++ ['OS=="haiku"', { ++ 'ldflags': [ '-lroot', '-lbsd', '-lstdc++', '-lnetwork', '-Wl,-Bsymbolic', '-Wl,--export-dynamic', '-fPIC' ], ++ 'ldflags!': [ '-pthreads', '-pthread', '-rdynamic' ], ++ 'clang%': 0, ++ '%v8_use_snapshot':0, ++ }], + ['node_shared_openssl!="true"', { + # `OPENSSL_THREADS` is defined via GYP for openSSL for all architectures. + 'defines': [ +diff --git a/configure.py b/configure.py +index 62f041c..80b055e 100755 +--- a/configure.py ++++ b/configure.py +@@ -47,7 +47,7 @@ from utils import SearchFiles + parser = argparse.ArgumentParser() + + valid_os = ('win', 'mac', 'solaris', 'freebsd', 'openbsd', 'linux', +- 'android', 'aix', 'cloudabi', 'os400', 'ios') ++ 'android', 'aix', 'cloudabi', 'os400', 'ios', 'haiku') + valid_arch = ('arm', 'arm64', 'ia32', 'mips', 'mipsel', 'mips64el', 'ppc', + 'ppc64', 'x64', 'x86', 'x86_64', 's390x', 'riscv64', 'loong64') + valid_arm_float_abi = ('soft', 'softfp', 'hard') +diff --git a/deps/openssl/config/archs/linux-x86_64/no-asm/openssl-cl.gypi b/deps/openssl/config/archs/linux-x86_64/no-asm/openssl-cl.gypi +index a8210a8..b706e3e 100644 +--- a/deps/openssl/config/archs/linux-x86_64/no-asm/openssl-cl.gypi ++++ b/deps/openssl/config/archs/linux-x86_64/no-asm/openssl-cl.gypi +@@ -9,11 +9,9 @@ + ], + 'openssl_cflags_linux-x86_64': [ + '-Wall -O3', +- '-pthread -m64', +- '-Wall -O3', ++ '-m64', + ], + 'openssl_ex_libs_linux-x86_64': [ +- '-ldl -pthread', + ], + 'openssl_cli_srcs_linux-x86_64': [ + 'openssl/apps/lib/cmp_mock_srv.c', +diff --git a/deps/openssl/config/archs/linux-x86_64/no-asm/openssl.gypi b/deps/openssl/config/archs/linux-x86_64/no-asm/openssl.gypi +index f9ab8cd..70595dc 100644 +--- a/deps/openssl/config/archs/linux-x86_64/no-asm/openssl.gypi ++++ b/deps/openssl/config/archs/linux-x86_64/no-asm/openssl.gypi +@@ -972,11 +972,10 @@ + ], + 'openssl_cflags_linux-x86_64': [ + '-Wall -O3', +- '-pthread -m64', ++ '-m64', + '-Wall -O3', + ], +- 'openssl_ex_libs_linux-x86_64': [ +- '-ldl -pthread', ++ 'openssl_ex_libs_linux-x86_64': [ + ], + }, + 'include_dirs': [ +diff --git a/deps/openssl/openssl/providers/implementations/rands/seeding/rand_unix.c b/deps/openssl/openssl/providers/implementations/rands/seeding/rand_unix.c +index 750afca..bfe435e 100644 +--- a/deps/openssl/openssl/providers/implementations/rands/seeding/rand_unix.c ++++ b/deps/openssl/openssl/providers/implementations/rands/seeding/rand_unix.c +@@ -357,7 +357,7 @@ static ssize_t syscall_random(void *buf, size_t buflen) + * internally. So we need to check errno for ENOSYS + */ + # if !defined(__DragonFly__) && !defined(__NetBSD__) +-# if defined(__GNUC__) && __GNUC__>=2 && defined(__ELF__) && !defined(__hpux) ++# if defined(__GNUC__) && __GNUC__>=2 && defined(__ELF__) && !defined(__hpux) && !defined(__HAIKU__) + extern int getentropy(void *buffer, size_t length) __attribute__((weak)); + + if (getentropy != NULL) { +diff --git a/deps/openssl/openssl_common.gypi b/deps/openssl/openssl_common.gypi +index 256eb7d..395b850 100644 +--- a/deps/openssl/openssl_common.gypi ++++ b/deps/openssl/openssl_common.gypi +@@ -58,7 +58,14 @@ + 'ENGINESDIR="/dev/null"', + '__EXTENSIONS__' + ], +- }, { ++ },'OS=="haiku"', { ++ '!ldflags': ['-pthread', '-pthreads'], ++ 'defines': [ ++ 'OPENSSLDIR="/boot/system/data/ssl/"', ++ 'ENGINESDIR="/dev/null"', ++ 'TERMIOS', ++ ], ++ },{ + # linux and others + 'cflags': ['-Wno-missing-field-initializers',], + 'defines': [ +diff --git a/node.gypi b/node.gypi +index 9138317..e564490 100644 +--- a/node.gypi ++++ b/node.gypi +@@ -280,6 +280,16 @@ + 'NODE_PLATFORM="sunos"', + ], + }], ++ [ 'OS=="haiku"', { ++ 'libraries': [ ++ '-lroot', ++ '-lnetwork', ++ '-lbsd', ++ ], ++ 'defines': [ ++ 'NODE_PLATFORM="haiku"', ++ ], ++ }], + [ '(OS=="freebsd" or OS=="linux") and node_shared=="false"' + ' and force_load=="true"', { + 'ldflags': [ +diff --git a/src/node.cc b/src/node.cc +index 89e0e55..4b321db 100644 +--- a/src/node.cc ++++ b/src/node.cc +@@ -475,10 +475,10 @@ void ResetSignalHandlers() { + // library) has set up own signal handler for own purposes + // (e.g. profiling). If that's the case, we want to keep it intact. + struct sigaction old; +- CHECK_EQ(0, sigaction(nr, nullptr, &old)); ++ // CHECK_EQ(0, sigaction(nr, nullptr, &old)); + if ((old.sa_flags & SA_SIGINFO) || old.sa_handler != SIG_IGN) continue; + } +- CHECK_EQ(0, sigaction(nr, &act, nullptr)); ++ // CHECK_EQ(0, sigaction(nr, &act, nullptr)); + } + #endif // __POSIX__ + } +diff --git a/src/node_os.cc b/src/node_os.cc +index 7318c1a..dec4e1e 100644 +--- a/src/node_os.cc ++++ b/src/node_os.cc +@@ -35,6 +35,7 @@ + #include + #include + ++#include + namespace node { + namespace os { + +@@ -115,7 +116,17 @@ static void GetCPUInfo(const FunctionCallbackInfo& args) { + std::vector> result; + result.reserve(count * 7); + for (int i = 0; i < count; i++) { ++ /* + uv_cpu_info_t* ci = cpu_infos + i; ++ ++ std::cout << ci->speed << std::endl; ++ std::cout << ci->model << std::endl; ++ std::cout << ci->cpu_times.user << std::endl; ++ std::cout << ci->cpu_times.nice << std::endl; ++ std::cout << ci->cpu_times.sys << std::endl; ++ std::cout << ci->cpu_times.idle << std::endl; ++ std::cout << ci->cpu_times.irq << std::endl; ++ + result.emplace_back(OneByteString(isolate, ci->model)); + result.emplace_back(Number::New(isolate, ci->speed)); + result.emplace_back( +@@ -128,10 +139,11 @@ static void GetCPUInfo(const FunctionCallbackInfo& args) { + Number::New(isolate, static_cast(ci->cpu_times.idle))); + result.emplace_back( + Number::New(isolate, static_cast(ci->cpu_times.irq))); ++ */ + } + + uv_free_cpu_info(cpu_infos, count); +- args.GetReturnValue().Set(Array::New(isolate, result.data(), result.size())); ++ // args.GetReturnValue().Set(Array::New(isolate, result.data(), result.size())); + } + + +diff --git a/src/node_report.cc b/src/node_report.cc +index 88c9a97..2703003 100644 +--- a/src/node_report.cc ++++ b/src/node_report.cc +@@ -740,16 +740,16 @@ static void PrintSystemInformation(JSONWriter* writer) { + {"core_file_size_blocks", RLIMIT_CORE}, + {"data_seg_size_kbytes", RLIMIT_DATA}, + {"file_size_blocks", RLIMIT_FSIZE}, +-#if !(defined(_AIX) || defined(__sun)) ++#if !(defined(_AIX) || defined(__sun) || defined(__HAIKU__)) + {"max_locked_memory_bytes", RLIMIT_MEMLOCK}, + #endif +-#ifndef __sun ++#if !(defined(__sun) || defined(__HAIKU__)) + {"max_memory_size_kbytes", RLIMIT_RSS}, + #endif + {"open_files", RLIMIT_NOFILE}, + {"stack_size_bytes", RLIMIT_STACK}, + {"cpu_time_seconds", RLIMIT_CPU}, +-#ifndef __sun ++#if !(defined(__sun) || defined(__HAIKU__)) + {"max_user_processes", RLIMIT_NPROC}, + #endif + #ifndef __OpenBSD__ +diff --git a/tools/utils.py b/tools/utils.py +index 32a3b3d..52febec 100644 +--- a/tools/utils.py ++++ b/tools/utils.py +@@ -59,6 +59,8 @@ def GuessOS(): + return 'win32' + elif id == 'FreeBSD': + return 'freebsd' ++ elif id == 'Haiku': ++ return 'haiku' + elif id == 'OpenBSD': + return 'openbsd' + elif id == 'SunOS': +-- +2.42.0 + + +From 0af727a5425ee2db008e7e09bcdd4878b259556b Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Sat, 27 Mar 2021 14:01:44 +0100 +Subject: Haiku v8 patches + + +diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn +index 68d92c3..e7da754 100644 +--- a/deps/v8/BUILD.gn ++++ b/deps/v8/BUILD.gn +@@ -442,7 +442,7 @@ if (v8_enable_snapshot_native_code_counters == "") { + } + if (v8_enable_pointer_compression == "") { + v8_enable_pointer_compression = +- v8_current_cpu == "arm64" || v8_current_cpu == "x64" ++ (v8_current_cpu == "arm64" || v8_current_cpu == "x64") && !is_haiku + } + + # Toggle pointer compression for correctness fuzzing when building the +@@ -1379,7 +1379,7 @@ config("toolchain") { + } + } + +- if (is_clang) { ++ if (is_clang && !is_haiku) { + cflags += [ + "-Wmissing-field-initializers", + "-Wunreachable-code", +@@ -5842,6 +5842,11 @@ v8_component("v8_libbase") { + "//third_party/fuchsia-sdk/sdk/pkg/fdio", + "//third_party/fuchsia-sdk/sdk/pkg/zx", + ] ++ } else if (is_haiku) { ++ sources += [ ++ "src/base/debug/stack_trace_posix.cc", ++ "src/base/platform/platform-haiku.cc", ++ ] + } else if (is_mac) { + sources += [ + "src/base/debug/stack_trace_posix.cc", +@@ -6677,6 +6682,13 @@ if (is_fuchsia && !build_with_chromium) { + + group("v8_fuzzers") { + testonly = true ++ ++ if(host_os == "haiku"){ ++ data_deps = [] ++ } ++ ++ if (host_os != "haiku") { ++ + data_deps = [ + ":v8_simple_inspector_fuzzer", + ":v8_simple_json_fuzzer", +@@ -6891,6 +6903,8 @@ v8_executable("v8_hello_world") { + ":v8_libplatform", + "//build/win:default_exe_manifest", + ] ++ } ++ + } + + v8_executable("v8_sample_process") { +diff --git a/deps/v8/include/v8config.h b/deps/v8/include/v8config.h +index bee208f..adce9f1 100644 +--- a/deps/v8/include/v8config.h ++++ b/deps/v8/include/v8config.h +@@ -69,6 +69,7 @@ path. Add it with -I to the command line + // V8_OS_CYGWIN - Cygwin + // V8_OS_DRAGONFLYBSD - DragonFlyBSD + // V8_OS_FREEBSD - FreeBSD ++// V8_OS_HAIKU - Haiku + // V8_OS_FUCHSIA - Fuchsia + // V8_OS_LINUX - Linux (Android, ChromeOS, Linux, ...) + // V8_OS_DARWIN - Darwin (macOS, iOS) +@@ -131,6 +132,11 @@ path. Add it with -I to the command line + # define V8_OS_POSIX 1 + # define V8_OS_STRING "freebsd" + ++#elif defined(__HAIKU__) ++# define V8_OS_HAIKU 1 ++# define V8_OS_POSIX 1 ++# define V8_OS_STRING "haiku" ++ + #elif defined(__Fuchsia__) + # define V8_OS_FUCHSIA 1 + # define V8_OS_POSIX 1 +diff --git a/deps/v8/src/base/debug/stack_trace_posix.cc b/deps/v8/src/base/debug/stack_trace_posix.cc +index b76c098..5894e20 100644 +--- a/deps/v8/src/base/debug/stack_trace_posix.cc ++++ b/deps/v8/src/base/debug/stack_trace_posix.cc +@@ -25,14 +25,15 @@ + #include + #include + +-#if V8_LIBC_GLIBC || V8_LIBC_BSD || V8_LIBC_UCLIBC || V8_OS_SOLARIS ++#if V8_LIBC_GLIBC || V8_LIBC_BSD || V8_LIBC_UCLIBC || V8_OS_SOLARIS || V8_OS_HAIKU + #define HAVE_EXECINFO_H 1 + #endif + +-#if HAVE_EXECINFO_H ++#if defined(HAVE_EXECINFO_H) + #include + #include + #endif ++ + #if V8_OS_DARWIN + #include + #endif +diff --git a/deps/v8/src/base/export-template.h b/deps/v8/src/base/export-template.h +index 861cfe4..e1e90a4 100644 +--- a/deps/v8/src/base/export-template.h ++++ b/deps/v8/src/base/export-template.h +@@ -83,6 +83,7 @@ + // definition sites instead. + #define EXPORT_TEMPLATE_DECLARE_MSVC_HACK(export, _) + #define EXPORT_TEMPLATE_DEFINE_MSVC_HACK(export, _) export ++#define EXPORT_TEMPLATE_TEST_MSVC_HACK_DEFAULT(...) true + + // EXPORT_TEMPLATE_STYLE is an internal helper macro that identifies which + // export style needs to be used for the provided FOO_EXPORT macro definition. +@@ -159,5 +160,6 @@ EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllimport)); + #undef EXPORT_TEMPLATE_TEST + #undef EXPORT_TEMPLATE_TEST_DEFAULT_DEFAULT + #undef EXPORT_TEMPLATE_TEST_MSVC_HACK_MSVC_HACK ++#undef EXPORT_TEMPLATE_TEST_MSVC_HACK_DEFAULT + + #endif // V8_BASE_EXPORT_TEMPLATE_H_ +diff --git a/deps/v8/src/base/platform/memory.h b/deps/v8/src/base/platform/memory.h +index 48b0d70..25f0b7f 100644 +--- a/deps/v8/src/base/platform/memory.h ++++ b/deps/v8/src/base/platform/memory.h +@@ -23,9 +23,9 @@ + #include + #endif // !V8_OS_DARWIN + +-#if (V8_OS_POSIX && !V8_OS_AIX && !V8_OS_SOLARIS) || V8_OS_WIN ++#if (V8_OS_POSIX && !V8_OS_AIX && !V8_OS_SOLARIS && !V8_OS_HAIKU) || V8_OS_WIN + #define V8_HAS_MALLOC_USABLE_SIZE 1 +-#endif // (V8_OS_POSIX && !V8_OS_AIX && !V8_OS_SOLARIS) || V8_OS_WIN ++#endif // (V8_OS_POSIX && !V8_OS_AIX && !V8_OS_SOLARIS && !V8_OS_HAIKU)) || V8_OS_WIN + + namespace v8::base { + +diff --git a/deps/v8/src/base/platform/platform-haiku.cc b/deps/v8/src/base/platform/platform-haiku.cc +new file mode 100644 +index 0000000..0ea3377 +--- /dev/null ++++ b/deps/v8/src/base/platform/platform-haiku.cc +@@ -0,0 +1,65 @@ ++// Copyright 2012 the V8 project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++// Platform-specific code for Haiku goes here. For the POSIX-compatible ++// parts, the implementation is in platform-posix.cc. ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include // open ++#include // mmap & munmap ++#include // open ++#include // sysconf ++#include ++#include ++#include ++#include // index ++ ++#include ++ ++#include ++ ++#undef MAP_TYPE ++ ++#include "src/base/macros.h" ++#include "src/base/platform/platform-posix-time.h" ++#include "src/base/platform/platform-posix.h" ++#include "src/base/platform/platform.h" ++ ++namespace v8 { ++namespace base { ++ ++TimezoneCache* OS::CreateTimezoneCache() { ++ return new PosixDefaultTimezoneCache(); ++} ++ ++std::vector OS::GetSharedLibraryAddresses() { ++ return std::vector(); ++} ++ ++void OS::SignalCodeMovingGC() {} ++ ++void OS::AdjustSchedulingParams() {} ++ ++std::vector OS::GetFreeMemoryRangesWithin( ++ OS::Address boundary_start, OS::Address boundary_end, size_t minimum_size, ++ size_t alignment) { ++ return {}; ++} ++ ++// static ++Stack::StackSlot Stack::ObtainCurrentThreadStackStart() { ++ thread_info threadInfo; ++ get_thread_info(find_thread(NULL), &threadInfo); ++ return threadInfo.stack_base; ++} ++ ++} // namespace base ++} // namespace v8 +diff --git a/deps/v8/src/base/platform/platform-posix.cc b/deps/v8/src/base/platform/platform-posix.cc +index 4b6e6ad..fcaf746 100644 +--- a/deps/v8/src/base/platform/platform-posix.cc ++++ b/deps/v8/src/base/platform/platform-posix.cc +@@ -67,7 +67,7 @@ + #include + #endif + +-#if !defined(_AIX) && !defined(V8_OS_FUCHSIA) ++#if !defined(_AIX) && !defined(V8_OS_FUCHSIA) && !defined(__HAIKU__) + #include + #endif + +@@ -83,6 +83,14 @@ extern int madvise(caddr_t, size_t, int); + #endif + #endif + ++#if defined(__HAIKU__) ++extern "C" int posix_madvise(void*, size_t, int); ++#endif ++ ++#if defined(__HAIKU__) ++#define MADV_FREE POSIX_MADV_DONTNEED ++#endif ++ + #ifndef MADV_FREE + #define MADV_FREE MADV_DONTNEED + #endif +@@ -567,6 +575,8 @@ bool OS::DiscardSystemPages(void* address, size_t size) { + if (ret != 0 && errno == EINVAL) { + ret = madvise(reinterpret_cast(address), size, MADV_DONTNEED); + } ++#elif defined(__HAIKU__) ++ int ret = posix_madvise(address, size, MADV_FREE); + #else + int ret = madvise(address, size, MADV_DONTNEED); + #endif +@@ -1244,7 +1254,7 @@ void Thread::SetThreadLocal(LocalStorageKey key, void* value) { + // keep this version in POSIX as most Linux-compatible derivatives will + // support it. MacOS and FreeBSD are different here. + #if !defined(V8_OS_FREEBSD) && !defined(V8_OS_DARWIN) && !defined(_AIX) && \ +- !defined(V8_OS_SOLARIS) ++ !defined(V8_OS_SOLARIS) && !defined(V8_OS_HAIKU) + + // static + Stack::StackSlot Stack::ObtainCurrentThreadStackStart() { +diff --git a/deps/v8/src/libsampler/sampler.cc b/deps/v8/src/libsampler/sampler.cc +index 83028c9..6226592 100644 +--- a/deps/v8/src/libsampler/sampler.cc ++++ b/deps/v8/src/libsampler/sampler.cc +@@ -15,7 +15,7 @@ + #include + #include + +-#if !V8_OS_QNX && !V8_OS_AIX ++#if !V8_OS_QNX && !V8_OS_AIX && !V8_OS_HAIKU + #include + #endif + +@@ -27,7 +27,7 @@ + #include + // OpenBSD doesn't have . ucontext_t lives in + // and is a typedef for struct sigcontext. There is no uc_mcontext. +-#elif !V8_OS_OPENBSD ++#elif !V8_OS_OPENBSD && !V8_OS_HAIKU + #include + #endif + +@@ -512,6 +512,16 @@ void SignalHandler::FillRegisterState(void* context, RegisterState* state) { + state->sp = reinterpret_cast(mcontext.__gregs[_REG_SP]); + state->fp = reinterpret_cast(mcontext.__gregs[_REG_FP]); + #endif // V8_HOST_ARCH_* ++#elif V8_OS_HAIKU ++#if V8_HOST_ARCH_IA32 ++ state->pc = reinterpret_cast(mcontext.eip); ++ state->sp = reinterpret_cast(mcontext.esp); ++ state->fp = reinterpret_cast(mcontext.ebp); ++#elif V8_HOST_ARCH_X64 ++ state->pc = reinterpret_cast(mcontext.rip); ++ state->sp = reinterpret_cast(mcontext.rsp); ++ state->fp = reinterpret_cast(mcontext.rbp); ++#endif // V8_HOST_ARCH_* + #elif V8_OS_NETBSD + #if V8_HOST_ARCH_IA32 + state->pc = reinterpret_cast(mcontext.__gregs[_REG_EIP]); +diff --git a/deps/v8/tools/mb/mb.py b/deps/v8/tools/mb/mb.py +index f42b52b..1b59e8c 100755 +--- a/deps/v8/tools/mb/mb.py ++++ b/deps/v8/tools/mb/mb.py +@@ -839,12 +839,15 @@ class MetaBuildWrapper(): + subdir, exe = 'linux64', 'gn' + elif self.platform == 'darwin': + subdir, exe = 'mac', 'gn' ++ elif self.platform == 'haiku1': ++ subdir, exe = 'haiku','gn' ++ gn_path = "/bin/gn" + else: + subdir, exe = 'win', 'gn.exe' + + arch = platform.machine() + if (arch.startswith('s390') or arch.startswith('ppc') or +- self.platform.startswith('aix')): ++ self.platform.startswith('aix') or self.platform.startswith('haiku')): + # use gn in PATH + gn_path = 'gn' + else: +-- +2.42.0 + + +From 00ec02375fa6f43221e932d7b13e1dce273c7cd0 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Sat, 27 Mar 2021 18:23:32 +0100 +Subject: v8 gyp build for Haiku + + +diff --git a/tools/v8_gypfiles/features.gypi b/tools/v8_gypfiles/features.gypi +index 3a7f355..22b4013 100644 +--- a/tools/v8_gypfiles/features.gypi ++++ b/tools/v8_gypfiles/features.gypi +@@ -46,6 +46,11 @@ + }, { + 'is_fuchsia': 0, + }], ++ ['OS == "haiku"', { ++ 'is_haiku': 1, ++ }, { ++ 'is_haiku': 0, ++ }], + ['OS=="android"', { # GYP reverts OS to linux so use `-D OS=android` + 'is_android': 1, + }, { +diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp +index 109d0ea..6c3224c 100644 +--- a/tools/v8_gypfiles/v8.gyp ++++ b/tools/v8_gypfiles/v8.gyp +@@ -1248,6 +1248,17 @@ + '<(V8_ROOT)/src/base/platform/platform-fuchsia.cc', + ] + }], ++ ['is_haiku', { ++ 'link_settings': { ++ 'libraries': [ ++ '-lexecinfo', ++ ] ++ }, ++ 'sources': [ ++ '<(V8_ROOT)/src/base/debug/stack_trace_posix.cc', ++ '<(V8_ROOT)/src/base/platform/platform-haiku.cc', ++ ] ++ }], + ['OS == "mac" or (_toolset=="host" and host_os=="mac")', { + 'sources': [ + '<(V8_ROOT)/src/base/debug/stack_trace_posix.cc', +-- +2.42.0 + + +From cd06c9edafe011fb98e44553c7542c9d84e60754 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Fri, 15 Oct 2021 22:06:57 +0200 +Subject: ares compat + + +diff --git a/deps/v8/src/trap-handler/trap-handler.h b/deps/v8/src/trap-handler/trap-handler.h +index 77b0b19..31aca75 100644 +--- a/deps/v8/src/trap-handler/trap-handler.h ++++ b/deps/v8/src/trap-handler/trap-handler.h +@@ -133,7 +133,7 @@ inline bool IsTrapHandlerEnabled() { + return g_is_trap_handler_enabled; + } + +-#if defined(V8_OS_AIX) ++#if defined(V8_OS_AIX) || defined(V8_OS_HAIKU) + // `thread_local` does not link on AIX: + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100641 + extern __thread int g_thread_in_wasm_code; +diff --git a/src/cares_wrap.h b/src/cares_wrap.h +index ea339b7..e443018 100644 +--- a/src/cares_wrap.h ++++ b/src/cares_wrap.h +@@ -23,7 +23,11 @@ + # include + #endif // __POSIX__ + ++#ifdef __HAIKU__ ++# include ++#else + # include ++#endif + + namespace node { + namespace cares_wrap { +-- +2.42.0 +