Skip to contentSkip to conversation

nodejs cleanup and update

PATCH In review Trevor Woerner 2 participants 4 messages Dec 22, 2015 – Dec 23, 2015

lore
Share & tools
lore
#0 lore raw

v4 cover nodejs cleanup and update

My fourth attempt to update and cleanup the nodejs recipes.

Successfully built for:
qemuarm, qemuarm64, qemumips, qemumips64, qemuppc, qemuppc64, qemux86, qemux86-64, beaglebone, intel-corei7-64, genericx86, genericx86-64

Successfully ran on:
qemuarm64, qemumips, qemux86, qemux86-64, intel-corei7-64 (turbot)

Failed to run for:
qemuppc:

    unhandled signal 4 at 2ee3bf48 nip 2ee3bf48 lr 2ee3ed70 code 30001
    Illegal instruction

qemuppc64:
I wasn't able to successfully run a qemuppc64 VM

Changes from v3:
better link to official announcement regarding the dropping of VFP2 instead of whitelisting machines, blacklist the unsupported ones

Changes from v2:
handle qemuarm build failure

Changes from v1:
don't try to keep and unite the old recipe versions, just replace them with the latest stable

Trevor Woerner (1):
nodejs: cleanup and update

 .../nodejs/nodejs/enable-armv5e-build.patch        | 22 ----------
 .../nodejs/nodejs4/libev-cross-cc_0.4.12.patch     | 13 ------
 meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb  | 49 ----------------------
 .../nodejs/{nodejs_0.12.7.bb => nodejs_4.2.3.bb}   | 18 ++++----
 4 files changed, 11 insertions(+), 91 deletions(-)
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs4/libev-cross-cc_0.4.12.patch
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb
 rename meta-oe/recipes-devtools/nodejs/{nodejs_0.12.7.bb => nodejs_4.2.3.bb} (84%)
Signature · 1 line
2.6.0.rc3
#1 lore raw

PATCH v4 1/1 nodejs: cleanup and update

Remove old nodejs4_0.4.12 and update nodejs_0.12.7 to the latest stable nodejs_4.2.3.

Nodejs is picky about which architectures it supports. The supported arch mapping required some updating to bring it up to date with the current nodejs code. Add COMPATIBLE_MACHINE entries so it only builds for the supported architectures.

ARM cores that don't support at least VFP2 have been dropped:

https://groups.google.com/forum/#!topic/v8-users/aSOFbaAQvMk

"Due the increasing cost of the keeping the "no-VFPv2" port of V8 working on ARM, we are planning on making 3.17 the last V8 release that that supports ARM chips without VFPv2. Starting with the 3.18 release, the minimal V8 requirements will increase to ARMv6 + VFPv2. In order to simplify maintenance, we will also remove the "pre-VFP2" ARM code from the V8 code base."

Additionally, gcc no longer supports a VFPv2 option:

    https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-mfpu-1460
---
 .../nodejs/nodejs/enable-armv5e-build.patch        | 22 ----------
 .../nodejs/nodejs4/libev-cross-cc_0.4.12.patch     | 13 ------
 meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb  | 49 ----------------------
 .../nodejs/{nodejs_0.12.7.bb => nodejs_4.2.3.bb}   | 18 ++++----
 4 files changed, 11 insertions(+), 91 deletions(-)
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs4/libev-cross-cc_0.4.12.patch
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb
 rename meta-oe/recipes-devtools/nodejs/{nodejs_0.12.7.bb => nodejs_4.2.3.bb} (84%)
meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch deleted +0 -22
deleted file mode 100644
index cc7c9ab..0000000
@@ -1,22 +0,0 @@
-Building for qemuarm without thumb enabled is using -march=armv5e which isn't
-recognized here. Fix it by adding __ARM_ARCH_5E__.
-
-v0.12.2 branch of node doesn't seem to be affected, because it's using
-different version of v8
-
-Upstream-Status: Pending
-
-Signed-off-by: Martin Jansa <[email protected]>
-
-diff -uNr node-v0.12.2/deps/v8/src/base/atomicops_internals_arm_gcc.h node-v0.12.2-fix/deps/v8/src/base/atomicops_internals_arm_gcc.h
---- node-v0.12.2/deps/v8/src/base/atomicops_internals_arm_gcc.h	2015-04-01 00:13:01.000000000 +0200
-+++ node-v0.12.2-fix/deps/v8/src/base/atomicops_internals_arm_gcc.h	2015-04-28 14:30:43.119509207 +0200
-@@ -156,7 +156,7 @@
- 
- // This tests against any known ARMv5 variant.
- #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \
--      defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
-+      defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
- 
- // The kernel also provides a helper function to perform an atomic
- // compare-and-swap operation at the hard-wired address 0xffff0fc0.
meta-oe/recipes-devtools/nodejs/nodejs4/libev-cross-cc_0.4.12.patch deleted +0 -13
deleted file mode 100644
index 2b9838f..0000000
@@ -1,13 +0,0 @@
-diff --git a/deps/libev/wscript b/deps/libev/wscript
-index 4f6c9a8..1796749 100644
---- a/deps/libev/wscript
-+++ b/deps/libev/wscript
-@@ -58,7 +58,7 @@ def configure(conf):
-           return 0;
-       }
-   """
--  conf.check_cc(fragment=code, define_name="HAVE_CLOCK_SYSCALL", execute=True,
-+  conf.check_cc(fragment=code, define_name="HAVE_CLOCK_SYSCALL", execute=False,
-                 msg="Checking for SYS_clock_gettime")
- 
-   have_librt = conf.check(lib='rt', uselib_store='RT')
meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb deleted +0 -49

49 lines not on this page · raw message

meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb renamed from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb +11 -7
similarity index 84%
rename from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb
rename to meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb
index 41eb5ee..66a3c11 100644
@@ -1,16 +1,19 @@
 DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
 HOMEPAGE = "http://nodejs.org"
 LICENSE = "MIT & BSD & Artistic-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=14115ff11211df04b031ec7d40b6d31b"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ee90ba97d933fc8d56e97812b7dd62e9"
 
 DEPENDS = "openssl"
 
+COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
+COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
+COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"
+
 SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.gz \
-    file://enable-armv5e-build.patch \
     file://no-registry.patch \
 "
-SRC_URI[md5sum] = "5523ec4347d7fe6b0f6dda1d1c7799d5"
-SRC_URI[sha256sum] = "b23d64df051c9c969b0c583f802d5d71de342e53067127a5061415be7e12f39d"
+SRC_URI[md5sum] = "529a8abd4ca5a2225636767d3f14c382"
+SRC_URI[sha256sum] = "5008ade5feb4b089f59163f66bffddc113f27de5d78edf203e39435c2c5d554f"
 
 S = "${WORKDIR}/node-v${PV}"
 
@@ -20,10 +23,11 @@ CCACHE = ""
 def map_nodejs_arch(a, d):
     import re
 
-    if   re.match('p(pc|owerpc)(|64)', a): return 'ppc'
-    elif re.match('i.86$', a): return 'ia32'
+    if   re.match('i.86$', a): return 'ia32'
     elif re.match('x86_64$', a): return 'x64'
-    elif re.match('arm64$', a): return 'arm'
+    elif re.match('aarch64$', a): return 'arm64'
+    elif re.match('powerpc64$', a): return 'ppc64'
+    elif re.match('powerpc$', a): return 'ppc'
     return a
 
 ARCHFLAGS_arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)}"
Signature · 1 line
2.6.0.rc3
#2 lore raw

Re: [meta-oe][PATCH v4 1/1] nodejs: cleanup and update

Quoted 19 lines · Trevor Woerner

Remove old nodejs4_0.4.12 and update nodejs_0.12.7 to the latest stable nodejs_4.2.3.

Nodejs is picky about which architectures it supports. The supported arch mapping required some updating to bring it up to date with the current nodejs code. Add COMPATIBLE_MACHINE entries so it only builds for the supported architectures.

ARM cores that don't support at least VFP2 have been dropped:

https://groups.google.com/forum/#!topic/v8-users/aSOFbaAQvMk

"Due the increasing cost of the keeping the "no-VFPv2" port of V8 working on ARM, we are planning on making 3.17 the last V8 release that that supports ARM chips without VFPv2. Starting with the 3.18 release, the minimal V8 requirements will increase to ARMv6 + VFPv2. In order to simplify maintenance, we will also remove the "pre-VFP2" ARM code from the V8 code base."

Quoted 3 lines

Additionally, gcc no longer supports a VFPv2 option:

    https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-mfpu-1460

There's no documented -mfpu=vfpv2 option in older releases either, so trying to use it may just be a bug in the v8 build system?

https://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/ARM-Options.html#ARM-Options
https://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/ARM-Options.html#ARM-Options
https://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/ARM-Options.html#ARM-Options

The correct option for vfpv2 is -mfpu=vfp and it's certainly still supported by current gcc versions (it's used by meta-raspberrypi).

Quoted 168 lines
---
 .../nodejs/nodejs/enable-armv5e-build.patch        | 22 ----------
 .../nodejs/nodejs4/libev-cross-cc_0.4.12.patch     | 13 ------
 meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb  | 49 ----------------------
 .../nodejs/{nodejs_0.12.7.bb => nodejs_4.2.3.bb}   | 18 ++++----
 4 files changed, 11 insertions(+), 91 deletions(-)
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs4/libev-cross-cc_0.4.12.patch
 delete mode 100644 meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb
 rename meta-oe/recipes-devtools/nodejs/{nodejs_0.12.7.bb => nodejs_4.2.3.bb} (84%)
meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch deleted +0 -22
deleted file mode 100644
index cc7c9ab..0000000
@@ -1,22 +0,0 @@
-Building for qemuarm without thumb enabled is using -march=armv5e which isn't
-recognized here. Fix it by adding __ARM_ARCH_5E__.
-
-v0.12.2 branch of node doesn't seem to be affected, because it's using
-different version of v8
-
-Upstream-Status: Pending
-
-Signed-off-by: Martin Jansa <[email protected]>
-
-diff -uNr node-v0.12.2/deps/v8/src/base/atomicops_internals_arm_gcc.h node-v0.12.2-fix/deps/v8/src/base/atomicops_internals_arm_gcc.h
---- node-v0.12.2/deps/v8/src/base/atomicops_internals_arm_gcc.h        2015-04-01 00:13:01.000000000 +0200
-+++ node-v0.12.2-fix/deps/v8/src/base/atomicops_internals_arm_gcc.h    2015-04-28 14:30:43.119509207 +0200
-@@ -156,7 +156,7 @@
-
- // This tests against any known ARMv5 variant.
- #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \
--      defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
-+      defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
-
- // The kernel also provides a helper function to perform an atomic
- // compare-and-swap operation at the hard-wired address 0xffff0fc0.
meta-oe/recipes-devtools/nodejs/nodejs4/libev-cross-cc_0.4.12.patch deleted +0 -13
deleted file mode 100644
index 2b9838f..0000000
@@ -1,13 +0,0 @@
-diff --git a/deps/libev/wscript b/deps/libev/wscript
-index 4f6c9a8..1796749 100644
---- a/deps/libev/wscript
-+++ b/deps/libev/wscript
-@@ -58,7 +58,7 @@ def configure(conf):
-           return 0;
-       }
-   """
--  conf.check_cc(fragment=code, define_name="HAVE_CLOCK_SYSCALL", execute=True,
-+  conf.check_cc(fragment=code, define_name="HAVE_CLOCK_SYSCALL", execute=False,
-                 msg="Checking for SYS_clock_gettime")
-
-   have_librt = conf.check(lib='rt', uselib_store='RT')
meta-oe/recipes-devtools/nodejs/nodejs4_0.4.12.bb deleted +0 -49
deleted file mode 100644
index c73cefc..0000000
@@ -1,49 +0,0 @@
-SUMMARY = "nodeJS Evented I/O for V8 JavaScript"
-HOMEPAGE = "http://nodejs.org"
-LICENSE = "MIT & Zlib"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=d6237f3a840aef5b7880fb4e49eecfe5"
-
-DEPENDS = "openssl"
-
-PNBLACKLIST[nodejs4] ?= "Used only by currently blacklisted cloud9 and fails to build for qemuarm with thumb: error: #error For thumb inter-working we require an architecture which supports blx"
-
-SRC_URI = " \
-    http://nodejs.org/dist/node-v${PV}.tar.gz \
-    file://libev-cross-cc_${PV}.patch \
-"
-SRC_URI[md5sum] = "a6375eaa43db5356bf443e25b828ae16"
-SRC_URI[sha256sum] = "c01af05b933ad4d2ca39f63cac057f54f032a4d83cff8711e42650ccee24fce4"
-
-S = "${WORKDIR}/node-v${PV}"
-
-# v8 errors out if you have set CCACHE
-CCACHE = ""
-
-do_configure () {
-    sed -i -e 's:/usr/lib:${STAGING_LIBDIR}:g' wscript
-    sed -i -e 's:/usr/local/lib:${STAGING_LIBDIR}:g' wscript
-    ./configure --prefix=${prefix} --without-snapshot
-}
-
-do_compile () {
-    make
-}
-
-do_install () {
-    oe_runmake install DESTDIR=${D}
-
-    # fix namespace conflicts with other nodejs recipes
-    mv ${D}${bindir}/node ${D}${bindir}/node4
-    mv ${D}${bindir}/node-waf ${D}${bindir}/node4-waf
-
-    mv ${D}${includedir}/node ${D}${includedir}/node4
-
-    mv ${D}${libdir}/node ${D}${libdir}/node4
-    mv ${D}${libdir}/pkgconfig/nodejs.pc ${D}${libdir}/pkgconfig/nodejs4.pc
-    sed -i -e s:include/node:include/node4: ${D}${libdir}/pkgconfig/nodejs4.pc
-
-    mv ${D}${datadir}/man/man1/node.1 ${D}${datadir}/man/man1/node4.1
-}
-
-FILES_${PN} += "${libdir}/node4/wafadmin"
-BBCLASSEXTEND = "native"
meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb renamed from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb +11 -8
similarity index 84%
rename from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb
rename to meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb
index 41eb5ee..66a3c11 100644
@@ -1,16 +1,19 @@
 DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
 HOMEPAGE = "http://nodejs.org"
 LICENSE = "MIT & BSD & Artistic-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=14115ff11211df04b031ec7d40b6d31b"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ee90ba97d933fc8d56e97812b7dd62e9"
 
 DEPENDS = "openssl"
 
+COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
+COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
+COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"
+
 SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.gz \
-    file://enable-armv5e-build.patch \
     file://no-registry.patch \
 "
-SRC_URI[md5sum] = "5523ec4347d7fe6b0f6dda1d1c7799d5"
-SRC_URI[sha256sum] = "b23d64df051c9c969b0c583f802d5d71de342e53067127a5061415be7e12f39d"
+SRC_URI[md5sum] = "529a8abd4ca5a2225636767d3f14c382"
+SRC_URI[sha256sum] = "5008ade5feb4b089f59163f66bffddc113f27de5d78edf203e39435c2c5d554f"
 
 S = "${WORKDIR}/node-v${PV}"
 
@@ -20,10 +23,11 @@ CCACHE = ""
 def map_nodejs_arch(a, d):
     import re
 
-    if   re.match('p(pc|owerpc)(|64)', a): return 'ppc'
-    elif re.match('i.86$', a): return 'ia32'
+    if   re.match('i.86$', a): return 'ia32'
     elif re.match('x86_64$', a): return 'x64'
-    elif re.match('arm64$', a): return 'arm'
+    elif re.match('aarch64$', a): return 'arm64'
+    elif re.match('powerpc64$', a): return 'ppc64'
+    elif re.match('powerpc$', a): return 'ppc'
     return a
 
 ARCHFLAGS_arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)}"
--

2.6.0.rc3

--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel

#3 lore raw

Re: [meta-oe][PATCH v4 1/1] nodejs: cleanup and update

Hi Andre,

Quoted 21 lines · Andre McCurdy
Quoted 21 lines

Remove old nodejs4_0.4.12 and update nodejs_0.12.7 to the latest stable nodejs_4.2.3.

Nodejs is picky about which architectures it supports. The supported arch mapping required some updating to bring it up to date with the current nodejs code. Add COMPATIBLE_MACHINE entries so it only builds for the supported architectures.

ARM cores that don't support at least VFP2 have been dropped:

https://groups.google.com/forum/#!topic/v8-users/aSOFbaAQvMk

"Due the increasing cost of the keeping the "no-VFPv2" port of V8 working on ARM, we are planning on making 3.17 the last V8 release that that supports ARM chips without VFPv2. Starting with the 3.18 release, the minimal V8 requirements will increase to ARMv6 + VFPv2. In order to simplify maintenance, we will also remove the "pre-VFP2" ARM code from the V8 code base."

Additionally, gcc no longer supports a VFPv2 option:

Quoted 7 lines
Quoted 1 line
     https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-mfpu-1460

There's no documented -mfpu=vfpv2 option in older releases either, so trying to use it may just be a bug in the v8 build system?

   https://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/ARM-Options.html#ARM-Options
   https://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/ARM-Options.html#ARM-Options
   https://gcc.gnu.org/onlinedocs/gcc-4.6.0/gcc/ARM-Options.html#ARM-Options

Interesting. I hadn't thought to look at the older docs to try to find out "when it was removed". It's rather strange, then, that the V8 build included this at all! How/when could it have ever worked? (rhetorical)

Quoted 2 lines

The correct option for vfpv2 is -mfpu=vfp and it's certainly still supported by current gcc versions (it's used by meta-raspberrypi).

A day or so ago I created a patch to switch this flag in the nodejs build from "-mfpu=vfpv2" to "-mfpu=vfp" and the build for qemuarm did succeed. When I tried running the resulting program in the VM, however, it threw an "illegal instruction" and failed. Since ARMv5 is no longer officially supported, I didn't bother introducing that patch and simply continued to remove support for this architecture.

Interestingly, although the ppc architecture is supported, and it builds fine, running node in qemuppc also threw an illegal instruction and failed. I kept support for ppc, however, since officially it's supported and any run-time errors are, perhaps, an upstream issue?

Maybe I should also disable ppc builds so anyone using the recipe for that purpose doesn't get their hopes up? Strictly from a build point of view, ppc "succeeds".

I never was able to test the ppc64 build (which is also successful) since I couldn't figure out the magic incantation to get qemu-system-ppc64 to boot to a cmdline.

Best regards,
Trevor