cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Makefile (10713B)


      1# SPDX-License-Identifier: GPL-2.0-only
      2# Makefile for cpupower
      3#
      4# Copyright (C) 2005,2006 Dominik Brodowski <linux@dominikbrodowski.net>
      5#
      6# Based largely on the Makefile for udev by:
      7#
      8# Copyright (C) 2003,2004 Greg Kroah-Hartman <greg@kroah.com>
      9#
     10OUTPUT=./
     11ifeq ("$(origin O)", "command line")
     12	OUTPUT := $(O)/
     13endif
     14
     15ifneq ($(OUTPUT),)
     16# check that the output directory actually exists
     17OUTDIR := $(shell cd $(OUTPUT) && pwd)
     18$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
     19endif
     20
     21
     22# --- CONFIGURATION BEGIN ---
     23
     24# Set the following to `true' to make a unstripped, unoptimized
     25# binary. Leave this set to `false' for production use.
     26DEBUG ?=	true
     27
     28# make the build silent. Set this to something else to make it noisy again.
     29V ?=		false
     30
     31# Internationalization support (output in different languages).
     32# Requires gettext.
     33NLS ?=		true
     34
     35# Set the following to 'true' to build/install the
     36# cpufreq-bench benchmarking tool
     37CPUFREQ_BENCH ?= true
     38
     39# Do not build libraries, but build the code in statically
     40# Libraries are still built, otherwise the Makefile code would
     41# be rather ugly.
     42export STATIC ?= false
     43
     44# Prefix to the directories we're installing to
     45DESTDIR ?=
     46
     47# --- CONFIGURATION END ---
     48
     49
     50
     51# Package-related definitions. Distributions can modify the version
     52# and _should_ modify the PACKAGE_BUGREPORT definition
     53
     54VERSION:=			$(shell ./utils/version-gen.sh)
     55LIB_MAJ=			0.0.1
     56LIB_MIN=			0
     57
     58PACKAGE =			cpupower
     59PACKAGE_BUGREPORT =		linux-pm@vger.kernel.org
     60LANGUAGES = 			de fr it cs pt
     61
     62
     63# Directory definitions. These are default and most probably
     64# do not need to be changed. Please note that DESTDIR is
     65# added in front of any of them
     66
     67bindir ?=	/usr/bin
     68sbindir ?=	/usr/sbin
     69mandir ?=	/usr/man
     70includedir ?=	/usr/include
     71localedir ?=	/usr/share/locale
     72docdir ?=       /usr/share/doc/packages/cpupower
     73confdir ?=      /etc/
     74bash_completion_dir ?= /usr/share/bash-completion/completions
     75
     76# Toolchain: what tools do we use, and what options do they need:
     77
     78CP = cp -fpR
     79INSTALL = /usr/bin/install -c
     80INSTALL_PROGRAM = ${INSTALL}
     81INSTALL_DATA  = ${INSTALL} -m 644
     82#bash completion scripts get sourced and so they should be rw only.
     83INSTALL_SCRIPT = ${INSTALL} -m 644
     84
     85# If you are running a cross compiler, you may want to set this
     86# to something more interesting, like "arm-linux-".  If you want
     87# to compile vs uClibc, that can be done here as well.
     88CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
     89CC = $(CROSS)gcc
     90LD = $(CROSS)gcc
     91AR = $(CROSS)ar
     92STRIP = $(CROSS)strip
     93RANLIB = $(CROSS)ranlib
     94HOSTCC = gcc
     95MKDIR = mkdir
     96
     97# 64bit library detection
     98include ../../scripts/Makefile.arch
     99
    100ifeq ($(IS_64_BIT), 1)
    101libdir ?=	/usr/lib64
    102else
    103libdir ?=	/usr/lib
    104endif
    105
    106# Now we set up the build system
    107#
    108
    109GMO_FILES = ${shell for HLANG in ${LANGUAGES}; do echo $(OUTPUT)po/$$HLANG.gmo; done;}
    110
    111export CROSS CC AR STRIP RANLIB CFLAGS LDFLAGS LIB_OBJS
    112
    113# check if compiler option is supported
    114cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -x c /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
    115
    116# use '-Os' optimization if available, else use -O2
    117OPTIMIZATION := $(call cc-supports,-Os,-O2)
    118
    119WARNINGS := -Wall -Wchar-subscripts -Wpointer-arith -Wsign-compare
    120WARNINGS += $(call cc-supports,-Wno-pointer-sign)
    121WARNINGS += $(call cc-supports,-Wdeclaration-after-statement)
    122WARNINGS += -Wshadow
    123
    124override CFLAGS += -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" \
    125		-DPACKAGE_BUGREPORT=\"$(PACKAGE_BUGREPORT)\" -D_GNU_SOURCE
    126
    127UTIL_OBJS =  utils/helpers/amd.o utils/helpers/msr.o \
    128	utils/helpers/sysfs.o utils/helpers/misc.o utils/helpers/cpuid.o \
    129	utils/helpers/pci.o utils/helpers/bitmask.o \
    130	utils/idle_monitor/nhm_idle.o utils/idle_monitor/snb_idle.o \
    131	utils/idle_monitor/hsw_ext_idle.o \
    132	utils/idle_monitor/amd_fam14h_idle.o utils/idle_monitor/cpuidle_sysfs.o \
    133	utils/idle_monitor/mperf_monitor.o utils/idle_monitor/cpupower-monitor.o \
    134	utils/cpupower.o utils/cpufreq-info.o utils/cpufreq-set.o \
    135	utils/cpupower-set.o utils/cpupower-info.o utils/cpuidle-info.o \
    136	utils/cpuidle-set.o
    137
    138UTIL_SRC := $(UTIL_OBJS:.o=.c)
    139
    140UTIL_OBJS := $(addprefix $(OUTPUT),$(UTIL_OBJS))
    141
    142UTIL_HEADERS = utils/helpers/helpers.h utils/idle_monitor/cpupower-monitor.h \
    143	utils/helpers/bitmask.h \
    144	utils/idle_monitor/idle_monitors.h utils/idle_monitor/idle_monitors.def
    145
    146LIB_HEADERS = 	lib/cpufreq.h lib/cpupower.h lib/cpuidle.h lib/acpi_cppc.h
    147LIB_SRC = 	lib/cpufreq.c lib/cpupower.c lib/cpuidle.c lib/acpi_cppc.c
    148LIB_OBJS = 	lib/cpufreq.o lib/cpupower.o lib/cpuidle.o lib/acpi_cppc.o
    149LIB_OBJS :=	$(addprefix $(OUTPUT),$(LIB_OBJS))
    150
    151override CFLAGS +=	-pipe
    152
    153ifeq ($(strip $(NLS)),true)
    154	INSTALL_NLS += install-gmo
    155	COMPILE_NLS += create-gmo
    156	override CFLAGS += -DNLS
    157endif
    158
    159ifeq ($(strip $(CPUFREQ_BENCH)),true)
    160	INSTALL_BENCH += install-bench
    161	COMPILE_BENCH += compile-bench
    162endif
    163
    164ifeq ($(strip $(STATIC)),true)
    165        UTIL_OBJS += $(LIB_OBJS)
    166        UTIL_HEADERS += $(LIB_HEADERS)
    167        UTIL_SRC += $(LIB_SRC)
    168endif
    169
    170override CFLAGS += $(WARNINGS)
    171
    172ifeq ($(strip $(V)),false)
    173	QUIET=@
    174	ECHO=@echo
    175else
    176	QUIET=
    177	ECHO=@\#
    178endif
    179export QUIET ECHO
    180
    181# if DEBUG is enabled, then we do not strip or optimize
    182ifeq ($(strip $(DEBUG)),true)
    183	override CFLAGS += -O1 -g -DDEBUG
    184	STRIPCMD = /bin/true -Since_we_are_debugging
    185else
    186	override CFLAGS += $(OPTIMIZATION) -fomit-frame-pointer
    187	STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
    188endif
    189
    190
    191# the actual make rules
    192
    193all: libcpupower $(OUTPUT)cpupower $(COMPILE_NLS) $(COMPILE_BENCH)
    194
    195$(OUTPUT)lib/%.o: $(LIB_SRC) $(LIB_HEADERS)
    196	$(ECHO) "  CC      " $@
    197	$(QUIET) $(CC) $(CFLAGS) -fPIC -o $@ -c lib/$*.c
    198
    199$(OUTPUT)libcpupower.so.$(LIB_MAJ): $(LIB_OBJS)
    200	$(ECHO) "  LD      " $@
    201	$(QUIET) $(CC) -shared $(CFLAGS) $(LDFLAGS) -o $@ \
    202		-Wl,-soname,libcpupower.so.$(LIB_MIN) $(LIB_OBJS)
    203	@ln -sf $(@F) $(OUTPUT)libcpupower.so
    204	@ln -sf $(@F) $(OUTPUT)libcpupower.so.$(LIB_MIN)
    205
    206libcpupower: $(OUTPUT)libcpupower.so.$(LIB_MAJ)
    207
    208# Let all .o files depend on its .c file and all headers
    209# Might be worth to put this into utils/Makefile at some point of time
    210$(UTIL_OBJS): $(UTIL_HEADERS)
    211
    212$(OUTPUT)%.o: %.c
    213	$(ECHO) "  CC      " $@
    214	$(QUIET) $(CC) $(CFLAGS) -I./lib -I ./utils -o $@ -c $*.c
    215
    216$(OUTPUT)cpupower: $(UTIL_OBJS) $(OUTPUT)libcpupower.so.$(LIB_MAJ)
    217	$(ECHO) "  CC      " $@
    218ifeq ($(strip $(STATIC)),true)
    219	$(QUIET) $(CC) $(CFLAGS) $(LDFLAGS) $(UTIL_OBJS) -lrt -lpci -L$(OUTPUT) -o $@
    220else
    221	$(QUIET) $(CC) $(CFLAGS) $(LDFLAGS) $(UTIL_OBJS) -lcpupower -lrt -lpci -L$(OUTPUT) -o $@
    222endif
    223	$(QUIET) $(STRIPCMD) $@
    224
    225$(OUTPUT)po/$(PACKAGE).pot: $(UTIL_SRC)
    226	$(ECHO) "  GETTEXT " $@
    227	$(QUIET) xgettext --default-domain=$(PACKAGE) --add-comments \
    228		--keyword=_ --keyword=N_ $(UTIL_SRC) -p $(@D) -o $(@F)
    229
    230$(OUTPUT)po/%.gmo: po/%.po
    231	$(ECHO) "  MSGFMT  " $@
    232	$(QUIET) msgfmt -o $@ po/$*.po
    233
    234create-gmo: ${GMO_FILES}
    235
    236update-po: $(OUTPUT)po/$(PACKAGE).pot
    237	$(ECHO) "  MSGMRG  " $@
    238	$(QUIET) @for HLANG in $(LANGUAGES); do \
    239		echo -n "Updating $$HLANG "; \
    240		if msgmerge po/$$HLANG.po $< -o \
    241		   $(OUTPUT)po/$$HLANG.new.po; then \
    242			mv -f $(OUTPUT)po/$$HLANG.new.po $(OUTPUT)po/$$HLANG.po; \
    243		else \
    244			echo "msgmerge for $$HLANG failed!"; \
    245			rm -f $(OUTPUT)po/$$HLANG.new.po; \
    246		fi; \
    247	done;
    248
    249compile-bench: $(OUTPUT)libcpupower.so.$(LIB_MAJ)
    250	@V=$(V) confdir=$(confdir) $(MAKE) -C bench O=$(OUTPUT)
    251
    252# we compile into subdirectories. if the target directory is not the
    253# source directory, they might not exists. So we depend the various
    254# files onto their directories.
    255DIRECTORY_DEPS = $(LIB_OBJS) $(UTIL_OBJS) $(GMO_FILES)
    256$(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
    257
    258# In the second step, we make a rule to actually create these directories
    259$(sort $(dir $(DIRECTORY_DEPS))):
    260	$(ECHO) "  MKDIR      " $@
    261	$(QUIET) $(MKDIR) -p $@ 2>/dev/null
    262
    263clean:
    264	-find $(OUTPUT) \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print \
    265	 | xargs rm -f
    266	-rm -f $(OUTPUT)cpupower
    267	-rm -f $(OUTPUT)libcpupower.so*
    268	-rm -rf $(OUTPUT)po/*.gmo
    269	-rm -rf $(OUTPUT)po/*.pot
    270	$(MAKE) -C bench O=$(OUTPUT) clean
    271
    272
    273install-lib: libcpupower
    274	$(INSTALL) -d $(DESTDIR)${libdir}
    275	$(CP) $(OUTPUT)libcpupower.so* $(DESTDIR)${libdir}/
    276	$(INSTALL) -d $(DESTDIR)${includedir}
    277	$(INSTALL_DATA) lib/cpufreq.h $(DESTDIR)${includedir}/cpufreq.h
    278	$(INSTALL_DATA) lib/cpuidle.h $(DESTDIR)${includedir}/cpuidle.h
    279
    280install-tools: $(OUTPUT)cpupower
    281	$(INSTALL) -d $(DESTDIR)${bindir}
    282	$(INSTALL_PROGRAM) $(OUTPUT)cpupower $(DESTDIR)${bindir}
    283	$(INSTALL) -d $(DESTDIR)${bash_completion_dir}
    284	$(INSTALL_SCRIPT) cpupower-completion.sh '$(DESTDIR)${bash_completion_dir}/cpupower'
    285
    286install-man:
    287	$(INSTALL_DATA) -D man/cpupower.1 $(DESTDIR)${mandir}/man1/cpupower.1
    288	$(INSTALL_DATA) -D man/cpupower-frequency-set.1 $(DESTDIR)${mandir}/man1/cpupower-frequency-set.1
    289	$(INSTALL_DATA) -D man/cpupower-frequency-info.1 $(DESTDIR)${mandir}/man1/cpupower-frequency-info.1
    290	$(INSTALL_DATA) -D man/cpupower-idle-set.1 $(DESTDIR)${mandir}/man1/cpupower-idle-set.1
    291	$(INSTALL_DATA) -D man/cpupower-idle-info.1 $(DESTDIR)${mandir}/man1/cpupower-idle-info.1
    292	$(INSTALL_DATA) -D man/cpupower-set.1 $(DESTDIR)${mandir}/man1/cpupower-set.1
    293	$(INSTALL_DATA) -D man/cpupower-info.1 $(DESTDIR)${mandir}/man1/cpupower-info.1
    294	$(INSTALL_DATA) -D man/cpupower-monitor.1 $(DESTDIR)${mandir}/man1/cpupower-monitor.1
    295
    296install-gmo: create-gmo
    297	$(INSTALL) -d $(DESTDIR)${localedir}
    298	for HLANG in $(LANGUAGES); do \
    299		echo '$(INSTALL_DATA) -D $(OUTPUT)po/$$HLANG.gmo $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupower.mo'; \
    300		$(INSTALL_DATA) -D $(OUTPUT)po/$$HLANG.gmo $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupower.mo; \
    301	done;
    302
    303install-bench: compile-bench
    304	@#DESTDIR must be set from outside to survive
    305	@sbindir=$(sbindir) bindir=$(bindir) docdir=$(docdir) confdir=$(confdir) $(MAKE) -C bench O=$(OUTPUT) install
    306
    307ifeq ($(strip $(STATIC)),true)
    308install: all install-tools install-man $(INSTALL_NLS) $(INSTALL_BENCH)
    309else
    310install: all install-lib install-tools install-man $(INSTALL_NLS) $(INSTALL_BENCH)
    311endif
    312
    313uninstall:
    314	- rm -f $(DESTDIR)${libdir}/libcpupower.*
    315	- rm -f $(DESTDIR)${includedir}/cpufreq.h
    316	- rm -f $(DESTDIR)${includedir}/cpuidle.h
    317	- rm -f $(DESTDIR)${bindir}/utils/cpupower
    318	- rm -f $(DESTDIR)${mandir}/man1/cpupower.1
    319	- rm -f $(DESTDIR)${mandir}/man1/cpupower-frequency-set.1
    320	- rm -f $(DESTDIR)${mandir}/man1/cpupower-frequency-info.1
    321	- rm -f $(DESTDIR)${mandir}/man1/cpupower-set.1
    322	- rm -f $(DESTDIR)${mandir}/man1/cpupower-info.1
    323	- rm -f $(DESTDIR)${mandir}/man1/cpupower-monitor.1
    324	- for HLANG in $(LANGUAGES); do \
    325		rm -f $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupower.mo; \
    326	  done;
    327
    328.PHONY: all utils libcpupower update-po create-gmo install-lib install-tools install-man install-gmo install uninstall clean