summaryrefslogtreecommitdiff
path: root/Makefile
blob: 55bff1e1c66d439802263bffbe84d585c48300c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#
# Based on:
# Makefile for DAHDI Linux kernel modules
#
# Copyright (C) 2001-2009 Digium, Inc.
# 
# License: <fill in stanza. Basically: GPLv2>
#

#
# 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=<version>   # build with kernel version <version>
#    KSRC=</full/path> # 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 = tags/2.4.0
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
ORIGIN		= http://git.tzafrir.org.il/?p=dahdi-extra.git

BASE_DIR	= drivers/dahdi
MODULE_DIRS	= $(BASE_DIR) $(BASE_DIR)/zaphfc $(BASE_DIR)/ap400 \
		  	drivers/staging/echo

DAHDI_LINUX_DIFF = dahdi_linux_extra.diff

# Files we shouldn't copy:
OVERRIDE_FILES	= Kbuild dahdi_echocan_oslec.c proslic.h fxo_modes.h

# 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

PATCH_HEADER = \
  Subject: dahdi-extra: out-of-tree DAHDI drivers \
  \nOrigin: $(ORIGIN) \
  \nForwarded: No \
  \nLast-Update: `date -I` \
  \n \
  \nThis patch includes a number of out-of-tree DAHDI drivers from the \
  \ndahdi-extra repository. They are all out-of-tree and are highly likely \
  \n not to be included in DAHDI-linux in the forseeable future. \
  \n \
  \nGit-Commit: `git show-ref -s -h HEAD` \
  \n---\n


CHECKSTACK=$(KSRC)/scripts/checkstack.pl

DAHDI_BUILD_ALL:=m

KMAKE=$(MAKE) -C $(KSRC) SUBDIRS=$(PWD)/drivers/dahdi 

ifneq (,$(wildcard $(DESTDIR)/etc/udev/rules.d))
  DYNFS:=yes
endif

ROOT_PREFIX:=

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
	find $(SVN_DIR_DST) -name \*.mod.c -exec rm -f '{}' \;
	# 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
	sed -e '/^####### END OF DATA ########/,$$d' drivers/dahdi/Kbuild \
	| sed -i -e R/dev/stdin $(SVN_DIR_DST)/drivers/dahdi/Kbuild
	echo -e "$(PATCH_HEADER)" >$(DAHDI_LINUX_DIFF)
	diff -urN $(SVN_DIR_SRC) $(SVN_DIR_DST) >>$(DAHDI_LINUX_DIFF) \
	|| [ $$? -eq 1 ]



.PHONY: clean all install modules stackcheck test-install gen-patch