diff --git a/lang/node/Makefile b/lang/node/Makefile index 370a557fc..7effb08ea 100644 --- a/lang/node/Makefile +++ b/lang/node/Makefile @@ -8,17 +8,21 @@ include $(TOPDIR)/rules.mk PKG_NAME:=node -PKG_VERSION:=v0.12.13 +PKG_VERSION:=v4.4.4 PKG_RELEASE:=1 -PKG_SOURCE:=node-$(PKG_VERSION).tar.gz +PKG_SOURCE:=node-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=http://nodejs.org/dist/${PKG_VERSION} +PKG_MD5SUM:=1ad7915688df85f62a57f43860dc54c6 HOST_BUILD_DEPENDS:=python/host PKG_BUILD_DEPENDS:=python/host PKG_INSTALL:=1 PKG_USE_MIPS16:=0 +HOST_BUILD_PARALLEL:=1 +PKG_BUILD_PARALLEL:=1 + PKG_MAINTAINER:=John Crispin PKG_LICENSE:= @@ -31,7 +35,7 @@ define Package/node SUBMENU:=Node.js TITLE:=Node.js is a platform built on Chrome's JavaScript runtime URL:=http://nodejs.org/ - DEPENDS:=+libpthread +librt +libstdcpp +libopenssl +libuv + DEPENDS:=+libpthread +librt +libstdcpp +libopenssl +libuv +zlib endef define Package/node/description diff --git a/lang/node/patches/001-hardfloat.patch b/lang/node/patches/001-hardfloat.patch new file mode 100644 index 000000000..1bb24930f --- /dev/null +++ b/lang/node/patches/001-hardfloat.patch @@ -0,0 +1,12 @@ +diff --git a/deps/v8/src/base/cpu.cc b/deps/v8/src/base/cpu.cc +index 4f58720..1f3071e 100644 +--- a/deps/v8/src/base/cpu.cc ++++ b/deps/v8/src/base/cpu.cc +@@ -143,6 +143,7 @@ int __detect_fp64_mode(void) { + ".set push\n\t" + ".set noreorder\n\t" + ".set oddspreg\n\t" ++ ".set hardfloat\n\t" + "lui $t0, 0x3FF0\n\t" + "ldc1 $f0, %0\n\t" + "mtc1 $t0, $f1\n\t" diff --git a/lang/node/patches/001-mips-no-fpu.patch b/lang/node/patches/001-mips-no-fpu.patch deleted file mode 100644 index 5bf8142cc..000000000 --- a/lang/node/patches/001-mips-no-fpu.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/deps/v8/build/toolchain.gypi -+++ b/deps/v8/build/toolchain.gypi -@@ -50,10 +50,10 @@ - 'arm_test_noprobe%': 'off', - - # Similar to vfp but on MIPS. -- 'v8_can_use_fpu_instructions%': 'true', -+ 'v8_can_use_fpu_instructions%': 'false', - - # Similar to the ARM hard float ABI but on MIPS. -- 'v8_use_mips_abi_hardfloat%': 'true', -+ 'v8_use_mips_abi_hardfloat%': 'false', - - # Default arch variant for MIPS. - 'mips_arch_variant%': 'r2', diff --git a/lang/node/patches/002-addr_info.patch b/lang/node/patches/002-addr_info.patch index 78225db55..0aa02dac2 100644 --- a/lang/node/patches/002-addr_info.patch +++ b/lang/node/patches/002-addr_info.patch @@ -1,6 +1,6 @@ --- a/deps/uv/src/unix/getaddrinfo.c +++ b/deps/uv/src/unix/getaddrinfo.c -@@ -99,6 +99,7 @@ +@@ -99,6 +99,7 @@ static void uv__getaddrinfo_work(struct int err; req = container_of(w, uv_getaddrinfo_t, work_req); diff --git a/lang/node/patches/003-path.patch b/lang/node/patches/003-path.patch index 723fe9da7..01a71c6a3 100644 --- a/lang/node/patches/003-path.patch +++ b/lang/node/patches/003-path.patch @@ -1,7 +1,7 @@ --- a/lib/module.js +++ b/lib/module.js -@@ -512,7 +512,8 @@ - var homeDir = process.env.HOME; +@@ -453,7 +453,8 @@ Module._initPaths = function() { + homeDir = process.env.HOME; } - var paths = [path.resolve(process.execPath, '..', '..', 'lib', 'node')]; diff --git a/lang/node/patches/004-gcc6-undefined-behaviour.patch b/lang/node/patches/004-gcc6-undefined-behaviour.patch new file mode 100644 index 000000000..11b01325d --- /dev/null +++ b/lang/node/patches/004-gcc6-undefined-behaviour.patch @@ -0,0 +1,64 @@ +diff --git a/deps/v8/src/heap/incremental-marking.cc b/deps/v8/src/heap/incremental-marking.cc +index 58eb0aa..b2b796f 100644 +--- a/deps/v8/src/heap/incremental-marking.cc ++++ b/deps/v8/src/heap/incremental-marking.cc +@@ -364,7 +364,7 @@ void IncrementalMarking::DeactivateIncrementalWriteBarrier() { + DeactivateIncrementalWriteBarrierForSpace(heap_->new_space()); + + LargePage* lop = heap_->lo_space()->first_page(); +- while (lop->is_valid()) { ++ while (LargePage::IsValid(lop)) { + SetOldSpacePageFlags(lop, false, false); + lop = lop->next_page(); + } +@@ -396,7 +396,7 @@ void IncrementalMarking::ActivateIncrementalWriteBarrier() { + ActivateIncrementalWriteBarrier(heap_->new_space()); + + LargePage* lop = heap_->lo_space()->first_page(); +- while (lop->is_valid()) { ++ while (LargePage::IsValid(lop)) { + SetOldSpacePageFlags(lop, true, is_compacting_); + lop = lop->next_page(); + } +diff --git a/deps/v8/src/heap/spaces-inl.h b/deps/v8/src/heap/spaces-inl.h +index c2c4d12..d63ee63 100644 +--- a/deps/v8/src/heap/spaces-inl.h ++++ b/deps/v8/src/heap/spaces-inl.h +@@ -155,7 +155,7 @@ Page* Page::Initialize(Heap* heap, MemoryChunk* chunk, Executability executable, + + bool PagedSpace::Contains(Address addr) { + Page* p = Page::FromAddress(addr); +- if (!p->is_valid()) return false; ++ if (!Page::IsValid(p)) return false; + return p->owner() == this; + } + +diff --git a/deps/v8/src/heap/spaces.cc b/deps/v8/src/heap/spaces.cc +index 0806b25..c0e109b 100644 +--- a/deps/v8/src/heap/spaces.cc ++++ b/deps/v8/src/heap/spaces.cc +@@ -2953,7 +2953,7 @@ LargePage* LargeObjectSpace::FindPage(Address a) { + if (e != NULL) { + DCHECK(e->value != NULL); + LargePage* page = reinterpret_cast(e->value); +- DCHECK(page->is_valid()); ++ DCHECK(LargePage::IsValid(page)); + if (page->Contains(a)) { + return page; + } +diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h +index 3461de3..e35c057 100644 +--- a/deps/v8/src/heap/spaces.h ++++ b/deps/v8/src/heap/spaces.h +@@ -278,9 +278,9 @@ class MemoryChunk { + // Only works for addresses in pointer spaces, not data or code spaces. + static inline MemoryChunk* FromAnyPointerAddress(Heap* heap, Address addr); + +- Address address() { return reinterpret_cast
(this); } ++ static bool IsValid(MemoryChunk* chunk) { return chunk != nullptr; } + +- bool is_valid() { return address() != NULL; } ++ Address address() { return reinterpret_cast
(this); } + + MemoryChunk* next_chunk() const { + return reinterpret_cast(base::Acquire_Load(&next_chunk_));