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 (8283B)


      1# SPDX-License-Identifier: GPL-2.0
      2# trace-cmd version
      3EP_VERSION = 1
      4EP_PATCHLEVEL = 1
      5EP_EXTRAVERSION = 0
      6
      7# file format version
      8FILE_VERSION = 6
      9
     10MAKEFLAGS += --no-print-directory
     11
     12
     13# Makefiles suck: This macro sets a default value of $(2) for the
     14# variable named by $(1), unless the variable has been set by
     15# environment or command line. This is necessary for CC and AR
     16# because make sets default values, so the simpler ?= approach
     17# won't work as expected.
     18define allow-override
     19  $(if $(or $(findstring environment,$(origin $(1))),\
     20            $(findstring command line,$(origin $(1)))),,\
     21    $(eval $(1) = $(2)))
     22endef
     23
     24# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
     25$(call allow-override,CC,$(CROSS_COMPILE)gcc)
     26$(call allow-override,AR,$(CROSS_COMPILE)ar)
     27$(call allow-override,NM,$(CROSS_COMPILE)nm)
     28$(call allow-override,PKG_CONFIG,pkg-config)
     29
     30EXT = -std=gnu99
     31INSTALL = install
     32
     33# Use DESTDIR for installing into a different root directory.
     34# This is useful for building a package. The program will be
     35# installed in this directory as if it was the root directory.
     36# Then the build tool can move it later.
     37DESTDIR ?=
     38DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
     39
     40LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
     41ifeq ($(LP64), 1)
     42  libdir_relative_temp = lib64
     43else
     44  libdir_relative_temp = lib
     45endif
     46
     47libdir_relative ?= $(libdir_relative_temp)
     48prefix ?= /usr/local
     49libdir = $(prefix)/$(libdir_relative)
     50man_dir = $(prefix)/share/man
     51man_dir_SQ = '$(subst ','\'',$(man_dir))'
     52pkgconfig_dir ?= $(word 1,$(shell $(PKG_CONFIG) 		\
     53			--variable pc_path pkg-config | tr ":" " "))
     54includedir_relative = traceevent
     55includedir = $(prefix)/include/$(includedir_relative)
     56includedir_SQ = '$(subst ','\'',$(includedir))'
     57
     58export man_dir man_dir_SQ INSTALL
     59export DESTDIR DESTDIR_SQ
     60export EVENT_PARSE_VERSION
     61
     62include ../../scripts/Makefile.include
     63
     64# copy a bit from Linux kbuild
     65
     66ifeq ("$(origin V)", "command line")
     67  VERBOSE = $(V)
     68endif
     69ifndef VERBOSE
     70  VERBOSE = 0
     71endif
     72
     73ifeq ($(srctree),)
     74srctree := $(patsubst %/,%,$(dir $(CURDIR)))
     75srctree := $(patsubst %/,%,$(dir $(srctree)))
     76srctree := $(patsubst %/,%,$(dir $(srctree)))
     77#$(info Determined 'srctree' to be $(srctree))
     78endif
     79
     80export prefix libdir src obj
     81
     82# Shell quotes
     83libdir_SQ = $(subst ','\'',$(libdir))
     84libdir_relative_SQ = $(subst ','\'',$(libdir_relative))
     85
     86CONFIG_INCLUDES = 
     87CONFIG_LIBS	=
     88CONFIG_FLAGS	=
     89
     90VERSION		= $(EP_VERSION)
     91PATCHLEVEL	= $(EP_PATCHLEVEL)
     92EXTRAVERSION	= $(EP_EXTRAVERSION)
     93
     94OBJ		= $@
     95N		=
     96
     97EVENT_PARSE_VERSION = $(EP_VERSION).$(EP_PATCHLEVEL).$(EP_EXTRAVERSION)
     98
     99LIB_TARGET  = libtraceevent.a libtraceevent.so.$(EVENT_PARSE_VERSION)
    100LIB_INSTALL = libtraceevent.a libtraceevent.so*
    101LIB_INSTALL := $(addprefix $(OUTPUT),$(LIB_INSTALL))
    102
    103INCLUDES = -I. -I $(srctree)/tools/include $(CONFIG_INCLUDES)
    104
    105# Set compile option CFLAGS
    106ifdef EXTRA_CFLAGS
    107  CFLAGS := $(EXTRA_CFLAGS)
    108else
    109  CFLAGS := -g -Wall
    110endif
    111
    112# Append required CFLAGS
    113override CFLAGS += -fPIC
    114override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
    115override CFLAGS += $(udis86-flags) -D_GNU_SOURCE
    116
    117ifeq ($(VERBOSE),1)
    118  Q =
    119else
    120  Q = @
    121endif
    122
    123# Disable command line variables (CFLAGS) override from top
    124# level Makefile (perf), otherwise build Makefile will get
    125# the same command line setup.
    126MAKEOVERRIDES=
    127
    128export srctree OUTPUT CC LD CFLAGS V
    129build := -f $(srctree)/tools/build/Makefile.build dir=. obj
    130
    131TE_IN      := $(OUTPUT)libtraceevent-in.o
    132LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET))
    133
    134CMD_TARGETS = $(LIB_TARGET)
    135
    136TARGETS = $(CMD_TARGETS)
    137
    138all: all_cmd plugins
    139
    140all_cmd: $(CMD_TARGETS)
    141
    142$(TE_IN): force
    143	$(Q)$(MAKE) $(build)=libtraceevent
    144
    145$(OUTPUT)libtraceevent.so.$(EVENT_PARSE_VERSION): $(TE_IN)
    146	$(QUIET_LINK)$(CC) --shared $(LDFLAGS) $^ -Wl,-soname,libtraceevent.so.$(EP_VERSION) -o $@
    147	@ln -sf $(@F) $(OUTPUT)libtraceevent.so
    148	@ln -sf $(@F) $(OUTPUT)libtraceevent.so.$(EP_VERSION)
    149
    150$(OUTPUT)libtraceevent.a: $(TE_IN)
    151	$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
    152
    153$(OUTPUT)%.so: $(OUTPUT)%-in.o
    154	$(QUIET_LINK)$(CC) $(CFLAGS) -shared $(LDFLAGS) -nostartfiles -o $@ $^
    155
    156define make_version.h
    157  (echo '/* This file is automatically generated. Do not modify. */';		\
    158   echo \#define VERSION_CODE $(shell						\
    159   expr $(VERSION) \* 256 + $(PATCHLEVEL));					\
    160   echo '#define EXTRAVERSION ' $(EXTRAVERSION);				\
    161   echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"';	\
    162   echo '#define FILE_VERSION '$(FILE_VERSION);					\
    163  ) > $1
    164endef
    165
    166define update_version.h
    167  ($(call make_version.h, $@.tmp);		\
    168    if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
    169      rm -f $@.tmp;				\
    170    else					\
    171      echo '  UPDATE                 $@';	\
    172      mv -f $@.tmp $@;				\
    173    fi);
    174endef
    175
    176ep_version.h: force
    177	$(Q)$(N)$(call update_version.h)
    178
    179VERSION_FILES = ep_version.h
    180
    181define update_dir
    182  (echo $1 > $@.tmp;				\
    183   if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
    184     rm -f $@.tmp;				\
    185   else						\
    186     echo '  UPDATE                 $@';	\
    187     mv -f $@.tmp $@;				\
    188   fi);
    189endef
    190
    191tags:	force
    192	$(RM) tags
    193	find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \
    194	--regex-c++='/_PE\(([^,)]*).*/TEP_ERRNO__\1/'
    195
    196TAGS:	force
    197	$(RM) TAGS
    198	find . -name '*.[ch]' | xargs etags \
    199	--regex='/_PE(\([^,)]*\).*/TEP_ERRNO__\1/'
    200
    201define do_install_mkdir
    202	if [ ! -d '$(DESTDIR_SQ)$1' ]; then		\
    203		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1';	\
    204	fi
    205endef
    206
    207define do_install
    208	$(call do_install_mkdir,$2);			\
    209	$(INSTALL) $(if $3,-m $3,) $1 '$(DESTDIR_SQ)$2'
    210endef
    211
    212PKG_CONFIG_SOURCE_FILE = libtraceevent.pc
    213PKG_CONFIG_FILE := $(addprefix $(OUTPUT),$(PKG_CONFIG_SOURCE_FILE))
    214define do_install_pkgconfig_file
    215	if [ -n "${pkgconfig_dir}" ]; then 					\
    216		cp -f ${PKG_CONFIG_SOURCE_FILE}.template ${PKG_CONFIG_FILE};	\
    217		sed -i "s|INSTALL_PREFIX|${1}|g" ${PKG_CONFIG_FILE}; 		\
    218		sed -i "s|LIB_VERSION|${EVENT_PARSE_VERSION}|g" ${PKG_CONFIG_FILE}; \
    219		sed -i "s|LIB_DIR|${libdir}|g" ${PKG_CONFIG_FILE}; \
    220		sed -i "s|HEADER_DIR|$(includedir)|g" ${PKG_CONFIG_FILE}; \
    221		$(call do_install,$(PKG_CONFIG_FILE),$(pkgconfig_dir),644); 	\
    222	else 									\
    223		(echo Failed to locate pkg-config directory) 1>&2;		\
    224	fi
    225endef
    226
    227install_lib: all_cmd install_plugins install_headers install_pkgconfig
    228	$(call QUIET_INSTALL, $(LIB_TARGET)) \
    229		$(call do_install_mkdir,$(libdir_SQ)); \
    230		cp -fpR $(LIB_INSTALL) $(DESTDIR)$(libdir_SQ)
    231
    232install_pkgconfig:
    233	$(call QUIET_INSTALL, $(PKG_CONFIG_FILE)) \
    234		$(call do_install_pkgconfig_file,$(prefix))
    235
    236install_headers:
    237	$(call QUIET_INSTALL, headers) \
    238		$(call do_install,event-parse.h,$(includedir_SQ),644); \
    239		$(call do_install,event-utils.h,$(includedir_SQ),644); \
    240		$(call do_install,trace-seq.h,$(includedir_SQ),644); \
    241		$(call do_install,kbuffer.h,$(includedir_SQ),644)
    242
    243install: install_lib
    244
    245clean: clean_plugins
    246	$(call QUIET_CLEAN, libtraceevent) \
    247		$(RM) *.o *~ $(TARGETS) *.a *.so $(VERSION_FILES) .*.d .*.cmd; \
    248		$(RM) TRACEEVENT-CFLAGS tags TAGS; \
    249		$(RM) $(PKG_CONFIG_FILE)
    250
    251PHONY += doc
    252doc:
    253	$(call descend,Documentation)
    254
    255PHONY += doc-clean
    256doc-clean:
    257	$(call descend,Documentation,clean)
    258
    259PHONY += doc-install
    260doc-install:
    261	$(call descend,Documentation,install)
    262
    263PHONY += doc-uninstall
    264doc-uninstall:
    265	$(call descend,Documentation,uninstall)
    266
    267PHONY += help
    268help:
    269	@echo 'Possible targets:'
    270	@echo''
    271	@echo '  all                 - default, compile the library and the'\
    272				      'plugins'
    273	@echo '  plugins             - compile the plugins'
    274	@echo '  install             - install the library, the plugins,'\
    275					'the header and pkgconfig files'
    276	@echo '  clean               - clean the library and the plugins object files'
    277	@echo '  doc                 - compile the documentation files - man'\
    278					'and html pages, in the Documentation directory'
    279	@echo '  doc-clean           - clean the documentation files'
    280	@echo '  doc-install         - install the man pages'
    281	@echo '  doc-uninstall       - uninstall the man pages'
    282	@echo''
    283
    284PHONY += plugins
    285plugins:
    286	$(call descend,plugins)
    287
    288PHONY += install_plugins
    289install_plugins:
    290	$(call descend,plugins,install)
    291
    292PHONY += clean_plugins
    293clean_plugins:
    294	$(call descend,plugins,clean)
    295
    296force:
    297
    298# Declare the contents of the .PHONY variable as phony.  We keep that
    299# information in a variable so we can use it in if_changed and friends.
    300.PHONY: $(PHONY)