Commit | Line | Data |
---|---|---|
7fe2f639 DB |
1 | # Makefile for cpupowerutils |
2 | # | |
3 | # Copyright (C) 2005,2006 Dominik Brodowski <linux@dominikbrodowski.net> | |
4 | # | |
5 | # Based largely on the Makefile for udev by: | |
6 | # | |
7 | # Copyright (C) 2003,2004 Greg Kroah-Hartman <greg@kroah.com> | |
8 | # | |
9 | # This program is free software; you can redistribute it and/or modify | |
10 | # it under the terms of the GNU General Public License as published by | |
11 | # the Free Software Foundation; version 2 of the License. | |
12 | # | |
13 | # This program is distributed in the hope that it will be useful, | |
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 | # General Public License for more details. | |
17 | # | |
18 | # You should have received a copy of the GNU General Public License | |
19 | # along with this program; if not, write to the Free Software | |
20 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | # | |
22 | ||
23 | # --- CONFIGURATION BEGIN --- | |
24 | ||
25 | # Set the following to `true' to make a unstripped, unoptimized | |
26 | # binary. Leave this set to `false' for production use. | |
7443af9c | 27 | DEBUG ?= false |
7fe2f639 DB |
28 | |
29 | # make the build silent. Set this to something else to make it noisy again. | |
30 | V ?= false | |
31 | ||
32 | # Internationalization support (output in different languages). | |
33 | # Requires gettext. | |
34 | NLS ?= true | |
35 | ||
36 | # Set the following to 'true' to build/install the | |
37 | # cpufreq-bench benchmarking tool | |
38 | CPUFRQ_BENCH ?= true | |
39 | ||
40 | # Prefix to the directories we're installing to | |
02af3cb5 | 41 | DESTDIR ?= |
7fe2f639 DB |
42 | |
43 | # --- CONFIGURATION END --- | |
44 | ||
45 | ||
46 | ||
47 | # Package-related definitions. Distributions can modify the version | |
48 | # and _should_ modify the PACKAGE_BUGREPORT definition | |
49 | ||
af594f0c | 50 | VERSION= $(shell ./utils/version-gen.sh) |
7fe2f639 DB |
51 | LIB_MAJ= 0.0.0 |
52 | LIB_MIN= 0 | |
53 | ||
54 | PACKAGE = cpupowerutils | |
55 | PACKAGE_BUGREPORT = cpufreq@vger.kernel.org | |
56 | LANGUAGES = de fr it cs pt | |
57 | ||
58 | ||
59 | # Directory definitions. These are default and most probably | |
60 | # do not need to be changed. Please note that DESTDIR is | |
61 | # added in front of any of them | |
62 | ||
63 | bindir ?= /usr/bin | |
64 | sbindir ?= /usr/sbin | |
65 | mandir ?= /usr/man | |
66 | includedir ?= /usr/include | |
67 | libdir ?= /usr/lib | |
68 | localedir ?= /usr/share/locale | |
69 | docdir ?= /usr/share/doc/packages/cpupowerutils | |
70 | confdir ?= /etc/ | |
71 | ||
72 | # Toolchain: what tools do we use, and what options do they need: | |
73 | ||
74 | CP = cp -fpR | |
75 | INSTALL = /usr/bin/install -c | |
76 | INSTALL_PROGRAM = ${INSTALL} | |
77 | INSTALL_DATA = ${INSTALL} -m 644 | |
78 | INSTALL_SCRIPT = ${INSTALL_PROGRAM} | |
79 | ||
80 | # If you are running a cross compiler, you may want to set this | |
81 | # to something more interesting, like "arm-linux-". If you want | |
82 | # to compile vs uClibc, that can be done here as well. | |
83 | CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc- | |
84 | CC = $(CROSS)gcc | |
85 | LD = $(CROSS)gcc | |
86 | AR = $(CROSS)ar | |
87 | STRIP = $(CROSS)strip | |
88 | RANLIB = $(CROSS)ranlib | |
89 | HOSTCC = gcc | |
90 | ||
91 | ||
92 | # Now we set up the build system | |
93 | # | |
94 | ||
95 | # set up PWD so that older versions of make will work with our build. | |
96 | PWD = $(shell pwd) | |
97 | ||
f5ac0641 DB |
98 | GMO_FILES = ${shell for HLANG in ${LANGUAGES}; do echo po/$$HLANG.gmo; done;} |
99 | ||
7fe2f639 DB |
100 | export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS |
101 | ||
102 | # check if compiler option is supported | |
103 | cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;} | |
104 | ||
105 | # use '-Os' optimization if available, else use -O2 | |
106 | OPTIMIZATION := $(call cc-supports,-Os,-O2) | |
107 | ||
108 | WARNINGS := -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare | |
109 | WARNINGS += $(call cc-supports,-Wno-pointer-sign) | |
110 | WARNINGS += $(call cc-supports,-Wdeclaration-after-statement) | |
111 | WARNINGS += -Wshadow | |
112 | ||
af594f0c | 113 | CFLAGS += -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" \ |
7fe2f639 DB |
114 | -DPACKAGE_BUGREPORT=\"$(PACKAGE_BUGREPORT)\" -D_GNU_SOURCE |
115 | ||
116 | UTIL_OBJS = utils/helpers/amd.o utils/helpers/topology.o utils/helpers/msr.o \ | |
117 | utils/helpers/sysfs.o utils/helpers/misc.o utils/helpers/cpuid.o \ | |
118 | utils/helpers/pci.o utils/helpers/bitmask.o \ | |
119 | utils/idle_monitor/nhm_idle.o utils/idle_monitor/snb_idle.o \ | |
120 | utils/idle_monitor/amd_fam14h_idle.o utils/idle_monitor/cpuidle_sysfs.o \ | |
121 | utils/idle_monitor/mperf_monitor.o utils/idle_monitor/cpupower-monitor.o \ | |
122 | utils/cpupower.o utils/cpufreq-info.o utils/cpufreq-set.o \ | |
123 | utils/cpupower-set.o utils/cpupower-info.o utils/cpuidle-info.o | |
124 | ||
125 | UTIL_HEADERS = utils/helpers/helpers.h utils/idle_monitor/cpupower-monitor.h \ | |
126 | utils/helpers/bitmask.h \ | |
127 | utils/idle_monitor/idle_monitors.h utils/idle_monitor/idle_monitors.def | |
128 | ||
129 | UTIL_SRC := $(UTIL_OBJS:.o=.c) | |
130 | ||
131 | LIB_HEADERS = lib/cpufreq.h lib/sysfs.h | |
132 | LIB_SRC = lib/cpufreq.c lib/sysfs.c | |
133 | LIB_OBJS = lib/cpufreq.o lib/sysfs.o | |
134 | ||
135 | CFLAGS += -pipe | |
136 | ||
137 | ifeq ($(strip $(NLS)),true) | |
138 | INSTALL_NLS += install-gmo | |
f5ac0641 | 139 | COMPILE_NLS += create-gmo |
7fe2f639 DB |
140 | endif |
141 | ||
142 | ifeq ($(strip $(CPUFRQ_BENCH)),true) | |
143 | INSTALL_BENCH += install-bench | |
144 | COMPILE_BENCH += compile-bench | |
145 | endif | |
146 | ||
147 | CFLAGS += $(WARNINGS) | |
148 | ||
149 | ifeq ($(strip $(V)),false) | |
7443af9c DB |
150 | QUIET=@ |
151 | ECHO=@echo | |
7fe2f639 DB |
152 | else |
153 | QUIET= | |
7443af9c | 154 | ECHO=@\# |
7fe2f639 | 155 | endif |
7443af9c | 156 | export QUIET ECHO |
7fe2f639 DB |
157 | |
158 | # if DEBUG is enabled, then we do not strip or optimize | |
159 | ifeq ($(strip $(DEBUG)),true) | |
af594f0c | 160 | CFLAGS += -O1 -g -DDEBUG |
7fe2f639 DB |
161 | STRIPCMD = /bin/true -Since_we_are_debugging |
162 | else | |
163 | CFLAGS += $(OPTIMIZATION) -fomit-frame-pointer | |
164 | STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment | |
165 | endif | |
166 | ||
167 | ||
168 | # the actual make rules | |
169 | ||
4c22337f | 170 | all: libcpupower cpupower $(COMPILE_NLS) $(COMPILE_BENCH) |
7fe2f639 | 171 | |
7443af9c DB |
172 | lib/%.o: $(LIB_SRC) $(LIB_HEADERS) |
173 | $(ECHO) " CC " $@ | |
af594f0c | 174 | $(QUIET) $(CC) $(CFLAGS) -fPIC -o $@ -c lib/$*.c |
7fe2f639 | 175 | |
4c22337f | 176 | libcpupower.so.$(LIB_MAJ): $(LIB_OBJS) |
7443af9c | 177 | $(ECHO) " LD " $@ |
af594f0c | 178 | $(QUIET) $(CC) -shared $(CFLAGS) $(LDFLAGS) -o $@ \ |
4c22337f TR |
179 | -Wl,-soname,libcpupower.so.$(LIB_MIN) $(LIB_OBJS) |
180 | @ln -sf $@ libcpupower.so | |
181 | @ln -sf $@ libcpupower.so.$(LIB_MIN) | |
7fe2f639 | 182 | |
4c22337f | 183 | libcpupower: libcpupower.so.$(LIB_MAJ) |
7fe2f639 DB |
184 | |
185 | # Let all .o files depend on its .c file and all headers | |
186 | # Might be worth to put this into utils/Makefile at some point of time | |
187 | $(UTIL_OBJS): $(UTIL_HEADERS) | |
188 | ||
189 | .c.o: | |
7443af9c | 190 | $(ECHO) " CC " $@ |
af594f0c | 191 | $(QUIET) $(CC) $(CFLAGS) -I./lib -I ./utils -o $@ -c $*.c |
7fe2f639 | 192 | |
4c22337f | 193 | cpupower: $(UTIL_OBJS) libcpupower.so.$(LIB_MAJ) |
7443af9c | 194 | $(ECHO) " CC " $@ |
4c22337f | 195 | $(QUIET) $(CC) $(CFLAGS) $(LDFLAGS) -lcpupower -lrt -lpci -L. -o $@ $(UTIL_OBJS) |
7443af9c | 196 | $(QUIET) $(STRIPCMD) $@ |
7fe2f639 DB |
197 | |
198 | po/$(PACKAGE).pot: $(UTIL_SRC) | |
f5ac0641 DB |
199 | $(ECHO) " GETTEXT " $@ |
200 | $(QUIET) xgettext --default-domain=$(PACKAGE) --add-comments \ | |
7fe2f639 DB |
201 | --keyword=_ --keyword=N_ $(UTIL_SRC) && \ |
202 | test -f $(PACKAGE).po && \ | |
203 | mv -f $(PACKAGE).po po/$(PACKAGE).pot | |
204 | ||
f5ac0641 DB |
205 | po/%.gmo: po/%.po |
206 | $(ECHO) " MSGFMT " $@ | |
207 | $(QUIET) msgfmt -o $@ po/$*.po | |
208 | ||
209 | create-gmo: ${GMO_FILES} | |
210 | ||
211 | update-po: po/$(PACKAGE).pot | |
212 | $(ECHO) " MSGMRG " $@ | |
213 | $(QUIET) @for HLANG in $(LANGUAGES); do \ | |
214 | echo -n "Updating $$HLANG "; \ | |
7fe2f639 DB |
215 | if msgmerge po/$$HLANG.po po/$(PACKAGE).pot -o \ |
216 | po/$$HLANG.new.po; then \ | |
217 | mv -f po/$$HLANG.new.po po/$$HLANG.po; \ | |
218 | else \ | |
219 | echo "msgmerge for $$HLANG failed!"; \ | |
220 | rm -f po/$$HLANG.new.po; \ | |
221 | fi; \ | |
7fe2f639 DB |
222 | done; |
223 | ||
4c22337f | 224 | compile-bench: libcpupower.so.$(LIB_MAJ) |
7fe2f639 DB |
225 | @V=$(V) confdir=$(confdir) $(MAKE) -C bench |
226 | ||
227 | clean: | |
228 | -find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print \ | |
229 | | xargs rm -f | |
230 | -rm -f $(UTIL_BINS) | |
231 | -rm -f $(IDLE_OBJS) | |
232 | -rm -f cpupower | |
4c22337f | 233 | -rm -f libcpupower.so* |
7fe2f639 DB |
234 | -rm -rf po/*.gmo po/*.pot |
235 | $(MAKE) -C bench clean | |
236 | ||
237 | ||
238 | install-lib: | |
239 | $(INSTALL) -d $(DESTDIR)${libdir} | |
4c22337f | 240 | $(CP) libcpupower.so* $(DESTDIR)${libdir}/ |
7fe2f639 DB |
241 | $(INSTALL) -d $(DESTDIR)${includedir} |
242 | $(INSTALL_DATA) lib/cpufreq.h $(DESTDIR)${includedir}/cpufreq.h | |
243 | ||
244 | install-tools: | |
245 | $(INSTALL) -d $(DESTDIR)${bindir} | |
246 | $(INSTALL_PROGRAM) cpupower $(DESTDIR)${bindir} | |
247 | ||
248 | install-man: | |
249 | $(INSTALL_DATA) -D man/cpupower.1 $(DESTDIR)${mandir}/man1/cpupower.1 | |
250 | $(INSTALL_DATA) -D man/cpupower-frequency-set.1 $(DESTDIR)${mandir}/man1/cpupower-frequency-set.1 | |
251 | $(INSTALL_DATA) -D man/cpupower-frequency-info.1 $(DESTDIR)${mandir}/man1/cpupower-frequency-info.1 | |
252 | $(INSTALL_DATA) -D man/cpupower-set.1 $(DESTDIR)${mandir}/man1/cpupower-set.1 | |
253 | $(INSTALL_DATA) -D man/cpupower-info.1 $(DESTDIR)${mandir}/man1/cpupower-info.1 | |
254 | $(INSTALL_DATA) -D man/cpupower-monitor.1 $(DESTDIR)${mandir}/man1/cpupower-monitor.1 | |
255 | ||
256 | install-gmo: | |
257 | $(INSTALL) -d $(DESTDIR)${localedir} | |
258 | for HLANG in $(LANGUAGES); do \ | |
259 | echo '$(INSTALL_DATA) -D po/$$HLANG.gmo $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupowerutils.mo'; \ | |
260 | $(INSTALL_DATA) -D po/$$HLANG.gmo $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupowerutils.mo; \ | |
261 | done; | |
262 | ||
263 | install-bench: | |
264 | @#DESTDIR must be set from outside to survive | |
265 | @sbindir=$(sbindir) bindir=$(bindir) docdir=$(docdir) confdir=$(confdir) $(MAKE) -C bench install | |
7443af9c | 266 | |
7fe2f639 DB |
267 | install: all install-lib install-tools install-man $(INSTALL_NLS) $(INSTALL_BENCH) |
268 | ||
269 | uninstall: | |
4c22337f | 270 | - rm -f $(DESTDIR)${libdir}/libcpupower.* |
7fe2f639 DB |
271 | - rm -f $(DESTDIR)${includedir}/cpufreq.h |
272 | - rm -f $(DESTDIR)${bindir}/utils/cpupower | |
273 | - rm -f $(DESTDIR)${mandir}/man1/cpufreq-set.1 | |
274 | - rm -f $(DESTDIR)${mandir}/man1/cpufreq-info.1 | |
275 | - for HLANG in $(LANGUAGES); do \ | |
276 | rm -f $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupowerutils.mo; \ | |
277 | done; | |
278 | ||
4c22337f | 279 | .PHONY: all utils libcpupower update-po create-gmo install-lib install-tools install-man install-gmo install uninstall clean |