4cbc2af604
host-nodejs is quite long to build (5 minutes on a very fast build machine), and will become a download dependency when we implement vendoring for NodeJS-based packages. In order to mitigate this build time, an idea is to use a pre-compiled host NodeJS. One option would be to use a pre-installed NodeJS, but we're concerned by version compatibility issues of the host NodeJS/NPM does not have the same version as the target NodeJS/NPM. So another option is to use a pre-compiled NodeJS provided by the NodeJS project itself. To achieve this, this commit turns the host-nodejs package into a virtual package. For the time being, this has just one provider: host-nodejs-src, which builds host-nodejs from source. This is the original host-nodejs package, renamed to host-nodejs-src. The target nodejs package is also renamed to nodejs-src in order to have a single package nodejs-src that has a host and target version, as usual. We do keep the nodejs target package itself, but it's an empty package - not even a virtual package. This means the following. - Its VERSION, SOURCE and SITE variables are left empty. The existing variables are renamed to NODEJS_COMMON_VERSION etc. to allow them to be reused by nodejs-src and the future nodejs-bin. - It's a generic package with a single dependency, nodejs-src. - The Config.in remains unchanged, except that it selects BR2_PACKAGE_NODEJS_SRC. - BR2_PACKAGE_NODEJS_SRC is a blind option. Co-authored-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Signed-off-by: Arnout Vandecappelle <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
91 lines
3.1 KiB
Plaintext
91 lines
3.1 KiB
Plaintext
config BR2_PACKAGE_NODEJS_ARCH_SUPPORTS
|
|
bool
|
|
# On ARM, at least ARMv6+ with VFPv2+ is needed
|
|
default y if BR2_arm && !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5 && BR2_ARM_CPU_HAS_VFPV2
|
|
default y if BR2_aarch64 || BR2_i386 || BR2_x86_64
|
|
# libuv
|
|
depends on BR2_TOOLCHAIN_HAS_SYNC_4
|
|
depends on BR2_PACKAGE_HOST_QEMU_USER_ARCH_SUPPORTS
|
|
|
|
comment "nodejs needs a toolchain w/ C++, dynamic library, NPTL, gcc >= 7, wchar, host gcc >= 8"
|
|
depends on BR2_USE_MMU
|
|
depends on BR2_PACKAGE_NODEJS_ARCH_SUPPORTS
|
|
depends on !BR2_INSTALL_LIBSTDCPP || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
|
|
!BR2_HOST_GCC_AT_LEAST_8 || !BR2_TOOLCHAIN_GCC_AT_LEAST_7 || !BR2_USE_WCHAR
|
|
|
|
config BR2_PACKAGE_NODEJS
|
|
bool "nodejs"
|
|
depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv
|
|
depends on BR2_INSTALL_LIBSTDCPP
|
|
depends on BR2_PACKAGE_NODEJS_ARCH_SUPPORTS
|
|
depends on BR2_HOST_GCC_AT_LEAST_8 # qemu
|
|
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7
|
|
depends on BR2_USE_WCHAR
|
|
# uses fork()
|
|
depends on BR2_USE_MMU
|
|
# uses dlopen(). On ARMv5, we could technically support static
|
|
# linking, but that's too much of a corner case to support it.
|
|
depends on !BR2_STATIC_LIBS
|
|
select BR2_PACKAGE_NODEJS_SRC
|
|
select BR2_PACKAGE_HOST_NODEJS if BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL != ""
|
|
select BR2_PACKAGE_HOST_PYTHON3
|
|
select BR2_PACKAGE_HOST_PYTHON3_BZIP2
|
|
select BR2_PACKAGE_HOST_PYTHON3_SSL
|
|
select BR2_PACKAGE_HOST_QEMU
|
|
select BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
|
|
select BR2_PACKAGE_C_ARES
|
|
select BR2_PACKAGE_LIBUV
|
|
select BR2_PACKAGE_ZLIB
|
|
select BR2_PACKAGE_NGHTTP2
|
|
help
|
|
Event-driven I/O server-side JavaScript environment based on
|
|
V8.
|
|
|
|
http://nodejs.org/
|
|
|
|
if BR2_PACKAGE_NODEJS
|
|
|
|
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_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.
|
|
|
|
endif
|
|
|
|
source "package/nodejs/nodejs-src/Config.in"
|