Create a Cmake package in OpenWrt

In the Meson tutorial, we learned how to create a Meson package with a detailed guide. Since Cmake and Meson have similar roots, this tutorial will only focus on their differences.

To begin, let's create a CMake project. The main.c file for this project will be the same as the one in the Meson tutorial, which includes a single “Hello, World” program. However, in order to use CMake, we need to include a CMakeLists.txt file. The most basic CMake file is presented here for simplicity.

cmake_minimum_required(VERSION 3.1...3.27)
 
project(
  hellocmake
  VERSION 1.0
  LANGUAGES C)
 
add_executable(hellocmake main.c)
install(TARGETS hellocmake DESTINATION /usr/bin)

The Makefile is very similar to other OpenWrt-based makefiles. The only difference is that it includes cmake.mk instead of meson.mk:

include $(TOPDIR)/rules.mk
 
PKG_NAME:=hellocmake
PKG_VERSION:=0.1
PKG_RELEASE:=1
 
SOURCE_DIR:=/media/workspace/packages/cmakepackages/hellocmake
PKG_BUILD_DIR:=$(BUILD_DIR)/hellocmake-$(PKG_VERSION)
 
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
 
define Package/hellocmake
	CATEGORY:=custom
	TITLE:=Simple Cmake package
	#DEPENDS:=+libstdcpp +ixwebsocket +libatomic
endef
 
define Package/hellocmake/description
	hellocmake is a simple application to demonstrate OpenWrt build system with cmake packages
endef
 
define Package/hellocmake/install	
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/hellocmake $(1)/usr/bin/
endef
 
$(eval $(call BuildPackage,hellocmake))

In order to pass Cmake options, we can use the following syntax in the Makefile

CMAKE_OPTIONS+= \
	-D<OPTION>bool=OFF

For example:

CMAKE_OPTIONS+= \
	-DBUILD_TESTING:bool=OFF

To enable this package, open the configuration menu by typing make menuconfig in the command line. From there, go to custom → hellocmake and select the package.

If everything goes smoothly, the package that is built will be located in <BIN_DIR>/packages/<target>/cmakepackages/.

For instance:

hellocmake_0.1-1_arm_cortex-a7_neon-vfpv4.ipk
  • Last modified: 2024/08/15 05:37
  • by memicinn19