nodejs cleanup and update
v3 cover nodejs cleanup and update
My third attempt to update and cleanup the nodejs recipes.
This patch removes the older nodejs recipes and replaces them with a recipe for nodejs 4.2.3 (the latest stable at this time).
Nodejs is picky about which architectures it supports. Add COMPATIBLE_MACHINE and cleanup the architecture mapping function to reflect what is currently supported. Nodejs dropped support for ARMv5 around V8 version 3.22. Also, gcc no longer supports -mfpu=vfpv2 (which is what the nodejs build thinks it should be using).
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
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 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} | 23 ++++++----
4 files changed, 16 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} (81%)Signature · 1 line
2.6.0.rc3
PATCH v3 1/1 nodejs: cleanup and update
Remove old nodejs_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.
It appears the nodejs project removed support for ARMv5 somewhere around V8 3.22 or 3.23. Also, gcc 5 no longer supports -mfpu=vfpv2 (which is what the nodejs build thinks it should be using for ARMv5).
See https://github.com/nodejs/node/issues/3061
---
.../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} | 23 ++++++----
4 files changed, 16 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} (81%)meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch deleted +0 -22
@@ -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
@@ -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 +16 -7
@@ -1,16 +1,24 @@ 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 = "(-)" +COMPATIBLE_MACHINE_x86 = "(.*)" +COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE_armv7a = "(.*)" +COMPATIBLE_MACHINE_aarch64 = "(.*)" +COMPATIBLE_MACHINE_mips = "(.*)" +COMPATIBLE_MACHINE_powerpc = "(.*)" +COMPATIBLE_MACHINE_powerpc64 = "(.*)" + 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 +28,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
Re: [meta-oe][PATCH v3 1/1] nodejs: cleanup and update
Hi Trevor,
Quoted 8 lines · Trevor Woerner
Remove old nodejs_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_MACHINEentries so it only builds for the supported architectures.
Quoted 4 lines
It appears the nodejs project removed support for ARMv5 somewhere around V8 3.22 or 3.23. Also, gcc 5 no longer supports -mfpu=vfpv2 (which is what the nodejs build thinks it should be using for ARMv5).
See https://github.com/nodejs/node/issues/3061
Here's the link to the "official" announcement about v8 dropping support for ARM cores without vfp2 support:
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."
Maybe worth including that in the commit message.
Also see comments inline below.
Quoted 124 lines
Signed-off-by Trevor Woerner <[email protected]>--- .../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} | 23 ++++++---- 4 files changed, 16 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} (81%)meta-oe/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch deleted +0
-22@@ -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@@ -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@@ -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 +0
-0@@ -1,16 +1,24 @@ DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript" HOMEPAGE = "http://nodejs.org"
meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb line 11
Quoted 10 lines
meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb renamed from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb +5
-1LICENSE = "MIT & BSD & Artistic-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=14115ff11211df04b031ec7d40b6d31b" +LIC_FILES_CHKSUM = "file://LICENSE;md5=ee90ba97d933fc8d56e97812b7dd62e9" DEPENDS = "openssl" +COMPATIBLE_MACHINE = "(-)" +COMPATIBLE_MACHINE_x86 = "(.*)" +COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE_armv7a = "(.*)"
Please blacklist armv4 and armv5 instead of whitelisting armv7a (armv6 and potential future arm targets such as armv7ve are still expected to work. It's only armv4 and armv5 which are not).
Quoted 39 lines
meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb renamed from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb +11
-7+COMPATIBLE_MACHINE_aarch64 = "(.*)" +COMPATIBLE_MACHINE_mips = "(.*)" +COMPATIBLE_MACHINE_powerpc = "(.*)" +COMPATIBLE_MACHINE_powerpc64 = "(.*)" + 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 +28,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
Re: [meta-oe][PATCH v3 1/1] nodejs: cleanup and update
Hi Andre,
Quoted 2 lines · Andre McCurdy
Here's the link to the "official" announcement about v8 dropping support for ARM cores without vfp2 support:
Thanks, I'll include that in v4.
Quoted 7 lines
meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb renamed from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb +4
-0+COMPATIBLE_MACHINE = "(-)" +COMPATIBLE_MACHINE_x86 = "(.*)" +COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE_armv7a = "(.*)"Please blacklist armv4 and armv5 instead of whitelisting armv7a (armv6 and potential future arm targets such as armv7ve are still expected to work. It's only armv4 and armv5 which are not).
That was what I was trying to do :-) I don't have much experience in this, I've been asking on IRC and the mailing lists, and there aren't many examples to copy. I think the following works:
COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"?
Best regards,
Trevor
Re: [meta-oe][PATCH v3 1/1] nodejs: cleanup and update
Quoted 20 lines · Trevor Woerner
Hi Andre,
Quoted 2 lines · Andre McCurdy
Here's the link to the "official" announcement about v8 dropping support for ARM cores without vfp2 support:
Thanks, I'll include that in v4.
Quoted 7 lines
meta-oe/recipes-devtools/nodejs/nodejs_4.2.3.bb renamed from meta-oe/recipes-devtools/nodejs/nodejs_0.12.7.bb +4
-0+COMPATIBLE_MACHINE = "(-)" +COMPATIBLE_MACHINE_x86 = "(.*)" +COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE_armv7a = "(.*)"Please blacklist armv4 and armv5 instead of whitelisting armv7a (armv6 and potential future arm targets such as armv7ve are still expected to work. It's only armv4 and armv5 which are not).
That was what I was trying to do :-) I don't have much experience in this, I've been asking on IRC and the mailing lists, and there aren't many examples to copy. I think the following works:
Quoted 5 lines
COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*" COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"?
It's not nice but you can use:COMPATIBLE_MACHINE_arm = "(.*)"COMPATIBLE_MACHINE_armv4 = "(-)"COMPATIBLE_MACHINE_armv5 = "(-)"COMPATIBLE_MACHINE_mips64 = "(-)"
If these 3 are the only 3 unsupported, then you can drop override for x86, x86-64, arm and change the default to (.*).
Quoted 7 lines
Best regards,
TrevorSignature · 4 lines
_______________________________________________ Openembedded-devel mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Signature · 1 line
Martin 'JaMa' Jansa jabber: [email protected]
Re: [meta-oe][PATCH v3 1/1] nodejs: cleanup and update
Hi Martin,
Quoted 9 lines · Martin Jansa
Quoted 9 lines
That was what I was trying to do :-) I don't have much experience in this, I've been asking on IRC and the mailing lists, and there aren't many examples to copy. I think the following works:
COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*" COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*"?
Quoted 8 lines
It's not nice but you can use:
COMPATIBLE_MACHINE_arm= "(.*)"COMPATIBLE_MACHINE_armv4= "(-)"COMPATIBLE_MACHINE_armv5= "(-)"COMPATIBLE_MACHINE_mips64= "(-)"If these 3 are the only 3 unsupported, then you can drop override for x86, x86-64, arm and change the default to (.*).
Okay, those look like they might work too. I build-tested[1] the COMPATIBLE_MACHINE lines I proposed and the build did what I wanted it to do against the 12 I tried. I get the feeling the ones I proposed might do better against things like "armv5te" and those sorts of variants? But I'm happy to send a v5 if yours (or something else) are better.
Best regards,
Trevor
[1] I run-tested them yesterday, so I probably don't have to re-do that test