From a4ee69b5300fddb961c6f0c521d204d849e52a0c Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Tue, 5 Jan 2010 20:12:48 +0200 Subject: Introduce the build system The Makefile supports either building modules locally or generating a patch vs. dahdi-linux SVN. * drivers/dahdi/{Kbuild,Kconfig} - will be merged with existing ones * dahdi_echocan_oslec.c: Copied as-is from dahdi. Provides a better sanity check that the 'echo' module was built OK. --- Makefile | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d05f769 --- /dev/null +++ b/Makefile @@ -0,0 +1,178 @@ +# +# Based on: +# Makefile for DAHDI Linux kernel modules +# +# Copyright (C) 2001-2009 Digium, Inc. +# +# License: +# + +# +# This package allow: +# A. test-building modules vs. DAHDI +# B. generating a single patch of all the modules vs. the DAHDI tree. +# +# The default target here is to build all the modules. This requires various +# DAHDI headers installed under /usr/include/dahdi . Some drivers will also +# need some adjustment to include those files from there rather than from +# the working directory. +# +# make # just build +# make test-install # install under testroot/ +# +# The modules built here are likely not to be useful as-is due to the +# missing symbols from DAHDI. However they should expose most (if not +# all) build warnings and errors. +# +# Some extra useful switches: +# +# KVERS= # build with kernel version +# KSRC= # build with kernel tree from /full/path +# C=1/C=2 # Check with sparse (1: just when building, 2: all) +# +# The patch is generated by running: +# +# make gen-patch +# +# This generates a patch vs. dahdi in the file: dahdi_linux_extra.diff +# +# Other targets: +# +# make clean +# make stackcheck # FIXME: doesn't work? +# + +PWD:=$(shell pwd) + +DAHDI_LINUX_BRANCH =trunk +DAHDI_LINUX_URL = http://svn.asterisk.org/svn/dahdi/linux/$(DAHDI_LINUX_BRANCH) +SVN_DIR_SRC = dahdi-svn-orig +SVN_DIR_DST = dahdi-svn-new + +BASE_DIR = drivers/dahdi +MODULE_DIRS = drivers/staging/echo + +DAHDI_LINUX_DIFF = dahdi_linux_extra.diff + +# Files we shouldn't copy: +OVERRIDE_FILES = Kbuild dahdi_echocan_oslec.c + +# If you want to build for a kernel other than the current kernel, set KVERS +ifndef KVERS +KVERS:=$(shell uname -r) +endif +ifndef KSRC + ifneq (,$(wildcard /lib/modules/$(KVERS)/build)) + KSRC:=/lib/modules/$(KVERS)/build + else + KSRC_SEARCH_PATH:=/usr/src/linux + KSRC:=$(shell for dir in $(KSRC_SEARCH_PATH); do if [ -d $$dir ]; then echo $$dir; break; fi; done) + endif +endif +KVERS_MAJ:=$(shell echo $(KVERS) | cut -d. -f1-2) +KINCLUDES:=$(KSRC)/include + +# We use the kernel's .config file as an indication that the KSRC +# directory is indeed a valid and configured kernel source (or partial +# source) directory. +# +# We also source it, as it has the format of Makefile variables list. +# Thus we will have many CONFIG_* variables from there. +KCONFIG:=$(KSRC)/.config +ifneq (,$(wildcard $(KCONFIG))) + HAS_KSRC:=yes + include $(KCONFIG) +else + HAS_KSRC:=no +endif + +CHECKSTACK=$(KSRC)/scripts/checkstack.pl + +# Set HOTPLUG_FIRMWARE=no to override automatic building with hotplug support +# if it is enabled in the kernel. + +ifeq (yes,$(HAS_KSRC)) + HOTPLUG_FIRMWARE:=$(shell if grep -q '^CONFIG_FW_LOADER=[ym]' $(KCONFIG); then echo "yes"; else echo "no"; fi) +endif + +MODULE_ALIASES:=wcfxs wctdm8xxp wct2xxp + +INST_HEADERS:=kernel.h user.h fasthdlc.h wctdm_user.h dahdi_config.h + +DAHDI_BUILD_ALL:=m + +KMAKE=$(MAKE) -C $(KSRC) SUBDIRS=$(PWD)/drivers/dahdi + +ifneq (,$(wildcard $(DESTDIR)/etc/udev/rules.d)) + DYNFS:=yes +endif + +ROOT_PREFIX:= + +ASCIIDOC:=asciidoc +ASCIIDOC_CMD:=$(ASCIIDOC) -n -a toc -a toclevels=4 + +GENERATED_DOCS:=README.html dahdi-api.html + +ifneq ($(wildcard .version),) + DAHDIVERSION:=$(shell cat .version) +else +ifneq ($(wildcard .svn),) + DAHDIVERSION:=$(shell build_tools/make_version . dahdi/linux) +endif +endif + +TESTROOT:=testroot + +all: modules + +modules: +ifeq (no,$(HAS_KSRC)) + @echo "You do not appear to have the sources for the $(KVERS) kernel installed." + @exit 1 +endif + $(KMAKE) modules DAHDI_BUILD_ALL=$(DAHDI_BUILD_ALL) + +stackcheck: $(CHECKSTACK) modules + objdump -d drivers/dahdi/*.ko drivers/dahdi/*/*.ko | $(CHECKSTACK) + +install: modules + $(KMAKE) INSTALL_MOD_PATH=$(DESTDIR) INSTALL_MOD_DIR=dahdi modules_install + [ `id -u` = 0 ] && /sbin/depmod -a $(KVERS) || : + + +clean: +ifneq (no,$(HAS_KSRC)) + $(KMAKE) clean +endif + rm -rf $(SVN_DIR_SRC) $(SVN_DIR_DST) $(DAHDI_LINUX_DIFF) $(TESTROOT) + + +test-install: + $(MAKE) install DESTDIR=$(PWD)/$(TESTROOT) + +gen-patch: + rm -rf $(SVN_DIR_SRC) $(SVN_DIR_DST) + svn export -q $(DAHDI_LINUX_URL) $(SVN_DIR_SRC) + cp -a $(SVN_DIR_SRC) $(SVN_DIR_DST) + for dir in $(MODULE_DIRS); do \ + mkdir -p $(SVN_DIR_DST)/$$dir; \ + cp $$dir/*.[ch] $$dir/Kbuild $(SVN_DIR_DST)/$$dir/ ; \ + done + # Preserve base Kbuild: + for file in $(OVERRIDE_FILES); do \ + cp $(SVN_DIR_SRC)/$(BASE_DIR)/$$file $(SVN_DIR_DST)/$(BASE_DIR)/; \ + done + find $(SVN_DIR_DST)/$(BASE_DIR) -name \*.mod.c | xargs rm -rf dummyfile + + cat drivers/dahdi/Kconfig >>$(SVN_DIR_DST)/drivers/dahdi/Kconfig + cat drivers/dahdi/Kconfig >>$(SVN_DIR_DST)/drivers/dahdi/Kconfig + sed -e '/^####### END OF DATA ########/,$$d' drivers/dahdi/Kbuild \ + | sed -i -e R/dev/stdin $(SVN_DIR_DST)/drivers/dahdi/Kbuild + diff -urN $(SVN_DIR_SRC) $(SVN_DIR_DST) >$(DAHDI_LINUX_DIFF) \ + || [ $$? -eq 1 ] + + + +.PHONY: clean all install modules stackcheck test-install gen-patch + -- cgit v1.2.3