| # |
| # Makefile for the output source package |
| # |
| |
| ifeq ($(KERNELRELEASE),) |
| |
| MAKEFLAGS += --no-print-directory |
| SHELL := /bin/bash |
| BACKPORT_DIR := $(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_DIR 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-4]\|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 19 | sed 's/^/3./')" ;\ |
| kvers="$$kvers $$(seq 0 99 | sed 's/^/4./')" ;\ |
| print=0 ;\ |
| for v in $$kvers ; do \ |
| if [ "$$print" = "1" ] ; then \ |
| echo config 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_DIR)/Makefile.kernel |
| endif |