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
完成後測試