openwrt makefile编写
0、细节
编写Makefile(测试时可建立软连接从feeds到package/feeds里)
主包一般完全编译,子包一般都是根据配置选项,来拷贝文件到安装目录
1、包名及版本号
$(PKG_NAME) 包名
$(PKG_VERSION) 版本号
openwrt会以 包名-版本号 创建文件夹解压源码并编译。
2、地址,git方式或者http方式
$(PKG_SOURCE) 包源码全名
openwrt会以该名字命名下载的源码压缩包
$(PKG_SOURCE_URL) 包源码地址
openwrt会以该地址下载源码压缩包
$(PKG_HASH) 包源码hash
openwrt会检查源码包hash与该变量对比
3、menuconfig选项,包名依赖
define Package/rhash
SECTION:=libs
CATEGORY:=Libraries
TITLE:=rhash
URL:=https://github.com/rhash/RHash
endef
定义包名
CATEGORY为menuconfig中目录名
TITLE是menuconfig中显示名
URL是包的官网地址
4、Build/Prepare
复制文件或解压文件、配置环境等
5、Build/Configure
配置:分为几种:configure、cmake、meson
1、configure
单独调用 include $(INCLUDE_DIR)/package.mk 时为此方式。
有脚本则运行脚本
define Build/Configure
(cd $(PKG_BUILD_DIR); ./autogen.sh)
$(call Build/Configure/Default)
endef
无脚本无configure,调用默认配置
define Build/Configure
$(call Build/Configure/Default)
endef
有configure,需要配置
define Build/Configure
$(call Build/Configure/Default,
‘选项’)
endef
2、cmake
调用include $(INCLUDE_DIR)/package.mk
后再include $(INCLUDE_DIR)/cmake.mk即为cmake
3、meson
暂时未研究
6、Build/Compile
编译包的配置
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
$(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"
Endef
7、Build/InstallDev
openwrt会在根目录创建 tmp/stage- 文件夹。
安装时,调用该过程,执行命令把相应文件夹创建、文件拷贝。
然后将该文件夹的内容复制到 staging_dir/targetXXX/usr文件夹中。
依赖该库的其他包会在这里检查依赖。
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/{lib/pkgconfig,include/}
$(CP) \
$(PKG_INSTALL_DIR)/usr/lib/*.{so*,la} \
$(1)/usr/lib/
$(INSTALL_DATA) \
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* \
$(1)/usr/lib/pkgconfig/
endef
8、Package/<>/install
安装所用
define Package/libdrm-armada/install
$(INSTALL_DIR) $(1)/usr/lib/
$(CP) \
$(PKG_INSTALL_DIR)/usr/lib/*.so* \
$(1)/usr/lib/
endef
9、$(eval $(call BuildPackage,pwrtray))
调用包构建命令