~townsend/+junk/dell-laptop-natty-dkms-framework

« back to all changes in this revision

Viewing changes to Makefile

  • Committer: Christopher Townsend
  • Date: 2011-05-19 15:18:29 UTC
  • Revision ID: christopher.townsend@canonical.com-20110519151829-ajft7sdgfw7oiu5w
Initial revision with no modified files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Author: Peter M. Petrakis <peter.petrakis@canonical.com>,
 
2
#         Christopher Townsend <christopher.townsend@canonical.com>
 
3
# License: GPL2
 
4
# Descriptiom:  rules to create a dkms and fish package from scratch
 
5
#               for a collection of linux kernel versions.
 
6
# vim:set syntax=make noexpandtab tabstop=8 shiftwidth=8:
 
7
 
 
8
# This is the Ubuntu codename, ie, maverick, natty, etc.
 
9
DISTRIBUTION =
 
10
 
 
11
# If the distribution is not filled out, then it will get the currently running release.
 
12
ifeq (,$(DISTRIBUTION))
 
13
DISTRIBUTION = $(shell lsb_release -cs)
 
14
endif
 
15
 
 
16
# XXX Need to fill in package name, package version, and FISH version.
 
17
# dashes only in here (DKMS constraint)
 
18
PACKAGE_NAME =
 
19
 
 
20
# XXX no dashes or underscores allowed, less is more (DKMS constraint)
 
21
PACKAGE_VERSION =
 
22
 
 
23
# XXX (Optional) Fill in the FISH package version number, ie, fish1, fish2, etc.
 
24
FISH_VERSION = fish
 
25
 
 
26
# XXX (Optional) Fill in the obsolete by field
 
27
OBSOLETE_BY =
 
28
 
 
29
# build against all installed headers
 
30
TARGS = $(shell cd /lib/modules; for i in *; do echo $$i; done) 
 
31
MKDEB_TARGS = $(shell cd /lib/modules; for i in *; do echo -k $$i; done)
 
32
 
 
33
# only used during development "driver" and "clean" targets
 
34
KBUILD_TARGET =
 
35
 
 
36
ifeq (,$(KBUILD_TARGET))
 
37
KBUILD_TARGET = $(firstword $(TARGS))
 
38
endif
 
39
 
 
40
TOP := $(shell pwd)
 
41
DKMS = /usr/sbin/dkms
 
42
 
 
43
SRC_DIR =$(TOP)/src
 
44
# XXX Need to add path to the src directory of the module(s) which is relative to this Makefile.
 
45
#   SRC points to the actual directory where the module(s) reside(s)
 
46
#   Note: This may be a subdirectory under the src directory.
 
47
SRC = $(SRC_DIR)
 
48
 
 
49
# we need several dir trees to build dkms packages as non-root. these amount to
 
50
# var, source, and build, all parented by buildroot.
 
51
LOCAL_BUILD         = $(TOP)/buildroot
 
52
DKMS_TREE_ROOT      = $(LOCAL_BUILD)/build
 
53
DKMS_SRC_ROOT       = $(LOCAL_BUILD)/src
 
54
DKMS_INSTALL_ROOT   = $(LOCAL_BUILD)/install
 
55
DKMS_NAME           = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
 
56
DKMS_SRC            = $(DKMS_SRC_ROOT)/$(DKMS_NAME)
 
57
 
 
58
# necessary switches for dkms to build locally
 
59
DKMS_LOCAL = --dkmstree $(DKMS_TREE_ROOT) --sourcetree $(DKMS_SRC_ROOT) \
 
60
 --installtree $(DKMS_INSTALL_ROOT)
 
61
 
 
62
# without this, dkms may ruin your kernel-headers when you build as root
 
63
DKMS_SETUP = --no-prepare-kernel --no-clean-kernel $(DKMS_LOCAL)
 
64
DKMS_ARGS = $(DKMS_SETUP) -m $(PACKAGE_NAME) -v $(PACKAGE_VERSION)
 
65
 
 
66
# Use a custom mkdeb/mkdsc template included in the framework package
 
67
DKMS_MKDEB_TEMPLATE = dkms-mkdeb-template
 
68
DKMS_MKDEB_DIR = $(PACKAGE_NAME)-dkms-mkdeb
 
69
DKMS_MKDSC_DIR = $(PACKAGE_NAME)-dkms-mkdsc
 
70
 
 
71
# Set options for either creating or modifying the Debian changelog
 
72
DEBIAN_CHANGELOG = $(DKMS_MKDEB_TEMPLATE)/debian/changelog
 
73
 
 
74
have_changelog := $(wildcard $(DEBIAN_CHANGELOG))
 
75
 
 
76
ifeq ($(strip $(have_changelog)),)
 
77
DCH_OPTIONS = --create --package $(PACKAGE_NAME)-dkms --newversion $(PACKAGE_VERSION)
 
78
else
 
79
DCH_OPTIONS = --append
 
80
endif
 
81
 
 
82
# XXX dkms template, I want to be able to auto-generate the whole thing
 
83
# including the KOs in it's redundant manifest
 
84
AUTOINSTALL_MK = yes
 
85
 
 
86
# XXX (Optional) Add post install and post remove scripts here if needed
 
87
INSTALL_SCRIPT =
 
88
REMOVE_SCRIPT =
 
89
 
 
90
# XXX (Optional) Add the name of the patch file in the SRC/patches directory.
 
91
# This will override the automatic scanning for patch files.
 
92
PATCH_FILE =
 
93
 
 
94
# Automatically find any patch files if the user hasn't specified any.
 
95
ifeq (,$(PATCH_FILE))
 
96
PATCHES = $(shell cd $(SRC_DIR)/patches; for j in *; do echo $$j; done)
 
97
else
 
98
PATCHES = $(PATCH_FILE)
 
99
endif
 
100
 
 
101
# for FISH packaging we have the following layout
 
102
# |-- debs
 
103
# |   `-- mydeb.deb
 
104
# `-- scripts
 
105
#    `-- chroot-scripts
 
106
#        `-- fish
 
107
#            `-- 10-fish-installme.sh
 
108
 
 
109
FISH_BUILD   = $(LOCAL_BUILD)/fish
 
110
FISH_DEBS    = $(FISH_BUILD)/debs
 
111
FISH_SCRIPTS = $(FISH_BUILD)/scripts/chroot-scripts/fish
 
112
 
 
113
# This is to quiet all of the makefile recipe spew.
 
114
# Remove the '@' to see all of the spew.
 
115
Q = @
 
116
 
 
117
.PHONY: dkms-clean dkms-prep dkms-add dkms-build dkms-mkdeb dkms-mkdeb-source-only dkms-mkdsc dkms-mkdsc-source-only driver clean fish help
 
118
 
 
119
source-only-dsc: driver dkms-conf mrproper dkms-add dkms-mkdsc-source-only
 
120
        @echo "Finished DKMS .dsc source only packaging: $(shell date)"
 
121
 
 
122
all: driver dkms-conf mrproper dkms-add dkms-build dkms-mkdeb fish
 
123
        @echo "Finished build: $(shell date)"
 
124
 
 
125
source-only: driver dkms-conf mrproper dkms-add dkms-mkdeb-source-only
 
126
        @echo "Finished DKMS .deb source only packaging: $(shell date)"
 
127
 
 
128
pre-built: driver dkms-conf mrproper dkms-add dkms-build dkms-mkdeb
 
129
        @echo "Finished DKMS .deb pre-built binaries packaging: $(shell date)"
 
130
 
 
131
pre-built-dsc: driver dkms-conf mrproper dkms-add dkms-build dkms-mkdsc
 
132
        @echo "Finished DKMS .dsc pre-built binaries packaging: $(shell date)"
 
133
 
 
134
dkms-clean:
 
135
        $(Q)rm  -rf $(LOCAL_BUILD)
 
136
 
 
137
dkms-prep:
 
138
        $(Q)mkdir -p $(LOCAL_BUILD)
 
139
        $(Q)mkdir -p $(DKMS_TREE_ROOT)
 
140
        $(Q)mkdir -p $(DKMS_SRC_ROOT)
 
141
        $(Q)mkdir -p $(DKMS_INSTALL_ROOT)
 
142
        $(Q)cp /var/lib/dkms/dkms_dbversion $(DKMS_TREE_ROOT)
 
143
        $(Q)dch $(DCH_OPTIONS) --changelog $(DEBIAN_CHANGELOG) --distribution $(DISTRIBUTION)
 
144
 
 
145
dkms-conf:
 
146
        $(Q)cd $(SRC_DIR); \
 
147
        echo "# This file is automatically generated by the DKMS framework" > dkms.conf; \
 
148
        echo "PACKAGE_NAME=\"$(PACKAGE_NAME)\"" >> dkms.conf; \
 
149
        echo "PACKAGE_VERSION=\"$(PACKAGE_VERSION)\"" >> dkms.conf; \
 
150
        echo "AUTOINSTALL=\"$(AUTOINSTALL_MK)\"" >> dkms.conf; \
 
151
        echo "OBSOLETE_BY=\"$(OBSOLETE_BY)\"" >> dkms.conf; \
 
152
        echo "POST_INSTALL=\"$(INSTALL_SCRIPT)\"" >> dkms.conf; \
 
153
        echo "POST_REMOVE=\"$(REMOVE_SCRIPT)\"" >> dkms.conf; \
 
154
        if [ "$(PATCHES)" != "*" ]; then \
 
155
            a=0; \
 
156
            for j in $(PATCHES); do \
 
157
                echo "PATCH[$$a]=\"$$j\"" >> dkms.conf; \
 
158
                a=$$(($$a+1)); \
 
159
            done; \
 
160
        fi; \
 
161
        echo >> dkms.conf; \
 
162
        echo 'MAKE="make KVER=$$kernelver"' >> dkms.conf; \
 
163
        echo 'CLEAN="make KVER=$$kernelver clean"' >> dkms.conf; \
 
164
        echo >> dkms.conf; \
 
165
        $(TOP)/scripts/dkms_module_gen >> dkms.conf;
 
166
 
 
167
dkms-add: dkms-clean dkms-prep
 
168
        $(Q)mkdir $(DKMS_SRC)
 
169
        $(Q)cp -r $(SRC_DIR)/* $(DKMS_SRC)
 
170
        $(Q)cp -r $(DKMS_MKDEB_TEMPLATE) $(DKMS_SRC)/$(DKMS_MKDEB_DIR)
 
171
        $(Q)ln -s $(DKMS_MKDEB_DIR) $(DKMS_SRC)/$(DKMS_MKDSC_DIR)
 
172
        $(Q)$(DKMS) add $(DKMS_ARGS)
 
173
 
 
174
dkms-build:
 
175
        $(Q)for i in $(TARGS); do \
 
176
            echo Prepare to build $(DKMS_NAME) against target $$i; \
 
177
            $(DKMS) build $(DKMS_ARGS) --kernelsourcedir=/lib/modules/$$i/build  -k $$i; \
 
178
        done
 
179
 
 
180
dkms-mkdeb:
 
181
        $(Q)$(DKMS) mkdeb $(DKMS_ARGS) $(MKDEB_TARGS)
 
182
        $(Q)cp -f $(DKMS_TREE_ROOT)/$(PACKAGE_NAME)/$(PACKAGE_VERSION)/deb/*.deb $(TOP)/..
 
183
 
 
184
dkms-mkdeb-source-only:
 
185
        $(Q)$(DKMS) mkdeb --source-only $(DKMS_ARGS) $(MKDEB_TARGS)
 
186
        $(Q)cp -f $(DKMS_TREE_ROOT)/$(PACKAGE_NAME)/$(PACKAGE_VERSION)/deb/*.deb $(TOP)/..
 
187
 
 
188
dkms-mkdsc:
 
189
        $(Q)$(DKMS) mkdsc $(DKMS_ARGS) $(MKDEB_TARGS)
 
190
        $(Q)cp -f $(DKMS_TREE_ROOT)/$(PACKAGE_NAME)/$(PACKAGE_VERSION)/dsc/* $(TOP)/..
 
191
 
 
192
dkms-mkdsc-source-only:
 
193
        $(Q)$(DKMS) mkdsc --source-only $(DKMS_ARGS) $(MKDEB_TARGS)
 
194
        $(Q)cp -f $(DKMS_TREE_ROOT)/$(PACKAGE_NAME)/$(PACKAGE_VERSION)/dsc/* $(TOP)/..
 
195
 
 
196
 
 
197
# for development cycle
 
198
driver:
 
199
        $(Q)make -C /lib/modules/$(KBUILD_TARGET)/build M=$(SRC) modules
 
200
 
 
201
clean:
 
202
        $(Q)make -C /lib/modules/$(KBUILD_TARGET)/build M=$(SRC) clean
 
203
        $(Q)rm -f $(TOP)/Module.symvers  $(TOP)/modules.order
 
204
 
 
205
# for packaging
 
206
fish:
 
207
        @echo Creating FISH package...
 
208
        $(Q)mkdir -p $(FISH_BUILD)
 
209
        $(Q)mkdir -p $(FISH_DEBS)
 
210
        $(Q)mkdir -p $(FISH_SCRIPTS)
 
211
 
 
212
        $(Q)cp $(DKMS_TREE_ROOT)/$(PACKAGE_NAME)/$(PACKAGE_VERSION)/deb/*.deb  $(FISH_DEBS)
 
213
 
 
214
        $(Q)# I pulled the number 12 out of thin air, if this position is a problem
 
215
        $(Q)# for you just change it. This driver script will go away once we start
 
216
        $(Q)# generating modalias packages and make use of jockey.
 
217
        $(Q)rm -f $(FISH_SCRIPTS)/12-$(PACKAGE_NAME)-$(PACKAGE_VERSION).sh
 
218
        $(Q)touch $(FISH_SCRIPTS)/12-$(PACKAGE_NAME)-$(PACKAGE_VERSION).sh
 
219
        $(Q)echo "#!/bin/bash" >> $(FISH_SCRIPTS)/12-$(PACKAGE_NAME)-$(PACKAGE_VERSION).sh
 
220
        $(Q)echo ". /usr/share/dell/scripts/fifuncs" >> $(FISH_SCRIPTS)/12-$(PACKAGE_NAME)-$(PACKAGE_VERSION).sh
 
221
        $(Q)echo "apt-get install --allow-unauthenticated $(PACKAGE_NAME)-dkms"  >> \
 
222
        $(FISH_SCRIPTS)/12-$(PACKAGE_NAME)-$(PACKAGE_VERSION).sh
 
223
 
 
224
        $(Q)chmod +x $(FISH_SCRIPTS)/*.sh
 
225
 
 
226
        $(Q)cd $(FISH_BUILD); \
 
227
        tar czf $(TOP)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)_$(FISH_VERSION).tar.gz *; \
 
228
        mv $(TOP)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)_$(FISH_VERSION).tar.gz $(TOP)/../
 
229
        @echo "Done."
 
230
 
 
231
mrproper: clean dkms-clean
 
232
 
 
233
help:
 
234
        @echo "This tree provides for $(PACKAGE_NAME) $(PACKAGE_VERSION)"
 
235
        @echo "make help            this text"
 
236
        @echo "make pre-built       build dkms binaries against all targets and generate a binary Debian package"
 
237
        @echo "make source-only     build dkms source-only binary Debian package"
 
238
        @echo "make source-only-dsc build dkms source-only source Debian package"
 
239
        @echo "make pre-built-dsc   build dkms binaries against all tagets and generate a source Debian package"
 
240
        @echo "make driver KBUILD_TARGET=...  build driver against any version"
 
241
        @echo "make clean           compliment of driver target, for development"
 
242
        @echo "Note: add "fish" at the end of the make command to also make a FISH package"