1 # We don't want make removing intermediary stamps
4 # Prepare the out-of-tree build directory
5 ifeq ($(do_full_source),true)
6 build_cd = cd $(builddir)/build-$*; #
10 build_O = O=$(builddir)/build-$*
13 $(stampdir)/stamp-prepare-%: config-prepare-check-%
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)-$* $(raw_kernelversion)"/' > $(builddir)/build-$*/.config
23 find $(builddir)/build-$* -name "*.ko" | xargs rm -f
24 $(build_cd) $(kmake) $(build_O) -j1 silentoldconfig prepare scripts
27 # Used by developers as a shortcut to prepare a tree for compilation.
28 prepare-%: $(stampdir)/stamp-prepare-%
29 @echo Prepared $* for $(arch)
30 # Used by developers to allow efficient pre-building without fakeroot.
31 build-%: $(stampdir)/stamp-build-%
32 @echo Built $* for $(arch)
34 # Do the actual build, including image and modules
35 $(stampdir)/stamp-build-%: target_flavour = $*
36 $(stampdir)/stamp-build-%: $(stampdir)/stamp-prepare-%
37 @echo "Building $*..."
38 $(build_cd) $(kmake) $(build_O) $(conc_level) $(build_image) modules
41 # Install the finished build
42 install-%: pkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*
43 install-%: pkgdir_ex = $(CURDIR)/debian/$(extra_pkg_name)-$*
44 install-%: bindoc = $(pkgdir)/usr/share/doc/$(bin_pkg_name)-$*
45 install-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
46 install-%: basepkg = $(hdrs_pkg_name)
47 install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$*
48 install-%: target_flavour = $*
52 dh_clean -k -p$(bin_pkg_name)-$*
53 dh_clean -k -p$(hdrs_pkg_name)-$*
54 dh_clean -k -p$(dbg_pkg_name)-$*
57 # compress_file logic required because not all architectures
58 # generate a zImage automatically out of the box
59 ifeq ($(compress_file),)
60 install -m600 -D $(builddir)/build-$*/$(kernel_file) \
61 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
63 install -d $(pkgdir)/boot
64 gzip -c9v $(builddir)/build-$*/$(kernel_file) > \
65 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
66 chmod 600 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
69 install -m644 $(builddir)/build-$*/.config \
70 $(pkgdir)/boot/config-$(abi_release)-$*
71 install -m644 $(abidir)/$* \
72 $(pkgdir)/boot/abi-$(abi_release)-$*
73 install -m600 $(builddir)/build-$*/System.map \
74 $(pkgdir)/boot/System.map-$(abi_release)-$*
75 ifeq ($(no_dumpfile),)
76 makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \
77 -x $(builddir)/build-$*/vmlinux
78 chmod 0600 $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$*
81 $(build_cd) $(kmake) $(build_O) $(conc_level) modules_install \
82 INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(pkgdir)/ \
83 INSTALL_FW_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$*
86 # Remove all modules not in the inclusion list.
88 if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \
89 mkdir -p $(pkgdir_ex)/lib/modules/$(abi_release)-$*; \
90 mv $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \
91 $(pkgdir_ex)/lib/modules/$(abi_release)-$*/kernel; \
92 $(SHELL) $(DROOT)/scripts/module-inclusion --master \
93 $(pkgdir_ex)/lib/modules/$(abi_release)-$*/kernel \
94 $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \
95 $(DEBIAN)/control.d/$(target_flavour).inclusion-list 2>&1 | \
96 tee $(target_flavour).inclusion-list.log; \
97 /sbin/depmod -b $(pkgdir) -ea -F $(pkgdir)/boot/System.map-$(abi_release)-$* \
98 $(abi_release)-$* 2>&1 |tee $(target_flavour).depmod.log; \
101 ifeq ($(no_dumpfile),)
102 makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \
103 -x $(builddir)/build-$*/vmlinux
104 chmod 0600 $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$*
106 rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/build
107 rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/source
109 # Some initramfs-tools specific modules
110 install -d $(pkgdir)/lib/modules/$(abi_release)-$*/initrd
111 if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko ]; then\
112 ln -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko \
113 $(pkgdir)/lib/modules/$(abi_release)-$*/initrd/; \
116 # Now the image scripts
117 install -d $(pkgdir)/DEBIAN
118 for script in postinst postrm preinst prerm; do \
119 sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \
120 -e 's/=L/$(loader)/g' -e 's@=B@$(build_arch)@g' \
121 $(DROOT)/control-scripts/$$script > $(pkgdir)/DEBIAN/$$script; \
122 chmod 755 $(pkgdir)/DEBIAN/$$script; \
124 # Install the postinit/postrm scripts in the extras package.
125 if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \
126 install -d $(pkgdir_ex)/DEBIAN; \
127 for script in postinst postrm ; do \
128 sed -e 's/@@KVER@@/$(release)-$(abinum)-$(target_flavour)/g' \
129 debian/control-scripts/$$script.extra > $(pkgdir_ex)/DEBIAN/$$script; \
130 chmod 755 $(pkgdir_ex)/DEBIAN/$$script; \
134 # Install the full changelog.
135 ifeq ($(do_doc_package),true)
137 cat $(DEBIAN)/changelog $(DEBIAN)/changelog.historical | \
138 gzip -9 >$(bindoc)/changelog.Debian.old.gz
139 chmod 644 $(bindoc)/changelog.Debian.old.gz
142 ifneq ($(skipsub),true)
143 for sub in $($(*)_sub); do \
144 if ! (TO=$$sub FROM=$* ABI_RELEASE=$(abi_release) $(SHELL) \
145 $(DROOT)/scripts/sub-flavour); then exit 1; fi; \
146 /sbin/depmod -b debian/$(bin_pkg_name)-$$sub \
147 -ea -F debian/$(bin_pkg_name)-$$sub/boot/System.map-$(abi_release)-$* \
149 install -d debian/$(bin_pkg_name)-$$sub/DEBIAN; \
150 for script in postinst postrm preinst prerm; do \
151 sed -e 's/=V/$(abi_release)-$*/g' \
152 -e 's/=K/$(install_file)/g' \
153 -e 's/=L/$(loader)/g' \
154 -e 's@=B@$(build_arch)@g' \
155 $(DROOT)/control-scripts/$$script > \
156 debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\
157 chmod 755 debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\
162 ifneq ($(skipdbg),true)
163 # Debug image is simple
164 install -m644 -D $(builddir)/build-$*/vmlinux \
165 $(dbgpkgdir)/usr/lib/debug/boot/vmlinux-$(abi_release)-$*
166 $(build_cd) $(kmake) $(build_O) modules_install \
167 INSTALL_MOD_PATH=$(dbgpkgdir)/usr/lib/debug
168 rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/build
169 rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/source
170 rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/modules.*
171 rm -fr $(dbgpkgdir)/usr/lib/debug/lib/firmware
174 # The flavour specific headers image
175 # TODO: Would be nice if we didn't have to dupe the original builddir
176 install -d -m755 $(hdrdir)
177 cat $(builddir)/build-$*/.config | \
178 sed -e 's/.*CONFIG_DEBUG_INFO=.*/# CONFIG_DEBUG_INFO is not set/g' > \
180 chmod 644 $(hdrdir)/.config
181 $(kmake) O=$(hdrdir) -j1 silentoldconfig prepare scripts
182 # We'll symlink this stuff
183 rm -f $(hdrdir)/Makefile
184 rm -rf $(hdrdir)/include2
185 # powerpc seems to need some .o files for external module linking. Add them in.
186 ifeq ($(arch),powerpc)
187 mkdir -p $(hdrdir)/arch/powerpc/lib
188 cp $(builddir)/build-$*/arch/powerpc/lib/*.o $(hdrdir)/arch/powerpc/lib
190 # Script to symlink everything up
191 $(SHELL) $(DROOT)/scripts/link-headers "$(hdrdir)" "$(basepkg)" "$*"
192 # Setup the proper asm symlink
193 rm -f $(hdrdir)/include/asm
194 (cd $(hdrdir)/include; ln -s asm-generic asm)
196 install -d debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*
197 ln -s /usr/src/$(basepkg)-$* \
198 debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*/build
199 # And finally the symvers
200 install -m644 $(builddir)/build-$*/Module.symvers \
201 $(hdrdir)/Module.symvers
203 # Now the header scripts
204 install -d $(CURDIR)/debian/$(basepkg)-$*/DEBIAN
205 for script in postinst; do \
206 sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \
207 $(DROOT)/control-scripts/headers-$$script > \
208 $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \
209 chmod 755 $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \
212 # At the end of the package prep, call the tests
213 DPKG_ARCH="$(arch)" KERN_ARCH="$(build_arch)" FLAVOUR="$*" \
214 VERSION="$(abi_release)" REVISION="$(revision)" \
215 PREV_REVISION="$(prev_revision)" ABI_NUM="$(abinum)" \
216 PREV_ABI_NUM="$(prev_abinum)" BUILD_DIR="$(builddir)/build-$*" \
217 INSTALL_DIR="$(pkgdir)" SOURCE_DIR="$(CURDIR)" \
218 run-parts -v $(DROOT)/tests
221 # Remove files which are generated at installation by postinst,
222 # except for modules.order and modules.builtin
224 # NOTE: need to keep this list in sync with postrm
226 mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
227 mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.order \
228 $(pkgdir)/lib/modules/$(abi_release)-$*/_
229 if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin ] ; then \
230 mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin \
231 $(pkgdir)/lib/modules/$(abi_release)-$*/_; \
233 rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.*
234 mv $(pkgdir)/lib/modules/$(abi_release)-$*/_/* \
235 $(pkgdir)/lib/modules/$(abi_release)-$*
236 rmdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
238 headers_tmp := $(CURDIR)/debian/tmp-headers
239 headers_dir := $(CURDIR)/debian/linux-libc-dev
241 hmake := $(MAKE) -C $(CURDIR) O=$(headers_tmp) \
242 KERNELVERSION=$(abi_release) INSTALL_HDR_PATH=$(headers_tmp)/install \
243 SHELL="$(SHELL)" ARCH=$(header_arch)
245 install-arch-headers:
248 dh_clean -k -plinux-libc-dev
250 rm -rf $(headers_tmp)
251 install -d $(headers_tmp) $(headers_dir)/usr/include/
253 $(hmake) $(defconfig)
254 mv $(headers_tmp)/.config $(headers_tmp)/.config.old
255 sed -e 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \
256 -e 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/' \
257 $(headers_tmp)/.config.old > $(headers_tmp)/.config
258 $(hmake) silentoldconfig
259 $(hmake) $(conc_level) headers_install
261 ( cd $(headers_tmp)/install/include/ && \
262 find . -name '.' -o -name '.*' -prune -o -print | \
263 cpio -pvd --preserve-modification-time \
264 $(headers_dir)/usr/include/ )
265 mkdir $(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH)
266 mv $(headers_dir)/usr/include/asm $(headers_dir)/usr/include/$(DEB_HOST_MULTIARCH)/
268 rm -rf $(headers_tmp)
270 binary-arch-headers: install-arch-headers
273 ifeq ($(do_libc_dev_package),true)
274 ifneq ($(DEBIAN),debian.master)
275 echo "non-master branch building linux-libc-dev, aborting"
278 dh_installchangelogs -plinux-libc-dev
279 dh_installdocs -plinux-libc-dev
280 dh_compress -plinux-libc-dev
281 dh_fixperms -plinux-libc-dev
282 dh_installdeb -plinux-libc-dev
283 $(lockme) dh_gencontrol -plinux-libc-dev -- $(libc_dev_version)
284 dh_md5sums -plinux-libc-dev
285 dh_builddeb -plinux-libc-dev
288 binary-%: pkgimg = $(bin_pkg_name)-$*
289 binary-%: pkgimg_ex = $(extra_pkg_name)-$*
290 binary-%: pkghdr = $(hdrs_pkg_name)-$*
291 binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym
292 binary-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
293 binary-%: target_flavour = $*
298 dh_installchangelogs -p$(pkgimg)
299 dh_installdocs -p$(pkgimg)
300 dh_compress -p$(pkgimg)
301 dh_fixperms -p$(pkgimg) -X/boot/
302 dh_installdeb -p$(pkgimg)
303 dh_shlibdeps -p$(pkgimg)
304 $(lockme) dh_gencontrol -p$(pkgimg)
305 dh_md5sums -p$(pkgimg)
306 dh_builddeb -p$(pkgimg) -- -Zbzip2 -z9
308 if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \
309 dh_installchangelogs -p$(pkgimg_ex); \
310 dh_installdocs -p$(pkgimg_ex); \
311 dh_compress -p$(pkgimg_ex); \
312 dh_fixperms -p$(pkgimg_ex) -X/boot/; \
313 dh_installdeb -p$(pkgimg_ex); \
314 dh_shlibdeps -p$(pkgimg_ex); \
315 $(lockme) dh_gencontrol -p$(pkgimg_ex); \
316 dh_md5sums -p$(pkgimg_ex); \
317 dh_builddeb -p$(pkgimg_ex) -- -Zbzip2 -z9; \
320 dh_installchangelogs -p$(pkghdr)
321 dh_installdocs -p$(pkghdr)
322 dh_compress -p$(pkghdr)
323 dh_fixperms -p$(pkghdr)
324 dh_shlibdeps -p$(pkghdr)
325 dh_installdeb -p$(pkghdr)
326 $(lockme) dh_gencontrol -p$(pkghdr)
327 dh_md5sums -p$(pkghdr)
328 dh_builddeb -p$(pkghdr)
330 ifneq ($(skipsub),true)
331 @set -e; for sub in $($(*)_sub); do \
332 pkg=$(bin_pkg_name)-$$sub; \
333 dh_installchangelogs -p$$pkg; \
334 dh_installdocs -p$$pkg; \
335 dh_compress -p$$pkg; \
336 dh_fixperms -p$$pkg -X/boot/; \
337 dh_shlibdeps -p$$pkg; \
338 dh_installdeb -p$$pkg; \
339 $(lockme) dh_gencontrol -p$$pkg; \
340 dh_md5sums -p$$pkg; \
341 dh_builddeb -p$$pkg; \
345 ifneq ($(skipdbg),true)
346 dh_installchangelogs -p$(dbgpkg)
347 dh_installdocs -p$(dbgpkg)
348 dh_compress -p$(dbgpkg)
349 dh_fixperms -p$(dbgpkg)
350 dh_installdeb -p$(dbgpkg)
351 $(lockme) dh_gencontrol -p$(dbgpkg)
352 dh_md5sums -p$(dbgpkg)
353 dh_builddeb -p$(dbgpkg)
355 # Hokay...here's where we do a little twiddling...
356 # Renaming the debug package prevents it from getting into
357 # the primary archive, and therefore prevents this very large
358 # package from being mirrored. It is instead, through some
359 # archive admin hackery, copied to http://ddebs.ubuntu.com.
361 mv ../$(dbgpkg)_$(release)-$(revision)_$(arch).deb \
362 ../$(dbgpkg)_$(release)-$(revision)_$(arch).ddeb
365 $(lockme_cmd) 9 || exit 1; \
366 if grep -qs '^Build-Debug-Symbols: yes$$' /CurrentlyBuilding; then \
367 sed -i '/^$(dbgpkg)_/s/\.deb /.ddeb /' debian/files; \
369 grep -v '^$(dbgpkg)_.*$$' debian/files > debian/files.new; \
370 mv debian/files.new debian/files; \
373 # Now, the package wont get into the archive, but it will get put
374 # into the debug system.
376 ifneq ($(full_build),false)
377 # Clean out this flavours build directory.
378 rm -rf $(builddir)/build-$*
379 # Clean out the debugging package source directory.
384 # per-architecture packages
386 $(stampdir)/stamp-prepare-perarch:
387 @echo "Preparing perarch ..."
388 ifeq ($(do_tools),true)
389 rm -rf $(builddir)/tools
390 install -d $(builddir)/tools
391 for i in *; do ln -s $(CURDIR)/$$i $(builddir)/tools/; done
392 rm $(builddir)/tools/tools
393 rsync -a tools/ $(builddir)/tools/tools/
397 $(stampdir)/stamp-build-perarch: $(stampdir)/stamp-prepare-perarch
398 ifeq ($(do_tools),true)
399 cd $(builddir)/tools/tools/perf && \
400 make HAVE_CPLUS_DEMANGLE=1 CROSS_COMPILE=$(CROSS_COMPILE) $(conc_level)
401 if [ "$(arch)" = "amd64" ] || [ "$(arch)" = "i386" ]; then \
402 cd $(builddir)/tools/tools/power/x86/x86_energy_perf_policy && make CROSS_COMPILE=$(CROSS_COMPILE); \
403 cd $(builddir)/tools/tools/power/x86/turbostat && make CROSS_COMPILE=$(CROSS_COMPILE); \
408 install-perarch: toolspkgdir = $(CURDIR)/debian/$(tools_pkg_name)
409 install-perarch: $(stampdir)/stamp-build-perarch
411 ifeq ($(do_tools),true)
412 install -d $(toolspkgdir)/usr/bin
413 install -s -m755 $(builddir)/tools/tools/perf/perf \
414 $(toolspkgdir)/usr/bin/perf_$(abi_release)
415 if [ "$(arch)" = "amd64" ] || [ "$(arch)" = "i386" ]; then \
416 install -s -m755 $(builddir)/tools/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy \
417 $(toolspkgdir)/usr/bin/x86_energy_perf_policy_$(abi_release); \
418 install -s -m755 $(builddir)/tools/tools/power/x86/turbostat/turbostat \
419 $(toolspkgdir)/usr/bin/turbostat_$(abi_release); \
423 binary-perarch: toolspkg = $(tools_pkg_name)
424 binary-perarch: install-perarch
425 @# Empty for make to be happy
426 ifeq ($(do_tools),true)
427 dh_installchangelogs -p$(toolspkg)
428 dh_installdocs -p$(toolspkg)
429 dh_compress -p$(toolspkg)
430 dh_fixperms -p$(toolspkg)
431 dh_shlibdeps -p$(toolspkg)
432 dh_installdeb -p$(toolspkg)
433 $(lockme) dh_gencontrol -p$(toolspkg)
434 dh_md5sums -p$(toolspkg)
435 dh_builddeb -p$(toolspkg)
438 binary-debs: binary-perarch $(addprefix binary-,$(flavours))
440 build-arch-deps-$(do_flavour_image_package) += $(addprefix $(stampdir)/stamp-build-,$(flavours))
441 build-arch: $(build-arch-deps-true)
444 binary-arch-deps-$(do_flavour_image_package) += binary-udebs
446 binary-arch-deps-$(do_flavour_image_package) = binary-debs
448 binary-arch-deps-$(do_libc_dev_package) += binary-arch-headers
449 ifneq ($(do_common_headers_indep),true)
450 binary-arch-deps-$(do_flavour_header_package) += binary-headers
452 binary-arch: $(binary-arch-deps-true)