OpenWRT交叉编译nodeJS


 

 

1. 查看package目录下文件分类

david@david-VirtualBox:~/Documents/openwrt/package$ ls -l
total 48
drwxrwxr-x  3 david david 4096 9月  17 01:23 base-files
drwxrwxr-x 28 david david 4096 9月  17 01:23 boot
drwxrwxr-x  9 david david 4096 9月  17 01:23 devel
drwxrwxr-x  6 david david 4096 9月  17 07:12 feeds
drwxrwxr-x 16 david david 4096 9月  17 01:23 firmware
drwxrwxr-x 27 david david 4096 9月  17 01:23 kernel
drwxrwxr-x 46 david david 4096 9月  17 01:23 libs
-rw-rw-r--  1 david david 3787 9月  17 01:23 Makefile
drwxrwxr-x  6 david david 4096 9月  17 01:23 network
drwxrwxr-x 17 david david 4096 9月  17 01:23 system
drwxrwxr-x 30 david david 4096 9月  17 01:23 utils

 

2. 在当前根目录下新建目录node && 进入node目录

mkdir node && cd node

 

 

3. 新建Makefile文件  

touch Makefile

 

 

4. 编辑Makefile

#
# Copyright (C) 2006-2018 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

# Step 1. 引入rules.mk文件 include $(TOPDIR)
/rules.mk
# Step 2. 设置PKG变量 PKG_NAME:
=node PKG_VERSION:=v8.12.0 # 填写node支持版本号 PKG_RELEASE:=1 PKG_SOURCE:=node-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://nodejs.org/dist/${PKG_VERSION} PKG_MD5SUM:=5690333b77964edf81945fc724f6ea85 # 使用md5sum命令计算 GYP_DEFINES:=v8_use_mips_abi_hard float=false v8_can_use_fpu_instructions=false LIBS:=-I$(TOOLCHAIN_DIR)/mipsel-openwrt-linux-uclibc/include/c++/4.8.3/ -I$(TOOLCHAIN_DIR)/mipsel-openwrt-linux-uclibc/include/c++/4.8.3/mipsel-openwrt-linux-uclibc/
# 引入头文件 package.mk include $(INCLUDE_DIR)
/package.mk
#定义node节点信息 define Package
/node DEPENDS:=+libpthread +librt +uclibcxx SECTION:=lang CATEGORY:=Languages TITLE:=Node.js is a platform built on Chrome's JavaScript runtime URL:=http://nodejs.org/ endef
# 定义描述信息 define Package
/node/description Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. endef
# 定义预编译信息 define Build
/Prepare $(call Build/Prepare/Default) $(CP) node.patch $(PKG_BUILD_DIR)/ (cd $(PKG_BUILD_DIR); \ patch -p1 < node.patch; \ ); endef
# 定义编译信息 define Build
/Compile $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) GYP_DEFINES="$(GYP_DEFINES)" CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" CFLAGS="$(TARGET_CFLAGS) $(LIBS)" CXXFLAGS="$(TARGET_CXXFLAGS) $(LIBS) -nostdinc++" LDFLAGS="$(TARGET_LDFLAGS) -nodefaultlibs -luClibc++ -lc -lgcc -lgcc_s -lpthread" || touch $(PKG_BUILD_DIR)/deps/v8/build/common.gypi $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) GYP_DEFINES="$(GYP_DEFINES)" CC="$(TARGET_CC)" CXX="$(TARGET_CXX)" CFLAGS="$(TARGET_CFLAGS) $(LIBS)" CXXFLAGS="$(TARGET_CXXFLAGS) $(LIBS) -nostdinc++" LDFLAGS="$(TARGET_LDFLAGS) -nodefaultlibs -luClibc++ -lc -lgcc -lgcc_s -lpthread" endef
# 定义安装信息 define Package
/node/install mkdir -p $(1)/usr/bin $(CP) $(PKG_BUILD_DIR)/out/Release/node $(1)/usr/bin/ ln -s /usr/bin/node $(1)/usr/bin/nodejs endef
# 调用回调信息 $(eval $(call BuildPackage,node))

 

5. Makefile解释

 

预设变量 PKG_* 的项目的主要作用

(1)检测软件包是否被选中。

(2)软件包如果有需要下载的源代码文件,按PKG_SOURCE_URL进行下载。

(3)检测本地dl目录是否包含了源代码文件PKG_SOURCE

(4)如果需要校验源代码,就执行PKG_MD5SUM

(5) 解压缩源代码

 

预调的变量 作用
PKG_NAME 软件包的名称,在菜单选项中将看见,必须与目录名称一致
PKG_VERSION 软件包版本,如果软件包的源代码是在线下载的,版本号要与服务器上的一致
PKG_RELEASE 软件包的Makefile版本,自己编
PKG_BUILD_DIR 软件包的编译过程目录名字,这个要与源代码解压完以后生成的目录名字一样
PKG_SOURCE 软件包源代码文件的名字
PKG_SOURCE_URL 软件包源代码的下载地址,如果不真就不下载,直接从dl下查找
PKG_MD5SUM 对下载下来的软件包检验
PKG_CAT 指定使用哪个解压工具(zcat, bzcat, unzip)
PKG_BUILD_DEPENDS 软件包编译时候依赖哪些其他软件包
PKG_SOURCE_PROTO 通过代码仓库获得代码git, svn
PKG_REV 如果是通过svn获得代码,表示svn的版本号

 

 

 

 

 

 

 

 

 

 

Package/ 软件包描述信息
Package/conffiles 软件包安装的配置文件全路径,每行一个
Package/description 软件包的介绍信息
Package/install 软件包安装什么
Package/preinst 软件包安装之前处理的脚本
Package/postinst 软件包安装之后处理的脚本
Build/Prepare 预处理,在源代码被解压时处理动作
Build/Configure 对执行./configure的时候进行特别处理
Build/Compile 对软件包执行make编译时候特别处理增加一些参数
Build/Install 在编译完成进行安装时的处理,如果不填则执行make install

 

 

 

 

 

 

 

 

 

6. 开始编译选择

Target System  -> x86

Subtarget -> Generic

Target Profile -> Generic

Target Images -> 

  Build VirtualBox image files

* Build the OpenWrt SDK

* Package the OpenWrt-based Toolchain

Language -> Node.js -> Node.js

 

make v=99

 

完成后测试

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM