@@ -2904,6 +2904,7 @@ F: package/musl-fts/
F: package/ne10/
F: package/nodejs/
F: package/nodejs-bin/
+F: package/nodejs-src/
F: package/pkg-python.mk
F: package/pkg-autotools.mk
F: package/pkg-generic.mk
@@ -4,7 +4,7 @@
#
################################################################################
-# keep in sync with package/nodejs/nodejs.mk
+# keep in sync with package/nodejs and package/nodejs-src
NODEJS_BIN_VERSION = 16.17.1
NODEJS_BIN_SITE = https://nodejs.org/dist/v$(NODEJS_BIN_VERSION)
@@ -26,6 +26,8 @@ NODEJS_BIN_LICENSE_FILES = LICENSE
NODEJS_BIN_CPE_ID_VENDOR = nodejs
NODEJS_BIN_CPE_ID_PRODUCT = node.js
+HOST_NODEJS_BIN_PROVIDES = host-nodejs
+
define HOST_NODEJS_BIN_INSTALL_CMDS
rsync -a --exclude=CHANGELOG.md --exclude=LICENSE --exclude=README.md \
$(@D)/* $(HOST_DIR)/
similarity index 78%
copy from package/nodejs/Config.in.host
copy to package/nodejs-src/Config.in.host
@@ -1,4 +1,4 @@
-config BR2_PACKAGE_HOST_NODEJS
+config BR2_PACKAGE_HOST_NODEJS_SRC
bool "host nodejs"
depends on BR2_HOST_GCC_AT_LEAST_8
select BR2_PACKAGE_HOST_PYTHON3
@@ -10,5 +10,5 @@ config BR2_PACKAGE_HOST_NODEJS
http://nodejs.org/
-comment "host nodejs needs a host gcc >= 8"
+comment "host nodejs-src needs a host gcc >= 8"
depends on !BR2_HOST_GCC_AT_LEAST_8
new file mode 120000
@@ -0,0 +1 @@
+../nodejs/nodejs.hash
\ No newline at end of file
new file mode 100644
@@ -0,0 +1,72 @@
+################################################################################
+#
+# nodejs-src
+#
+################################################################################
+
+# Keep in sync with package/nodejs and package/nodejs-bin
+NODEJS_SRC_VERSION = 16.17.1
+NODEJS_SRC_SOURCE = node-v$(NODEJS_VERSION).tar.xz
+NODEJS_SRC_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION)
+
+NODEJS_SRC_LICENSE = MIT (core code); MIT, Apache and BSD family licenses (Bundled components)
+NODEJS_SRC_LICENSE_FILES = LICENSE
+NODEJS_SRC_CPE_ID_VENDOR = nodejs
+NODEJS_SRC_CPE_ID_PRODUCT = node.js
+
+HOST_NODEJS_SRC_PROVIDES = host-nodejs
+
+HOST_NODEJS_SRC_DEPENDENCIES = \
+ host-icu \
+ host-libopenssl \
+ host-ninja \
+ host-pkgconf \
+ host-python3 \
+ host-zlib
+
+HOST_NODEJS_SRC_MAKE_OPTS = \
+ $(HOST_CONFIGURE_OPTS) \
+ CXXFLAGS="$(HOST_NODEJS_CXXFLAGS)" \
+ LDFLAGS.host="$(HOST_LDFLAGS)" \
+ NO_LOAD=cctest.target.mk \
+ PATH=$(@D)/bin:$(BR_PATH)
+
+define HOST_NODEJS_SRC_PYTHON3_SYMLINK
+ mkdir -p $(@D)/bin
+ ln -sf $(HOST_DIR)/bin/python3 $(@D)/bin/python
+endef
+HOST_NODEJS_SRC_PRE_CONFIGURE_HOOKS += NODEJS_PYTHON3_SYMLINK
+
+define HOST_NODEJS_SRC_CONFIGURE_CMDS
+ cd $(@D); \
+ $(HOST_CONFIGURE_OPTS) \
+ PATH=$(@D)/bin:$(BR_PATH) \
+ PYTHON=$(HOST_DIR)/bin/python3 \
+ $(HOST_DIR)/bin/python3 ./configure \
+ --prefix=$(HOST_DIR) \
+ --without-dtrace \
+ --without-etw \
+ --shared-openssl \
+ --shared-openssl-includes=$(HOST_DIR)/include \
+ --shared-openssl-libpath=$(HOST_DIR)/lib \
+ --shared-zlib \
+ --no-cross-compiling \
+ --with-intl=system-icu \
+ --ninja
+endef
+
+HOST_NODEJS_SRC_CXXFLAGS = $(HOST_CXXFLAGS)
+
+define HOST_NODEJS_SRC_BUILD_CMDS
+ $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \
+ $(MAKE) -C $(@D) \
+ $(HOST_NODEJS_MAKE_OPTS)
+endef
+
+define HOST_NODEJS_SRC_INSTALL_CMDS
+ $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \
+ $(MAKE) -C $(@D) install \
+ $(HOST_NODEJS_MAKE_OPTS)
+endef
+
+$(eval $(host-generic-package))
@@ -1,14 +1,43 @@
+config BR2_PACKAGE_HOST_NODEJS_BIN_ARCH_SUPPORTS
+ bool
+ default y if BR2_HOSTARCH = "aarch64"
+ default y if BR2_HOSTARCH = "arm"
+ default y if BR2_HOSTARCH = "ppc64le"
+ default y if BR2_HOSTARCH = "x86_64"
+
config BR2_PACKAGE_HOST_NODEJS
bool "host nodejs"
- depends on BR2_HOST_GCC_AT_LEAST_8
- select BR2_PACKAGE_HOST_PYTHON3
- select BR2_PACKAGE_HOST_PYTHON3_BZIP2
- select BR2_PACKAGE_HOST_PYTHON3_SSL
+ depends on BR2_PACKAGE_HOST_NODEJS_BIN_ARCH_SUPPORTS || \
+ BR2_HOST_GCC_AT_LEAST_8
help
Event-driven I/O server-side JavaScript environment based on
V8.
http://nodejs.org/
-comment "host nodejs needs a host gcc >= 8"
+if BR2_PACKAGE_HOST_NODEJS
+
+choice
+
+config BR2_PACKAGE_HOST_NODEJS_BIN
+ bool "pre-built version"
+ depends on BR2_PACKAGE_HOST_NODEJS_BIN_ARCH_SUPPORTS
+
+config BR2_PACKAGE_HOST_NODEJS_SRC
+ bool "compile from source"
+ depends on BR2_HOST_GCC_AT_LEAST_8
+ select BR2_PACKAGE_HOST_PYTHON3
+ select BR2_PACKAGE_HOST_PYTHON3_BZIP2
+ select BR2_PACKAGE_HOST_PYTHON3_SSL
+
+comment "host nodejs from source needs a host gcc >= 8"
depends on !BR2_HOST_GCC_AT_LEAST_8
+
+endchoice
+
+endif
+
+config BR2_PACKAGE_PROVIDES_HOST_NODEJS
+ string
+ default "host-nodejs-bin" if BR2_PACKAGE_HOST_NODEJS_BIN
+ default "host-nodejs-src" if BR2_PACKAGE_HOST_NODEJS_SRC
@@ -4,6 +4,7 @@
#
################################################################################
+# Keep in sync with package/nodejs-src and package/nodejs-bin
NODEJS_VERSION = 16.17.1
NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.xz
NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION)
@@ -17,13 +18,6 @@ NODEJS_DEPENDENCIES = \
nghttp2 \
zlib \
$(call qstrip,$(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL_DEPS))
-HOST_NODEJS_DEPENDENCIES = \
- host-icu \
- host-libopenssl \
- host-ninja \
- host-pkgconf \
- host-python3 \
- host-zlib
NODEJS_INSTALL_STAGING = YES
NODEJS_LICENSE = MIT (core code); MIT, Apache and BSD family licenses (Bundled components)
NODEJS_LICENSE_FILES = LICENSE
@@ -41,13 +35,6 @@ NODEJS_CONF_OPTS = \
--dest-os=linux \
--ninja
-HOST_NODEJS_MAKE_OPTS = \
- $(HOST_CONFIGURE_OPTS) \
- CXXFLAGS="$(HOST_NODEJS_CXXFLAGS)" \
- LDFLAGS.host="$(HOST_LDFLAGS)" \
- NO_LOAD=cctest.target.mk \
- PATH=$(@D)/bin:$(BR_PATH)
-
NODEJS_MAKE_OPTS = \
$(TARGET_CONFIGURE_OPTS) \
NO_LOAD=cctest.target.mk \
@@ -62,7 +49,6 @@ define NODEJS_PYTHON3_SYMLINK
mkdir -p $(@D)/bin
ln -sf $(HOST_DIR)/bin/python3 $(@D)/bin/python
endef
-HOST_NODEJS_PRE_CONFIGURE_HOOKS += NODEJS_PYTHON3_SYMLINK
NODEJS_PRE_CONFIGURE_HOOKS += NODEJS_PYTHON3_SYMLINK
ifeq ($(BR2_PACKAGE_OPENSSL),y)
@@ -83,38 +69,6 @@ ifneq ($(BR2_PACKAGE_NODEJS_NPM),y)
NODEJS_CONF_OPTS += --without-npm
endif
-define HOST_NODEJS_CONFIGURE_CMDS
- cd $(@D); \
- $(HOST_CONFIGURE_OPTS) \
- PATH=$(@D)/bin:$(BR_PATH) \
- PYTHON=$(HOST_DIR)/bin/python3 \
- $(HOST_DIR)/bin/python3 ./configure \
- --prefix=$(HOST_DIR) \
- --without-dtrace \
- --without-etw \
- --shared-openssl \
- --shared-openssl-includes=$(HOST_DIR)/include \
- --shared-openssl-libpath=$(HOST_DIR)/lib \
- --shared-zlib \
- --no-cross-compiling \
- --with-intl=system-icu \
- --ninja
-endef
-
-HOST_NODEJS_CXXFLAGS = $(HOST_CXXFLAGS)
-
-define HOST_NODEJS_BUILD_CMDS
- $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \
- $(MAKE) -C $(@D) \
- $(HOST_NODEJS_MAKE_OPTS)
-endef
-
-define HOST_NODEJS_INSTALL_CMDS
- $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \
- $(MAKE) -C $(@D) install \
- $(HOST_NODEJS_MAKE_OPTS)
-endef
-
ifeq ($(BR2_i386),y)
NODEJS_CPU = ia32
else ifeq ($(BR2_x86_64),y)
@@ -186,13 +140,6 @@ define NODEJS_WRAPPER_FIXUP
endef
NODEJS_PRE_CONFIGURE_HOOKS += NODEJS_WRAPPER_FIXUP
-# Do not run the qemu-wrapper for the host build.
-define HOST_NODEJS_WRAPPER_FIXUP
- $(SED) "s%@MAYBE_WRAPPER@%%g" $(@D)/node.gyp
- $(SED) "s%@MAYBE_WRAPPER@%%g" $(@D)/tools/v8_gypfiles/v8.gyp
-endef
-HOST_NODEJS_PRE_CONFIGURE_HOOKS += HOST_NODEJS_WRAPPER_FIXUP
-
define NODEJS_CONFIGURE_CMDS
(cd $(@D); \
$(TARGET_CONFIGURE_OPTS) \
@@ -265,4 +212,4 @@ endef
# node.js configure is a Python script and does not use autotools
$(eval $(generic-package))
-$(eval $(host-generic-package))
+$(eval $(host-virtual-package))
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, which has two providers: - host-nodejs-src, which builds host-nodejs from source. Therefore the logic that used to be in package/nodejs/nodejs.mk to build host-nodejs from source is moved to package/nodejs-src/nodejs-src.mk. It should be noted that the patches in package/nodejs are not applied to package/nodejs-src as all patches are related to solving target-only issues. However, we could certainly think of applying the same patches if need be. - host-nodejs-bin, which was introduced in the previous commit, and which simply installs a pre-compiled NodeJS. One possible alternate organization is to have package/nodejs/ contain all three packages: package/nodejs/nodejs/, package/nodejs/nodejs-src, package/nodejs/nodejs-bin, which would allow to more easily share a few common variables (version, license, license files, CPE ID, etc.). Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> --- DEVELOPERS | 1 + package/nodejs-bin/nodejs-bin.mk | 4 +- package/{nodejs => nodejs-src}/Config.in.host | 4 +- package/nodejs-src/nodejs-src.hash | 1 + package/nodejs-src/nodejs-src.mk | 72 +++++++++++++++++++ package/nodejs/Config.in.host | 39 ++++++++-- package/nodejs/nodejs.mk | 57 +-------------- 7 files changed, 115 insertions(+), 63 deletions(-) copy package/{nodejs => nodejs-src}/Config.in.host (78%) create mode 120000 package/nodejs-src/nodejs-src.hash create mode 100644 package/nodejs-src/nodejs-src.mk