Skip to content
Open
152 changes: 127 additions & 25 deletions kernel/lunatik/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@
#

include $(TOPDIR)/rules.mk
-include $(TOPDIR)/.config
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/netfilter.mk

PKG_NAME:=lunatik
PKG_VERSION:=3.6.4
PKG_LICENSE:=GPL-2.0

PKG_SOURCE_URL:=https://github.com/luainkernel/lunatik
PKG_SOURCE_URL:=https://github.com/Zapper9982/lunatik
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2025-10-30
PKG_SOURCE_VERSION:=7f89098145fb55af355318a9936b5f2c562d5d90
PKG_SOURCE_DATE:=2024-11-18
PKG_SOURCE_VERSION:=4e48ccba6f2a92b1a4f90a69a1ea4f605752e694

PKG_MAINTAINER:=Lourival Vieira Neto<lourival.neto@gmail.com>
PKG_BUILD_PARALLEL:=1
Expand All @@ -37,13 +38,35 @@ endif

KLIBC_USR := klibc/usr

EXTRA_KCONFIG:= CONFIG_LUNATIK=m \
CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m \
CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_SOCKET=m \
CONFIG_LUNATIK_RCU=m CONFIG_LUNATIK_THREAD=m CONFIG_LUNATIK_FIB=m \
CONFIG_LUNATIK_DATA=m CONFIG_LUNATIK_PROBE=n CONFIG_LUNATIK_SYSCALL=n \
CONFIG_LUNATIK_FIFO=m CONFIG_LUNATIK_NETFILTER=m \
CONFIG_LUNATIK_COMPLETION=m
EXTRA_KCONFIG= CONFIG_LUNATIK=m \
CONFIG_LUNATIK_RUNTIME=y \
CONFIG_LUNATIK_RUN=$(if $(CONFIG_PACKAGE_kmod-lunatik-run),m,n) \
CONFIG_LUNATIK_DEVICE=$(if $(CONFIG_PACKAGE_kmod-lunatik-device),m,n) \
CONFIG_LUNATIK_LINUX=$(if $(CONFIG_PACKAGE_kmod-lunatik-linux),m,n) \
CONFIG_LUNATIK_SOCKET=$(if $(CONFIG_PACKAGE_kmod-lunatik-socket),m,n) \
CONFIG_LUNATIK_RCU=$(if $(CONFIG_PACKAGE_kmod-lunatik-rcu),m,n) \
CONFIG_LUNATIK_THREAD=$(if $(CONFIG_PACKAGE_kmod-lunatik-thread),m,n) \
CONFIG_LUNATIK_FIB=$(if $(CONFIG_PACKAGE_kmod-lunatik-fib),m,n) \
CONFIG_LUNATIK_DATA=$(if $(CONFIG_PACKAGE_kmod-lunatik-data),m,n) \
CONFIG_LUNATIK_PROBE=$(if $(CONFIG_PACKAGE_kmod-lunatik-probe),m,n) \
CONFIG_LUNATIK_SYSCALL=$(if $(CONFIG_PACKAGE_kmod-lunatik-syscall),m,n) \
CONFIG_LUNATIK_XDP=$(if $(CONFIG_PACKAGE_kmod-lunatik-xdp),m,n) \
CONFIG_LUNATIK_FIFO=$(if $(CONFIG_PACKAGE_kmod-lunatik-fifo),m,n) \
CONFIG_LUNATIK_XTABLE=$(if $(CONFIG_PACKAGE_kmod-lunatik-xtable),m,n) \
CONFIG_LUNATIK_NETFILTER=$(if $(CONFIG_PACKAGE_kmod-lunatik-netfilter),m,n) \
CONFIG_LUNATIK_COMPLETION=$(if $(CONFIG_PACKAGE_kmod-lunatik-completion),m,n) \
CONFIG_LUNATIK_CRYPTO_SHASH=$(if $(CONFIG_PACKAGE_kmod-lunatik-crypto-shash),m,n) \
CONFIG_LUNATIK_CRYPTO_SKCIPHER=$(if $(CONFIG_PACKAGE_kmod-lunatik-crypto-skcipher),m,n) \
CONFIG_LUNATIK_CRYPTO_AEAD=$(if $(CONFIG_PACKAGE_kmod-lunatik-crypto-aead),m,n) \
CONFIG_LUNATIK_CRYPTO_RNG=$(if $(CONFIG_PACKAGE_kmod-lunatik-crypto-rng),m,n) \
CONFIG_LUNATIK_CRYPTO_COMP=$(if $(CONFIG_PACKAGE_kmod-lunatik-crypto-comp),m,n) \
CONFIG_LUNATIK_CPU=$(if $(CONFIG_PACKAGE_kmod-lunatik-cpu),m,n) \
CONFIG_LUNATIK_HID=$(if $(CONFIG_PACKAGE_kmod-lunatik-hid),m,n) \
CONFIG_LUNATIK_SIGNAL=$(if $(CONFIG_PACKAGE_kmod-lunatik-signal),m,n) \
CONFIG_LUNATIK_BYTEORDER=$(if $(CONFIG_PACKAGE_kmod-lunatik-byteorder),m,n) \
CONFIG_LUNATIK_NOTIFIER=$(if $(CONFIG_PACKAGE_kmod-lunatik-notifier),m,n) \
CONFIG_LUNATIK_INSTALL_EXAMPLES=$(if $(CONFIG_PACKAGE_lunatik-examples),y,n) \
CONFIG_LUNATIK_INSTALL_TESTS=$(if $(CONFIG_PACKAGE_lunatik-tests),y,n)

EXTRA_CFLAGS:= -Wimplicit-fallthrough=0 -Wno-declaration-after-statement \
-I$(PKG_BUILD_DIR) -I$(PKG_BUILD_DIR)/include -I$(PKG_BUILD_DIR)/lua \
Expand All @@ -62,32 +85,38 @@ include $(INCLUDE_DIR)/package.mk
define Package/lunatik/Default
TITLE:=Lunatik
URL:=$PKG_SOURCE_URL
DEPENDS:=+lunatik-scripts
endef

define KernelPackage/lunatik
$(call Package/lunatik/Default)
SUBMENU:=Other modules
KCONFIG:=CONFIG_NETFILTER=y CONFIG_NETFILTER_ADVANCED=y
DEPENDS:=\
+kmod-nf-ipt \
+lunatik-scripts
FILES:=$(PKG_BUILD_DIR)/lunatik.ko $(PKG_BUILD_DIR)/lunatik_run.ko \
$(PKG_BUILD_DIR)/lib/luarcu.ko $(PKG_BUILD_DIR)/lib/luadevice.ko \
$(PKG_BUILD_DIR)/lib/luadata.ko $(PKG_BUILD_DIR)/lib/luanetfilter.ko \
$(PKG_BUILD_DIR)/lib/luasocket.ko \
$(PKG_BUILD_DIR)/lib/luathread.ko $(PKG_BUILD_DIR)/lib/lualinux.ko \
$(PKG_BUILD_DIR)/lib/luafifo.ko $(PKG_BUILD_DIR)/lib/luacompletion.ko
TITLE:=Lunatik Lua Interpreter
URL:=$(PKG_SOURCE_URL)
DEPENDS:=+lunatik-scripts
FILES:=$(PKG_BUILD_DIR)/lunatik.ko
AUTOLOAD:=$(call AutoLoad,30,lunatik,1)
endef

define KernelPackage/lunatik/description
Lunatik is a framework for scripting the Linux kernel with Lua.
endef

define LunatikModule
define KernelPackage/lunatik-$(1)
SUBMENU:=Other modules
TITLE+= $(2)
DEPENDS+= +kmod-lunatik $(3)
FILES:=$(PKG_BUILD_DIR)/$(4)
AUTOLOAD:=$(call AutoLoad,31,lunatik-$(1),1)
URL:=$(PKG_SOURCE_URL)
endef
$$(eval $$(call KernelPackage,lunatik-$(1)))
endef


define Package/lunatik-scripts
$(call Package/lunatik/Default)
DEPENDS:=\
+lua5.4
DEPENDS:=+lua5.4
Comment on lines -89 to +119
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please, don't mix style changes and feat

endef

define Package/lunatik-scripts/description
Expand All @@ -109,20 +138,93 @@ define Package/lunatik-scripts/install
$(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/syscall/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/syscall
endef

define Package/lunatik-examples
$(call Package/lunatik/Default)
TITLE+= Examples
DEPENDS+= +lunatik-scripts
endef

define Package/lunatik-examples/description
Lunatik example scripts
endef

define Package/lunatik-examples/install
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/examples
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/examples/echod
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/examples/filter
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/examples/dnsblock
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/examples/dnsdoctor
$(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/examples
$(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/echod/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/examples/echod
$(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/filter/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/examples/filter
$(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/dnsblock/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/examples/dnsblock
$(INSTALL_DATA) $(PKG_BUILD_DIR)/examples/dnsdoctor/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/examples/dnsdoctor
endef

define Package/lunatik-tests
$(call Package/lunatik/Default)
TITLE+= Tests
DEPENDS+= +lunatik-scripts
endef

define Package/lunatik-tests/description
Lunatik test scripts
endef

define Package/lunatik-tests/install
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/tests
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/tests/rcumap_sync
$(INSTALL_DIR) $(1)$(SCRIPTS_INSTALL_PATH)/tests/crypto
$(INSTALL_DATA) $(PKG_BUILD_DIR)/tests/rcumap_sync/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/tests/rcumap_sync
$(INSTALL_DATA) $(PKG_BUILD_DIR)/tests/crypto/*.lua $(1)$(SCRIPTS_INSTALL_PATH)/tests/crypto
endef

define Build/Prepare
$(Build/Prepare/Default)
cd $(PKG_BUILD_DIR) && ./gensymbols.sh $(LUA_API) > lunatik_sym.h
cd $(PKG_BUILD_DIR) && CC=$(HOSTCC) ./gensymbols.sh $(LUA_API) > lunatik_sym.h
cp $(PKG_BUILD_DIR)/Kbuild $(PKG_BUILD_DIR)/Makefile
$(if $(call kernel_patchver_lt,5.15),rm $(PKG_BUILD_DIR)/include/stdarg.h)
endef

define Build/Compile
$(KERNEL_MAKE) M="$(PKG_BUILD_DIR)" \
$(info LINUX_DIR=$(LINUX_DIR))
$(MAKE) -C $(LINUX_DIR) \
M="$(PKG_BUILD_DIR)" \
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
KBUILD_AFLAGS="$(KBUILD_AFLAGS)" \
$(KERNEL_MAKE_FLAGS) \
$(EXTRA_KCONFIG) \
modules
endef

$(eval $(call KernelPackage,lunatik))
$(eval $(call BuildPackage,lunatik-scripts))
$(eval $(call BuildPackage,lunatik-examples))
$(eval $(call BuildPackage,lunatik-tests))

$(eval $(call LunatikModule,run,Run (Execution Support),,lunatik_run.ko))
$(eval $(call LunatikModule,device,Device Support,,lib/luadevice.ko))
$(eval $(call LunatikModule,linux,Linux API Bindings,,lib/lualinux.ko))
$(eval $(call LunatikModule,socket,Socket Support,,lib/luasocket.ko))
$(eval $(call LunatikModule,rcu,RCU Support,,lib/luarcu.ko))
$(eval $(call LunatikModule,thread,Thread Support,,lib/luathread.ko))
$(eval $(call LunatikModule,fib,FIB Support,,lib/luafib.ko))
$(eval $(call LunatikModule,data,Data Support,,lib/luadata.ko))
$(eval $(call LunatikModule,probe,Probe Support,,lib/luaprobe.ko))
$(eval $(call LunatikModule,syscall,Syscall Support,,lib/luasyscall.ko))
$(eval $(call LunatikModule,xdp,XDP Support,,lib/luaxdp.ko))
$(eval $(call LunatikModule,fifo,FIFO Support,,lib/luafifo.ko))
$(eval $(call LunatikModule,xtable,Xtable Support,+kmod-nf-ipt,lib/luaxtable.ko))
$(eval $(call LunatikModule,netfilter,Netfilter bindings,,lib/luanetfilter.ko))
$(eval $(call LunatikModule,completion,Completion Support,,lib/luacompletion.ko))
$(eval $(call LunatikModule,crypto-shash,Crypto SHASH Support,,lib/luacrypto_shash.ko))
$(eval $(call LunatikModule,crypto-skcipher,Crypto SKCIPHER Support,,lib/luacrypto_skcipher.ko))
$(eval $(call LunatikModule,crypto-aead,Crypto AEAD Support,,lib/luacrypto_aead.ko))
$(eval $(call LunatikModule,crypto-rng,Crypto RNG Support,,lib/luacrypto_rng.ko))
$(eval $(call LunatikModule,crypto-comp,Crypto COMP Support,,lib/luacrypto_comp.ko))
$(eval $(call LunatikModule,cpu,CPU Support,,lib/luacpu.ko))
$(eval $(call LunatikModule,hid,HID Support,,lib/luahid.ko))
$(eval $(call LunatikModule,signal,Signal Support,,lib/luasignal.ko))
$(eval $(call LunatikModule,byteorder,Byteorder Support,,lib/luabyteorder.ko))
$(eval $(call LunatikModule,notifier,Notifier Support,,lib/luanotifier.ko))