make sure the needed dirs exist for linux26-menuconfig
[buildroot.git] / target / linux / Makefile.in
blob8cc0a13766975f69b01db7183d9f448ef2564047
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
116 # Doesn't make sense to warn about a missing kernel config
117 # when we are about to configure.
118 ifeq ($(findstring -menuconfig,$(MAKECMDGOALS)),)
119 ifeq ($(BR2_KERNEL_LINUX)$(realpath $(LINUX26_KCONFIG)),y)
120 $(error you do not have a linux kernel configuration file)
121 endif
122 endif
125 ifneq ($(strip $(LINUX26_VERSION)),$(strip $(LINUX_HEADERS_VERSION)))
126 $(DL_DIR)/$(LINUX26_SOURCE):
127 $(WGET) -P $(DL_DIR) $(LINUX26_SITE)/$(LINUX26_SOURCE)
128 endif # ($(LINUX26_VERSION),$(LINUX_HEADERS_VERSION))
130 $(LINUX26_DIR)/.unpacked: $(DL_DIR)/$(LINUX26_SOURCE)
131 rm -rf $(LINUX26_DIR)
132 @echo "*** Unpacking kernel source"
133 $(LINUX26_BZCAT) $(DL_DIR)/$(LINUX26_SOURCE) | tar -C $(PROJECT_BUILD_DIR) $(TAR_OPTIONS) -
134 ifneq ($(DOWNLOAD_LINUX26_VERSION),$(LINUX26_VERSION))
135 # Rename the dir from the downloaded version to the AFTER patch version
136 mv -f $(PROJECT_BUILD_DIR)/linux-$(DOWNLOAD_LINUX26_VERSION) $(LINUX26_DIR)
137 endif
138 touch $@
140 $(LINUX26_DIR)/.patched: $(LINUX26_DIR)/.unpacked $(LINUX_HEADERS_DEPENDS)
141 toolchain/patch-kernel.sh $(LINUX26_DIR) toolchain/kernel-headers \
142 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
143 ifeq ($(BR2_KERNEL_HEADERS_IPMI),y)
144 toolchain/patch-kernel.sh $(LINUX26_DIR) toolchain/kernel-headers/ipmi \
145 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
146 endif
147 ifeq ($(BR2_KERNEL_HEADERS_LZMA),y)
148 toolchain/patch-kernel.sh $(LINUX26_DIR) toolchain/kernel-headers/lzma \
149 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
150 endif
151 ifeq ($(BR2_KERNEL_HEADERS_RT),y)
152 toolchain/patch-kernel.sh $(LINUX26_DIR) $(DL_DIR) $(LINUX_RT_SOURCE)
153 endif
154 ifeq ($(BR2_KERNEL_HEADERS_PATCH_DIR),y)
155 toolchain/patch-kernel.sh $(LINUX26_DIR) $(KERNEL_HEADERS_PATCH_DIR) \
156 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
157 endif
158 ifeq ($(BR2_PACKAGE_OPENSWAN),y)
159 toolchain/patch-kernel.sh $(LINUX26_DIR) package/openswan \
160 linux-$(LINUX26_VERSION)-\*.patch{,.gz,.bz2}
161 endif
162 ifneq ($(LINUX26_PATCH_DIR),)
163 if [ -d $(LINUX26_PATCH_DIR) ] ; then \
164 toolchain/patch-kernel.sh $(LINUX26_DIR) $(LINUX26_PATCH_DIR) linux-$(LINUX26_VERSION)\*.patch ; \
166 endif
167 touch $@
169 $(LINUX26_DIR)/.configured: $(LINUX26_DIR)/.patched $(LINUX26_KCONFIG)
170 cp -dpf $(LINUX26_KCONFIG) $(LINUX26_DIR)/.config
171 $(SED) '/CONFIG_AEABI=y/d' $(LINUX26_DIR)/.config
172 ifeq ($(BR2_ARM_EABI),y)
173 echo "CONFIG_AEABI=y" >> $(LINUX26_DIR)/.config
174 $(SED) '/CONFIG_OABI_COMPAT/d' $(LINUX26_DIR)/.config
175 echo "# CONFIG_OABI_COMPAT is not set" >> $(LINUX26_DIR)/.config
176 else
177 echo "# CONFIG_AEABI is not set" >> $(LINUX26_DIR)/.config
178 endif
179 $(SED) '/CONFIG_CPU_BIG_ENDIAN/d' \
180 -e '/CONFIG_CPU_LITTLE_ENDIAN/d' $(LINUX26_DIR)/.config
181 ifeq ($(BR2_mips),y)
182 echo "CONFIG_CPU_BIG_ENDIAN=y" >> $(LINUX26_DIR)/.config
183 endif
184 ifeq ($(BR2_mipsel),y)
185 echo "CONFIG_CPU_LITTLE_ENDIAN=y" >> $(LINUX26_DIR)/.config
186 endif
187 $(SED) '/CONFIG_IPV6=y/d' $(LINUX26_DIR)/.config
188 ifeq ($(BR2_INET_IPV6),y)
189 echo "CONFIG_IPV6=y" >> $(LINUX26_DIR)/.config
190 else
191 echo "# CONFIG_IPV6 is not set" >> $(LINUX26_DIR)/.config
192 endif
193 $(SED) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR)/.config
194 $(SED) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR)/.config
195 ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
196 echo "CONFIG_INITRAMFS_SOURCE=\"$(INITRAMFS_TARGET)\"" >> \
197 $(LINUX26_DIR)/.config
198 echo "CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR)/.config
199 echo "CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR)/.config
200 else
201 echo "CONFIG_INITRAMFS_SOURCE=\"\"" >> $(LINUX26_DIR)/.config
202 endif
203 ifeq ($(BR2_PACKAGE_BUSYBOX_INITRAMFS),y)
204 # precedence for a small initramfs
205 $(SED) '/CONFIG_INITRAMFS_SOURCE/d' $(LINUX26_DIR)/.config
206 $(SED) '/INITRAMFS_ROOT_.ID/d' $(LINUX26_DIR)/.config
207 echo "CONFIG_INITRAMFS_SOURCE=\"$(BB_INITRAMFS_TARGET)\"" >> \
208 $(LINUX26_DIR)/.config
209 echo "CONFIG_INITRAMFS_ROOT_UID=0" >> $(LINUX26_DIR)/.config
210 echo "CONFIG_INITRAMFS_ROOT_GID=0" >> $(LINUX26_DIR)/.config
211 endif
212 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) oldconfig
213 touch $@
215 $(LINUX26_DIR)/.depend_done: $(LINUX26_DIR)/.configured
216 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) prepare
217 touch $@
219 $(LINUX26_KERNEL): $(INITRAMFS_TARGET) $(BB_INITRAMFS_TARGET) \
220 $(LINUX26_DIR)/.depend_done
221 $(MAKE) $(LINUX26_MAKE_FLAGS) \
222 -C $(LINUX26_DIR) $(LINUX26_FORMAT)
223 cat $(LINUX26_DIR)/$(LINUX26_BINLOC) > $(LINUX26_KERNEL)
224 touch -c $@
226 $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/modules.dep: $(LINUX26_DIR)/.configured
227 rm -rf $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)
228 rm -f $(TARGET_DIR)/sbin/cardmgr
229 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) modules
230 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) \
231 DEPMOD=$(STAGING_DIR)/bin/$(GNU_TARGET_NAME)-depmod26 \
232 INSTALL_MOD_PATH=$(TARGET_DIR) modules_install
233 rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/build
234 rm -f $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/source
235 $(STAGING_DIR)/bin/$(GNU_TARGET_NAME)-depmod26 -b $(TARGET_DIR) $(LINUX_HEADERS_VERSION)
236 touch -c $@
238 linux26-menuconfig: host-sed dirs $(LINUX26_DIR)/.patched
239 -[ -f $(LINUX26_DIR)/.config ] || cp $(LINUX26_KCONFIG) $(LINUX26_DIR)/.config
240 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) menuconfig
241 -[ -f $(LINUX26_DIR)/.config ] && touch $(LINUX26_DIR)/.configured
243 linux26-xconfig: host-sed dirs $(LINUX26_DIR)/.patched
244 -[ -f $(LINUX26_DIR)/.config ] || cp $(LINUX26_KCONFIG) $(LINUX26_DIR)/.config
245 $(MAKE) $(LINUX26_MAKE_FLAGS) -C $(LINUX26_DIR) xconfig
246 -[ -f $(LINUX26_DIR)/.config ] && touch $(LINUX26_DIR)/.configured
248 linux26: $(LINUX26_KERNEL)
250 $(LINUX26_DIR)/.modules_installed: $(TARGET_DIR)/lib/modules/$(LINUX26_VERSION)/modules.dep
251 touch $@
253 linux26-modules: cross-depmod26 $(LINUX26_DIR)/.modules_installed
255 linux26-source: $(DL_DIR)/$(LINUX26_SOURCE)
257 linux26-unpacked: $(LINUX26_DIR)/.patched
259 linux26-config: host-sed dirs $(LINUX26_DIR)/.configured
261 linux26-update:
262 cp -dpf $(LINUX26_DIR)/.config $(LINUX26_KCONFIG)
264 # force rebuild
265 linux26-force:
266 touch $(LINUX26_DIR)/.configured
268 # This has been renamed so we do _NOT_ by default run this on 'make clean'
269 linux26clean:
270 rm -f $(LINUX26_KERNEL) $(LINUX26_DIR)/.configured
271 -$(MAKE) PATH=$(TARGET_PATH) -C $(LINUX26_DIR) clean
273 linux26-dirclean:
274 rm -rf $(LINUX26_DIR)
276 endif