diff options
| author | Daniel Price <daniel.price@gmail.com> | 2013-03-07 15:31:16 +0000 | 
|---|---|---|
| committer | Peter Korsgaard <jacmet@sunsite.dk> | 2013-03-18 09:42:46 +0100 | 
| commit | b31bc7d4387095091a109eb879464d54d37a5eab (patch) | |
| tree | 87a2ae6a5c1cac951eaf5cd14a313c560c6dce6f /package/nodejs | |
| parent | a42e10c61b19a6054d10fc809460c7e23c46fde7 (diff) | |
| download | buildroot-novena-b31bc7d4387095091a109eb879464d54d37a5eab.tar.gz buildroot-novena-b31bc7d4387095091a109eb879464d54d37a5eab.zip | |
nodejs: new package
Based off of patches posted by (and Signed-off-by:) Jonathan Liu <net147@gmail.com>
[Peter: fix Config.in whitespace]
Signed-off-by: Daniel Price <daniel.price@gmail.com>
Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/nodejs')
| -rw-r--r-- | package/nodejs/Config.in | 79 | ||||
| -rw-r--r-- | package/nodejs/nodejs-remove-python-bz2-dependency.patch | 27 | ||||
| -rw-r--r-- | package/nodejs/nodejs-v8-gregs-fix.patch | 29 | ||||
| -rw-r--r-- | package/nodejs/nodejs.mk | 114 | 
4 files changed, 249 insertions, 0 deletions
| diff --git a/package/nodejs/Config.in b/package/nodejs/Config.in new file mode 100644 index 000000000..aa65c6f42 --- /dev/null +++ b/package/nodejs/Config.in @@ -0,0 +1,79 @@ +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-remove-python-bz2-dependency.patch b/package/nodejs/nodejs-remove-python-bz2-dependency.patch new file mode 100644 index 000000000..75fe43750 --- /dev/null +++ b/package/nodejs/nodejs-remove-python-bz2-dependency.patch @@ -0,0 +1,27 @@ +Remove dependency on Python bz2 module + +The Python bz2 module is only needed in certain cases, so only import +it when needed. In the normal nodejs build, this allows to remove the +dependency on this module. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +Index: b/deps/v8/tools/js2c.py +=================================================================== +--- a/deps/v8/tools/js2c.py ++++ b/deps/v8/tools/js2c.py +@@ -33,7 +33,6 @@ +  + import os, re, sys, string + import jsmin +-import bz2 +  +  + def ToCAsciiArray(lines): +@@ -344,6 +343,7 @@ +   else: +     raw_sources_declaration = RAW_SOURCES_COMPRESSION_DECLARATION +     if env['COMPRESSION'] == 'bz2': ++      import bz2 +       all_sources = bz2.compress("".join(all_sources)) +     total_length = len(all_sources) +     sources_data = ToCArray(all_sources) diff --git a/package/nodejs/nodejs-v8-gregs-fix.patch b/package/nodejs/nodejs-v8-gregs-fix.patch new file mode 100644 index 000000000..4af33bc42 --- /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 000000000..a77709d4f --- /dev/null +++ b/package/nodejs/nodejs.mk @@ -0,0 +1,114 @@ +############################################################# +# +# nodejs +# +############################################################# + +NODEJS_VERSION = 0.8.22 +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 (core code); MIT, Apache and BSD family licenses (Bundled components) +NODEJS_LICENSE_FILES = LICENSE + +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. +# +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)) + +# +# We can only call NPM if there's something to install. +# +ifneq ($(NODEJS_MODULES_LIST),) +define NODEJS_INSTALL_MODULES +	# 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. +	(cd $(TARGET_DIR)/usr/lib && mkdir -p node_modules && \ +		$(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) \ +	) +endef +endif + +define NODEJS_INSTALL_TARGET_CMDS +	$(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) DESTDIR=$(TARGET_DIR) install +	$(NODEJS_INSTALL_MODULES) +endef + +# node.js configure is a Python script and does not use autotools +$(eval $(generic-package)) +$(eval $(host-generic-package)) | 
