Refreshed patches against latest upstream
[nslu2-linux/kernel.git] / Makefile
blob56120c75df2f29ad9dd5b50082d4ac6675e0d2e2
1 # Makefile for building the IXP4xx kernel.
3 # Based on the build script for the Loft from Giant Shoulder, Inc.
4 # written by Tommy B.
5 # Based on the great work done in OpenEmbedded for the Linksys NSLU2
6 # written by the nslu2-linux development community.
8 # This builds the kernel in the linux-${REVISION} directory.
9 # It then installs all the kernel modules in lib
10 # and creates a tarball there containing all the modules
11 # under the lib/modules/${REVISION} directory.
13 # N.B. You may need to change your crosstool path
17 # ENDIAN = l
18 ENDIAN = b
19 MAJORVER = 2.6
21 # Previous Stable
22 # BASEVER = 2.6.21.7
23 # PATCHVER = 2.6.21
25 # Latest Stable
26 BASEVER = 2.6.23.14
27 PATCHVER = 2.6.23
29 # Latest Development
30 # BASEVER = 2.6.24
31 # PATCHVER = 2.6.25
33 # CROSS_COMPILE = /home/slug/angstrom/tmp/cross/bin/${ARCH}-angstrom-linux-gnueabi-
35 REVISION := $(shell sed -e 's/-\(git\|v\).*//' patches/${PATCHVER}/KERNEL)
36 SNAPSHOT := $(shell sed -e 's/-v.*//' patches/${PATCHVER}/KERNEL)
37 COMMITID := $(shell sed -e 's/.*-\(v[0-9.]*.*\)/\1/' patches/${PATCHVER}/KERNEL)
39 APEX_REVISION = 1.5.13
40 APEX_CONFIG = slugos
42 ARM_KERNEL_SHIM_REVISION = 1.5
44 DEFCONFIG=defconfig
46 ifeq (${ENDIAN},b)
47 ARCH = armeb
48 else
49 ARCH = arm
50 endif
52 KERNEL_SOURCE = http://www2.kernel.org/pub/linux/kernel/v${MAJORVER}/linux-${BASEVER}.tar.bz2
53 KERNEL_PATCH = http://www2.kernel.org/pub/linux/kernel/v${MAJORVER}/testing/patch-${REVISION}.bz2
54 KERNEL_SNAPSHOT = http://www2.kernel.org/pub/linux/kernel/v${MAJORVER}/snapshots/patch-${SNAPSHOT}.bz2
56 APEX_SOURCE = ftp://ftp.buici.com/pub/apex/apex-${APEX_REVISION}.tar.gz
58 ARM_KERNEL_SHIM_SOURCE = ftp://ftp.buici.com/pub/arm/arm-kernel-shim/arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}.tar.gz
60 # CROSS_COMPILE ?= ${ARCH}-linux-gnu-
61 CROSS_COMPILE ?= ${ARCH}-linux-
63 ifdef CROSS_COMPILE
64 CROSS_COMPILE_FLAGS = CROSS_COMPILE=${CROSS_COMPILE}
65 else
66 CROSS_COMPILE_FLAGS =
67 endif
69 all: kernel modules arm-kernel-shim apex
71 kernel: vmlinuz-nslu2-${SNAPSHOT}-${ARCH} vmlinuz-nas100d-${SNAPSHOT}-${ARCH} vmlinuz-ixp4xx-${SNAPSHOT}-${ARCH} vmlinuz-dsmg600-${SNAPSHOT}-${ARCH} vmlinuz-fsg3-${SNAPSHOT}-${ARCH}
72 modules: modules-${SNAPSHOT}-${ARCH}.tar.gz
73 patched: linux-${SNAPSHOT}-${ARCH}/.config
74 apex: apex-${APEX_CONFIG}-nslu2-${ARCH}-${APEX_REVISION}.bin \
75 apex-${APEX_CONFIG}-nslu2-16mb-${ARCH}-${APEX_REVISION}.bin \
76 apex-${APEX_CONFIG}-nas100d-${ARCH}-${APEX_REVISION}.bin \
77 apex-${APEX_CONFIG}-dsmg600-${ARCH}-${APEX_REVISION}.bin \
78 apex-${APEX_CONFIG}-fsg3-${ARCH}-${APEX_REVISION}.bin
79 arm-kernel-shim: \
80 arm-kernel-shim-nslu2${ENDIAN}e.bin \
81 arm-kernel-shim-nas100d${ENDIAN}e.bin \
82 arm-kernel-shim-dsmg600${ENDIAN}e.bin \
83 arm-kernel-shim-fsg3${ENDIAN}e.bin
85 apex-${APEX_CONFIG}-%-${ARCH}-${APEX_REVISION}.bin: apex-${APEX_REVISION}/src/mach-ixp42x/${APEX_CONFIG}-%-${ARCH}_config
86 ( cd apex-${APEX_REVISION} ; \
87 ${MAKE} ${CROSS_COMPILE_FLAGS} ARCH=arm clean ; \
88 ${MAKE} ${CROSS_COMPILE_FLAGS} ARCH=arm ${APEX_CONFIG}-$*-${ARCH}_config )
89 ( cd apex-${APEX_REVISION} ; \
90 ${MAKE} ${CROSS_COMPILE_FLAGS} ARCH=arm all )
91 ifeq (${ENDIAN},b)
92 devio '<<'apex-${APEX_REVISION}/apex.bin >$@ 'cp$$'
93 else
94 devio '<<'apex-${APEX_REVISION}/apex.bin >$@ 'xp $$,4'
95 endif
97 .PRECIOUS: apex-${APEX_REVISION}/src/mach-ixp42x/${APEX_CONFIG}-%-${ARCH}_config
99 apex-${APEX_REVISION}/src/mach-ixp42x/${APEX_CONFIG}-%-${ARCH}_config: \
100 downloads/apex-${APEX_REVISION}.tar.gz
101 [ -e apex-${APEX_REVISION} ] || \
102 ( tar zxf downloads/apex-${APEX_REVISION}.tar.gz ; \
103 cd apex-${APEX_REVISION} ; \
104 ln -s ../patches/apex patches ; \
105 [ ! -e patches/series ] || quilt push -a )
106 touch apex-${APEX_REVISION}/Makefile
108 downloads/apex-${APEX_REVISION}.tar.gz :
109 [ -e downloads/apex-${APEX_REVISION}.tar.gz ] || \
110 ( mkdir -p downloads ; cd downloads ; \
111 wget ${APEX_SOURCE} )
113 arm-kernel-shim-%${ENDIAN}e.bin: arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}/config-%${ENDIAN}e.h
114 ( cd arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION} ; \
115 mv config.h config.h.orig ; cp config-$*${ENDIAN}e.h config.h ; \
116 ${MAKE} ${CROSS_COMPILE_FLAGS} clean arm-kernel-shim.bin )
117 cp arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}/arm-kernel-shim.bin \
118 arm-kernel-shim-$*${ENDIAN}e.bin
120 arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}/config-%${ENDIAN}e.h: \
121 downloads/arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}.tar.gz
122 [ -e arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION} ] || \
123 ( tar zxf downloads/arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}.tar.gz ; \
124 cd arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION} ; \
125 ln -s ../patches/arm-kernel-shim patches ; \
126 [ ! -e patches/series ] || quilt push -a )
127 ifeq (${ENDIAN},b)
128 sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' patches/arm-kernel-shim/config-$*.h \
129 > arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}/config-$*${ENDIAN}e.h
130 else
131 sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' patches/arm-kernel-shim/config-$*.h \
132 > arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}/config-$*${ENDIAN}e.h
133 endif
135 downloads/arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}.tar.gz :
136 [ -e downloads/arm-kernel-shim-${ARM_KERNEL_SHIM_REVISION}.tar.gz ] || \
137 ( mkdir -p downloads ; cd downloads ; \
138 wget ${ARM_KERNEL_SHIM_SOURCE} )
140 modules-${SNAPSHOT}-${ARCH}.tar.gz: vmlinuz-${SNAPSHOT}-${ARCH}
141 ( cd linux-${SNAPSHOT}-${ARCH} ; \
142 INSTALL_MOD_PATH="../modules-${SNAPSHOT}-${ARCH}" ${MAKE} ${CROSS_COMPILE_FLAGS} ARCH=arm modules modules_install ) || true
143 rm -f modules-${SNAPSHOT}-${ARCH}/lib/modules/${SNAPSHOT}/build modules-${SNAPSHOT}-${ARCH}/lib/modules/${SNAPSHOT}/source
144 ifeq (${SNAPSHOT},${BASEVER})
145 tar -C modules-${SNAPSHOT}-${ARCH} -zcf modules-${SNAPSHOT}-${ARCH}.tar.gz .
146 else
147 tar -C modules-${SNAPSHOT}-${ARCH} -zcf modules-${SNAPSHOT}-${ARCH}.tar.gz .
148 endif
150 vmlinuz-ixp4xx-${SNAPSHOT}-${ARCH}: vmlinuz-${SNAPSHOT}-${ARCH}
151 ifeq (${ENDIAN},b)
152 devio '<<'$< >$@ \
153 'cp$$'
154 else
155 devio '<<'$< >$@ \
156 'wb 0xee110f10,4' \
157 'wb 0xe3c00080,4' \
158 'wb 0xee010f10,4' \
159 'xp $$,4'
160 endif
162 vmlinuz-%-${SNAPSHOT}-${ARCH}: vmlinuz-${SNAPSHOT}-${ARCH} arm-kernel-shim-%${ENDIAN}e.bin
163 ifeq (${ENDIAN},b)
164 cat arm-kernel-shim-$*${ENDIAN}e.bin vmlinuz-${SNAPSHOT}-${ARCH} > $@
165 else
166 ( cat arm-kernel-shim-$*${ENDIAN}e.bin vmlinuz-${SNAPSHOT}-${ARCH} > $$$$ ; \
167 devio '<<'$$$$ >$@ 'xp $$,4' ; \
168 rm -f $$$$ )
169 endif
171 vmlinuz-${SNAPSHOT}-${ARCH}: linux-${SNAPSHOT}-${ARCH}/.config
172 ( cd linux-${SNAPSHOT}-${ARCH} ; \
173 ${MAKE} ${CROSS_COMPILE_FLAGS} ARCH=arm bzImage )
174 cp linux-${SNAPSHOT}-${ARCH}/arch/arm/boot/zImage vmlinuz-${SNAPSHOT}-${ARCH}
176 menuconfig: linux-${SNAPSHOT}-${ARCH}/.config
177 ${MAKE} -C linux-${SNAPSHOT}-${ARCH} ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} menuconfig
179 ifneq (${SNAPSHOT},${COMMITID})
180 linux-${SNAPSHOT}-${ARCH}/.config: \
181 patches/${PATCHVER}/$(DEFCONFIG)
182 [ -e linux-${SNAPSHOT}-${ARCH} ] || \
183 ( git clone -q \
184 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
185 linux-${SNAPSHOT}-${ARCH} )
186 ( cd linux-${SNAPSHOT}-${ARCH} ; \
187 git checkout master ; \
188 git reset --hard ${COMMITID} ; \
189 git clean -d -x )
190 ( cd linux-${SNAPSHOT}-${ARCH} ; \
191 ln -s ../patches/${PATCHVER} patches ; \
192 quilt push -a )
193 else
194 ifeq (${SNAPSHOT},${BASEVER})
195 linux-${SNAPSHOT}-${ARCH}/.config: \
196 downloads/linux-${BASEVER}.tar.bz2 \
197 patches/${PATCHVER}/$(DEFCONFIG)
198 [ -e linux-${SNAPSHOT}-${ARCH} ] || \
199 ( tar xjf downloads/linux-${BASEVER}.tar.bz2 ; \
200 mv linux-${BASEVER} linux-${SNAPSHOT}-${ARCH} ; \
201 cd linux-${SNAPSHOT}-${ARCH} ; \
202 ln -s ../patches/${PATCHVER} patches ; \
203 quilt push -a )
204 else
205 ifeq (${REVISION},${SNAPSHOT})
206 linux-${SNAPSHOT}-${ARCH}/.config: \
207 downloads/linux-${BASEVER}.tar.bz2 \
208 downloads/patch-${REVISION}.bz2 \
209 patches/${PATCHVER}/$(DEFCONFIG)
210 [ -e linux-${SNAPSHOT}-${ARCH} ] || \
211 ( tar xjf downloads/linux-${BASEVER}.tar.bz2 ; \
212 mv linux-${BASEVER} linux-${SNAPSHOT}-${ARCH} ; \
213 bzcat downloads/patch-${REVISION}.bz2 | \
214 patch -d linux-${SNAPSHOT}-${ARCH} -p1 ; \
215 cd linux-${SNAPSHOT}-${ARCH} ; \
216 ln -s ../patches/${PATCHVER} patches ; \
217 quilt push -a )
218 else
219 ifeq (${REVISION},${BASEVER})
220 linux-${SNAPSHOT}-${ARCH}/.config: \
221 downloads/linux-${BASEVER}.tar.bz2 \
222 downloads/patch-${SNAPSHOT}.bz2 \
223 patches/${PATCHVER}/$(DEFCONFIG)
224 [ -e linux-${SNAPSHOT}-${ARCH} ] || \
225 ( tar xjf downloads/linux-${BASEVER}.tar.bz2 ; \
226 mv linux-${BASEVER} linux-${SNAPSHOT}-${ARCH} ; \
227 bzcat downloads/patch-${SNAPSHOT}.bz2 | \
228 patch -d linux-${SNAPSHOT}-${ARCH} -p1 ; \
229 cd linux-${SNAPSHOT}-${ARCH} ; \
230 ln -s ../patches/${PATCHVER} patches ; \
231 quilt push -a )
232 else
233 linux-${SNAPSHOT}-${ARCH}/.config: \
234 downloads/linux-${BASEVER}.tar.bz2 \
235 downloads/patch-${REVISION}.bz2 \
236 downloads/patch-${SNAPSHOT}.bz2 \
237 patches/${PATCHVER}/$(DEFCONFIG)
238 [ -e linux-${SNAPSHOT}-${ARCH} ] || \
239 ( tar xjf downloads/linux-${BASEVER}.tar.bz2 ; \
240 mv linux-${BASEVER} linux-${SNAPSHOT}-${ARCH} ; \
241 bzcat downloads/patch-${REVISION}.bz2 downloads/patch-${SNAPSHOT}.bz2 | \
242 patch -d linux-${SNAPSHOT}-${ARCH} -p1 ; \
243 cd linux-${SNAPSHOT}-${ARCH} ; \
244 ln -s ../patches/${PATCHVER} patches ; \
245 quilt push -a )
246 endif
247 endif
248 endif
249 endif
250 ifeq (${ENDIAN},b)
251 sed -e 's/.*CONFIG_CPU_BIG_ENDIAN.*/CONFIG_CPU_BIG_ENDIAN=y/' \
252 < patches/${PATCHVER}/$(DEFCONFIG) > linux-${SNAPSHOT}-${ARCH}/.config
253 else
254 sed -e 's/.*CONFIG_CPU_BIG_ENDIAN.*/\# CONFIG_CPU_BIG_ENDIAN is not set/' \
255 < patches/${PATCHVER}/$(DEFCONFIG) > linux-${SNAPSHOT}-${ARCH}/.config
256 endif
258 downloads/linux-${BASEVER}.tar.bz2 :
259 [ -e downloads/linux-${BASEVER}.tar.bz2 ] || \
260 ( mkdir -p downloads ; cd downloads ; \
261 wget ${KERNEL_SOURCE} )
263 downloads/patch-${REVISION}.bz2 :
264 [ -e downloads/patch-${REVISION}.bz2 ] || \
265 ( mkdir -p downloads ; cd downloads ; \
266 wget ${KERNEL_PATCH} )
268 ifneq (${REVISION},${SNAPSHOT})
269 downloads/patch-${SNAPSHOT}.bz2 :
270 [ -e downloads/patch-${SNAPSHOT}.bz2 ] || \
271 ( mkdir -p downloads ; cd downloads ; \
272 wget ${KERNEL_SNAPSHOT} )
273 endif
275 downloads:
276 mkdir -p downloads
278 clobber: clobber-apex clobber-arm-kernel-shim
279 rm -rf vmlinuz-* modules-*.tar.gz
280 rm -rf linux-* modules-*
281 rm -rf *~
283 clobber-apex:
284 rm -rf apex-*
286 clobber-arm-kernel-shim:
287 rm -rf arm-kernel-shim-*
289 .PHONY: all kernel menuconfig modules clobber apex clobber-apex clobber-arm-kernel-shim
291 # End of Makefile