mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-08-01 15:37:44 +00:00
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>
This commit is contained in:
parent
a42e10c61b
commit
b31bc7d438
@ -311,6 +311,7 @@ source "package/wsapi/Config.in"
|
|||||||
source "package/xavante/Config.in"
|
source "package/xavante/Config.in"
|
||||||
endmenu
|
endmenu
|
||||||
endif
|
endif
|
||||||
|
source "package/nodejs/Config.in"
|
||||||
source "package/perl/Config.in"
|
source "package/perl/Config.in"
|
||||||
if BR2_PACKAGE_PERL
|
if BR2_PACKAGE_PERL
|
||||||
menu "Perl libraries/modules"
|
menu "Perl libraries/modules"
|
||||||
|
79
package/nodejs/Config.in
Normal file
79
package/nodejs/Config.in
Normal file
@ -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
|
27
package/nodejs/nodejs-remove-python-bz2-dependency.patch
Normal file
27
package/nodejs/nodejs-remove-python-bz2-dependency.patch
Normal file
@ -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)
|
29
package/nodejs/nodejs-v8-gregs-fix.patch
Normal file
29
package/nodejs/nodejs-v8-gregs-fix.patch
Normal file
@ -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]);
|
||||||
|
|
114
package/nodejs/nodejs.mk
Normal file
114
package/nodejs/nodejs.mk
Normal file
@ -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))
|
Loading…
x
Reference in New Issue
Block a user