diff --git a/dm-framework/Makefile b/dm-framework/Makefile new file mode 100755 index 000000000..d4c4dec6d --- /dev/null +++ b/dm-framework/Makefile @@ -0,0 +1,102 @@ +# +# Copyright (c) 2025 IOPSYS +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=dm-framework +PKG_VERSION:=1.0.0 +PKG_RELEASE:=1 + +USE_LOCAL:=0 +ifneq ($(USE_LOCAL),1) +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://dev.iopsys.eu/lcm/dm-framework.git +PKG_SOURCE_VERSION:=0124fbc08c15f5e3147ec2589cb9c222fe8bea09 +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz +PKG_MIRROR_HASH:=skip +endif + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE + +include $(INCLUDE_DIR)/package.mk + +define Package/dm-framework + CATEGORY:=Genexis + TITLE:=DM JS Framework + URL:=http://www.genexis.eu + DEPENDS:=+libsqlite3 +libjson-c +libstdcpp +quickjs +libubus +libubox +libuci + PKG_LICENSE:=GENEXIS +endef + +define Package/dm-framework/description + JS based TR181 datamodel framework +endef +# +# DM-Agent Package Definition +# +define Package/dm-agent + DEPENDS:=+dm-framework +libubox +libubus +ubus + CATEGORY:=Genexis + TITLE:=dm-framework agent + URL:=http://www.genexis.eu + PKG_LICENSE:=GENEXIS + PKG_LICENSE_URL:= +endef + +define Package/dm-agent/description + This package contains dm-framework agent. +endef + +TARGET_CFLAGS += $(FPIC) + +ifeq ($(USE_LOCAL),1) +define Build/Prepare + $(CP) ~/git/dm-framework/* $(PKG_BUILD_DIR)/ +endef +endif + +define Package/dm-framework/install + $(INSTALL_DIR) $(1)/usr/lib + $(INSTALL_DIR) $(1)/sbin/ + $(INSTALL_DIR) $(1)/etc/bbfdm/dmf + + $(INSTALL_BIN) $(PKG_BUILD_DIR)/dm-api/libdmapi.so $(1)/usr/lib/ + $(INSTALL_BIN) $(PKG_BUILD_DIR)/dm-api/quickjs/uci.js $(1)/etc/bbfdm/dmf/ + $(INSTALL_BIN) $(PKG_BUILD_DIR)/dm-api/quickjs/utils.js $(1)/etc/bbfdm/dmf/ +endef + +# Package Installation - DM-Agent +define Package/dm-agent/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_BIN) $(PKG_BUILD_DIR)/dm-agent/dm-agent $(1)/usr/sbin +endef + +# Development Installation (headers and libraries) +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include + $(INSTALL_DIR) $(1)/usr/lib + + # DM-API development files - headers are now in dm-api/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/include/dm_types.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/include/dm_node.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/core/dm_api.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/core/dm_linker.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/core/dbmgr.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/include/dm_log.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/utils/dm_list.h $(1)/usr/include/ + $(CP) $(PKG_BUILD_DIR)/dm-api/libdmapi.so $(1)/usr/lib/ + + # Install json2code.js script and package.json to staging for other packages to use + $(INSTALL_DIR) $(1)/usr/lib/dm-framework/scripts + $(CP) $(PKG_BUILD_DIR)/scripts/json2code.js $(1)/usr/lib/dm-framework/scripts/ + $(CP) $(PKG_BUILD_DIR)/scripts/package.json $(1)/usr/lib/dm-framework/scripts/ +endef + +$(eval $(call BuildPackage,dm-agent)) +$(eval $(call BuildPackage,dm-framework)) diff --git a/dm-framework/dm-framework.mk b/dm-framework/dm-framework.mk new file mode 100644 index 000000000..8cdd74cf0 --- /dev/null +++ b/dm-framework/dm-framework.mk @@ -0,0 +1,33 @@ +# dm-framework.mk - Common rules for DM Framework + +DM_SCRIPT_DIR ?= $(STAGING_DIR)/usr/lib/dm-framework/scripts +JSON2CODE = $(DM_SCRIPT_DIR)/json2code.js + +# Macro to generate code +# $(1): Input directory (datamodels) +# $(2): Output directory (where generated files go) +# $(3): Vendor Prefix (optional) +define Build/Compile/DM + $(INSTALL_DIR) $(2) + @# Install npm dependencies if not already installed + @if [ ! -d "$(DM_SCRIPT_DIR)/node_modules" ]; then \ + cd $(DM_SCRIPT_DIR) && npm install --production; \ + fi + node $(JSON2CODE) -i $(1) -o $(2) $(if $(3),--vendor-prefix $(3)) + $(TARGET_CC) $(TARGET_CFLAGS) -I$(2) -I$(STAGING_DIR)/usr/include/ -fPIC -c $(2)/dm.c -o $(2)/dm.o + $(TARGET_CC) $(TARGET_LDFLAGS) -shared -o $(2)/lib$(PKG_NAME).so $(2)/dm.o +endef + +# Macro to install DM +# $(1): Input directory (datamodels) +# $(2): Output directory (build dir) +# $(3): Destination directory (rootfs) +# $(4): Package Name (subdir in /etc/bbfdm/dmf) +define Build/Install/DM + $(INSTALL_DIR) $(3)/etc/bbfdm/dmf/$(4) + $(CP) $(2)/lib$(PKG_NAME).so $(3)/etc/bbfdm/dmf/$(4)/ + $(CP) $(1)/*.js $(3)/etc/bbfdm/dmf/$(4)/ + $(CP) $(2)/default.db $(3)/etc/bbfdm/dmf/default_dm.db + $(CP) $(2)/exports.js $(3)/etc/bbfdm/dmf/$(4)/exports.js + $(CP) $(2)/dm_consts.js $(3)/etc/bbfdm/dmf/$(4)/dm_consts.js +endef