make kernel module packaging code reusable and use it in madwifi
[openwrt/svn-archive/archive.git] / include / kernel.mk
index 580e395..9273817 100644 (file)
@@ -59,6 +59,69 @@ else
   LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux
 endif
 
+
+define KernelPackage/Defaults
+  FILES:=
+  KCONFIG:=m
+  AUTOLOAD:=
+endef
+
+define ModuleAutoLoad
+       export modules=; \
+       add_module() { \
+               mkdir -p $(2)/etc/modules.d; \
+               echo "$$$$$$$$2" > $(2)/etc/modules.d/$$$$$$$$1-$(1); \
+               modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$1-$(1)"; \
+       }; \
+       $(3) \
+       if [ -n "$$$$$$$$modules" ]; then \
+               mkdir -p $(2)/etc/modules.d; \
+               echo "#!/bin/sh" > $(2)/CONTROL/postinst; \
+               echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst; \
+               echo ". /etc/functions.sh" >> $(2)/CONTROL/postinst; \
+               echo "load_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst; \
+               chmod 0755 $(2)/CONTROL/postinst; \
+       fi
+endef
+
+define KernelPackage
+  NAME:=$(1)
+  $(eval $(call KernelPackage/Defaults))
+  $(eval $(call KernelPackage/$(1)))
+  $(eval $(call KernelPackage/$(1)/$(KERNEL)))
+  $(eval $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL)))
+
+  define Package/kmod-$(1)
+    TITLE:=$(TITLE)
+    SECTION:=kernel
+    CATEGORY:=Kernel modules
+    DEFAULT:=m
+    DESCRIPTION:=$(DESCRIPTION)
+    EXTRA_DEPENDS:='kernel (=$(PKG_VERSION)-$(PKG_RELEASE))'
+    $(call KernelPackage/$(1))
+    $(call KernelPackage/$(1)/$(KERNEL))
+    $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL))
+  endef
+
+  ifeq ($(findstring m,$(KCONFIG)),m)
+    ifneq ($(strip $(FILES)),)
+      define Package/kmod-$(1)/install
+               mkdir -p $$(1)/lib/modules/$(LINUX_VERSION)
+               $(CP) $$(FILES) $$(1)/lib/modules/$(LINUX_VERSION)/
+               $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
+               $(call KernelPackage/$(1)/install,$$(1))
+      endef
+    endif
+  endif
+  $$(eval $$(call BuildPackage,kmod-$(1)))
+endef
+
+define AutoLoad
+  add_module $(1) "$(2)";
+endef
+
+
 # FIXME: remove this crap
 define KMOD_template
 ifeq ($$(strip $(4)),)