finally kill KMOD_template - removes a big chunk of legacy build code
[openwrt.git] / include / kernel.mk
1
2 # Copyright (C) 2006 OpenWrt.org
3 #
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
6 #
7 ifeq ($(DUMP),1)
8   KERNEL:=<KERNEL>
9   BOARD:=<BOARD>
10   LINUX_VERSION:=<LINUX_VERSION>
11 else
12
13   include $(TOPDIR)/.kernel.mk
14   include $(INCLUDE_DIR)/target.mk
15
16   # check to see if .kernel.mk matches target.mk
17   ifeq ($(CONFIG_BOARD)-$(CONFIG_KERNEL),$(BOARD)-$(KERNEL))
18      LINUX_VERSION:=$(CONFIG_LINUX_VERSION)
19      LINUX_RELEASE:=$(CONFIG_LINUX_RELEASE)
20      LINUX_KARCH:=$(CONFIG_LINUX_KARCH)
21   else
22   # oops, old .kernel.config; rebuild it (hiding the misleading errors this produces)
23     $(warning rebuilding .kernel.mk)
24     $(TOPDIR)/.kernel.mk: FORCE
25         @$(MAKE) -C $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL) $@ &>/dev/null
26   endif
27
28   ifeq ($(KERNEL),2.6)
29     LINUX_KMOD_SUFFIX=ko
30   else
31     LINUX_KMOD_SUFFIX=o
32   endif
33
34   ifneq (,$(findstring uml,$(BOARD)))
35     KERNEL_CC:=$(HOSTCC)
36     KERNEL_CROSS:=
37   else
38     KERNEL_CC:=$(TARGET_CC)
39     KERNEL_CROSS:=$(TARGET_CROSS)
40   endif
41
42   KERNEL_BUILD_DIR:=$(BUILD_DIR)/linux-$(KERNEL)-$(BOARD)
43   LINUX_DIR := $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
44
45   MODULES_SUBDIR:=lib/modules/$(LINUX_VERSION)
46   MODULES_DIR := $(KERNEL_BUILD_DIR)/modules/$(MODULES_SUBDIR)
47   TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
48
49   LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux
50 endif
51
52
53 define KernelPackage/Defaults
54   FILES:=
55   KCONFIG:=m
56   AUTOLOAD:=
57 endef
58
59 define ModuleAutoLoad
60         export modules=; \
61         add_module() { \
62                 mkdir -p $(2)/etc/modules.d; \
63                 ( \
64                         for mod in $$$$$$$$2; do \
65                                 getvar mod; \
66                         done \
67                 ) > $(2)/etc/modules.d/$$$$$$$$1-$(1); \
68                 modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$1-$(1)"; \
69         }; \
70         $(3) \
71         if [ -n "$$$$$$$$modules" ]; then \
72                 mkdir -p $(2)/etc/modules.d; \
73                 echo "#!/bin/sh" > $(2)/CONTROL/postinst; \
74                 echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst; \
75                 echo ". /etc/functions.sh" >> $(2)/CONTROL/postinst; \
76                 echo "load_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst; \
77                 chmod 0755 $(2)/CONTROL/postinst; \
78         fi
79 endef
80  
81
82 define KernelPackage
83   NAME:=$(1)
84   $(eval $(call KernelPackage/Defaults))
85   $(eval $(call KernelPackage/$(1)))
86   $(eval $(call KernelPackage/$(1)/$(KERNEL)))
87   $(eval $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL)))
88
89   define Package/kmod-$(1)
90     TITLE:=$(TITLE)
91     SECTION:=kernel
92     CATEGORY:=Kernel modules
93     DEFAULT:=m
94     DESCRIPTION:=$(DESCRIPTION)
95     EXTRA_DEPENDS:='kernel (=$(PKG_VERSION)-$(PKG_RELEASE))'
96     $(call KernelPackage/$(1))
97     $(call KernelPackage/$(1)/$(KERNEL))
98     $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL))
99   endef
100
101   ifeq ($(findstring m,$(KCONFIG)),m)
102     ifneq ($(strip $(FILES)),)
103       define Package/kmod-$(1)/install
104                 mkdir -p $$(1)/lib/modules/$(LINUX_VERSION)
105                 $(CP) $$(FILES) $$(1)/lib/modules/$(LINUX_VERSION)/
106                 $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
107                 $(call KernelPackage/$(1)/install,$$(1))
108       endef
109     endif
110   endif
111   $$(eval $$(call BuildPackage,kmod-$(1)))
112 endef
113
114 define AutoLoad
115   add_module $(1) "$(2)";
116 endef
117