OpenWRT交叉編譯nodeJS

 

 

1. 查看package目錄下文件分類node

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目錄linux

mkdir node && cd node

 

 

3. 新建Makefile文件  c++

touch Makefile

 

 

4. 編輯Makefilegit

#
# 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_* 的項目的主要做用app

(1)檢測軟件包是否被選中。svn

(2)軟件包若是有須要下載的源代碼文件,按PKG_SOURCE_URL進行下載。工具

(3)檢測本地dl目錄是否包含了源代碼文件PKG_SOURCEpost

(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

 

完成後測試

相關文章
相關標籤/搜索