diff --git a/package/nodejs/nodejs.mk b/package/nodejs/nodejs.mk index b8e57e567d..16e85b7ab9 100644 --- a/package/nodejs/nodejs.mk +++ b/package/nodejs/nodejs.mk @@ -7,231 +7,12 @@ NODEJS_VERSION = 16.20.0 NODEJS_SOURCE = node-v$(NODEJS_VERSION).tar.xz NODEJS_SITE = http://nodejs.org/dist/v$(NODEJS_VERSION) -NODEJS_DEPENDENCIES = \ - host-ninja \ - host-pkgconf \ - host-python3 \ - host-qemu \ - c-ares \ - libuv \ - 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 NODEJS_CPE_ID_VENDOR = nodejs NODEJS_CPE_ID_PRODUCT = node.js -NODEJS_CONF_OPTS = \ - --shared-zlib \ - --shared-cares \ - --shared-libuv \ - --shared-nghttp2 \ - --without-dtrace \ - --without-etw \ - --cross-compiling \ - --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) \ - JOBS=$(PARALLEL_JOBS) - -NODEJS_MAKE_OPTS = \ - $(TARGET_CONFIGURE_OPTS) \ - NO_LOAD=cctest.target.mk \ - PATH=$(@D)/bin:$(BR_PATH) \ - LDFLAGS="$(NODEJS_LDFLAGS)" \ - LD="$(TARGET_CXX)" \ - JOBS=$(PARALLEL_JOBS) - -# nodejs's build system uses python which can be a symlink to an unsupported -# python version (e.g. python 3.10 with nodejs 14.18.1). We work around this by -# forcing host-python3 early in the PATH, via a python->python3 symlink. -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) -NODEJS_DEPENDENCIES += openssl -NODEJS_CONF_OPTS += --shared-openssl -else -NODEJS_CONF_OPTS += --without-ssl -endif - -ifeq ($(BR2_PACKAGE_ICU),y) -NODEJS_DEPENDENCIES += icu -NODEJS_CONF_OPTS += --with-intl=system-icu -else -NODEJS_CONF_OPTS += --with-intl=none -endif - -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.py \ - --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 - -ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y) -define HOST_NODEJS_ENABLE_COREPACK - $(COREPACK) enable -endef -endif - -define HOST_NODEJS_INSTALL_CMDS - $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ - $(MAKE) -C $(@D) install \ - $(HOST_NODEJS_MAKE_OPTS) - $(HOST_NODEJS_ENABLE_COREPACK) -endef - -ifeq ($(BR2_i386),y) -NODEJS_CPU = ia32 -else ifeq ($(BR2_x86_64),y) -NODEJS_CPU = x64 -else ifeq ($(BR2_mips),y) -NODEJS_CPU = mips -else ifeq ($(BR2_mipsel),y) -NODEJS_CPU = mipsel -else ifeq ($(BR2_arm),y) -NODEJS_CPU = arm -# V8 needs to know what floating point ABI the target is using. -NODEJS_ARM_FP = $(GCC_TARGET_FLOAT_ABI) -# it also wants to know which FPU to use, but only has support for -# vfp, vfpv3, vfpv3-d16 and neon. -ifeq ($(BR2_ARM_FPU_VFPV2),y) -NODEJS_ARM_FPU = vfp -# vfpv4 is a superset of vfpv3 -else ifeq ($(BR2_ARM_FPU_VFPV3)$(BR2_ARM_FPU_VFPV4),y) -NODEJS_ARM_FPU = vfpv3 -# vfpv4-d16 is a superset of vfpv3-d16 -else ifeq ($(BR2_ARM_FPU_VFPV3D16)$(BR2_ARM_FPU_VFPV4D16),y) -NODEJS_ARM_FPU = vfpv3-d16 -else ifeq ($(BR2_ARM_FPU_NEON),y) -NODEJS_ARM_FPU = neon -endif -else ifeq ($(BR2_aarch64),y) -NODEJS_CPU = arm64 -endif - -# MIPS architecture specific options -ifeq ($(BR2_mips)$(BR2_mipsel),y) -ifeq ($(BR2_MIPS_CPU_MIPS32R6),y) -NODEJS_MIPS_ARCH_VARIANT = r6 -NODEJS_MIPS_FPU_MODE = fp64 -else ifeq ($(BR2_MIPS_CPU_MIPS32R2),y) -NODEJS_MIPS_ARCH_VARIANT = r2 -else ifeq ($(BR2_MIPS_CPU_MIPS32),y) -NODEJS_MIPS_ARCH_VARIANT = r1 -endif -endif - -NODEJS_LDFLAGS = $(TARGET_LDFLAGS) - -ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) -NODEJS_LDFLAGS += -latomic -endif - -# V8's JIT infrastructure requires binaries such as mksnapshot and -# mkpeephole to be run in the host during the build. However, these -# binaries must have the same bit-width as the target (e.g. a x86_64 -# host targeting ARMv6 needs to produce a 32-bit binary). To work around this -# issue, cross-compile the binaries for the target and run them on the -# host with QEMU, much like gobject-introspection. -define NODEJS_INSTALL_V8_QEMU_WRAPPER - $(INSTALL) -D -m 755 $(NODEJS_PKGDIR)/v8-qemu-wrapper.in \ - $(@D)/out/Release/v8-qemu-wrapper - $(SED) "s%@QEMU_USER@%$(QEMU_USER)%g" \ - $(@D)/out/Release/v8-qemu-wrapper - $(SED) "s%@TOOLCHAIN_HEADERS_VERSION@%$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)%g" \ - $(@D)/out/Release/v8-qemu-wrapper - $(SED) "s%@QEMU_USERMODE_ARGS@%$(call qstrip,$(BR2_PACKAGE_HOST_QEMU_USER_MODE_ARGS))%g" \ - $(@D)/out/Release/v8-qemu-wrapper -endef -NODEJS_PRE_CONFIGURE_HOOKS += NODEJS_INSTALL_V8_QEMU_WRAPPER - -define NODEJS_WRAPPER_FIXUP - $(SED) "s%@MAYBE_WRAPPER@%'<(PRODUCT_DIR)/v8-qemu-wrapper',%g" $(@D)/node.gyp - $(SED) "s%@MAYBE_WRAPPER@%'<(PRODUCT_DIR)/v8-qemu-wrapper',%g" $(@D)/tools/v8_gypfiles/v8.gyp -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) \ - PATH=$(@D)/bin:$(BR_PATH) \ - LDFLAGS="$(NODEJS_LDFLAGS)" \ - LD="$(TARGET_CXX)" \ - PYTHON=$(HOST_DIR)/bin/python3 \ - $(HOST_DIR)/bin/python3 configure.py \ - --prefix=/usr \ - --dest-cpu=$(NODEJS_CPU) \ - $(if $(NODEJS_ARM_FP),--with-arm-float-abi=$(NODEJS_ARM_FP)) \ - $(if $(NODEJS_ARM_FPU),--with-arm-fpu=$(NODEJS_ARM_FPU)) \ - $(if $(NODEJS_MIPS_ARCH_VARIANT),--with-mips-arch-variant=$(NODEJS_MIPS_ARCH_VARIANT)) \ - $(if $(NODEJS_MIPS_FPU_MODE),--with-mips-fpu-mode=$(NODEJS_MIPS_FPU_MODE)) \ - $(NODEJS_CONF_OPTS) \ - ) -endef - -define NODEJS_BUILD_CMDS - $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ - $(MAKE) -C $(@D) \ - $(NODEJS_MAKE_OPTS) -endef - -# -# Build the list of modules to install. -# -NODEJS_MODULES_LIST= $(call qstrip,\ - $(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) - NODEJS_BIN_ENV = $(TARGET_CONFIGURE_OPTS) \ LDFLAGS="$(NODEJS_LDFLAGS)" \ LD="$(TARGET_CXX)" \ @@ -250,34 +31,4 @@ PNPM = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/pnpm YARN = $(NODEJS_BIN_ENV) $(HOST_DIR)/bin/yarn endif -# -# We can only call NPM if there's something to install. -# -ifneq ($(NODEJS_MODULES_LIST),) -NODEJS_DEPENDENCIES += host-nodejs -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. - $(NPM) install -g $(NODEJS_MODULES_LIST) -endef -endif - -define NODEJS_INSTALL_STAGING_CMDS - $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ - $(MAKE) -C $(@D) install \ - DESTDIR=$(STAGING_DIR) \ - $(NODEJS_MAKE_OPTS) -endef - -define NODEJS_INSTALL_TARGET_CMDS - $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ - $(MAKE) -C $(@D) install \ - DESTDIR=$(TARGET_DIR) \ - $(NODEJS_MAKE_OPTS) - $(NODEJS_INSTALL_MODULES) -endef - -# node.js configure is a Python script and does not use autotools -$(eval $(generic-package)) -$(eval $(host-generic-package)) +include $(sort $(wildcard package/nodejs/*/*.mk)) diff --git a/package/nodejs/0001-add-qemu-wrapper-support.patch b/package/nodejs/nodejs/0001-add-qemu-wrapper-support.patch similarity index 100% rename from package/nodejs/0001-add-qemu-wrapper-support.patch rename to package/nodejs/nodejs/0001-add-qemu-wrapper-support.patch diff --git a/package/nodejs/0002-check-if-uclibc-has-backtrace-support.patch b/package/nodejs/nodejs/0002-check-if-uclibc-has-backtrace-support.patch similarity index 100% rename from package/nodejs/0002-check-if-uclibc-has-backtrace-support.patch rename to package/nodejs/nodejs/0002-check-if-uclibc-has-backtrace-support.patch diff --git a/package/nodejs/0003-include-obj-name-in-shared-intermediate.patch b/package/nodejs/nodejs/0003-include-obj-name-in-shared-intermediate.patch similarity index 100% rename from package/nodejs/0003-include-obj-name-in-shared-intermediate.patch rename to package/nodejs/nodejs/0003-include-obj-name-in-shared-intermediate.patch diff --git a/package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch b/package/nodejs/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch similarity index 100% rename from package/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch rename to package/nodejs/nodejs/0004-lib-internal-modules-cjs-loader.js-adjust-default-pa.patch diff --git a/package/nodejs/nodejs/nodejs.hash b/package/nodejs/nodejs/nodejs.hash new file mode 120000 index 0000000000..0c3ac2ce77 --- /dev/null +++ b/package/nodejs/nodejs/nodejs.hash @@ -0,0 +1 @@ +../nodejs.hash \ No newline at end of file diff --git a/package/nodejs/nodejs/nodejs.mk b/package/nodejs/nodejs/nodejs.mk new file mode 100644 index 0000000000..24cd4ded1f --- /dev/null +++ b/package/nodejs/nodejs/nodejs.mk @@ -0,0 +1,260 @@ +################################################################################ +# +# nodejs +# +################################################################################ + +# version etc. already defined in package/nodejs/nodejs.mk + +NODEJS_DEPENDENCIES = \ + host-ninja \ + host-pkgconf \ + host-python3 \ + host-qemu \ + c-ares \ + libuv \ + 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_CONF_OPTS = \ + --shared-zlib \ + --shared-cares \ + --shared-libuv \ + --shared-nghttp2 \ + --without-dtrace \ + --without-etw \ + --cross-compiling \ + --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) \ + JOBS=$(PARALLEL_JOBS) + +NODEJS_MAKE_OPTS = \ + $(TARGET_CONFIGURE_OPTS) \ + NO_LOAD=cctest.target.mk \ + PATH=$(@D)/bin:$(BR_PATH) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" \ + JOBS=$(PARALLEL_JOBS) + +# nodejs's build system uses python which can be a symlink to an unsupported +# python version (e.g. python 3.10 with nodejs 14.18.1). We work around this by +# forcing host-python3 early in the PATH, via a python->python3 symlink. +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) +NODEJS_DEPENDENCIES += openssl +NODEJS_CONF_OPTS += --shared-openssl +else +NODEJS_CONF_OPTS += --without-ssl +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +NODEJS_DEPENDENCIES += icu +NODEJS_CONF_OPTS += --with-intl=system-icu +else +NODEJS_CONF_OPTS += --with-intl=none +endif + +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.py \ + --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 + +ifeq ($(BR2_PACKAGE_HOST_NODEJS_COREPACK),y) +define HOST_NODEJS_ENABLE_COREPACK + $(COREPACK) enable +endef +endif + +define HOST_NODEJS_INSTALL_CMDS + $(HOST_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ + $(MAKE) -C $(@D) install \ + $(HOST_NODEJS_MAKE_OPTS) + $(HOST_NODEJS_ENABLE_COREPACK) +endef + +ifeq ($(BR2_i386),y) +NODEJS_CPU = ia32 +else ifeq ($(BR2_x86_64),y) +NODEJS_CPU = x64 +else ifeq ($(BR2_mips),y) +NODEJS_CPU = mips +else ifeq ($(BR2_mipsel),y) +NODEJS_CPU = mipsel +else ifeq ($(BR2_arm),y) +NODEJS_CPU = arm +# V8 needs to know what floating point ABI the target is using. +NODEJS_ARM_FP = $(GCC_TARGET_FLOAT_ABI) +# it also wants to know which FPU to use, but only has support for +# vfp, vfpv3, vfpv3-d16 and neon. +ifeq ($(BR2_ARM_FPU_VFPV2),y) +NODEJS_ARM_FPU = vfp +# vfpv4 is a superset of vfpv3 +else ifeq ($(BR2_ARM_FPU_VFPV3)$(BR2_ARM_FPU_VFPV4),y) +NODEJS_ARM_FPU = vfpv3 +# vfpv4-d16 is a superset of vfpv3-d16 +else ifeq ($(BR2_ARM_FPU_VFPV3D16)$(BR2_ARM_FPU_VFPV4D16),y) +NODEJS_ARM_FPU = vfpv3-d16 +else ifeq ($(BR2_ARM_FPU_NEON),y) +NODEJS_ARM_FPU = neon +endif +else ifeq ($(BR2_aarch64),y) +NODEJS_CPU = arm64 +endif + +# MIPS architecture specific options +ifeq ($(BR2_mips)$(BR2_mipsel),y) +ifeq ($(BR2_MIPS_CPU_MIPS32R6),y) +NODEJS_MIPS_ARCH_VARIANT = r6 +NODEJS_MIPS_FPU_MODE = fp64 +else ifeq ($(BR2_MIPS_CPU_MIPS32R2),y) +NODEJS_MIPS_ARCH_VARIANT = r2 +else ifeq ($(BR2_MIPS_CPU_MIPS32),y) +NODEJS_MIPS_ARCH_VARIANT = r1 +endif +endif + +NODEJS_LDFLAGS = $(TARGET_LDFLAGS) + +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +NODEJS_LDFLAGS += -latomic +endif + +# V8's JIT infrastructure requires binaries such as mksnapshot and +# mkpeephole to be run in the host during the build. However, these +# binaries must have the same bit-width as the target (e.g. a x86_64 +# host targeting ARMv6 needs to produce a 32-bit binary). To work around this +# issue, cross-compile the binaries for the target and run them on the +# host with QEMU, much like gobject-introspection. +define NODEJS_INSTALL_V8_QEMU_WRAPPER + $(INSTALL) -D -m 755 $(NODEJS_PKGDIR)/v8-qemu-wrapper.in \ + $(@D)/out/Release/v8-qemu-wrapper + $(SED) "s%@QEMU_USER@%$(QEMU_USER)%g" \ + $(@D)/out/Release/v8-qemu-wrapper + $(SED) "s%@TOOLCHAIN_HEADERS_VERSION@%$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)%g" \ + $(@D)/out/Release/v8-qemu-wrapper + $(SED) "s%@QEMU_USERMODE_ARGS@%$(call qstrip,$(BR2_PACKAGE_HOST_QEMU_USER_MODE_ARGS))%g" \ + $(@D)/out/Release/v8-qemu-wrapper +endef +NODEJS_PRE_CONFIGURE_HOOKS += NODEJS_INSTALL_V8_QEMU_WRAPPER + +define NODEJS_WRAPPER_FIXUP + $(SED) "s%@MAYBE_WRAPPER@%'<(PRODUCT_DIR)/v8-qemu-wrapper',%g" $(@D)/node.gyp + $(SED) "s%@MAYBE_WRAPPER@%'<(PRODUCT_DIR)/v8-qemu-wrapper',%g" $(@D)/tools/v8_gypfiles/v8.gyp +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) \ + PATH=$(@D)/bin:$(BR_PATH) \ + LDFLAGS="$(NODEJS_LDFLAGS)" \ + LD="$(TARGET_CXX)" \ + PYTHON=$(HOST_DIR)/bin/python3 \ + $(HOST_DIR)/bin/python3 configure.py \ + --prefix=/usr \ + --dest-cpu=$(NODEJS_CPU) \ + $(if $(NODEJS_ARM_FP),--with-arm-float-abi=$(NODEJS_ARM_FP)) \ + $(if $(NODEJS_ARM_FPU),--with-arm-fpu=$(NODEJS_ARM_FPU)) \ + $(if $(NODEJS_MIPS_ARCH_VARIANT),--with-mips-arch-variant=$(NODEJS_MIPS_ARCH_VARIANT)) \ + $(if $(NODEJS_MIPS_FPU_MODE),--with-mips-fpu-mode=$(NODEJS_MIPS_FPU_MODE)) \ + $(NODEJS_CONF_OPTS) \ + ) +endef + +define NODEJS_BUILD_CMDS + $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ + $(MAKE) -C $(@D) \ + $(NODEJS_MAKE_OPTS) +endef + +# +# Build the list of modules to install. +# +NODEJS_MODULES_LIST= $(call qstrip,\ + $(BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL)) + +# +# We can only call NPM if there's something to install. +# +ifneq ($(NODEJS_MODULES_LIST),) +NODEJS_DEPENDENCIES += host-nodejs +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. + $(NPM) install -g $(NODEJS_MODULES_LIST) +endef +endif + +define NODEJS_INSTALL_STAGING_CMDS + $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ + $(MAKE) -C $(@D) install \ + DESTDIR=$(STAGING_DIR) \ + $(NODEJS_MAKE_OPTS) +endef + +define NODEJS_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) PYTHON=$(HOST_DIR)/bin/python3 \ + $(MAKE) -C $(@D) install \ + DESTDIR=$(TARGET_DIR) \ + $(NODEJS_MAKE_OPTS) + $(NODEJS_INSTALL_MODULES) +endef + +# node.js configure is a Python script and does not use autotools +$(eval $(generic-package)) +$(eval $(host-generic-package)) diff --git a/package/nodejs/v8-qemu-wrapper.in b/package/nodejs/nodejs/v8-qemu-wrapper.in similarity index 100% rename from package/nodejs/v8-qemu-wrapper.in rename to package/nodejs/nodejs/v8-qemu-wrapper.in