Message ID | 1362102967-10236-1-git-send-email-daniel.price@gmail.com |
---|---|
State | Superseded |
Headers | show |
Dear Daniel Price, On Thu, 28 Feb 2013 17:56:07 -0800, Daniel Price wrote: > diff --git a/package/nodejs/Config.in b/package/nodejs/Config.in > new file mode 100644 > index 0000000..22daade > --- /dev/null > +++ b/package/nodejs/Config.in > @@ -0,0 +1,78 @@ > +config BR2_PACKAGE_NODEJS > + bool "nodejs" > + depends on BR2_INET_IPV6 > + depends on BR2_LARGEFILE > + depends on BR2_TOOLCHAIN_HAS_THREADS > + depends on BR2_INSTALL_LIBSTDCPP > + depends on BR2_arm || BR2_i386 || BR2_x86_64 > + # uses fork() > + depends on BR2_USE_MMU > + help > + Event-driven I/O server-side JavaScript environment based on V8. > + > + http://nodejs.org/ > + > +comment "nodejs requires a toolchain with C++, IPv6, large files, and threading" > + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INET_IPV6 We generally want lines like this to be split on two lines: comment "nodejs requires a toolchain with C++, IPv6, large files, and threading" depends on !BR2_INSTALL_LIBSTDCPP || !BR2_LARGEFILE || \ !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INET_IPV6 > diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk > new file mode 100644 > index 0000000..b30fcd4 > --- /dev/null > +++ b/package/nodejs/nodejs.mk > @@ -0,0 +1,109 @@ > +############################################################# > +# > +# nodejs > +# > +############################################################# > + > +NODEJS_VERSION = 0.8.21 > +NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.gz > +NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION) > +NODEJS_DEPENDENCIES = host-python host-nodejs \ > + $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS)) > +HOST_NODEJS_DEPENDENCIES = host-python > +NODEJS_LICENSE = MIT Please add: NODEJS_LICENSE_FILES = LICENSE That said, as the LICENSE file explains, nodejs source code includes some code from various other projects, under other licenses. Maybe the licensing experts should tell us what value NODEJS_LICENSE should have here. Yann? Luca? See https://github.com/joyent/node/blob/master/LICENSE if you don't want to download the whole nodejs source code. > +define HOST_NODEJS_INSTALL_CMDS > + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install > +endef > + > +ifeq ($(BR2_i386),y) > +NODEJS_CPU=ia32 > +else ifeq ($(BR2_x86_64),y) > +NODEJS_CPU=x64 > +else ifeq ($(BR2_arm),y) > +NODEJS_CPU=arm > +# V8 needs to know what floating point ABI the target is using. There's also > +# a 'hard' option which we're not exposing here at the moment, because > +# buildroot itself doesn't really support it at present. > +ifeq ($(BR2_SOFT_FLOAT),y) > +NODEJS_ARM_FP=soft > +else > +NODEJS_ARM_FP=softfp > +endif > +endif In fact, using BR2_SOFT_FLOAT doesn't work very well: on ARM, with an external toolchain, BR2_SOFT_FLOAT will always be 'y', and therefore, when NodeJS is built with a hard-float toolchain like Linaro ARM toolchains, it doesn't work at runtime. But that's not your fault, it's the Buildroot infrastructure that doesn't handle this very well. So keep this as it is for now. > +# > +# Build the list of modules to install based on the booleans for > +# popular modules, as well as the "additional modules" list. > +# qstrip the whole thing to remove whitespace. > +# > +NODEJS_MODULES_LIST= $(call qstrip, \ > + $(if $(BR2_PACKAGE_NODEJS_MODULES_EXPRESS),express,) \ > + $(if $(BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT),coffee-script,) \ > + $(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) When reviewing the previous version, I did suggest to use qstrip only where needed, and to remove useless commas: NODEJS_MODULES_LIST = \ $(if $(BR2_PACKAGE_NODEJS_MODULES_EXPRESS),express) \ $(if $(BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT),coffee-script) \ $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) > +define NODEJS_INSTALL_TARGET_CMDS > + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install > + > + # If you're having trouble with module installation, adding -d to the > + # npm install call below and setting npm_config_rollback=false can both > + # help in diagnosing the problem. > + if [[ -n "$(NODEJS_MODULES_LIST)" ]]; then \ > + echo "Installing modules: $(NODEJS_MODULES_LIST)"; \ > + (cd $(TARGET_DIR)/usr/lib; \ > + $(TARGET_CONFIGURE_OPTS) \ > + LD="$(TARGET_CXX)" \ > + npm_config_arch=$(NODEJS_CPU) \ > + npm_config_nodedir=$(BUILD_DIR)/nodejs-$(NODEJS_VERSION) \ > + $(HOST_DIR)/usr/bin/npm install \ > + $(NODEJS_MODULES_LIST) \ > + ) \ > + fi > +endef Here as well, I already suggested doing this in a different way, when reviewing the v4 of your patch. I don't like the shell based testing of NODEJS_MODULES_LIST. It's much more common in Buildroot to do something like: ifneq ($(NODEJS_MODULES_LIST),) define NODEJS_INSTALL_MODULES (cd $(TARGET_DIR)/usr/lib; ... endef endif define NODEJS_INSTALL_TARGET_CMDS $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install $(NODEJS_INSTALL_MODULES) endef Also, get rid of the 'echo' when installing modules. Once those things are fixed, then I think the patch will be good to go! Thanks a lot for your work! Thomas
Daniel, Thomas, Luca, All, On Monday 04 March 2013 Thomas Petazzoni wrote: > On Thu, 28 Feb 2013 17:56:07 -0800, Daniel Price wrote: [--SNIP--] > > diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk > > new file mode 100644 > > index 0000000..b30fcd4 > > --- /dev/null > > +++ b/package/nodejs/nodejs.mk > > @@ -0,0 +1,109 @@ > > +############################################################# > > +# > > +# nodejs > > +# > > +############################################################# > > + > > +NODEJS_VERSION = 0.8.21 > > +NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.gz > > +NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION) > > +NODEJS_DEPENDENCIES = host-python host-nodejs \ > > + $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS)) > > +HOST_NODEJS_DEPENDENCIES = host-python > > +NODEJS_LICENSE = MIT > > Please add: > > NODEJS_LICENSE_FILES = LICENSE > > That said, as the LICENSE file explains, nodejs source code includes > some code from various other projects, under other licenses. Maybe the > licensing experts should tell us what value NODEJS_LICENSE should have > here. Yann? Luca? See > https://github.com/joyent/node/blob/master/LICENSE if you don't want to > download the whole nodejs source code. First: I am not an authoritative licensing expert. What I would state would be something like: NODEJS_LICENSE = MIT (core code); non-copyleft BSD-like (bundled libraries) In any case, I'd leave it to the user (or his/her legal department) to sort out the exact licensing terms by looking at the LICENSE file, which as Thomas mentionned, shall be referenced by the NODEJS_LICENSE_FILES variable. IIRC, the licensing infrastrucutre in Buildroot is not meant to be authoritative, and should be regarded by the user only as a guide. Regards, Yann E. MORIN.
Yann E. MORIN wrote: > Daniel, Thomas, Luca, All, > > On Monday 04 March 2013 Thomas Petazzoni wrote: >> On Thu, 28 Feb 2013 17:56:07 -0800, Daniel Price wrote: > [--SNIP--] >>> diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk >>> new file mode 100644 >>> index 0000000..b30fcd4 >>> --- /dev/null >>> +++ b/package/nodejs/nodejs.mk >>> @@ -0,0 +1,109 @@ >>> +############################################################# >>> +# >>> +# nodejs >>> +# >>> +############################################################# >>> + >>> +NODEJS_VERSION = 0.8.21 >>> +NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.gz >>> +NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION) >>> +NODEJS_DEPENDENCIES = host-python host-nodejs \ >>> + $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS)) >>> +HOST_NODEJS_DEPENDENCIES = host-python >>> +NODEJS_LICENSE = MIT >> Please add: >> >> NODEJS_LICENSE_FILES = LICENSE >> >> That said, as the LICENSE file explains, nodejs source code includes >> some code from various other projects, under other licenses. Maybe the >> licensing experts should tell us what value NODEJS_LICENSE should have >> here. Yann? Luca? See >> https://github.com/joyent/node/blob/master/LICENSE if you don't want to >> download the whole nodejs source code. > First: I am not an authoritative licensing expert. Neither me... > What I would state would be something like: > > NODEJS_LICENSE = MIT (core code); non-copyleft BSD-like (bundled libraries) > > In any case, I'd leave it to the user (or his/her legal department) to sort > out the exact licensing terms by looking at the LICENSE file, which as Thomas > mentionned, shall be referenced by the NODEJS_LICENSE_FILES variable. > > IIRC, the licensing infrastrucutre in Buildroot is not meant to be > authoritative, and should be regarded by the user only as a guide. I fully agree with Yann. It is very important that Buildroot does not present the license in a simplified way. The user should not think the license is MIT when it is instead MIT and something else. The ideal license description should be correct, concise and complete. When it is not possible (such as in this case), it should be correct and concise, although unavoidably incomplete. So, I would to the least write: NODEJS_LICENSE = MIT and others but Yann's proposal is much more informative. Luca
On Mon, Mar 4, 2013 at 1:19 PM, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote: >> +comment "nodejs requires a toolchain with C++, IPv6, large files, and threading" >> + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INET_IPV6 > > We generally want lines like this to be split on two lines: Will fix. >> +NODEJS_LICENSE = MIT > > Please add: > > NODEJS_LICENSE_FILES = LICENSE > > That said, as the LICENSE file explains, nodejs source code includes > some code from various other projects, under other licenses. Maybe the > licensing experts should tell us what value NODEJS_LICENSE should have > here. Yann? Luca? See > https://github.com/joyent/node/blob/master/LICENSE if you don't want to > download the whole nodejs source code. I'll fix as per the subsequent suggestions. Thanks for flagging this. > In fact, using BR2_SOFT_FLOAT doesn't work very well: on ARM, with an > external toolchain, BR2_SOFT_FLOAT will always be 'y', and therefore, > when NodeJS is built with a hard-float toolchain like Linaro ARM > toolchains, it doesn't work at runtime. > > But that's not your fault, it's the Buildroot infrastructure that > doesn't handle this very well. So keep this as it is for now. I will eventually be using an external toolchain (I think) for an Armada XP board... so I assume I'll want hard float there? I'm happy to solve this some other way if there are any suggestions? The other idea I had is to have a menuconfig item which just tells the user to specify what they want. I thought that seemed bad, because I had a hard time understanding this setting, but maybe it's better since it would actually work? >> +# >> +# Build the list of modules to install based on the booleans for >> +# popular modules, as well as the "additional modules" list. >> +# qstrip the whole thing to remove whitespace. >> +# >> +NODEJS_MODULES_LIST= $(call qstrip, \ >> + $(if $(BR2_PACKAGE_NODEJS_MODULES_EXPRESS),express,) \ >> + $(if $(BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT),coffee-script,) \ >> + $(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) > > When reviewing the previous version, I did suggest to use qstrip only > where needed, and to remove useless commas: > > NODEJS_MODULES_LIST = \ > $(if $(BR2_PACKAGE_NODEJS_MODULES_EXPRESS),express) \ > $(if $(BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT),coffee-script) \ > $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) I tried to clarify with the comment I added: the qstrip of everything is important when you mix in the shell. Otherwise you wind up with something like: if [[ -n " " ]], and the -n test fails. At least, that's what I saw. That said, your other suggestion about using makefile defines should eliminate this problem, so I can switch over. The useless commas were an oversight, sorry. > Here as well, I already suggested doing this in a different way, when > reviewing the v4 of your patch. I don't like the shell based testing of > NODEJS_MODULES_LIST. It's much more common in Buildroot to do something > like: Ok-- I took as a suggestion, and didn't know this was so much against the project's style. Will fix as per your direction. > Also, get rid of the 'echo' when installing modules. Ok. > Once those things are fixed, then I think the patch will be good to go! > > Thanks a lot for your work! Thanks for your hard work in reviewing it, and making it easy for a new contributor. -dp -- Daniel.Price@gmail.com; Twitter: @danielbprice
On Mon, Mar 4, 2013 at 2:08 PM, Luca Ceresoli <luca@lucaceresoli.net> wrote: > Yann E. MORIN wrote: >> What I would state would be something like: >> >> NODEJS_LICENSE = MIT (core code); non-copyleft BSD-like (bundled >> libraries) >> <snip> > > So, I would to the least write: > > NODEJS_LICENSE = MIT and others > but Yann's proposal is much more informative. Thank you for the suggestions. I will catalog all of the licenses and summarize as you suggested for the next version of the patch. -dp -- Daniel.Price@gmail.com; Twitter: @danielbprice
Dear Luca Ceresoli, On Mon, 04 Mar 2013 23:08:06 +0100, Luca Ceresoli wrote: > unavoidably incomplete. > > So, I would to the least write: > > NODEJS_LICENSE = MIT and others > but Yann's proposal is much more informative. I agree that Yann's proposal is much more informative. "others" is very vague. Knowing that the "other" licenses are BSD-like tells the user that the entire nodejs stuff is under a non-copyleft license, which is quite important. Thomas
Dear Daniel Price, On Mon, 4 Mar 2013 16:49:58 -0800, Daniel Price wrote: > > In fact, using BR2_SOFT_FLOAT doesn't work very well: on ARM, with an > > external toolchain, BR2_SOFT_FLOAT will always be 'y', and therefore, > > when NodeJS is built with a hard-float toolchain like Linaro ARM > > toolchains, it doesn't work at runtime. > > > > But that's not your fault, it's the Buildroot infrastructure that > > doesn't handle this very well. So keep this as it is for now. > > I will eventually be using an external toolchain (I think) for an > Armada XP board... so I assume I'll want hard float there? I'm happy > to solve this some other way if there are any suggestions? > > The other idea I had is to have a menuconfig item which just tells the > user to specify what they want. I thought that seemed bad, because I > had a hard time understanding this setting, but maybe it's better > since it would actually work? I don't -yet- have a precise view on how to solve this. As you can see in http://elinux.org/Buildroot:DeveloperDaysELCE2012, the topic of floating point support has already been discussed in the past: """ FP stuff: we now have a single SOFT_FLOAT option, but actually there's a lot more variation: neon, vfpv3, softfp, .... To support this well, we can add a lot of extra config options to semi-automatically select the correct float options based on the subarchitecture. There is some cross-dependency with the external toolchains, but it's doable. There should still be an option to manually override the float options for exotic cases. ARM thumb adds another layer of complexity. Someone should take the lead on making this easier. """ So some work is needed to figure out the right way to handle this, taking into account both the needs of internal/Crosstool-NG backends, and the needs of the external backend. > > When reviewing the previous version, I did suggest to use qstrip only > > where needed, and to remove useless commas: > > > > NODEJS_MODULES_LIST = \ > > $(if $(BR2_PACKAGE_NODEJS_MODULES_EXPRESS),express) \ > > $(if $(BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT),coffee-script) \ > > $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) > > I tried to clarify with the comment I added: the qstrip of everything > is important when you mix in the shell. Otherwise you wind up with > something like: if [[ -n " " ]], and the -n test fails. At least, > that's what I saw. That said, your other suggestion about using > makefile defines should eliminate this problem, so I can switch over. Aah, I see, ok. If it works with the make-based test on NODEJS_MODULES_LIST rather than the shell-based test, then it would be better. > Thanks for your hard work in reviewing it, and making it easy for a > new contributor. Thanks to you! It's not common to see a new contributor going through 5 versions of a patch set and still being responsive and willing to fix issues! :-) Best regards, Thomas
diff --git a/package/Config.in b/package/Config.in index 0afcd7d..cc08713 100644 --- a/package/Config.in +++ b/package/Config.in @@ -314,6 +314,7 @@ source "package/cpanminus/Config.in" endmenu endif source "package/microperl/Config.in" +source "package/nodejs/Config.in" source "package/php/Config.in" source "package/python/Config.in" source "package/python3/Config.in" diff --git a/package/nodejs/Config.in b/package/nodejs/Config.in new file mode 100644 index 0000000..22daade --- /dev/null +++ b/package/nodejs/Config.in @@ -0,0 +1,78 @@ +config BR2_PACKAGE_NODEJS + bool "nodejs" + depends on BR2_INET_IPV6 + depends on BR2_LARGEFILE + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_arm || BR2_i386 || BR2_x86_64 + # uses fork() + depends on BR2_USE_MMU + help + Event-driven I/O server-side JavaScript environment based on V8. + + http://nodejs.org/ + +comment "nodejs requires a toolchain with C++, IPv6, large files, and threading" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INET_IPV6 + +if BR2_PACKAGE_NODEJS + +menu "Module Selection" + +config BR2_PACKAGE_NODEJS_NPM + bool "NPM for the target" + select BR2_PACKAGE_OPENSSL + help + NPM is the package manager for the Node JavaScript platform. + Note that enabling NPM on the target also selects OpenSSL for the + target. + + http://www.npmjs.org + + Note that NPM is always built for the buildroot host. + +config BR2_PACKAGE_NODEJS_MODULES_EXPRESS + bool "Express web application framework" + help + Express is a minimal and flexible node.js web application + framework, providing a robust set of features for building + single and multi-page, and hybrid web applications. + + http://www.expressjs.com + https://github.com/visionmedia/express + +config BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT + bool "CoffeeScript" + help + CoffeeScript is a little language that compiles into JavaScript. + + http://www.coffeescript.org + +config BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL + string "Additional modules" + help + List of space-separated nodejs modules to install via npm. + See https://npmjs.org/ to find modules and 'npm help install' + for available installation methods. For repeatable builds, + download and save tgz files or clone git repos for the + components you care about. + + Example: serialport uglify-js@1.3.4 /my/module/mymodule.tgz git://github.com/someuser/somemodule.git#v1.2 + + This would install the serialport module (at the newest version), + the uglify-js module at 1.3.4, a module from a filesystem path, + and a module from a git repository. + +config BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS + string "Additional module dependencies" + help + List of space-separated buildroot recipes which must be built before + your npms can be installed. For example, if in 'Additional modules' + you specified 'node-curl' (see: + https://github.com/jiangmiao/node-curl), you could then specify + 'libcurl' here, to ensure that buildroot builds the libcurl package, + and does so before building your node modules. + +endmenu + +endif diff --git a/package/nodejs/nodejs-v8-gregs-fix.patch b/package/nodejs/nodejs-v8-gregs-fix.patch new file mode 100644 index 0000000..4af33bc --- /dev/null +++ b/package/nodejs/nodejs-v8-gregs-fix.patch @@ -0,0 +1,29 @@ +Fix compilation for ARM/uClibc +Patch from Remi Duraffort <remi.duraffort@st.com>, taken from +https://code.google.com/p/v8/source/detail?r=12094 + +Signed-off-by: Daniel Price <daniel.price@gmail.com> + +--- a/deps/v8/src/platform-linux.cc ++++ b/deps/v8/src/platform-linux.cc +@@ -1025,7 +1025,8 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) { + sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]); + #elif V8_HOST_ARCH_ARM + // An undefined macro evaluates to 0, so this applies to Android's Bionic also. +-#if (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) ++#if (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3) && \ ++ !defined(__UCLIBC__)) + sample->pc = reinterpret_cast<Address>(mcontext.gregs[R15]); + sample->sp = reinterpret_cast<Address>(mcontext.gregs[R13]); + sample->fp = reinterpret_cast<Address>(mcontext.gregs[R11]); +@@ -1033,7 +1034,8 @@ static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) { + sample->pc = reinterpret_cast<Address>(mcontext.arm_pc); + sample->sp = reinterpret_cast<Address>(mcontext.arm_sp); + sample->fp = reinterpret_cast<Address>(mcontext.arm_fp); +-#endif // (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3)) ++#endif // (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3) && ++ // !defined(__UCLIBC__)) + #elif V8_HOST_ARCH_MIPS + sample->pc = reinterpret_cast<Address>(mcontext.pc); + sample->sp = reinterpret_cast<Address>(mcontext.gregs[29]); + diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk new file mode 100644 index 0000000..b30fcd4 --- /dev/null +++ b/package/nodejs/nodejs.mk @@ -0,0 +1,109 @@ +############################################################# +# +# nodejs +# +############################################################# + +NODEJS_VERSION = 0.8.21 +NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.gz +NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION) +NODEJS_DEPENDENCIES = host-python host-nodejs \ + $(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS)) +HOST_NODEJS_DEPENDENCIES = host-python +NODEJS_LICENSE = MIT + +ifeq ($(BR2_PACKAGE_OPENSSL),y) + NODEJS_DEPENDENCIES += openssl +endif + +define HOST_NODEJS_CONFIGURE_CMDS + # Build with the static, built-in OpenSSL which is supplied as part of + # the nodejs source distribution. This is needed on the host because + # NPM is non-functional without it, and host-openssl isn't part of + # buildroot. + (cd $(@D); \ + ./configure \ + --prefix=$(HOST_DIR)/usr \ + --without-snapshot \ + --without-dtrace \ + --without-etw \ + ) +endef + +define HOST_NODEJS_BUILD_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define HOST_NODEJS_INSTALL_CMDS + $(HOST_MAKE_ENV) $(MAKE) -C $(@D) install +endef + +ifeq ($(BR2_i386),y) +NODEJS_CPU=ia32 +else ifeq ($(BR2_x86_64),y) +NODEJS_CPU=x64 +else ifeq ($(BR2_arm),y) +NODEJS_CPU=arm +# V8 needs to know what floating point ABI the target is using. There's also +# a 'hard' option which we're not exposing here at the moment, because +# buildroot itself doesn't really support it at present. +ifeq ($(BR2_SOFT_FLOAT),y) +NODEJS_ARM_FP=soft +else +NODEJS_ARM_FP=softfp +endif +endif + +define NODEJS_CONFIGURE_CMDS + (cd $(@D); \ + $(TARGET_CONFIGURE_OPTS) \ + LD="$(TARGET_CXX)" \ + ./configure \ + --prefix=/usr \ + --without-snapshot \ + $(if $(BR2_PACKAGE_OPENSSL),--shared-openssl,--without-ssl) \ + $(if $(BR2_PACKAGE_NODEJS_NPM),,--without-npm) \ + --without-dtrace \ + --without-etw \ + --dest-cpu=$(NODEJS_CPU) \ + $(if $(NODEJS_ARM_FP),--with-arm-float-abi=$(NODEJS_ARM_FP)) \ + --dest-os=linux \ + ) +endef + +define NODEJS_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) +endef + +# +# Build the list of modules to install based on the booleans for +# popular modules, as well as the "additional modules" list. +# qstrip the whole thing to remove whitespace. +# +NODEJS_MODULES_LIST= $(call qstrip, \ + $(if $(BR2_PACKAGE_NODEJS_MODULES_EXPRESS),express,) \ + $(if $(BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT),coffee-script,) \ + $(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) + +define NODEJS_INSTALL_TARGET_CMDS + $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install + + # If you're having trouble with module installation, adding -d to the + # npm install call below and setting npm_config_rollback=false can both + # help in diagnosing the problem. + if [[ -n "$(NODEJS_MODULES_LIST)" ]]; then \ + echo "Installing modules: $(NODEJS_MODULES_LIST)"; \ + (cd $(TARGET_DIR)/usr/lib; \ + $(TARGET_CONFIGURE_OPTS) \ + LD="$(TARGET_CXX)" \ + npm_config_arch=$(NODEJS_CPU) \ + npm_config_nodedir=$(BUILD_DIR)/nodejs-$(NODEJS_VERSION) \ + $(HOST_DIR)/usr/bin/npm install \ + $(NODEJS_MODULES_LIST) \ + ) \ + fi +endef + +# node.js configure is a Python script and does not use autotools +$(eval $(generic-package)) +$(eval $(host-generic-package))
Based off of patches posted by (and Signed-off-by:) Jonathan Liu <net147@gmail.com> Signed-off-by: Daniel Price <daniel.price@gmail.com> --- package/Config.in | 1 + package/nodejs/Config.in | 78 +++++++++++++++++++++ package/nodejs/nodejs-v8-gregs-fix.patch | 29 ++++++++ package/nodejs/nodejs.mk | 109 ++++++++++++++++++++++++++++++ 4 files changed, 217 insertions(+), 0 deletions(-) create mode 100644 package/nodejs/Config.in create mode 100644 package/nodejs/nodejs-v8-gregs-fix.patch create mode 100644 package/nodejs/nodejs.mk