From fe70be2e61cbdbeb7b206edba865d07c70156015 Mon Sep 17 00:00:00 2001 From: sbwml Date: Mon, 4 May 2026 17:05:27 +0800 Subject: [PATCH] node: init packages-25.12 Signed-off-by: sbwml --- Makefile | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 11 ++++++ 2 files changed, 124 insertions(+) create mode 100644 Makefile create mode 100644 README.md diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0bdc9de --- /dev/null +++ b/Makefile @@ -0,0 +1,113 @@ +# +# Copyright (C) 2006-2017 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=node +PKG_VERSION:=$(shell curl -s https://api.github.com/repos/sbwml/node_workflow/tags | grep '"name"' | head -n 1 | sed -E 's/.*"name": "v([^"]+)".*/\1/') +PKG_RELEASE:=1 + +PKG_MAINTAINER:=Hirokazu MORIKAWA , Adrian Panella +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE +PKG_CPE_ID:=cpe:/a:nodejs:node.js + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk + +define Package/node + SECTION:=lang + CATEGORY:=Languages + SUBMENU:=Node.js + TITLE:=Node.js is a platform built on Chrome's JavaScript runtime + URL:=https://nodejs.org/ + DEPENDS:=@USE_MUSL @HAS_FPU @(i386||x86_64||arm||aarch64) \ + +libstdcpp +libopenssl +zlib +libnghttp2 \ + +libcares +libatomic +endef + +define Package/node/description + Node.jsĀ® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses + an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' + package ecosystem, npm, is the largest ecosystem of open source libraries in the world. + + *** The following preparations must be made on the host side. *** + 1. gcc 12.2 or higher is required. + 2. To build a 32-bit target, gcc-multilib, g++-multilib are required. + 3. Requires libatomic package. (If necessary, install the 32-bit library at the same time.) + ex) sudo apt-get install gcc-multilib g++-multilib +endef + +define Package/node-npm + SECTION:=lang + CATEGORY:=Languages + SUBMENU:=Node.js + TITLE:=NPM stands for Node Package Manager + URL:=https://www.npmjs.com/ + DEPENDS:=+node +endef + +define Package/node-npm/description + NPM is the package manager for NodeJS +endef + +ifeq ($(HOST_ARCH),x86_64) + NODE_HOST_ARCH:=x64 +endif + +ifeq ($(HOST_ARCH),aarch64) + NODE_HOST_ARCH:=arm64 +endif + +define Host/Compile + ( \ + pushd $(HOST_BUILD_DIR) ; \ + $(RM) node-v* ; \ + wget https://nodejs.org/dist/v$(PKG_VERSION)/node-v$(PKG_VERSION)-linux-$(NODE_HOST_ARCH).tar.xz ; \ + $(TAR) -xf node-v$(PKG_VERSION)-linux-$(NODE_HOST_ARCH).tar.xz ; \ + popd ; \ + ) +endef + +define Build/Compile + ( \ + pushd $(PKG_BUILD_DIR) ; \ + wget https://github.com/sbwml/node_workflow/releases/download/v$(PKG_VERSION)/$(ARCH_PACKAGES).tar.gz ; \ + $(TAR) -zxf $(ARCH_PACKAGES).tar.gz ; \ + $(STAGING_DIR_HOST)/bin/apk extract --allow-untrusted *.apk ; \ + $(RM) *.tar.gz *.apk ; \ + popd ; \ + ) +endef + +define Package/node/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/usr/bin/node $(1)/usr/bin/ +endef + +define Package/node-npm/install + $(INSTALL_DIR) $(1)/usr/lib/node_modules/npm + $(CP) $(PKG_BUILD_DIR)/usr/lib/node_modules/npm/{package.json,LICENSE} \ + $(1)/usr/lib/node_modules/npm/ + $(CP) $(PKG_BUILD_DIR)/usr/lib/node_modules/npm/README.md \ + $(1)/usr/lib/node_modules/npm/ + $(CP) $(PKG_BUILD_DIR)/usr/lib/node_modules/npm/{node_modules,bin,lib} \ + $(1)/usr/lib/node_modules/npm/ + $(INSTALL_DIR) $(1)/usr/bin + $(LN) ../lib/node_modules/npm/bin/npm-cli.js $(1)/usr/bin/npm + $(LN) ../lib/node_modules/npm/bin/npx-cli.js $(1)/usr/bin/npx +endef + +define Host/Install + $(CP) $(HOST_BUILD_DIR)/node-v$(PKG_VERSION)-linux-$(NODE_HOST_ARCH)/* $(STAGING_DIR_HOST)/ +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,node)) +$(eval $(call BuildPackage,node-npm)) diff --git a/README.md b/README.md new file mode 100644 index 0000000..d703575 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +## openwrt-25.12 - Fast Build for Node.js Dependent Packages + +When building packages that require Node.js on the OpenWrt branch, use the prebuilt Node.js feed instead of compiling Node.js from source. This approach significantly reduces build time and ensures compatibility with dependent packages. + +```bash +# remove the default Node.js feed +rm -rf feeds/packages/lang/node + +# clone the prebuilt Node.js feed (packages-25.12 branch) +git clone https://github.com/sbwml/feeds_packages_lang_node -b packages-25.12 feeds/packages/lang/node +```