blob: ee7df4ba29ce969a0cb085f09b91be4a9d0dabc1 [file] [log] [blame]
#
# 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-5]\|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 20 | sed 's/^/4./')" ;\
kvers="$$kvers $$(seq 0 99 | sed 's/^/5./')" ;\
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