1# Makefile for cpupower 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. 27DEBUG ?= false 28 29# make the build silent. Set this to something else to make it noisy again. 30V ?= false 31 32# Internationalization support (output in different languages). 33# Requires gettext. 34NLS ?= true 35 36# Set the following to 'true' to build/install the 37# cpufreq-bench benchmarking tool 38CPUFRQ_BENCH ?= true 39 40# Prefix to the directories we're installing to 41DESTDIR ?= 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 50VERSION= $(shell ./utils/version-gen.sh) 51LIB_MAJ= 0.0.0 52LIB_MIN= 0 53 54PACKAGE = cpupower 55PACKAGE_BUGREPORT = cpufreq@vger.kernel.org 56LANGUAGES = 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 63bindir ?= /usr/bin 64sbindir ?= /usr/sbin 65mandir ?= /usr/man 66includedir ?= /usr/include 67libdir ?= /usr/lib 68localedir ?= /usr/share/locale 69docdir ?= /usr/share/doc/packages/cpupower 70confdir ?= /etc/ 71 72# Toolchain: what tools do we use, and what options do they need: 73 74CP = cp -fpR 75INSTALL = /usr/bin/install -c 76INSTALL_PROGRAM = ${INSTALL} 77INSTALL_DATA = ${INSTALL} -m 644 78INSTALL_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. 83CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc- 84CC = $(CROSS)gcc 85LD = $(CROSS)gcc 86AR = $(CROSS)ar 87STRIP = $(CROSS)strip 88RANLIB = $(CROSS)ranlib 89HOSTCC = 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. 96PWD = $(shell pwd) 97 98GMO_FILES = ${shell for HLANG in ${LANGUAGES}; do echo po/$$HLANG.gmo; done;} 99 100export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS 101 102# check if compiler option is supported 103cc-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 106OPTIMIZATION := $(call cc-supports,-Os,-O2) 107 108WARNINGS := -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare 109WARNINGS += $(call cc-supports,-Wno-pointer-sign) 110WARNINGS += $(call cc-supports,-Wdeclaration-after-statement) 111WARNINGS += -Wshadow 112 113CFLAGS += -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" \ 114 -DPACKAGE_BUGREPORT=\"$(PACKAGE_BUGREPORT)\" -D_GNU_SOURCE 115 116UTIL_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 125UTIL_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 129UTIL_SRC := $(UTIL_OBJS:.o=.c) 130 131LIB_HEADERS = lib/cpufreq.h lib/sysfs.h 132LIB_SRC = lib/cpufreq.c lib/sysfs.c 133LIB_OBJS = lib/cpufreq.o lib/sysfs.o 134 135CFLAGS += -pipe 136 137ifeq ($(strip $(NLS)),true) 138 INSTALL_NLS += install-gmo 139 COMPILE_NLS += create-gmo 140endif 141 142ifeq ($(strip $(CPUFRQ_BENCH)),true) 143 INSTALL_BENCH += install-bench 144 COMPILE_BENCH += compile-bench 145endif 146 147CFLAGS += $(WARNINGS) 148 149ifeq ($(strip $(V)),false) 150 QUIET=@ 151 ECHO=@echo 152else 153 QUIET= 154 ECHO=@\# 155endif 156export QUIET ECHO 157 158# if DEBUG is enabled, then we do not strip or optimize 159ifeq ($(strip $(DEBUG)),true) 160 CFLAGS += -O1 -g -DDEBUG 161 STRIPCMD = /bin/true -Since_we_are_debugging 162else 163 CFLAGS += $(OPTIMIZATION) -fomit-frame-pointer 164 STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment 165endif 166 167 168# the actual make rules 169 170all: libcpupower cpupower $(COMPILE_NLS) $(COMPILE_BENCH) 171 172lib/%.o: $(LIB_SRC) $(LIB_HEADERS) 173 $(ECHO) " CC " $@ 174 $(QUIET) $(CC) $(CFLAGS) -fPIC -o $@ -c lib/$*.c 175 176libcpupower.so.$(LIB_MAJ): $(LIB_OBJS) 177 $(ECHO) " LD " $@ 178 $(QUIET) $(CC) -shared $(CFLAGS) $(LDFLAGS) -o $@ \ 179 -Wl,-soname,libcpupower.so.$(LIB_MIN) $(LIB_OBJS) 180 @ln -sf $@ libcpupower.so 181 @ln -sf $@ libcpupower.so.$(LIB_MIN) 182 183libcpupower: libcpupower.so.$(LIB_MAJ) 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: 190 $(ECHO) " CC " $@ 191 $(QUIET) $(CC) $(CFLAGS) -I./lib -I ./utils -o $@ -c $*.c 192 193cpupower: $(UTIL_OBJS) libcpupower.so.$(LIB_MAJ) 194 $(ECHO) " CC " $@ 195 $(QUIET) $(CC) $(CFLAGS) $(LDFLAGS) -lcpupower -lrt -lpci -L. -o $@ $(UTIL_OBJS) 196 $(QUIET) $(STRIPCMD) $@ 197 198po/$(PACKAGE).pot: $(UTIL_SRC) 199 $(ECHO) " GETTEXT " $@ 200 $(QUIET) xgettext --default-domain=$(PACKAGE) --add-comments \ 201 --keyword=_ --keyword=N_ $(UTIL_SRC) && \ 202 test -f $(PACKAGE).po && \ 203 mv -f $(PACKAGE).po po/$(PACKAGE).pot 204 205po/%.gmo: po/%.po 206 $(ECHO) " MSGFMT " $@ 207 $(QUIET) msgfmt -o $@ po/$*.po 208 209create-gmo: ${GMO_FILES} 210 211update-po: po/$(PACKAGE).pot 212 $(ECHO) " MSGMRG " $@ 213 $(QUIET) @for HLANG in $(LANGUAGES); do \ 214 echo -n "Updating $$HLANG "; \ 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; \ 222 done; 223 224compile-bench: libcpupower.so.$(LIB_MAJ) 225 @V=$(V) confdir=$(confdir) $(MAKE) -C bench 226 227clean: 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 233 -rm -f libcpupower.so* 234 -rm -rf po/*.gmo po/*.pot 235 $(MAKE) -C bench clean 236 237 238install-lib: 239 $(INSTALL) -d $(DESTDIR)${libdir} 240 $(CP) libcpupower.so* $(DESTDIR)${libdir}/ 241 $(INSTALL) -d $(DESTDIR)${includedir} 242 $(INSTALL_DATA) lib/cpufreq.h $(DESTDIR)${includedir}/cpufreq.h 243 244install-tools: 245 $(INSTALL) -d $(DESTDIR)${bindir} 246 $(INSTALL_PROGRAM) cpupower $(DESTDIR)${bindir} 247 248install-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 256install-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/cpupower.mo'; \ 260 $(INSTALL_DATA) -D po/$$HLANG.gmo $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupower.mo; \ 261 done; 262 263install-bench: 264 @#DESTDIR must be set from outside to survive 265 @sbindir=$(sbindir) bindir=$(bindir) docdir=$(docdir) confdir=$(confdir) $(MAKE) -C bench install 266 267install: all install-lib install-tools install-man $(INSTALL_NLS) $(INSTALL_BENCH) 268 269uninstall: 270 - rm -f $(DESTDIR)${libdir}/libcpupower.* 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/cpupower.mo; \ 277 done; 278 279.PHONY: all utils libcpupower update-po create-gmo install-lib install-tools install-man install-gmo install uninstall clean 280