UBUNTU: [Config] Use build stamp directly
[linux-flexiantxendom0-natty.git] / debian / rules.d / 2-binary-arch.mk
1 # We don't want make removing intermediary stamps
2 .SECONDARY :
3
4 # Prepare the out-of-tree build directory
5 ifeq ($(do_full_source),true)
6 build_cd = cd $(builddir)/build-$*; #
7 build_O  =
8 else
9 build_cd =
10 build_O  = O=$(builddir)/build-$*
11 endif
12
13 $(stampdir)/stamp-prepare-%: config-prepare-check-%
14         @touch $@
15 $(stampdir)/stamp-prepare-tree-%: target_flavour = $*
16 $(stampdir)/stamp-prepare-tree-%: $(commonconfdir)/config.common.$(family) $(archconfdir)/config.common.$(arch) $(archconfdir)/config.flavour.%
17         @echo "Preparing $*..."
18         install -d $(builddir)/build-$*
19         touch $(builddir)/build-$*/ubuntu-build
20         [ "$(do_full_source)" != 'true' ] && true || \
21                 rsync -a --exclude debian --exclude debian.master --exclude $(DEBIAN) * $(builddir)/build-$*
22         cat $^ | sed -e 's/.*CONFIG_VERSION_SIGNATURE.*/CONFIG_VERSION_SIGNATURE="Ubuntu $(release)-$(revision)-$* $(release)$(extraversion)"/' > $(builddir)/build-$*/.config
23         find $(builddir)/build-$* -name "*.ko" | xargs rm -f
24         $(build_cd) $(kmake) $(build_O) -j1 silentoldconfig prepare scripts
25         touch $@
26
27 # Do the actual build, including image and modules
28 $(stampdir)/stamp-build-%: target_flavour = $*
29 $(stampdir)/stamp-build-%: $(stampdir)/stamp-prepare-%
30         @echo "Building $*..."
31         $(build_cd) $(kmake) $(build_O) $(conc_level) $(build_image) modules
32         @touch $@
33
34 # Install the finished build
35 install-%: pkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*
36 install-%: bindoc = $(pkgdir)/usr/share/doc/$(bin_pkg_name)-$*
37 install-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
38 install-%: basepkg = $(hdrs_pkg_name)
39 install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$*
40 install-%: target_flavour = $*
41 install-%: checks-%
42         dh_testdir
43         dh_testroot
44         dh_clean -k -p$(bin_pkg_name)-$*
45         dh_clean -k -p$(hdrs_pkg_name)-$*
46         dh_clean -k -p$(dbg_pkg_name)-$*
47
48         # The main image
49         # compress_file logic required because not all architectures
50         # generate a zImage automatically out of the box
51 ifeq ($(compress_file),)
52         install -m600 -D $(builddir)/build-$*/$(kernel_file) \
53                 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
54 else
55         install -d $(pkgdir)/boot
56         gzip -c9v $(builddir)/build-$*/$(kernel_file) > \
57                 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
58         chmod 600 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
59 endif
60
61         install -m644 $(builddir)/build-$*/.config \
62                 $(pkgdir)/boot/config-$(abi_release)-$*
63         install -m644 $(abidir)/$* \
64                 $(pkgdir)/boot/abi-$(abi_release)-$*
65         install -m600 $(builddir)/build-$*/System.map \
66                 $(pkgdir)/boot/System.map-$(abi_release)-$*
67 ifeq ($(no_dumpfile),)
68         makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \
69                 -x $(builddir)/build-$*/vmlinux
70         chmod 0600 $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$*
71 endif
72
73         $(build_cd) $(kmake) $(build_O) $(conc_level) modules_install \
74                 INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(pkgdir)/ \
75                 INSTALL_FW_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$*
76
77         #
78         # Remove all modules not in the inclusion list.
79         #
80         if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \
81                 $(SHELL) $(DROOT)/scripts/module-inclusion $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \
82                         $(DEBIAN)/control.d/$(target_flavour).inclusion-list 2>&1 | \
83                                 tee $(target_flavour).inclusion-list.log; \
84                 /sbin/depmod -b $(pkgdir) -ea -F $(pkgdir)/boot/System.map-$(abi_release)-$* \
85                         $(abi_release)-$* 2>&1 |tee $(target_flavour).depmod.log; \
86         fi
87
88 ifeq ($(no_dumpfile),)
89         makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \
90                 -x $(builddir)/build-$*/vmlinux
91         chmod 0600 $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$*
92 endif
93         rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/build
94         rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/source
95
96         # Some initramfs-tools specific modules
97         install -d $(pkgdir)/lib/modules/$(abi_release)-$*/initrd
98         if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko ]; then\
99           ln -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko \
100                 $(pkgdir)/lib/modules/$(abi_release)-$*/initrd/; \
101         fi
102
103         # Now the image scripts
104         install -d $(pkgdir)/DEBIAN
105         for script in postinst postrm preinst prerm; do                         \
106           sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g'         \
107               -e 's/=L/$(loader)/g'         -e 's@=B@$(build_arch)@g'           \
108                $(DROOT)/control-scripts/$$script > $(pkgdir)/DEBIAN/$$script;   \
109           chmod 755 $(pkgdir)/DEBIAN/$$script;                                  \
110         done
111
112         # Install the full changelog.
113 ifeq ($(do_doc_package),true)
114         install -d $(bindoc)
115         cat $(DEBIAN)/changelog $(DEBIAN)/changelog.historical | \
116                 gzip -9 >$(bindoc)/changelog.Debian.old.gz
117         chmod 644 $(bindoc)/changelog.Debian.old.gz
118 endif
119
120 ifneq ($(skipsub),true)
121         for sub in $($(*)_sub); do                                      \
122                 if ! (TO=$$sub FROM=$* ABI_RELEASE=$(abi_release) $(SHELL)              \
123                         $(DROOT)/scripts/sub-flavour); then exit 1; fi;         \
124                 /sbin/depmod -b debian/$(bin_pkg_name)-$$sub            \
125                         -ea -F debian/$(bin_pkg_name)-$$sub/boot/System.map-$(abi_release)-$* \
126                         $(abi_release)-$*;                                      \
127                 install -d debian/$(bin_pkg_name)-$$sub/DEBIAN; \
128                 for script in postinst postrm preinst prerm; do                 \
129                         sed -e 's/=V/$(abi_release)-$*/g'                       \
130                             -e 's/=K/$(install_file)/g'                         \
131                             -e 's/=L/$(loader)/g'                               \
132                             -e 's@=B@$(build_arch)@g'                           \
133                                 $(DROOT)/control-scripts/$$script >             \
134                                 debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\
135                         chmod 755  debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\
136                 done;                                                           \
137         done
138 endif
139
140 ifneq ($(skipdbg),true)
141         # Debug image is simple
142         install -m644 -D $(builddir)/build-$*/vmlinux \
143                 $(dbgpkgdir)/usr/lib/debug/boot/vmlinux-$(abi_release)-$*
144         $(build_cd) $(kmake) $(build_O) modules_install \
145                 INSTALL_MOD_PATH=$(dbgpkgdir)/usr/lib/debug
146         rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/build
147         rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/source
148         rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/modules.*
149         rm -fr $(dbgpkgdir)/usr/lib/debug/lib/firmware
150 endif
151
152         # The flavour specific headers image
153         # TODO: Would be nice if we didn't have to dupe the original builddir
154         install -d -m755 $(hdrdir)
155         cat $(builddir)/build-$*/.config | \
156                 sed -e 's/.*CONFIG_DEBUG_INFO=.*/# CONFIG_DEBUG_INFO is not set/g' > \
157                 $(hdrdir)/.config
158         chmod 644 $(hdrdir)/.config
159         $(kmake) O=$(hdrdir) -j1 silentoldconfig prepare scripts
160         # We'll symlink this stuff
161         rm -f $(hdrdir)/Makefile
162         rm -rf $(hdrdir)/include2
163         # powerpc seems to need some .o files for external module linking. Add them in.
164 ifeq ($(arch),powerpc)
165         mkdir -p $(hdrdir)/arch/powerpc/lib
166         cp $(builddir)/build-$*/arch/powerpc/lib/*.o $(hdrdir)/arch/powerpc/lib
167 endif
168         # Script to symlink everything up
169         $(SHELL) $(DROOT)/scripts/link-headers "$(hdrdir)" "$(basepkg)" "$*"
170         # Setup the proper asm symlink
171         rm -f $(hdrdir)/include/asm
172         ln -s asm-$(asm_link) $(hdrdir)/include/asm
173         # The build symlink
174         install -d debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*
175         ln -s /usr/src/$(basepkg)-$* \
176                 debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*/build
177         # And finally the symvers
178         install -m644 $(builddir)/build-$*/Module.symvers \
179                 $(hdrdir)/Module.symvers
180
181         # Now the header scripts
182         install -d $(CURDIR)/debian/$(basepkg)-$*/DEBIAN
183         for script in postinst; do                                              \
184           sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \
185                 $(DROOT)/control-scripts/headers-$$script >                     \
186                         $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script;         \
187           chmod 755 $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script;             \
188         done
189
190         # At the end of the package prep, call the tests
191         DPKG_ARCH="$(arch)" KERN_ARCH="$(build_arch)" FLAVOUR="$*"      \
192          VERSION="$(abi_release)" REVISION="$(revision)"                \
193          PREV_REVISION="$(prev_revision)" ABI_NUM="$(abinum)"           \
194          PREV_ABI_NUM="$(prev_abinum)" BUILD_DIR="$(builddir)/build-$*" \
195          INSTALL_DIR="$(pkgdir)" SOURCE_DIR="$(CURDIR)"                 \
196          run-parts -v $(DROOT)/tests
197
198         #
199         # Remove files which are generated at installation by postinst,
200         # except for modules.order and modules.builtin
201         # 
202         # NOTE: need to keep this list in sync with postrm
203         #
204         mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
205         mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.order \
206                 $(pkgdir)/lib/modules/$(abi_release)-$*/_
207         if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin ] ; then \
208             mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin \
209                 $(pkgdir)/lib/modules/$(abi_release)-$*/_; \
210         fi
211         rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.*
212         mv $(pkgdir)/lib/modules/$(abi_release)-$*/_/* \
213                 $(pkgdir)/lib/modules/$(abi_release)-$*
214         rmdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
215
216 headers_tmp := $(CURDIR)/debian/tmp-headers
217 headers_dir := $(CURDIR)/debian/linux-libc-dev
218
219 hmake := $(MAKE) -C $(CURDIR) O=$(headers_tmp) SUBLEVEL=$(SUBLEVEL) \
220         EXTRAVERSION=-$(abinum) INSTALL_HDR_PATH=$(headers_tmp)/install \
221         SHELL="$(SHELL)" ARCH=$(header_arch)
222
223 install-arch-headers:
224         dh_testdir
225         dh_testroot
226         dh_clean -k -plinux-libc-dev
227
228         rm -rf $(headers_tmp)
229         install -d $(headers_tmp) $(headers_dir)/usr/include/
230
231         $(hmake) $(defconfig)
232         mv $(headers_tmp)/.config $(headers_tmp)/.config.old
233         sed -e 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \
234           -e 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/' \
235           $(headers_tmp)/.config.old > $(headers_tmp)/.config
236         $(hmake) silentoldconfig
237         $(hmake) $(conc_level) headers_install
238
239         ( cd $(headers_tmp)/install/include/ && \
240                 find . -name '.' -o -name '.*' -prune -o -print | \
241                 cpio -pvd --preserve-modification-time \
242                         $(headers_dir)/usr/include/ )
243         mkdir $(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH)
244         mv $(headers_dir)/usr/include/asm $(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH)/
245
246         rm -rf $(headers_tmp)
247
248 binary-arch-headers: install-arch-headers
249         dh_testdir
250         dh_testroot
251 ifeq ($(do_libc_dev_package),true)
252 ifneq ($(DEBIAN),debian.master)
253         echo "non-master branch building linux-libc-dev, aborting"
254         exit 1
255 endif
256         dh_installchangelogs -plinux-libc-dev
257         dh_installdocs -plinux-libc-dev
258         dh_compress -plinux-libc-dev
259         dh_fixperms -plinux-libc-dev
260         dh_installdeb -plinux-libc-dev
261         dh_gencontrol -plinux-libc-dev -- $(libc_dev_version)
262         dh_md5sums -plinux-libc-dev
263         dh_builddeb -plinux-libc-dev
264 endif
265
266 binary-%: pkgimg = $(bin_pkg_name)-$*
267 binary-%: pkghdr = $(hdrs_pkg_name)-$*
268 binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym
269 binary-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
270 binary-%: install-%
271         dh_testdir
272         dh_testroot
273
274         dh_installchangelogs -p$(pkgimg)
275         dh_installdocs -p$(pkgimg)
276         dh_compress -p$(pkgimg)
277         dh_fixperms -p$(pkgimg) -X/boot/
278         dh_installdeb -p$(pkgimg)
279         dh_shlibdeps -p$(pkgimg)
280         dh_gencontrol -p$(pkgimg)
281         dh_md5sums -p$(pkgimg)
282         dh_builddeb -p$(pkgimg) -- -Zbzip2 -z9
283
284         dh_installchangelogs -p$(pkghdr)
285         dh_installdocs -p$(pkghdr)
286         dh_compress -p$(pkghdr)
287         dh_fixperms -p$(pkghdr)
288         dh_shlibdeps -p$(pkghdr)
289         dh_installdeb -p$(pkghdr)
290         dh_gencontrol -p$(pkghdr)
291         dh_md5sums -p$(pkghdr)
292         dh_builddeb -p$(pkghdr)
293
294 ifneq ($(skipsub),true)
295         @set -e; for sub in $($(*)_sub); do             \
296                 pkg=$(bin_pkg_name)-$$sub;      \
297                 dh_installchangelogs -p$$pkg;           \
298                 dh_installdocs -p$$pkg;                 \
299                 dh_compress -p$$pkg;                    \
300                 dh_fixperms -p$$pkg -X/boot/;           \
301                 dh_shlibdeps -p$$pkg;                   \
302                 dh_installdeb -p$$pkg;                  \
303                 dh_gencontrol -p$$pkg;                  \
304                 dh_md5sums -p$$pkg;                     \
305                 dh_builddeb -p$$pkg;                    \
306         done
307 endif
308
309 ifneq ($(skipdbg),true)
310         dh_installchangelogs -p$(dbgpkg)
311         dh_installdocs -p$(dbgpkg)
312         dh_compress -p$(dbgpkg)
313         dh_fixperms -p$(dbgpkg)
314         dh_installdeb -p$(dbgpkg)
315         dh_gencontrol -p$(dbgpkg)
316         dh_md5sums -p$(dbgpkg)
317         dh_builddeb -p$(dbgpkg)
318
319         # Hokay...here's where we do a little twiddling...
320         # Renaming the debug package prevents it from getting into
321         # the primary archive, and therefore prevents this very large
322         # package from being mirrored. It is instead, through some
323         # archive admin hackery, copied to http://ddebs.ubuntu.com.
324         #
325         mv ../$(dbgpkg)_$(release)-$(revision)_$(arch).deb \
326                 ../$(dbgpkg)_$(release)-$(revision)_$(arch).ddeb
327         set -e; \
328         if grep -qs '^Build-Debug-Symbols: yes$$' /CurrentlyBuilding; then \
329                 sed -i '/^$(dbgpkg)_/s/\.deb /.ddeb /' debian/files; \
330         else \
331                 grep -v '^$(dbgpkg)_.*$$' debian/files > debian/files.new; \
332                 mv debian/files.new debian/files; \
333         fi
334         # Now, the package wont get into the archive, but it will get put
335         # into the debug system.
336 endif
337 ifneq ($(full_build),false)
338         # Clean out this flavours build directory.
339         rm -rf $(builddir)/build-$*
340         # Clean out the debugging package source directory.
341         rm -rf $(dbgpkgdir)
342 endif
343
344 #
345 # per-architecture packages
346 #
347 $(stampdir)/stamp-prepare-perarch:
348         @echo "Preparing perarch ..."
349 ifeq ($(do_tools),true)
350         rm -rf $(builddir)/tools-$*
351         install -d $(builddir)/tools-$*
352         for i in *; do ln -s $(CURDIR)/$$i $(builddir)/tools-$*/; done
353         rm $(builddir)/tools-$*/tools
354         rsync -a tools/ $(builddir)/tools-$*/tools/
355 endif
356         touch $@
357
358 $(stampdir)/stamp-build-perarch: $(stampdir)/stamp-prepare-perarch
359 ifeq ($(do_tools),true)
360         cd $(builddir)/tools-$*/tools/perf && \
361                 make HAVE_CPLUS_DEMANGLE=1 $(CROSS_COMPILE) $(conc_level)
362 endif
363         @touch $@
364
365 install-perarch: toolspkgdir = $(CURDIR)/debian/$(tools_pkg_name)
366 install-perarch: $(stampdir)/stamp-build-perarch
367         # Add the tools.
368 ifeq ($(do_tools),true)
369         install -d $(toolspkgdir)/usr/bin
370         install -s -m755 $(builddir)/tools-$*/tools/perf/perf \
371                 $(toolspkgdir)/usr/bin/perf_$(abi_release)
372 endif
373
374 binary-perarch: toolspkg = $(tools_pkg_name)
375 binary-perarch: install-perarch
376         @# Empty for make to be happy
377 ifeq ($(do_tools),true)
378         dh_installchangelogs -p$(toolspkg)
379         dh_installdocs -p$(toolspkg)
380         dh_compress -p$(toolspkg)
381         dh_fixperms -p$(toolspkg)
382         dh_shlibdeps -p$(toolspkg)
383         dh_installdeb -p$(toolspkg)
384         dh_gencontrol -p$(toolspkg)
385         dh_md5sums -p$(toolspkg)
386         dh_builddeb -p$(toolspkg)
387 endif
388
389 binary-debs: binary-perarch $(addprefix binary-,$(flavours))
390
391 build-arch-deps-$(do_flavour_image_package) += $(addprefix $(stampdir)/stamp-build-,$(flavours))
392 build-arch: $(build-arch-deps-true)
393
394 binary-arch-deps-$(do_flavour_image_package) = binary-debs
395 ifeq ($(AUTOBUILD),)
396 binary-arch-deps-$(do_flavour_image_package) += binary-udebs
397 endif
398 binary-arch-deps-$(do_libc_dev_package) += binary-arch-headers
399 ifneq ($(do_common_headers_indep),true)
400 binary-arch-deps-$(do_flavour_header_package) += binary-headers
401 endif
402 binary-arch: $(binary-arch-deps-true)