move platform specific base-files into target/linux/<targetname>
[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
8 ifeq ($(DUMP),1)
9   KERNEL?=<KERNEL>
10   BOARD?=<BOARD>
11   LINUX_VERSION?=<LINUX_VERSION>
12 else
13   include $(INCLUDE_DIR)/target.mk
14
15   ifeq ($(KERNEL),2.6)
16     LINUX_KMOD_SUFFIX=ko
17   else
18     LINUX_KMOD_SUFFIX=o
19   endif
20
21   ifneq (,$(findstring uml,$(BOARD)))
22     KERNEL_CC:=$(HOSTCC)
23     KERNEL_CROSS:=
24   else
25     KERNEL_CC:=$(TARGET_CC)
26     KERNEL_CROSS:=$(TARGET_CROSS)
27   endif
28
29   PLATFORM_DIR := $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL)
30   KERNEL_BUILD_DIR:=$(BUILD_DIR)/linux-$(KERNEL)-$(BOARD)
31   LINUX_DIR := $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
32
33   MODULES_SUBDIR:=lib/modules/$(LINUX_VERSION)
34   MODULES_DIR := $(KERNEL_BUILD_DIR)/modules/$(MODULES_SUBDIR)
35   TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
36
37   LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux
38
39   LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
40   LINUX_SITE:=http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
41            http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
42            http://www.kernel.org/pub/linux/kernel/v$(KERNEL) \
43            http://www.de.kernel.org/pub/linux/kernel/v$(KERNEL)
44
45 endif
46
47
48 define KernelPackage/Defaults
49   FILES:=
50   KCONFIG:=m
51   AUTOLOAD:=
52 endef
53
54 define ModuleAutoLoad
55         export modules=; \
56         add_module() { \
57                 mkdir -p $(2)/etc/modules.d; \
58                 ( \
59                         for mod in $$$$$$$$2; do \
60                                 getvar mod; \
61                         done \
62                 ) > $(2)/etc/modules.d/$$$$$$$$1-$(1); \
63                 modules="$$$$$$$${modules:+$$$$$$$$modules }$$$$$$$$1-$(1)"; \
64         }; \
65         $(3) \
66         if [ -n "$$$$$$$$modules" ]; then \
67                 mkdir -p $(2)/etc/modules.d; \
68                 echo "#!/bin/sh" > $(2)/CONTROL/postinst; \
69                 echo "[ -z \"\$$$$$$$$IPKG_INSTROOT\" ] || exit 0" >> $(2)/CONTROL/postinst; \
70                 echo ". /etc/functions.sh" >> $(2)/CONTROL/postinst; \
71                 echo "load_modules $$$$$$$$modules" >> $(2)/CONTROL/postinst; \
72                 chmod 0755 $(2)/CONTROL/postinst; \
73         fi
74 endef
75  
76
77 define KernelPackage
78   NAME:=$(1)
79   $(eval $(call Package/Default))
80   $(eval $(call KernelPackage/Defaults))
81   $(eval $(call KernelPackage/$(1)))
82   $(eval $(call KernelPackage/$(1)/$(KERNEL)))
83   $(eval $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL)))
84
85   define Package/kmod-$(1)
86     TITLE:=$(TITLE)
87     SECTION:=kernel
88     CATEGORY:=Kernel modules
89     DEFAULT:=$(KMOD_DEFAULT)
90     DESCRIPTION:=$(DESCRIPTION)
91     EXTRA_DEPENDS:='kernel (=$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE))'
92     $(call KernelPackage/$(1))
93     $(call KernelPackage/$(1)/$(KERNEL))
94     $(call KernelPackage/$(1)/$(BOARD)-$(KERNEL))
95   endef
96
97   ifeq ($(findstring m,$(KCONFIG)),m)
98     ifneq ($(strip $(FILES)),)
99       define Package/kmod-$(1)/install
100                 mkdir -p $$(1)/lib/modules/$(LINUX_VERSION)
101                 $(CP) $$(FILES) $$(1)/lib/modules/$(LINUX_VERSION)/
102                 $(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
103                 $(call KernelPackage/$(1)/install,$$(1))
104       endef
105     endif
106   endif
107   $$(eval $$(call BuildPackage,kmod-$(1)))
108 endef
109
110 define AutoLoad
111   add_module $(1) "$(2)";
112 endef
113