blob: ace4d85eb8a44ab2acb9ca102099f263dab2991d [file] [log] [blame] [edit]
# We don't want make removing intermediary stamps
.SECONDARY :
# Prepare the out-of-tree build directory
ifeq ($(do_full_source),true)
build_cd = cd $(builddir)/build-$*; #
build_O =
else
build_cd =
build_O = O=$(builddir)/build-$*
endif
prepare-%: $(stampdir)/stamp-prepare-%
@# Empty for make to be happy
$(stampdir)/stamp-prepare-%: $(stampdir)/stamp-prepare-tree-% prepare-checks-%
@touch $@
$(stampdir)/stamp-prepare-tree-%: target_flavour = $*
$(stampdir)/stamp-prepare-tree-%: $(commonconfdir)/config.common.$(family) $(archconfdir)/config.common.$(arch) $(archconfdir)/config.flavour.%
@echo "Preparing $*..."
install -d $(builddir)/build-$*
touch $(builddir)/build-$*/ubuntu-build
[ "$(do_full_source)" != 'true' ] && true || \
rsync -a --exclude debian --exclude debian.master --exclude $(DEBIAN) * $(builddir)/build-$*
cat $^ | sed -e 's/.*CONFIG_VERSION_SIGNATURE.*/CONFIG_VERSION_SIGNATURE="Ubuntu $(release)-$(revision)-$* $(release)$(extraversion)"/' > $(builddir)/build-$*/.config
find $(builddir)/build-$* -name "*.ko" | xargs rm -f
$(build_cd) $(kmake) $(build_O) silentoldconfig prepare scripts
touch $@
# Do the actual build, including image and modules
build-%: $(stampdir)/stamp-build-%
@# Empty for make to be happy
$(stampdir)/stamp-build-%: target_flavour = $*
$(stampdir)/stamp-build-%: prepare-%
@echo "Building $*..."
$(build_cd) $(kmake) $(build_O) $(conc_level) $(build_image)
$(build_cd) $(kmake) $(build_O) $(conc_level) modules
@touch $@
# Install the finished build
install-%: pkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*
install-%: bindoc = $(pkgdir)/usr/share/doc/$(bin_pkg_name)-$*
install-%: dbgpkgdir = $(CURDIR)/debian/$(bin_pkg_name)-$*-dbgsym
install-%: basepkg = $(hdrs_pkg_name)
install-%: hdrdir = $(CURDIR)/debian/$(basepkg)-$*/usr/src/$(basepkg)-$*
install-%: target_flavour = $*
install-%: $(stampdir)/stamp-build-% checks-%
dh_testdir
dh_testroot
dh_clean -k -p$(bin_pkg_name)-$*
dh_clean -k -p$(hdrs_pkg_name)-$*
dh_clean -k -p$(dbg_pkg_name)-$*
# The main image
# compress_file logic required because not all architectures
# generate a zImage automatically out of the box
ifeq ($(compress_file),)
install -m644 -D $(builddir)/build-$*/$(kernel_file) \
$(pkgdir)/boot/$(install_file)-$(abi_release)-$*
else
install -d $(pkgdir)/boot
gzip -c9v $(builddir)/build-$*/$(kernel_file) > \
$(pkgdir)/boot/$(install_file)-$(abi_release)-$*
chmod 644 $(pkgdir)/boot/$(install_file)-$(abi_release)-$*
endif
install -m644 $(builddir)/build-$*/.config \
$(pkgdir)/boot/config-$(abi_release)-$*
install -m644 $(abidir)/$* \
$(pkgdir)/boot/abi-$(abi_release)-$*
install -m644 $(builddir)/build-$*/System.map \
$(pkgdir)/boot/System.map-$(abi_release)-$*
ifeq ($(no_dumpfile),)
makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \
-x $(builddir)/build-$*/vmlinux
endif
$(build_cd) $(kmake) $(build_O) modules_install \
INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(pkgdir)/ \
INSTALL_FW_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$*
#
# Remove all modules not in the inclusion list.
#
if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \
$(DROOT)/scripts/module-inclusion $(pkgdir)/lib/modules/$(abi_release)-$*/kernel \
$(DEBIAN)/control.d/$(target_flavour).inclusion-list 2>&1 | \
tee $(target_flavour).inclusion-list.log; \
/sbin/depmod -b $(pkgdir) -ea -F $(pkgdir)/boot/System.map-$(abi_release)-$* \
$(abi_release)-$* 2>&1 |tee $(target_flavour).depmod.log; \
fi
ifeq ($(no_dumpfile),)
makedumpfile -g $(pkgdir)/boot/vmcoreinfo-$(abi_release)-$* \
-x $(builddir)/build-$*/vmlinux
endif
rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/build
rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/source
# Some initramfs-tools specific modules
install -d $(pkgdir)/lib/modules/$(abi_release)-$*/initrd
if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko ]; then\
ln -f $(pkgdir)/lib/modules/$(abi_release)-$*/kernel/drivers/video/vesafb.ko \
$(pkgdir)/lib/modules/$(abi_release)-$*/initrd/; \
fi
# Now the image scripts
install -d $(pkgdir)/DEBIAN
for script in postinst postrm preinst prerm; do \
sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \
-e 's/=L/$(loader)/g' -e 's@=B@$(build_arch)@g' \
$(DROOT)/control-scripts/$$script > $(pkgdir)/DEBIAN/$$script; \
chmod 755 $(pkgdir)/DEBIAN/$$script; \
done
# Install the full changelog.
ifeq ($(do_doc_package),true)
install -d $(bindoc)
cat $(DEBIAN)/changelog $(DEBIAN)/changelog.historical | \
gzip -9 >$(bindoc)/changelog.Debian.old.gz
chmod 644 $(bindoc)/changelog.Debian.old.gz
endif
ifneq ($(skipsub),true)
for sub in $($(*)_sub); do \
if ! (TO=$$sub FROM=$* ABI_RELEASE=$(abi_release) $(SHELL) \
$(DROOT)/scripts/sub-flavour); then exit 1; fi; \
/sbin/depmod -b debian/$(bin_pkg_name)-$$sub \
-ea -F debian/$(bin_pkg_name)-$$sub/boot/System.map-$(abi_release)-$* \
$(abi_release)-$*; \
install -d debian/$(bin_pkg_name)-$$sub/DEBIAN; \
for script in postinst postrm preinst prerm; do \
sed -e 's/=V/$(abi_release)-$*/g' \
-e 's/=K/$(install_file)/g' \
-e 's/=L/$(loader)/g' \
-e 's@=B@$(build_arch)@g' \
$(DROOT)/control-scripts/$$script > \
debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\
chmod 755 debian/$(bin_pkg_name)-$$sub/DEBIAN/$$script;\
done; \
done
endif
ifneq ($(skipdbg),true)
# Debug image is simple
install -m644 -D $(builddir)/build-$*/vmlinux \
$(dbgpkgdir)/usr/lib/debug/boot/vmlinux-$(abi_release)-$*
$(build_cd) $(kmake) $(build_O) modules_install \
INSTALL_MOD_PATH=$(dbgpkgdir)/usr/lib/debug
rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/build
rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/source
rm -f $(dbgpkgdir)/usr/lib/debug/lib/modules/$(abi_release)-$*/modules.*
rm -fr $(dbgpkgdir)/usr/lib/debug/lib/firmware
endif
# The flavour specific headers image
# TODO: Would be nice if we didn't have to dupe the original builddir
install -d -m755 $(hdrdir)
cat $(builddir)/build-$*/.config | \
sed -e 's/.*CONFIG_DEBUG_INFO=.*/# CONFIG_DEBUG_INFO is not set/g' > \
$(hdrdir)/.config
chmod 644 $(hdrdir)/.config
$(kmake) O=$(hdrdir) silentoldconfig prepare scripts
# We'll symlink this stuff
rm -f $(hdrdir)/Makefile
rm -rf $(hdrdir)/include2
# powerpc seems to need some .o files for external module linking. Add them in.
ifeq ($(arch),powerpc)
mkdir -p $(hdrdir)/arch/powerpc/lib
cp $(builddir)/build-$*/arch/powerpc/lib/*.o $(hdrdir)/arch/powerpc/lib
endif
# Script to symlink everything up
$(SHELL) $(DROOT)/scripts/link-headers "$(hdrdir)" "$(basepkg)" "$*"
# Setup the proper asm symlink
rm -f $(hdrdir)/include/asm
ln -s asm-$(asm_link) $(hdrdir)/include/asm
# The build symlink
install -d debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*
ln -s /usr/src/$(basepkg)-$* \
debian/$(basepkg)-$*/lib/modules/$(abi_release)-$*/build
# And finally the symvers
install -m644 $(builddir)/build-$*/Module.symvers \
$(hdrdir)/Module.symvers
# Now the header scripts
install -d $(CURDIR)/debian/$(basepkg)-$*/DEBIAN
for script in postinst; do \
sed -e 's/=V/$(abi_release)-$*/g' -e 's/=K/$(install_file)/g' \
$(DROOT)/control-scripts/headers-$$script > \
$(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \
chmod 755 $(CURDIR)/debian/$(basepkg)-$*/DEBIAN/$$script; \
done
# At the end of the package prep, call the tests
DPKG_ARCH="$(arch)" KERN_ARCH="$(build_arch)" FLAVOUR="$*" \
VERSION="$(abi_release)" REVISION="$(revision)" \
PREV_REVISION="$(prev_revision)" ABI_NUM="$(abinum)" \
PREV_ABI_NUM="$(prev_abinum)" BUILD_DIR="$(builddir)/build-$*" \
INSTALL_DIR="$(pkgdir)" SOURCE_DIR="$(CURDIR)" \
run-parts -v $(DROOT)/tests
#
# Remove files which are generated at installation by postinst,
# except for modules.order and modules.builtin
#
mkdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.order \
$(pkgdir)/lib/modules/$(abi_release)-$*/_
if [ -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin ] ; then \
mv $(pkgdir)/lib/modules/$(abi_release)-$*/modules.builtin \
$(pkgdir)/lib/modules/$(abi_release)-$*/_; \
fi
rm -f $(pkgdir)/lib/modules/$(abi_release)-$*/modules.*
mv $(pkgdir)/lib/modules/$(abi_release)-$*/_/* \
$(pkgdir)/lib/modules/$(abi_release)-$*
rmdir $(pkgdir)/lib/modules/$(abi_release)-$*/_
headers_tmp := $(CURDIR)/debian/tmp-headers
headers_dir := $(CURDIR)/debian/linux-libc-dev
hmake := $(MAKE) -C $(CURDIR) O=$(headers_tmp) SUBLEVEL=$(SUBLEVEL) \
EXTRAVERSION=-$(abinum) INSTALL_HDR_PATH=$(headers_tmp)/install \
SHELL="$(SHELL)" ARCH=$(header_arch)
install-arch-headers:
dh_testdir
dh_testroot
dh_clean -k -plinux-libc-dev
rm -rf $(headers_tmp)
install -d $(headers_tmp) $(headers_dir)/usr/include/
$(hmake) $(defconfig)
mv $(headers_tmp)/.config $(headers_tmp)/.config.old
sed -e 's/^# \(CONFIG_MODVERSIONS\) is not set$$/\1=y/' \
-e 's/.*CONFIG_LOCALVERSION_AUTO.*/# CONFIG_LOCALVERSION_AUTO is not set/' \
$(headers_tmp)/.config.old > $(headers_tmp)/.config
$(hmake) silentoldconfig
$(hmake) headers_install
( cd $(headers_tmp)/install/include/ && \
find . -name '.' -o -name '.*' -prune -o -print | \
cpio -pvd --preserve-modification-time \
$(headers_dir)/usr/include/ )
rm -rf $(headers_tmp)
binary-arch-headers: install-arch-headers
dh_testdir
dh_testroot
ifeq ($(do_libc_dev_package),true)
dh_installchangelogs -plinux-libc-dev
dh_installdocs -plinux-libc-dev
dh_compress -plinux-libc-dev
dh_fixperms -plinux-libc-dev
dh_installdeb -plinux-libc-dev
dh_gencontrol -plinux-libc-dev
dh_md5sums -plinux-libc-dev
dh_builddeb -plinux-libc-dev
endif
binary-%: pkgimg = $(bin_pkg_name)-$*
binary-%: pkghdr = $(hdrs_pkg_name)-$*
binary-%: dbgpkg = $(bin_pkg_name)-$*-dbgsym
binary-%: install-%
dh_testdir
dh_testroot
dh_installchangelogs -p$(pkgimg)
dh_installdocs -p$(pkgimg)
dh_compress -p$(pkgimg)
dh_fixperms -p$(pkgimg)
dh_installdeb -p$(pkgimg)
dh_shlibdeps -p$(pkgimg)
dh_gencontrol -p$(pkgimg)
dh_md5sums -p$(pkgimg)
dh_builddeb -p$(pkgimg) -- -Zbzip2 -z9
dh_installchangelogs -p$(pkghdr)
dh_installdocs -p$(pkghdr)
dh_compress -p$(pkghdr)
dh_fixperms -p$(pkghdr)
dh_shlibdeps -p$(pkghdr)
dh_installdeb -p$(pkghdr)
dh_gencontrol -p$(pkghdr)
dh_md5sums -p$(pkghdr)
dh_builddeb -p$(pkghdr)
ifneq ($(skipsub),true)
@set -e; for sub in $($(*)_sub); do \
pkg=$(bin_pkg_name)-$$sub; \
dh_installchangelogs -p$$pkg; \
dh_installdocs -p$$pkg; \
dh_compress -p$$pkg; \
dh_fixperms -p$$pkg; \
dh_shlibdeps -p$$pkg; \
dh_installdeb -p$$pkg; \
dh_gencontrol -p$$pkg; \
dh_md5sums -p$$pkg; \
dh_builddeb -p$$pkg; \
done
endif
ifneq ($(skipdbg),true)
dh_installchangelogs -p$(dbgpkg)
dh_installdocs -p$(dbgpkg)
dh_compress -p$(dbgpkg)
dh_fixperms -p$(dbgpkg)
dh_installdeb -p$(dbgpkg)
dh_gencontrol -p$(dbgpkg)
dh_md5sums -p$(dbgpkg)
dh_builddeb -p$(dbgpkg)
# Hokay...here's where we do a little twiddling...
# Renaming the debug package prevents it from getting into
# the primary archive, and therefore prevents this very large
# package from being mirrored. It is instead, through some
# archive admin hackery, copied to http://ddebs.ubuntu.com.
#
mv ../$(dbgpkg)_$(release)-$(revision)_$(arch).deb \
../$(dbgpkg)_$(release)-$(revision)_$(arch).ddeb
set -e; \
if grep -qs '^Build-Debug-Symbols: yes$$' /CurrentlyBuilding; then \
sed -i '/^$(dbgpkg)_/s/\.deb /.ddeb /' debian/files; \
else \
grep -v '^$(dbgpkg)_.*$$' debian/files > debian/files.new; \
mv debian/files.new debian/files; \
fi
# Now, the package wont get into the archive, but it will get put
# into the debug system.
endif
$(stampdir)/stamp-flavours:
@echo $(flavours) > $@
#
# per-architecture packages
#
$(stampdir)/stamp-prepare-perarch:
@echo "Preparing perarch ..."
ifeq ($(do_tools),true)
install -d $(builddir)/tools-$*
for i in *; do ln -s $(CURDIR)/$$i $(builddir)/tools-$*/; done
rm $(builddir)/tools-$*/tools
rsync -a tools/ $(builddir)/tools-$*/tools/
endif
touch $@
$(stampdir)/stamp-build-perarch: prepare-perarch
ifeq ($(do_tools),true)
cd $(builddir)/tools-$*/tools/perf && make
endif
@touch $@
install-perarch: toolspkgdir = $(CURDIR)/debian/$(tools_pkg_name)
install-perarch: $(stampdir)/stamp-build-perarch
# Add the tools.
ifeq ($(do_tools),true)
install -d $(toolspkgdir)/usr/bin
install -s -m755 $(builddir)/tools-$*/tools/perf/perf \
$(toolspkgdir)/usr/bin/perf_$(abi_release)
endif
binary-perarch: toolspkg = $(tools_pkg_name)
binary-perarch: install-perarch
@# Empty for make to be happy
ifeq ($(do_tools),true)
dh_installchangelogs -p$(toolspkg)
dh_installdocs -p$(toolspkg)
dh_compress -p$(toolspkg)
dh_fixperms -p$(toolspkg)
dh_shlibdeps -p$(toolspkg)
dh_installdeb -p$(toolspkg)
dh_gencontrol -p$(toolspkg)
dh_md5sums -p$(toolspkg)
dh_builddeb -p$(toolspkg)
endif
binary-debs: binary-perarch $(stampdir)/stamp-flavours $(addprefix binary-,$(flavours))
build-arch: $(addprefix build-,$(flavours))
binary-arch-deps = binary-debs
ifeq ($(AUTOBUILD),)
binary-arch-deps += binary-udebs
endif
ifeq ($(do_libc_dev_package),true)
binary-arch-deps += binary-arch-headers
endif
ifneq ($(do_common_headers_indep),true)
binary-arch-deps += binary-headers
endif
binary-arch: $(binary-arch-deps)