Update 2015-02-15: So far, I have failed building Nodejs v0.12.0 on ARMv5
I have a QNAP TS109 running Debian (port:armel, version:7), and of course I want to run node.js on it. I don’t think there are any binaries, so building from source is the way to go.
About my environment:
$ cat /etc/debian_version 7.2 $ gcc --version | head -n 1 gcc (Debian 4.6.3-14) 4.6.3 $ uname -a Linux kvaser 3.2.0-4-orion5x #1 Debian 3.2.51-1 armv5tel GNU/Linux $ cat /proc/cpuinfo Processor : Feroceon rev 0 (v5l) BogoMIPS : 331.77 Features : swp half thumb fastmult edsp CPU implementer : 0x41 CPU architecture: 5TEJ CPU variant : 0x0 CPU part : 0x926 CPU revision : 0 Hardware : QNAP TS-109/TS-209 Revision : 0000 Serial : 0000000000000000
I downloaded the latest version of node.js: node-v0.10.25, and this is how I ended up compiling it (first writing build.sh, then executing it as root):
$ cat build.sh #!/bin/sh export CFLAGS='-march=armv5t' export CXXFLAGS='-march=armv5t' ./configure make install $ sudo ./build.sh
That takes almost four hours.
A few notes…
make install
Naturally, make install has to be run as root. When I do that, everything is built again, from scratch. This is not what I expect of make install, and to me this seems like a bug. This is why I put the build lines into a little shell script, and ran the entire script with sudo. Compiling as root does not make sense
-march=armv4 and -march=armv4t
Compiling with -march=armv4t (or no -march at all, defaulting to armv4 I believe) results in an error:
../deps/v8/src/arm/macro-assembler-arm.cc:65:3: error: #error "For thumb inter-working we require an architecture which supports blx"
You can workaround this by above line 65 in the above file:
#define CAN_USE_THUMB_INSTRUCTIONS 1
as I mentioned in my old article about building Node.js on Debian ARM.
-march=armv5te
I first tried building with -march=armv5te (since that seemed closest to armv5tel which is what uname tells me I have). The build completed, but the node binary generated Segmentation fault (however node -h did work, so the binary was not completely broken).
I do not know if this problem is caused by my CPU not being compatible with/capable of armv5te, or, if there is something about armv5te that is not compatible with the way Debian and its libraries are built.
Try compiling without the snapshot feature:
$ cat build.sh
#!/bin/sh
export CFLAGS=’-march=armv5t’
export CXXFLAGS=’-march=armv5t’
./configure –without-snapshot
make
make install
$ sudo ./build.sh
For a while I thought the snapshot feature was part of the compilation problem and did –disable-snapshot as well as –disable-ssl (mostly for a quicker compile). Please explain, why should I use –disable-snapshot? For faster compile, faster execution, better stability or something else? Or do you just want me to try without snapshot to see if it works? (it does)