improve headers_install
[buildroot.git] / target / linux / Makefile.in
blob22bbcb92d8eb3734502e99505bbd721cd5547070
1 #############################################################
3 # Linux kernel 2.6 target
5 #############################################################
7 # XXX This crap should be in project!
8 ifeq ($(BOARD_PATH),)
9 BOARD_PATH:=$(strip $(subst ",,$(BR2_BOARD_PATH)))
10 #"))
11 endif
13 # Linux kernel configuration file
14 # Has to be set by the target/device
15 # If it is not set by the target/device, then pick the one from .config
16 ifndef LINUX26_KCONFIG
17 ifneq ($(strip $(subst ",,$(BR2_PACKAGE_LINUX_KCONFIG))),)
18 LINUX26_KCONFIG:=$(strip $(subst ",,$(BR2_PACKAGE_LINUX_KCONFIG)))
19 #"))
20 #"))
21 else
22 # LINUX26_KCONFIG=$(BOARD_PATH)/linux26.config
23 endif
24 endif
26 ifndef LINUX26_FORMAT
27 ifneq ($(strip $(subst ",,$(BR2_PACKAGE_LINUX_FORMAT))),)
28 LINUX26_FORMAT:=$(strip $(subst ",,$(BR2_PACKAGE_LINUX_FORMAT)))
29 #"))
30 #"))
31 else
32 LINUX26_FORMAT:=zImage
33 endif
34 endif
37 ifneq ($(filter $(TARGETS),linux26),)
39 ifeq ($(DOWNLOAD_LINUX26_VERSION),)
40 # User did not define linux version, try using headers
41 ifeq ($(LINUX_HEADERS_VERSION),)
42 # We did not have headers (this is for real???)
43 # Version of linuc before patches
44 DOWNLOAD_LINUX26_VERSION=2.6.22.1
45 # Version of Linux after applying any patches
46 LINUX26_VERSION=2.6.22.1
47 else
48 # OK, we have headers, use them...
49 DOWNLOAD_LINUX26_VERSION=$(LINUX_HEADERS_VERSION)
50 LINUX26_VERSION=$(LINUX_HEADERS_VERSION)
51 endif
52 endif
54 LINUX26_SOURCE=linux-$(DOWNLOAD_LINUX26_VERSION).tar.bz2
55 LINUX26_BZCAT:=$(BZCAT)
56 LINUX26_SITE=$(BR2_KERNEL_MIRROR)/linux/kernel/v2.6
59 # Has to be set by the target/device
60 ifndef LINUX26_BINLOC
61 # default:
62 ifeq ($(LINUX26_FORMAT),vmlinux)
63 LINUX26_BINLOC=$(LINUX26_FORMAT)
64 else
65 LINUX26_BINLOC=arch/$(KERNEL_ARCH)/boot/$(LINUX26_FORMAT)
66 endif
67 endif
69 # File name for the Linux kernel binary
70 ifndef LINUX26_KERNEL
71 LINUX26_KERNEL=$(BINARIES_DIR)/linux-kernel-$(LINUX26_VERSION)-$(KERNEL_ARCH)
72 endif
74 # Version of Linux AFTER patches
75 LINUX26_DIR=$(PROJECT_BUILD_DIR)/linux-$(LINUX26_VERSION)
77 # for packages that need it
78 LINUX_VERSION:=$(LINUX26_VERSION)
79 LINUX_DIR=$(LINUX26_DIR)
80 LINUX_KERNEL=$(LINUX26_KERNEL)
82 # kernel patches
83 ifeq ($(strip $(LINUX26_PATCH_DIR)),)
84 ifneq ($(BOARD_PATH),)
85 LINUX26_PATCH_DIR:=$(BOARD_PATH)/kernel-patches/
86 #"))
87 endif
88 endif
89 # XXX FIXME: using -fstack-protector-all -mcmodel=kernel
90 # should be perfectly fine but perhaps needs a config symbol set in
91 # the kernel.config
92 __LINUX26_NO_PIC=-fPIC -fpic -DPIC -fwrapv -ftrapv \
93 -fstack-protector -fstack-protector-all
94 LINUX26_MAKE_FLAGS = HOSTCC="$(HOSTCC)" HOSTCFLAGS="$(HOSTCFLAGS)" \
95 ARCH=$(KERNEL_ARCH) \
96 CFLAGS_KERNEL="$(filter-out $(__LINUX26_NO_PIC),$(TARGET_CFLAGS))" \
97 INSTALL_MOD_PATH=$(TARGET_DIR) \
98 CROSS_COMPILE=$(KERNEL_CROSS) \
99 LDFLAGS="$(TARGET_LDFLAGS)" \
100 LZMA="$(LZMA)"
102 $(LINUX26_KCONFIG):
103 @if [ ! -f "$(LINUX26_KCONFIG)" ] ; then \
104 echo ""; \
105 echo "You should create a .config for your kernel"; \
106 echo "and install it as $(LINUX26_KCONFIG)"; \
107 echo ""; \
108 sleep 5; \
111 # Sanity check
112 ifeq (=$(BR2_KERNEL_LINUX)$(BR2_PACKAGE_LINUX_KCONFIG)=,=y=)
113 $(error you do not have a linux kernel configuration)
114 endif
115 ifeq ($(BR2_KERNEL_LINUX)$(realpath $(LINUX26_KCONFIG)),y)
116 $(error you do not have a linux kernel configuration file)
117 endif
120 ifneq ($(strip $(LINUX26_VERSION)),$(strip $(LINUX_HEADERS_VERSION)))
121 $(DL_DIR)/$(LINUX26_SOURCE):
122 $(WGET) -P $(DL_DIR) $(LINUX26_SITE)/$(LINUX26_SOURCE)
123 endif # ($(LINUX26_VERSION),$(LINUX_HEADERS_VERSION))
125 $(LINUX26_DIR)/.unpacked: $(DL_DIR)/$(LINUX26_SOURCE)
126 rm -rf $(LINUX26_DIR)
127 @echo "*** Unpacking kernel source"
128 $(LINUX26_BZCAT) $(DL_DIR)/$(LINUX26_SOURCE) | tar -C $(PROJECT_BUILD_DIR) $(TAR_OPTIONS) -
129 ifneq ($(DOWNLOAD_LINUX26_VERSION),$(LINUX26_VERSION))
130 # Rename the dir from the downloaded version to the AFTER patch version
131 mv -f $(PROJECT_BUILD_DIR)/linux-$(DOWNLOAD_LINUX26_VERSION) $(LINUX26_DIR)
132 endif
133 touch $@
135 $(LINUX26_DIR)/.patched: $(LINUX26_DIR)/.unpacked $(LINUX_HEADERS_DEPENDS)
136 toolchain/patch-kernel.sh $(LINUX26_DIR) toolchain/kernel-headers \
137 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
138 ifeq ($(BR2_KERNEL_HEADERS_IPMI),y)
139 toolchain/patch-kernel.sh $(LINUX26_DIR) toolchain/kernel-headers/ipmi \
140 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
141 endif
142 ifeq ($(BR2_KERNEL_HEADERS_LZMA),y)
143 toolchain/patch-kernel.sh $(LINUX26_DIR) toolchain/kernel-headers/lzma \
144 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
145 endif
146 ifeq ($(BR2_KERNEL_HEADERS_RT),y)
147 toolchain/patch-kernel.sh $(LINUX26_DIR) $(DL_DIR) $(LINUX_RT_SOURCE)
148 endif
149 ifeq ($(BR2_KERNEL_HEADERS_PATCH_DIR),y)
150 toolchain/patch-kernel.sh $(LINUX26_DIR) $(KERNEL_HEADERS_PATCH_DIR) \
151 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
152 endif
153 ifeq ($(BR2_PACKAGE_OPENSWAN),y)
154 toolchain/patch-kernel.sh $(LINUX26_DIR) package/openswan \
155 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
156 endif
157 ifneq ($(LINUX26_PATCH_DIR),)
158 if [ -d $(LINUX26_PATCH_DIR) ] ; then \
159 toolchain/patch-kernel.sh $(LINUX26_DIR) $(LINUX26_PATCH_DIR) linux-$(LINUX26_VERSION)\*.patch ; \
161 endif
162 touch $@
164 $(LINUX26_DIR)/.configured: $(LINUX26_DIR)/.patched $(LINUX26_KCONFIG)
165 cp -dpf $(LINUX26_KCONFIG) $(LINUX26_DIR)/.config
166 $(SED) '/CONFIG_AEABI=y/d' $(LINUX26_DIR)/.config
167 ifeq ($(BR2_ARM_EABI),y)
168 echo "CONFIG_AEABI=y" >> $(LINUX26_DIR)/.config
169 $(SED) '/CONFIG_OABI_COMPAT/d' $(LINUX26_DIR)/.config
170 echo "# CONFIG_OABI_COMPAT is not set" >> $(LINUX26_DIR)/.config
171 else
172 echo "# CONFIG_AEABI is not set" >> $(LINUX26_DIR)/.config
173 endif
174 $(SED) '/CONFIG_CPU_BIG_ENDIAN/d' \
175 -e '/CONFIG_CPU_LITTLE_ENDIAN/d' $(LINUX26_DIR)/.config
176 ifeq ($(BR2_mips),y)
177 echo "CONFIG_CPU_BIG_ENDIAN=y" >> $(LINUX26_DIR)/.config
178 endif
179 ifeq ($(BR2_mipsel),y)
180 echo "CONFIG_CPU_LITTLE_ENDIAN=y" >> $(LINUX26_DIR)/.config
181 endif
182 $(SED) '/CONFIG_IPV6=y/d' $(LINUX26_DIR)/.config
183 ifeq ($(BR2_INET_IPV6),y)
184 echo "CONFIG_IPV6=y" >> $(LINUX26_DIR)/.config
185 else
186 echo "# CONFIG_IPV6 is not set" >> $(LINUX26_DIR)/.config
187 endif
188 $(SED) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR)/.config
189 $(SED) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR)/.config
190 ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
191 echo "CONFIG_INITRAMFS_SOURCE=\"$(INITRAMFS_TARGET)\"" >> \
192 $(LINUX26_DIR)/.config
193 echo "CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR)/.config
194 echo "CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR)/.config
195 else
196 echo "CONFIG_INITRAMFS_SOURCE=\"\"" >> $(LINUX26_DIR)/.config
197 endif
198 ifeq ($(BR2_PACKAGE_BUSYBOX_INITRAMFS),y)
199 # precedence for a small initramfs
200 $(SED) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR)/.config
201 $(SED) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR)/.config
202 echo "CONFIG_INITRAMFS_SOURCE=\"$(BB_INITRAMFS_TARGET)\"" >> \
203 $(LINUX26_DIR)/.config
204 echo "CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR)/.config
205 echo "CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR)/.config
206 endif
207 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) oldconfig
208 touch $@
210 $(LINUX26_DIR)/.depend_done: $(LINUX26_DIR)/.configured
211 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) prepare
212 touch $@
214 $(LINUX26_KERNEL): $(INITRAMFS_TARGET) $(BB_INITRAMFS_TARGET) \
215 $(LINUX26_DIR)/.depend_done
216 $(MAKE) $(LINUX26_MAKE_FLAGS) \
217 -C $(LINUX26_DIR) $(LINUX26_FORMAT)
218 cat $(LINUX26_DIR)/$(LINUX26_BINLOC) > $(LINUX26_KERNEL)
219 touch -c $@
221 $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/modules.dep: $(LINUX26_DIR)/.configured
222 rm -rf $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)
223 rm -f $(TARGET_DIR)/sbin/cardmgr
224 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) modules
225 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) \
226 DEPMOD=$(STAGING_DIR)/bin/$(GNU_TARGET_NAME)-depmod26 \
227 INSTALL_MOD_PATH=$(TARGET_DIR) modules_install
228 rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/build
229 rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/source
230 $(STAGING_DIR)/bin/$(GNU_TARGET_NAME)-depmod26 -b $(TARGET_DIR) $(LINUX_HEADERS_VERSION)
231 touch -c $@
233 linux26-menuconfig: $(LINUX26_DIR)/.patched host-sed
234 [ -f $(LINUX26_DIR)/.config ] || cp $(LINUX26_KCONFIG) $(LINUX26_DIR)/.config
235 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) menuconfig
236 -[ -f $(LINUX26_DIR)/.config ] && touch $(LINUX26_DIR)/.configured
238 linux26-xconfig: $(LINUX26_DIR)/.patched host-sed
239 [ -f $(LINUX26_DIR)/.config ] || cp $(LINUX26_KCONFIG) $(LINUX26_DIR)/.config
240 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) xconfig
241 -[ -f $(LINUX26_DIR)/.config ] && touch $(LINUX26_DIR)/.configured
243 linux26: $(LINUX26_KERNEL)
245 $(LINUX26_DIR)/.modules_installed: $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/modules.dep
246 touch $@
248 linux26-modules: cross-depmod26 $(LINUX26_DIR)/.modules_installed
250 linux26-source: $(DL_DIR)/$(LINUX26_SOURCE)
252 linux26-unpacked: $(LINUX26_DIR)/.patched
254 linux26-config: host-sed $(LINUX26_DIR)/.configured
256 linux26-update:
257 cp -dpf $(LINUX26_DIR)/.config $(LINUX26_KCONFIG)
259 # This has been renamed so we do _NOT_ by default run this on 'make clean'
260 linux26clean:
261 rm -f $(LINUX26_KERNEL) $(LINUX26_DIR)/.configured
262 -$(MAKE) PATH=$(TARGET_PATH) -C $(LINUX26_DIR) clean
264 linux26-dirclean:
265 rm -rf $(LINUX26_DIR)
267 endif