root/lm-sensors/trunk/Makefile @ 575

Revision 575, 9.1 KB (checked in by frodo, 15 years ago)

Makefile changes for better behaviour with already patched kernels.

The Makefile now examine $(LINUX)/.config to see what modules need to be
compiled. It compiles only those modules which were either not configured
in at all, or were built as modules (ie. drivers which are built-in in the
kernel are not built, as they can not be overruled).

The above is still potentially dangerous, if we break the interface of
our modules. Still, it is much better than it was.
C

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#  Makefile - Makefile for a Linux module for reading sensor data.
2#  Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
3#
4#  This program is free software; you can redistribute it and/or modify
5#  it under the terms of the GNU General Public License as published by
6#  the Free Software Foundation; either version 2 of the License, or
7#  (at your option) any later version.
8#
9#  This program is distributed in the hope that it will be useful,
10#  but WITHOUT ANY WARRANTY; without even the implied warranty of
11#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12#  GNU General Public License for more details.
13#
14#  You should have received a copy of the GNU General Public License
15#  along with this program; if not, write to the Free Software
16#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18# Everything you may want to change is in the top of this file. Usually, you
19# can just use the defaults, fortunately.
20
21# You need a full complement of GNU utilities to run this Makefile succesfully;
22# most notably, you need bash, GNU make, flex and bison.
23
24# If your /bin/sh is not bash, change the below definition so that make can
25# find bash. Or you can hope your sh-like shell understands all scripts.
26# I think so, but I have not tested it.
27# SHELL=/usr/bin/bash
28
29# The location of linux itself. This is used to find the kernel headers
30# and other things.
31LINUX=/usr/src/linux
32LINUX_HEADERS=$(LINUX)/include
33
34# Determine whether we need to compile the kernel modules, or only the
35# user-space utilities. By default, the kernel modules are compiled.
36#COMPILE_KERNEL := 0
37COMPILE_KERNEL := 1
38
39# If you have installed the i2c header at some other place (like
40# /usr/local/include/linux), set that directory here. Please check this out
41# if you get strange compilation errors; the default Linux i2c headers
42# may be used mistakenly.
43I2C_HEADERS=/usr/local/include
44#I2C_HEADERS=$(LINUX_HEADERS)
45
46# Uncomment the third line on SMP systems if the magic invocation fails. It
47# is a bit complicated because SMP configuration changed around kernel 2.1.130
48SMP := $(shell if grep -q '^SMP[[:space:]]*=' $(LINUX)/Makefile || \
49                  grep -q '^[[:space:]]*\#define[[:space:]]*CONFIG_SMP[[:space:]]*1' $(LINUX_HEADERS)/linux/autoconf.h ; \
50               then echo 1; else echo 0; fi)
51#SMP := 0
52#SMP := 1
53
54# Uncomment the second or third line if the magic invocation fails.
55# We need to know whether CONFIG_MODVERSIONS is defined.
56MODVER := $(shell if cat $(LINUX_HEADERS)/linux/config.h $(LINUX_HEADERS)/linux/autoconf.h 2>/dev/null | grep -q '^[[:space:]]*\#define[[:space:]]*CONFIG_MODVERSIONS[[:space:]]*1'; then echo 1; else echo 0; fi)
57#MODVER := 0
58#MODVER := 1
59
60# Uncomment the second line if you are a developer. This will enable many
61# additional warnings at compile-time
62WARN := 0
63#WARN := 1
64
65# Uncomment the second line if you want to get (loads of) debug information
66# at run-time.
67# Not recommended, unless you are actually debugging the code
68DEBUG := 0
69#DEBUG := 1
70
71# This is the prefix that will be used for almost all directories below.
72PREFIX := /usr/local
73
74# This is the directory into which the modules will be installed.
75# The magic invocation will return something like this:
76#   /lib/modules/2.2.15-ac9/extra/misc
77MODDIR := /lib/modules/`sed -ne '1,4 { s/.*= *\(.*\)/\1/; 1,2 s/.*/&./; p; };' <$(LINUX)/Makefile | tr -d '\n'`/misc
78
79# This is the directory where sensors.conf will be installed, if no other
80# configuration file is found
81ETCDIR := /etc
82
83# You should not need to change this. It is the directory into which the
84# library files (both static and shared) will be installed.
85LIBDIR := $(PREFIX)/lib
86
87# You should not need to change this. It is the directory into which the
88# executable program files will be installed. BINDIR for programs that are
89# also useful for normal users, SBINDIR for programs that can only be run
90# by the superuser.
91# Note that not all programs in this package are really installed;
92# some are just examples. You can always install them by hand, of
93# course.
94BINDIR := $(PREFIX)/bin
95SBINDIR := $(PREFIX)/sbin
96
97# You should not need to change this. It is the basic directory into which
98# include files will be installed. The actual directory will be
99# $(INCLUDEDIR)/linux for system include files, and $(INCLUDEDIR)/sensors
100# for library include files. If PREFIX equals the default /usr/local/bin,
101# you will be able to use '#include <linux/sensors.h>' regardless of the
102# current kernel selected.
103INCLUDEDIR := $(PREFIX)/include
104SYSINCLUDEDIR := $(INCLUDEDIR)/linux
105LIBINCLUDEDIR := $(INCLUDEDIR)/sensors
106
107# You should not need to change this. It is the base directory under which the
108# manual pages will be installed.
109MANDIR := $(PREFIX)/man
110
111# You should not need to change this. It defines the manual owner and group
112# as which manual pages are installed.
113MANOWN := root
114MANGRP := root
115
116##################################################
117# Below this, nothing should need to be changed. #
118##################################################
119
120# Note that this is a monolithic Makefile; it calls no sub-Makefiles,
121# but instead, it compiles everything right from here. Yes, there are
122# some distinct advantages to this; see the following paper for more info:
123#   http://www.tip.net.au/~millerp/rmch/recu-make-cons-harm.html
124# Note that is still uses Makefile fragments in sub-directories; these
125# are called 'Module.mk'.
126
127# Within each Module.mk, rules and dependencies can be added to targets
128# all, install and clean. Use double colons instead of single ones
129# to do this.
130
131# The subdirectories we need to build things in
132SRCDIRS := 
133ifeq ($(COMPILE_KERNEL),1)
134SRCDIRS += kernel kernel/busses kernel/chips kernel/include
135endif
136SRCDIRS += lib prog/sensors prog/dump prog/detect etc
137
138# Some often-used commands with default options
139MKDIR := mkdir -p
140RM := rm -f
141CC := gcc
142BISON := bison
143FLEX := flex
144AR := ar
145INSTALL := install
146LN := ln -sfn
147GREP := grep
148
149# Determine the default compiler flags
150# MODCFLAGS is to create in-kernel object files (modules); PROGFLAGS is to
151# create non-kernel object files (which are linked into executables).
152# ARCFLAGS are used to create archive object files (static libraries), and
153# LIBCFLAGS are for shared library objects.
154CFLAGS := -I. -Ikernel/include -I$(I2C_HEADERS) -I$(LINUX_HEADERS) -O2
155
156ifeq ($(DEBUG),1)
157CFLAGS += -DDEBUG
158endif
159
160ifeq ($(WARN),1)
161CFLAGS += -Wall -Wstrict-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
162          -Wcast-align -Wwrite-strings -Wnested-externs -Winline
163endif
164
165MODCFLAGS := $(CFLAGS) -D__KERNEL__ -DMODULE -fomit-frame-pointer
166MODCFLAGS := $(MODCFLAGS) -DEXPORT_SYMTAB
167PROGCFLAGS := $(CFLAGS)
168ARCFLAGS := $(CFLAGS)
169LIBCFLAGS := $(CFLAGS) -fpic
170
171ifeq ($(SMP),1)
172MODCFLAGS += -D__SMP__
173endif
174
175ifeq ($(MODVER),1)
176MODCFLAGS += -DMODVERSIONS -include $(LINUX_HEADERS)/linux/modversions.h
177endif
178
179.PHONY: all clean install version package dep
180
181# Make all the default rule
182all::
183
184# Include all makefiles for sub-modules
185INCLUDEFILES := 
186include $(patsubst %,%/Module.mk,$(SRCDIRS))
187ifneq ($(MAKECMDGOALS),clean)
188include $(INCLUDEFILES)
189endif
190
191# Making the dependency files - done automatically!
192dep :
193
194all ::
195
196install :: all
197
198clean::
199        $(RM) lm_sensors-*
200
201# This is tricky, but it works like a charm. It needs lots of utilities
202# though: cut, find, gzip, ln, tail and tar.
203package: version clean
204        lmversion=`tail -1 version.h|cut -f 2 -d \"`; \
205        lmpackage=lm_sensors-$$lmversion; \
206        ln -s . $$lmpackage;  \
207        find $$lmpackage/ -type f | grep -v ^$$lmpackage/$$lmpackage$$ | \
208                                    grep -v ^$$lmpackage/$$lmpackage.tar$$ | \
209                                    grep -v ^$$lmpackage/$$ | \
210                                    grep -v /CVS | \
211                                    grep -v /\\.# | \
212                                    tar rvf $$lmpackage.tar -T -; \
213        gzip -9 $$lmpackage.tar ;\
214        $(RM) $$lmpackage.tar $$lmpackage
215        cat doc/developers/checklist
216
217version:
218        $(RM) version.h
219        echo '#define LM_DATE "'`date +'%Y%m%d'`\" > version.h
220        echo -n 'Version: '; \
221        echo '#define LM_VERSION "'`read VER; echo $$VER`\" >> version.h
222
223
224# Here, we define all implicit rules we want to use.
225
226.SUFFIXES:
227
228# We need to create dependency files. Tricky. We sed rule puts dir/file.d and
229# dir/file.c # in front of the dependency file rule.
230
231# .o files are used for modules
232%.o: %.c
233        $(CC) $(MODCFLAGS) -c $< -o $@
234
235%.d: %.c
236        $(CC) -M -MG $(MODCFLAGS) $< | \
237        sed -e 's@^\(.*\)\.o:@$*.d $*.o: Makefile '`dirname $*.d`/Module.mk' @' > $@
238
239
240
241# .ro files are used for programs (as opposed to modules)
242%.ro: %.c
243        $(CC) $(PROGCFLAGS) -c $< -o $@
244
245%.rd: %.c
246        $(CC) -M -MG $(PROGCFLAGS) $< | \
247        sed -e 's@^\(.*\)\.o:@$*.rd $*.ro: Makefile '`dirname $*.rd`/Module.mk' @' > $@
248
249
250%: %.ro
251        $(CC) $(EXLDFLAGS) -o $@ $^
252
253
254# .ao files are used for static archives
255%.ao: %.c
256        $(CC) $(ARCFLAGS) -c $< -o $@
257
258%.ad: %.c
259        $(CC) -M -MG $(ARCFLAGS) $< | \
260        sed -e 's@^\(.*\)\.o:@$*.ad $*.ao: Makefile '`dirname $*.ad`/Module.mk' @' > $@
261
262
263# .lo files are used for shared libraries
264%.lo: %.c
265        $(CC) $(LIBCFLAGS) -c $< -o $@
266
267%.ld: %.c
268        $(CC) -M -MG $(LIBCFLAGS) $< | \
269        sed -e 's@^\(.*\)\.o:@$*.ld $*.lo: Makefile '`dirname $*.ld`/Module.mk' @' > $@
270
271
272# Flex and Bison
273%c: %y
274        $(BISON) -p sensors_yy -d $< -o $@
275
276%.c: %.l
277        $(FLEX) -Psensors_yy -t $< > $@
Note: See TracBrowser for help on using the browser.