openwrt规则编译cmake软件包
- 其他
- 2024-12-11
- 140热度
- 0评论
软件包中有完整CMakelists.txt
include (TOPDIR)/rules.mk
PKG_NAME:=usrsctp
PKG_VERSION:=0.9.5.0
PKG_RELEASE:=3
PKG_SOURCE:=(PKG_NAME)-(PKG_VERSION).tar.gz
PKG_SOURCE_URL:= https://codeload.github.com/sctplab/usrsctp/tar.gz/v(PKG_VERSION)?
PKG_HASH:=260107caf318650a57a8caa593550e39bca6943e93f970c80d6c17e59d62cd92
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
PKG_BUILD_PARALLEL:=1
include (INCLUDE_DIR)/package.mk
include(INCLUDE_DIR)/cmake.mk
define Package/usrsctp
SECTION:=libs
CATEGORY:=Libraries
TITLE:=sctp stack
URL:=https://github.com/sctplab/usrsctp
endef
define Package/cJSON/description
this is a userland SCTP stack
endef
CMAKE_OPTIONS += -DBUILD_SHARED_LIBS=on
#Provide compilation dependencies for other modules to call
define Build/InstallDev
(INSTALL_DIR)(1)/usr/include
(CP)(PKG_INSTALL_DIR)/usr/include/usrsctp.h (1)/usr/include(INSTALL_DIR) (1)/usr/lib(CP) (PKG_INSTALL_DIR)/usr/lib/libusrsctp.so*(1)/usr/lib/
(INSTALL_DIR)(1)/usr/lib/pkgconfig
(CP)(PKG_INSTALL_DIR)/usr/lib/pkgconfig/usrsctp.pc (1)/usr/lib/pkgconfig(SED) 's,/usr,(STAGING_DIR)/usr,g'(1)/usr/lib/pkgconfig/usrsctp.pc
endef
#Installed to the root file system for call at runtime
define Package/usrsctp/install
(INSTALL_DIR)(1)/usr/lib
(CP)(PKG_INSTALL_DIR)/usr/lib/libusrsctp.so* (1)/usr/lib/
endef(eval $(call BuildPackage,usrsctp))
如上是示例,这种类型比较简单,包含了cmake.mk后,openwrt会自动生成编译,只需要安装需要被其他代码依赖的库和头文件,以及运行时需要的库即可。
软件包中有完整CMakelists.txt但需要创建build目录
include (TOPDIR)/rules.mk
PKG_NAME:=libsrtp
PKG_VERSION:=2.6.0
PKG_RELEASE:=3
PKG_SOURCE:=(PKG_NAME)-(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/cisco/libsrtp/tar.gz/v(PKG_VERSION)?
PKG_HASH:=bf641aa654861be10570bfc137d1441283822418e9757dc71ebb69a6cf84ea6b
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
PKG_BUILD_PARALLEL:=1
include (INCLUDE_DIR)/package.mk
include(INCLUDE_DIR)/cmake.mk
define Package/libsrtp
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libsrtp Client Library
URL:=https://github.com/cisco/libsrtp
endef
define Package/libsrtp/description
srtp Library
endef
CMAKE_BINARY_SUBDIR=build
CMAKE_OPTIONS += -DBUILD_SHARED_LIBS=on -DTEST_APPS=off
define Build/InstallDev
(INSTALL_DIR)(1)/usr/include/srtp2
(CP)(PKG_INSTALL_DIR)/usr/include/srtp2/*.h (1)/usr/include/srtp2(INSTALL_DIR) (1)/usr/lib(CP) (PKG_INSTALL_DIR)/usr/lib/lib*.so*(1)/usr/lib/
endef
define Package/libsrtp/install
(INSTALL_DIR)(1)/usr/lib
(CP)(PKG_INSTALL_DIR)/usr/lib/lib*.so* (1)/usr/lib/
endef(eval $(call BuildPackage,libsrtp))
这种相对前面的方式类似,只是这种软件包CMakelist.text要求需要创建build目录进行编译,因此在Makefile中添加CMAKE_BINARY_SUBDIR=build进行声明。因此在编译输出目录,可以看到openwrt会先创建build目录,而第一种方式是没有创建build目录。
软件包中只有部分CMakelist.text
这种方式就是软件包中没有提供完整的CMakelist.txt,但是提供了部分,需要用户包含提供部分的Cmakelist.txt实现,这种方式目前是通过打patches的方式生成主要CMakelist.txt。
Makefile文件
include (TOPDIR)/rules.mk
PKG_NAME:=coreMQTT
PKG_VERSION:=2.3.1
PKG_RELEASE:=3
PKG_SOURCE:=(PKG_NAME)-(PKG_VERSION).tar.gz
PKG_SOURCE_URL:= https://codeload.github.com/FreeRTOS/coreMQTT/tar.gz/v(PKG_VERSION)?
PKG_HASH:=b8e95044e6ef8381610949b7fe546c5ddf4e52989ce9938209d5dd5f3371b5d7
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
PKG_BUILD_PARALLEL:=1
include (INCLUDE_DIR)/package.mk
include(INCLUDE_DIR)/cmake.mk
define Package/coreMQTT
SECTION:=libs
CATEGORY:=Libraries
TITLE:=coreMQTT Client Library
URL:=https://github.com/FreeRTOS/coreMQTT
endef
define Package/coreMQTT/description
coreMQTT Client Library
endef
define Build/InstallDev
(INSTALL_DIR)(1)/usr/include
(CP)(PKG_INSTALL_DIR)/*.h (1)/usr/include(CP) (PKG_INSTALL_DIR)/include/*.h(1)/usr/include
(INSTALL_DIR)(1)/usr/lib
(CP)(PKG_INSTALL_DIR)/usr/lib/lib*.so* (1)/usr/lib/
endef
define Package/coreMQTT/install(INSTALL_DIR) (1)/usr/lib(CP) (PKG_INSTALL_DIR)/usr/lib/libcoreMQTT.so*(1)/usr/lib/
endef
(eval(call BuildPackage,coreMQTT))
patches
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..754a6a2
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(CoreMQTT)
+
+include({CMAKE_CURRENT_LIST_DIR}/mqttFilePaths.cmake)
+
+add_definitions("-DMQTT_DO_NOT_USE_CUSTOM_CONFIG")
+
+include_directories (
+{MQTT_INCLUDE_PUBLIC_DIRS}
+)
+
+add_library(coreMQTT SHARED {MQTT_SOURCES}{MQTT_SERIALIZER_SOURCES})
+
+install(TARGETS coreMQTT
+ LIBRARY DESTINATION {CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION{CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION {CMAKE_INSTALL_BINDIR}
+)
+
+install(DIRECTORY{MQTT_INCLUDE_PUBLIC_DIRS}/
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/
+ FILES_MATCHING PATTERN "*.h"
+)
--
2.25.1
以上是通过打patches生成主CMakelist.txt,可以看到包含了mqttFilePaths.cmake文件。