source: trunk/include/kernel-build.mk @ 6671

Last change on this file since 6671 was 6671, checked in by nbd, 9 years ago

trigger a kernel module rebuild when the kernel config changes

  • Property svn:eol-style set to native
File size: 4.1 KB
Line 
1#
2# Copyright (C) 2006-2007 OpenWrt.org
3#
4# This is free software, licensed under the GNU General Public License v2.
5# See /LICENSE for more information.
6#
7KERNEL_BUILD:=1
8
9include $(INCLUDE_DIR)/kernel-version.mk
10include $(INCLUDE_DIR)/host.mk
11include $(INCLUDE_DIR)/kernel.mk
12include $(INCLUDE_DIR)/prereq.mk
13
14LINUX_CONFIG ?= ./config/default
15
16-include $(TOPDIR)/target/linux/generic-$(KERNEL)/config-template
17-include $(LINUX_CONFIG)
18
19ifneq ($(CONFIG_ATM),)
20  FEATURES += atm
21endif
22ifneq ($(CONFIG_PCI),)
23  FEATURES += pci
24endif
25ifneq ($(CONFIG_USB),)
26  FEATURES += usb
27endif
28ifneq ($(CONFIG_PCMCIA),)
29  FEATURES += pcmcia
30endif
31ifneq ($(CONFIG_VIDEO_DEV),)
32  FEATURES += video
33endif
34
35# remove duplicates
36FEATURES:=$(sort $(FEATURES))
37
38ifeq ($(DUMP),1)
39  all: dumpinfo
40else
41  all: compile
42endif
43
44ifneq (,$(findstring uml,$(BOARD)))
45  LINUX_KARCH:=um
46else
47  LINUX_KARCH:=$(shell echo $(ARCH) | sed -e 's/i[3-9]86/i386/' \
48        -e 's/mipsel/mips/' \
49        -e 's/mipseb/mips/' \
50        -e 's/powerpc/ppc/' \
51        -e 's/sh[234]/sh/' \
52        -e 's/armeb/arm/' \
53  )
54endif
55
56include $(INCLUDE_DIR)/kernel-defaults.mk
57
58define Kernel/Prepare
59        $(call Kernel/Prepare/Default)
60endef
61
62define Kernel/Configure
63        $(call Kernel/Configure/Default)
64endef
65
66define Kernel/CompileModules
67        $(call Kernel/CompileModules/Default)
68endef
69
70define Kernel/CompileImage
71        $(call Kernel/CompileImage/Default)
72endef
73
74define Kernel/Clean
75        $(call Kernel/Clean/Default)
76endef
77
78define BuildKernel
79  ifneq ($(LINUX_SITE),)
80    $(DL_DIR)/$(LINUX_SOURCE):
81                -mkdir -p $(DL_DIR)
82                $(SCRIPT_DIR)/download.pl $(DL_DIR) $(LINUX_SOURCE) $(LINUX_KERNEL_MD5SUM) $(LINUX_SITE)
83  endif
84
85  $(LINUX_DIR)/.prepared: $(DL_DIR)/$(LINUX_SOURCE)
86        -rm -rf $(KERNEL_BUILD_DIR)
87        -mkdir -p $(KERNEL_BUILD_DIR)
88        $(call Kernel/Prepare)
89        touch $$@
90
91  $(LINUX_DIR)/.configured: $(LINUX_DIR)/.prepared $(LINUX_CONFIG)
92        $(call Kernel/Configure)
93        touch $$@
94
95  $(LINUX_DIR)/.modules: $(LINUX_DIR)/.configured $(LINUX_DIR)/.config
96        $(call Kernel/CompileModules)
97        touch $$@
98
99  $(LINUX_DIR)/.image: $(LINUX_DIR)/.configured FORCE
100        $(call Kernel/CompileImage)
101        touch $$@
102       
103  mostlyclean: FORCE
104        $(call Kernel/Clean)
105
106  ifeq ($(DUMP),1)
107    dumpinfo:
108                @echo 'Target: $(BOARD)-$(KERNEL)'
109                @echo 'Target-Name: $(BOARDNAME) [$(KERNEL)]'
110                @echo 'Target-Path: $(subst $(TOPDIR)/,,$(PWD))'
111                @echo 'Target-Arch: $(ARCH)'
112                @echo 'Target-Features: $(FEATURES)'
113                @echo 'Linux-Version: $(LINUX_VERSION)'
114                @echo 'Linux-Release: $(LINUX_RELEASE)'
115                @echo 'Linux-Kernel-Arch: $(LINUX_KARCH)'
116                @echo 'Target-Description:'
117                @getvar $(call shvar,Target/Description)
118                @echo '@@'
119                @echo 'Default-Packages: $(DEFAULT_PACKAGES)'
120    ifneq ($(DUMPINFO),)
121                @$(DUMPINFO)
122    endif
123  endif
124
125  define BuildKernel
126  endef
127endef
128
129define Profile/Default
130  NAME:=
131  PACKAGES:=
132endef
133
134confname=$(subst .,_,$(subst -,_,$(1)))
135define Profile
136  $(eval $(call Profile/Default))
137  $(eval $(call Profile/$(1)))
138  $(eval $(call shexport,Profile/$(1)/Config))
139  $(eval $(call shexport,Profile/$(1)/Description))
140  DUMPINFO += \
141        echo "Target-Profile: $(1)"; \
142        echo "Target-Profile-Name: $(NAME)"; \
143        echo "Target-Profile-Packages: $(PACKAGES)"; \
144        if [ -f ./config/profile-$(1) ]; then \
145                echo "Target-Profile-Kconfig: yes"; \
146        fi; \
147        echo "Target-Profile-Config: "; \
148        getvar "$(call shvar,Profile/$(1)/Config)"; \
149        echo "@@"; \
150        echo "Target-Profile-Description:"; \
151        getvar "$(call shvar,Profile/$(1)/Description)"; \
152        echo "@@"; \
153        echo;
154  ifeq ($(CONFIG_LINUX_$(call confname,$(KERNEL)_$(1))),y)
155    PROFILE=$(1)
156  endif
157endef
158
159$(eval $(call shexport,Target/Description))
160
161download: $(DL_DIR)/$(LINUX_SOURCE)
162prepare: $(LINUX_DIR)/.configured $(TMP_DIR)/.kernel.mk
163compile: $(LINUX_DIR)/.modules
164menuconfig: $(LINUX_DIR)/.prepared FORCE
165        $(call Kernel/Configure)
166        $(SCRIPT_DIR)/config.pl '+' $(GENERIC_PLATFORM_DIR)/config-template $(LINUX_CONFIG) > $(LINUX_DIR)/.config
167        $(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKEOPTS) menuconfig
168        $(SCRIPT_DIR)/config.pl '>' $(GENERIC_PLATFORM_DIR)/config-template $(LINUX_DIR)/.config > $(LINUX_CONFIG)
169
170install: $(LINUX_DIR)/.image
171
172clean: FORCE
173        rm -f $(STAMP_DIR)/.linux-compile
174        rm -rf $(KERNEL_BUILD_DIR)
175
176rebuild: FORCE
177        @$(MAKE) mostlyclean
178        @if [ -f $(LINUX_KERNEL) ]; then \
179                $(MAKE) clean; \
180        fi
181        @$(MAKE) compile
182
183
Note: See TracBrowser for help on using the repository browser.