| # | |
| # Makefile for the output source package | |
| # | |
| ifeq ($(KERNELRELEASE),) | |
| MAKEFLAGS += --no-print-directory | |
| SHELL := /bin/bash | |
| BACKPORT_PWD := $(shell pwd) | |
| KMODDIR ?= updates | |
| ifneq ($(origin KLIB), undefined) | |
| KMODPATH_ARG := "INSTALL_MOD_PATH=$(KLIB)" | |
| else | |
| KLIB := /lib/modules/$(shell uname -r)/ | |
| KMODPATH_ARG := | |
| endif | |
| KLIB_BUILD ?= $(KLIB)/build/ | |
| KERNEL_CONFIG := $(KLIB_BUILD)/.config | |
| KERNEL_MAKEFILE := $(KLIB_BUILD)/Makefile | |
| CONFIG_MD5 := $(shell md5sum $(KERNEL_CONFIG) 2>/dev/null | sed 's/\s.*//') | |
| export KLIB KLIB_BUILD BACKPORT_PWD KMODDIR KMODPATH_ARG | |
| # disable built-in rules for this file | |
| .SUFFIXES: | |
| .PHONY: default | |
| default: | |
| @$(MAKE) modules | |
| .PHONY: mrproper | |
| mrproper: | |
| @test -f .config && $(MAKE) clean || true | |
| @rm -f .config | |
| @rm -f .kernel_config_md5 Kconfig.versions Kconfig.kernel | |
| @rm -f backport-include/backport/autoconf.h | |
| .DEFAULT: | |
| @set -e ; test -f .local-symbols || ( \ | |
| echo "/--------------" ;\ | |
| echo "| You shouldn't run make in the backports tree, but only in" ;\ | |
| echo "| the generated output. This here is only the skeleton code" ;\ | |
| echo "| copied into the output directory. To use the backport system" ;\ | |
| echo "| from scratch, go into the top-level directory and run" ;\ | |
| echo "| ./gentree.py /path/to/linux-next/ /tmp/output" ;\ | |
| echo "| and then make menuconfig/... in the output directory. See" ;\ | |
| echo "| ./gentree.py --help" ;\ | |
| echo "| for more options." ;\ | |
| echo "\\--" ;\ | |
| false) | |
| @set -e ; test -f $(KERNEL_CONFIG) || ( \ | |
| echo "/--------------" ;\ | |
| echo "| Your kernel headers are incomplete/not installed." ;\ | |
| echo "| Please install kernel headers, including a .config" ;\ | |
| echo "| file or use the KLIB/KLIB_BUILD make variables to" ;\ | |
| echo "| set the kernel to build against, e.g." ;\ | |
| echo "| make KLIB=/lib/modules/3.1.7/" ;\ | |
| echo "| to compile/install for the installed kernel 3.1.7" ;\ | |
| echo "| (that isn't currently running.)" ;\ | |
| echo "\\--" ;\ | |
| false) | |
| @set -e ; if [ "$$(cat .kernel_config_md5 2>/dev/null)" != "$(CONFIG_MD5)" ] ;\ | |
| then \ | |
| echo -n "Generating local configuration database from kernel ..." ;\ | |
| grep -v -f .local-symbols $(KERNEL_CONFIG) | grep = | ( \ | |
| while read l ; do \ | |
| if [ "$${l:0:7}" != "CONFIG_" ] ; then \ | |
| continue ;\ | |
| fi ;\ | |
| l=$${l:7} ;\ | |
| n=$${l%%=*} ;\ | |
| v=$${l#*=} ;\ | |
| if [ "$$v" = "m" ] ; then \ | |
| echo config $$n ;\ | |
| echo ' tristate' ;\ | |
| elif [ "$$v" = "y" ] ; then \ | |
| echo config $$n ;\ | |
| echo ' bool' ;\ | |
| else \ | |
| continue ;\ | |
| fi ;\ | |
| echo " default $$v" ;\ | |
| echo "" ;\ | |
| done \ | |
| ) > Kconfig.kernel ;\ | |
| kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) kernelversion | \ | |
| sed 's/^\(\(3\|2\.6\)\.[0-9]\+\).*/\1/;t;d') ;\ | |
| test "$$kver" != "" || echo "Kernel version parse failed!" ;\ | |
| test "$$kver" != "" ;\ | |
| kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\ | |
| kvers="$$kvers $$(seq 0 99 | sed 's/^/3./')" ;\ | |
| print=0 ;\ | |
| for v in $$kvers ; do \ | |
| if [ "$$print" = "1" ] ; then \ | |
| echo config BACKPORT_KERNEL_$$(echo $$v | tr . _) ;\ | |
| echo " def_bool y" ;\ | |
| fi ;\ | |
| if [ "$$v" = "$$kver" ] ; then print=1 ; fi ;\ | |
| done > Kconfig.versions ;\ | |
| # RHEL as well, sadly we need to grep for it ;\ | |
| RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) | \ | |
| sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\ | |
| RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) | \ | |
| sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\ | |
| for v in $$(seq 0 $$RHEL_MINOR) ; do \ | |
| echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v ;\ | |
| echo " def_bool y" ;\ | |
| done >> Kconfig.versions ;\ | |
| echo " done." ;\ | |
| fi ;\ | |
| echo "$(CONFIG_MD5)" > .kernel_config_md5 | |
| @$(MAKE) -f Makefile.real "$@" | |
| .PHONY: defconfig-help | |
| defconfig-help: | |
| @echo "Driver or subsystem configuration targets:" | |
| @set -e ;\ | |
| bk_configs="$$(ls defconfigs/*)" ;\ | |
| for cfg in $$bk_configs; do \ | |
| echo " defconfig-$${cfg##defconfigs/}" ;\ | |
| done | |
| @echo "" | |
| .PHONY: help | |
| help: defconfig-help | |
| @echo "Cleaning targets:" | |
| @echo " clean - Remove most generated files but keep the config and" | |
| @echo " enough build support to build external modules" | |
| @echo " mrproper - Remove all generated files + config + various backup files" | |
| @echo "" | |
| @echo "Driver configuration help:" | |
| @echo " defconfig-help - List all prearranged defconfig-targets we have" | |
| @echo " designed for you. You can use this to find" | |
| @echo " driver specific configs in case all you really" | |
| @echo " need is to just compile one or a small group " | |
| @echo " of drivers." | |
| @echo "" | |
| @echo "Configuration targets:" | |
| @echo " menuconfig - Update current config utilising a menu based program" | |
| @echo " oldconfig - Update current config utilising a provided .config as base" | |
| @echo " oldaskconfig - ??" | |
| @echo " silentoldconfig - Same as oldconfig, but quietly, additionally update deps" | |
| @echo " allnoconfig - New config where all options are answered with no" | |
| @echo " allyesconfig - New config where all options are accepted with yes" | |
| @echo " allmodconfig - New config selecting modules when possible" | |
| @echo " alldefconfig - New config with all symbols set to default" | |
| @echo " randconfig - New config with random answer to all options" | |
| @echo " listnewconfig - List new options" | |
| @echo " olddefconfig - Same as silentoldconfig but sets new symbols to their default value" | |
| @echo "" | |
| @echo "Other generic targets:" | |
| @echo " all - Build all targets marked with [*]" | |
| @echo "* modules - Build all modules" | |
| @echo "" | |
| @echo "Architecture specific targets:" | |
| @echo " install - Install modules" | |
| @echo " uninstall - Uninstall modules" | |
| @echo "" | |
| @echo "Execute "make" or "make all" to build all targets marked with [*]" | |
| else | |
| include $(BACKPORT_PWD)/Makefile.kernel | |
| endif |