# # This Makefile executes the unpack/build/binary targets for a single # subarch, which is passed in the subarch variable. Empty subarch # variable means that we are building for an arch without the subarch. # Additionally, variables version, abiname and ltver are # expected to be available (need to be exported from the parent process). # SHELL := bash -e DEB_HOST_ARCH := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_HOST_ARCH) DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_HOST_GNU_TYPE) DEB_BUILD_ARCH := $(shell dpkg-architecture -a'$(ARCH)' -qDEB_BUILD_ARCH) export PYTHONPATH = $(CURDIR)/debian/lib/python export DH_OPTIONS export DEB_HOST_ARCH # # Build the list of common config files to be included # ifeq ($(SUBARCH),none) basedir := debian/arch/$(ARCH) else basedir := debian/arch/$(ARCH)/$(SUBARCH) endif -include $(basedir)/Makefile.inc include debian/rules.defs # # Here we construct the command lines for different make-kpkg # calls (build, linux-image, linux-headers) based on the values # of variables defined so far and provided by the arch/subarch # in Makefile.inc. @flavour@ in the expressions is going to be # replaced by the flavour for which the command is run. # kpkg_image := make-kpkg --append-to-version '$(ABINAME)$(LOCALVERSION)' kpkg_image += --arch '$(ARCH)' kpkg_image += --stem linux ifneq ($(INITRAMFS),False) kpkg_image += --initrd endif ifdef KPKG_SUBARCH kpkg_image += --subarch '$(KPKG_SUBARCH)' endif setup_env := env -u ABINAME -u ARCH -u SUBARCH -u FLAVOUR -u VERSION -u LOCALVERSION setup_makeflags = ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) setup_makeflags += CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)- ifdef COMPILER setup_makeflags += CC=$(DEB_HOST_GNU_TYPE)-$(COMPILER) endif kpkg_image += --cross-compile='$(DEB_HOST_GNU_TYPE)' else ifdef COMPILER setup_makeflags += CC=$(COMPILER) endif endif setup_env += MAKEFLAGS='$(setup_makeflags)' ifdef DEBIAN_KERNEL_JOBS setup_env_kpkg_jobs = CONCURRENCY_LEVEL=$(DEBIAN_KERNEL_JOBS) JOBS_ARG = -j$(DEBIAN_KERNEL_JOBS) endif # # Targets # binary-arch-subarch: install-header-$(ARCH)-$(SUBARCH) binary-arch-flavour: install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR) binary-indep: install-doc install-patch install-source install-tree build: $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) setup-flavour: $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) source-arch: $(STAMPS_DIR)/source source-subarch: $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH) # # Generates the kernel config file for a subarch by merging # the arch-independent config file (arch/config), # arch-specific config file (arch/$(karch)/config), # and subarch specific one (arch/$(karch)/$(subarch)/config). # config_common = debian/arch/config debian/arch/$(ARCH)/config ifneq ($(SUBARCH),none) config_common += debian/arch/$(ARCH)/$(SUBARCH)/config endif $(BUILD_DIR)/config.$(ARCH)-$(SUBARCH)-$(FLAVOUR): $(basedir)/config.$(FLAVOUR) $(config_common) @echo "Generating configuration file $@:" ocaml debian/bin/kconfig.ml -b "debian/arch" -a "$(ARCH)" -s "$(SUBARCH)" -f "$(FLAVOUR)" > '$@' $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: SOURCE_DIR=$(BUILD_DIR)/source $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: DIR = $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION) $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: $(STAMPS_DIR)/source rm -rf '$@' '$(DIR)' cp -al '$(SOURCE_DIR)' '$(DIR)' chmod -R u+rw,go=rX '$(DIR)' cd '$(BUILD_DIR)'; tar -cjf 'linux-source-$(UPSTREAMVERSION).tar.bz2' 'linux-source-$(UPSTREAMVERSION)' rm -rf '$(DIR)' define patch_cmd cd '$(DIR)'; python2.4 '$(CURDIR)/debian/bin/apply.py' --overwrite-home='$(CURDIR)/debian/patches' --overwrite-source='$(SOURCEVERSION)' --overwrite-revisions='$(REVISIONS)' endef srcfiles := $(filter-out debian, $(wildcard * .[^.]*)) $(STAMPS_DIR)/source: DIR=$(BUILD_DIR)/source $(STAMPS_DIR)/source: debian/bin/apply.py rm -rf '$(DIR)' mkdir -p '$(DIR)' cp -al $(srcfiles) '$(DIR)' $(patch_cmd) touch '$@' $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH): SOURCE_DIR=$(BUILD_DIR)/source $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH): DIR=$(BUILD_DIR)/source-$(ARCH)-$(SUBARCH) $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH): $(STAMPS_DIR)/source rm -rf '$(DIR)' cp -al '$(SOURCE_DIR)' '$(DIR)' mkdir -p '$(DIR)/debian' cp debian/changelog '$(DIR)/debian' cp debian/copyright '$(DIR)/debian' cp debian/control '$(DIR)/debian/control' touch '$(DIR)/debian/official' $(patch_cmd) -a $(ARCH) -s $(SUBARCH) touch '$@' # # This target performs a build for a particular flavour. Note # that in this file it should be always placed *before* the # build-$(subarch)-% target, which creates the build directory. # $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): DIR=$(BUILD_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR) $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-kernel-package: $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) cd '$(DIR)'; $(setup_env) $(setup_env_kpkg_jobs) PATH='$(CURDIR)/build:$(CURDIR)/bin:$(PATH)' $(kpkg_image) build touch '$@' $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-plain-xen: $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) cd '$(DIR)'; $(setup_env) make ARCH=$(KERNEL_ARCH) $(JOBS_ARG) touch '$@' $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): SOURCE_DIR=$(BUILD_DIR)/source-$(ARCH)-$(SUBARCH) $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): DIR=$(BUILD_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR) $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-kernel-package: $(BUILD_DIR)/config.$(ARCH)-$(SUBARCH)-$(FLAVOUR) $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH) rm -rf '$(DIR)' cp -al '$(SOURCE_DIR)' '$(DIR)' cp '$<' '$(DIR)/.config' cd '$(DIR)'; $(setup_env) $(kpkg_image) configure touch '$@' $(STAMPS_DIR)/setup-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-plain-xen: $(BUILD_DIR)/config.$(ARCH)-$(SUBARCH)-$(FLAVOUR) $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH) rm -rf '$(DIR)' cp -al '$(SOURCE_DIR)' '$(DIR)' cp '$<' '$(DIR)/.config' echo '$(ABINAME)$(LOCALVERSION)' > '$(DIR)/localversion' cd '$(DIR)'; $(setup_env) make prepare ARCH=$(KERNEL_ARCH) $(JOBS_ARG) touch '$@' install-base: dh_installchangelogs dh_installdocs dh_compress dh_fixperms dh_installdeb dh_gencontrol -- $(GENCONTROL_ARGS) dh_md5sums dh_builddeb install-doc: SOURCE_DIR=$(BUILD_DIR)/source install-doc: DIR=$(BUILD_DIR)/$@ install-doc: $(STAMPS_DIR)/source rm -rf '$(DIR)' cp -al '$(SOURCE_DIR)' '$(DIR)' mkdir -p '$(DIR)/debian' cp debian/changelog '$(DIR)/debian' cp debian/copyright '$(DIR)/debian' cp debian/control '$(DIR)/debian/control' touch '$(DIR)/debian/official' rm '$(DIR)/Makefile' sed -e 's,^EXTRAVERSION.*$$,EXTRAVERSION =,' < '$(SOURCE_DIR)/Makefile' > '$(DIR)/Makefile' cd '$(DIR)' && $(setup_env) make-kpkg --stem linux \ --config defconfig kernel-manual cat '$(DIR)/debian/files' >> debian/files @for i in $$(awk '{ print $$1; }' '$(DIR)/debian/files'); do \ echo "mv \"$(BUILD_DIR)/$$i\" .."; \ mv "$(BUILD_DIR)/$$i" ..; \ done rm -rf '$(DIR)' install-dummy: dh_testdir dh_testroot dh_clean -d -k $(MAKE) -f debian/rules.real install-base install-header-$(ARCH)-$(SUBARCH): PACKAGE_NAME = linux-headers-$(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION_HEADERS) install-header-$(ARCH)-$(SUBARCH): DH_OPTIONS = -p$(PACKAGE_NAME) install-header-$(ARCH)-$(SUBARCH): BASE_DIR = /usr/src/$(PACKAGE_NAME) install-header-$(ARCH)-$(SUBARCH): SOURCE_DIR = $(BUILD_DIR)/source-$(ARCH)-$(SUBARCH) install-header-$(ARCH)-$(SUBARCH): DIR = $(CURDIR)/debian/$(PACKAGE_NAME)/$(BASE_DIR) install-header-$(ARCH)-$(SUBARCH): $(STAMPS_DIR)/source-$(ARCH)-$(SUBARCH) dh_testdir dh_testroot dh_clean -k -d cd $(SOURCE_DIR); \ ( \ find . \ -path './Documentation/*' -prune -o \ -path './arch/*' -prune -o \ -path './include/asm*' -prune -o \ -path './scripts/*' -prune -o \ -path './include/*' -print -o \ \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Rules.make' \) -print; \ find include/asm-generic -print; \ for i in $(KERNEL_HEADER_DIRS); do \ find arch/$$i \ \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Rules.make' \) -print; \ find include/asm-$$i -print; \ done; \ ) \ | \ cpio -pd --preserve-modification-time $(DIR) $(MAKE) -f debian/rules.real install-base install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): REAL_VERSION = $(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): PACKAGE_NAME = linux-headers-$(REAL_VERSION) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): PACKAGE_NAME_HEADERS = linux-headers-$(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION_HEADERS) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): PACKAGE_NAME_KBUILD = linux-kbuild-$(VERSION) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): DH_OPTIONS = -p$(PACKAGE_NAME) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): BASE_DIR = /usr/src/$(PACKAGE_NAME) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): SOURCE_DIR = $(BUILD_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): REF_DIR = $(BUILD_DIR)/source-$(ARCH)-$(SUBARCH) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): PACKAGE_DIR = $(CURDIR)/debian/$(PACKAGE_NAME) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): DIR = $(PACKAGE_DIR)/$(BASE_DIR) install-header-$(ARCH)-$(SUBARCH)-$(FLAVOUR): $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) dh_testdir dh_testroot dh_clean -k -d mkdir -p "${DIR}/arch/${KERNEL_ARCH}/kernel" mkdir -p "${DIR}/include" cp -a ${SOURCE_DIR}/{.config,Module.symvers} "${DIR}" # TODO echo $(ABINAME)$(LOCALVERSION) > "${DIR}/localversion" cd ${SOURCE_DIR}; \ find . -mindepth 1 -maxdepth 1 \ ! -name debian -a ! -name Documentation -a ! -name include -a \ ! -name DEBIAN -a ! -name scripts -a ! -name arch -a ! -name '.*' -a \( \ -name Makefile -o -type d \) \ -printf "../${PACKAGE_NAME_HEADERS}/%f\n" | \ xargs ln -s --target-directory="${DIR}" cd ${SOURCE_DIR}; \ find "arch/${KERNEL_ARCH}" -mindepth 1 -maxdepth 1 \( \ -type d -a ! -name include -a ! -name kernel -o \ -type f -a \( -name 'Makefile*' -o -name 'Kconfig*' \) \) \ -printf "../../../${PACKAGE_NAME_HEADERS}/%p\n" | \ xargs ln -s --target-directory="${DIR}/arch/${KERNEL_ARCH}" [ -d "${SOURCE_DIR}/arch/${KERNEL_ARCH}/include" ] && \ cp -a "${SOURCE_DIR}/arch/${KERNEL_ARCH}/include" "${DIR}/arch/${KERNEL_ARCH}/include" || : [ -f "${SOURCE_DIR}/arch/${KERNEL_ARCH}/kernel/asm-offsets.s" ] && \ ln -f "${SOURCE_DIR}/arch/${KERNEL_ARCH}/kernel/asm-offsets.s" "${DIR}/arch/${KERNEL_ARCH}/kernel" || : ln -s "../../../../${PACKAGE_NAME_HEADERS}/arch/${KERNEL_ARCH}/kernel/Makefile" "${DIR}/arch/${KERNEL_ARCH}/kernel" cd ${SOURCE_DIR}; \ find include -mindepth 1 -maxdepth 1 \ ! -name config -a ! -name linux -a ! -name 'asm*' \ -printf "../../${PACKAGE_NAME_HEADERS}/%p\n" | \ xargs ln -s --target-directory="${DIR}/include" cp -a ${SOURCE_DIR}/include/config "${DIR}/include" ln -sf "asm-${KERNEL_ARCH}" "${DIR}/include/asm" cd ${SOURCE_DIR}; \ for dir in linux asm-generic $(foreach t, $(KERNEL_HEADER_DIRS), asm-$(t)); do \ mkdir "${DIR}/include/$$dir"; \ for file in $$(find "include/$$dir" -mindepth 1 -maxdepth 1); do \ if [ -e ${CURDIR}/${REF_DIR}/$$file ]; then \ ln -s --target-directory="${DIR}/include/$$dir" "../../../${PACKAGE_NAME_HEADERS}/$$file"; \ elif [ -d ${CURDIR}/${SOURCE_DIR}/$$file ]; then \ cp -a "${CURDIR}/${SOURCE_DIR}/$$file" "${DIR}/include/$$dir"; \ else \ ln -f --target-directory="${DIR}/include/$$dir" "${CURDIR}/${SOURCE_DIR}/$$file"; \ fi \ done \ done mkdir -p "${PACKAGE_DIR}/lib/modules/${REAL_VERSION}" ln -s "/usr/src/${PACKAGE_NAME}" "${PACKAGE_DIR}/lib/modules/${REAL_VERSION}/build" ln -s "../${PACKAGE_NAME_KBUILD}/scripts" "${DIR}" $(MAKE) -f debian/rules.real install-base install-headers-all: PACKAGE_NAME = linux-headers-$(VERSION) install-headers-all: DH_OPTIONS = -p$(PACKAGE_NAME) install-headers-all: dh_testdir dh_testroot chmod a+x debian/modules/gencontrol.py dh_install $(DH_OPTIONS) debian/arch debian/lib debian/modules '/usr/src/linux-headers-$(VERSION)' dh_python $(DH_OPTIONS) -V 2.4 /usr/src/linux-headers-$(VERSION)/lib/python $(MAKE) -f debian/rules.real install-base DH_OPTIONS='$(DH_OPTIONS)' GENCONTROL_ARGS='$(GENCONTROL_ARGS) -Vkernel:Provides=linux-headers-$(UPSTREAMVERSION)$(ABINAME)-$(ARCH)' install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): REAL_VERSION = $(UPSTREAMVERSION)$(ABINAME)$(LOCALVERSION) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): PACKAGE_NAME = linux-image-$(REAL_VERSION) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): PACKAGE_DIR = $(CURDIR)/debian/$(PACKAGE_NAME) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE): DIR=$(BUILD_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-kernel-package: $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) ifdef IMAGE_POSTPROC # Install the postproc script into the hook directory install -d '$(DIR)/debian/image.d' install 'debian/bin/$(IMAGE_POSTPROC)' '$(DIR)/debian/image.d' endif cd '$(DIR)'; $(setup_env) $(kpkg_image) kernel-image cat '$(DIR)/debian/files' >> debian/files @for i in $$(awk '{ print $$1; }' '$(DIR)/debian/files'); do \ echo "mv \"$(BUILD_DIR)/$$i\" .."; \ mv "$(BUILD_DIR)/$$i" ..; \ done install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-plain-xen: MODULES_PACKAGE_NAME = linux-modules-$(REAL_VERSION) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-plain-xen: MODULES_PACKAGE_DIR = $(CURDIR)/debian/$(MODULES_PACKAGE_NAME) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-plain-xen: DH_OPTIONS = -p$(PACKAGE_NAME) -p$(MODULES_PACKAGE_NAME) install-image-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-plain-xen: $(STAMPS_DIR)/build-$(ARCH)-$(SUBARCH)-$(FLAVOUR)-$(TYPE) dh_testdir dh_testroot dh_clean -d -k dh_installdirs 'boot' cp '$(DIR)/vmlinuz' $(PACKAGE_DIR)/boot/vmlinuz-$(REAL_VERSION) cd '$(DIR)'; $(setup_env) make modules_install ARCH=$(KERNEL_ARCH) INSTALL_MOD_PATH=$(MODULES_PACKAGE_DIR) rm $(MODULES_PACKAGE_DIR)/lib/modules/$(REAL_VERSION)/{build,source} $(MAKE) -f debian/rules.real install-base DH_OPTIONS='$(DH_OPTIONS)' install-patch: PACKAGE = linux-patch-debian-$(VERSION) install-patch: pbase := /usr/src/kernel-patches/all/$(SOURCE_UPSTREAM) install-patch: pfull := debian/$(PACKAGE)$(pbase) install-patch: ptchs := $(notdir $(wildcard debian/patches-arch/*)) install-patch: DH_OPTIONS = -p$(PACKAGE) install-patch: dh_testdir dh_testroot dh_clean -d -k $(DH_OPTIONS) dh_installdirs $(DH_OPTIONS) '$(pbase)/apply' '$(pbase)/debian' '$(pbase)/unpatch' dh_install $(DH_OPTIONS) debian/patches/* '$(pbase)/debian' sed \ -e 's,@home@,$(pbase)/debian,' \ -e 's,@revisions@,$(REVISIONS),' \ -e 's,@source@,$(SOURCEVERSION),' \ debian/bin/apply.py > '$(pfull)/apply/debian' sed -e 's/@upstream@/$(SOURCE_UPSTREAM)/g' debian/bin/unpatch > '$(pfull)/unpatch/debian' chmod 755 '$(pfull)/apply/debian' '$(pfull)/unpatch/debian' chmod 644 '$(pfull)/debian/'*.patch bzip2 -9 '$(pfull)/debian/'*.patch $(MAKE) -f debian/rules.real install-base DH_OPTIONS='$(DH_OPTIONS)' install-source: DH_OPTIONS = -plinux-source-$(VERSION) install-source: $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2 dh_testdir dh_testroot dh_install $(DH_OPTIONS) '$<' /usr/src $(MAKE) -f debian/rules.real install-base DH_OPTIONS='$(DH_OPTIONS)' install-tree: DH_OPTIONS = -plinux-tree-$(VERSION) install-tree: $(MAKE) -f debian/rules.real install-dummy DH_OPTIONS='$(DH_OPTIONS)'