From: Daniel Price <daniel.price@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 2/2 V5] nodejs: new package
Date: Thu, 28 Feb 2013 17:56:07 -0800 [thread overview]
Message-ID: <1362102967-10236-1-git-send-email-daniel.price@gmail.com> (raw)
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
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 at 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))
--
1.7.6.5
next reply other threads:[~2013-03-01 1:56 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-01 1:56 Daniel Price [this message]
2013-03-04 21:19 ` [Buildroot] [PATCH 2/2 V5] nodejs: new package Thomas Petazzoni
2013-03-04 21:57 ` Yann E. MORIN
2013-03-04 22:08 ` Luca Ceresoli
2013-03-05 0:52 ` Daniel Price
2013-03-05 4:37 ` Thomas Petazzoni
2013-03-05 0:49 ` Daniel Price
2013-03-05 4:42 ` Thomas Petazzoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1362102967-10236-1-git-send-email-daniel.price@gmail.com \
--to=daniel.price@gmail.com \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.