1*287e80b3SSadaf Ebrahimi# SPDX-License-Identifier: LGPL-2.1 2*287e80b3SSadaf Ebrahimi# libtracefs version 3*287e80b3SSadaf EbrahimiTFS_VERSION = 1 4*287e80b3SSadaf EbrahimiTFS_PATCHLEVEL = 6 5*287e80b3SSadaf EbrahimiTFS_EXTRAVERSION = 4 6*287e80b3SSadaf EbrahimiTRACEFS_VERSION = $(TFS_VERSION).$(TFS_PATCHLEVEL).$(TFS_EXTRAVERSION) 7*287e80b3SSadaf Ebrahimi 8*287e80b3SSadaf Ebrahimiexport TFS_VERSION 9*287e80b3SSadaf Ebrahimiexport TFS_PATCHLEVEL 10*287e80b3SSadaf Ebrahimiexport TFS_EXTRAVERSION 11*287e80b3SSadaf Ebrahimiexport TRACEFS_VERSION 12*287e80b3SSadaf Ebrahimi 13*287e80b3SSadaf EbrahimiLIBTRACEEVENT_MIN_VERSION = 1.3 14*287e80b3SSadaf Ebrahimi 15*287e80b3SSadaf Ebrahimi# taken from trace-cmd 16*287e80b3SSadaf EbrahimiMAKEFLAGS += --no-print-directory 17*287e80b3SSadaf Ebrahimi 18*287e80b3SSadaf Ebrahimi# Makefiles suck: This macro sets a default value of $(2) for the 19*287e80b3SSadaf Ebrahimi# variable named by $(1), unless the variable has been set by 20*287e80b3SSadaf Ebrahimi# environment or command line. This is necessary for CC and AR 21*287e80b3SSadaf Ebrahimi# because make sets default values, so the simpler ?= approach 22*287e80b3SSadaf Ebrahimi# won't work as expected. 23*287e80b3SSadaf Ebrahimidefine allow-override 24*287e80b3SSadaf Ebrahimi $(if $(or $(findstring environment,$(origin $(1))),\ 25*287e80b3SSadaf Ebrahimi $(findstring command line,$(origin $(1)))),,\ 26*287e80b3SSadaf Ebrahimi $(eval $(1) = $(2))) 27*287e80b3SSadaf Ebrahimiendef 28*287e80b3SSadaf Ebrahimi 29*287e80b3SSadaf Ebrahimi# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix. 30*287e80b3SSadaf Ebrahimi$(call allow-override,CC,$(CROSS_COMPILE)gcc) 31*287e80b3SSadaf Ebrahimi$(call allow-override,AR,$(CROSS_COMPILE)ar) 32*287e80b3SSadaf Ebrahimi$(call allow-override,PKG_CONFIG,pkg-config) 33*287e80b3SSadaf Ebrahimi$(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/) 34*287e80b3SSadaf Ebrahimi$(call allow-override,LDCONFIG,ldconfig) 35*287e80b3SSadaf Ebrahimi 36*287e80b3SSadaf EbrahimiEXT = -std=gnu99 37*287e80b3SSadaf EbrahimiINSTALL = install 38*287e80b3SSadaf Ebrahimi 39*287e80b3SSadaf Ebrahimi# Use DESTDIR for installing into a different root directory. 40*287e80b3SSadaf Ebrahimi# This is useful for building a package. The program will be 41*287e80b3SSadaf Ebrahimi# installed in this directory as if it was the root directory. 42*287e80b3SSadaf Ebrahimi# Then the build tool can move it later. 43*287e80b3SSadaf EbrahimiDESTDIR ?= 44*287e80b3SSadaf EbrahimiDESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' 45*287e80b3SSadaf Ebrahimi 46*287e80b3SSadaf EbrahimiLP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1) 47*287e80b3SSadaf Ebrahimiifeq ($(LP64), 1) 48*287e80b3SSadaf Ebrahimi libdir_relative_temp = lib64 49*287e80b3SSadaf Ebrahimielse 50*287e80b3SSadaf Ebrahimi libdir_relative_temp = lib 51*287e80b3SSadaf Ebrahimiendif 52*287e80b3SSadaf Ebrahimi 53*287e80b3SSadaf Ebrahimilibdir_relative ?= $(libdir_relative_temp) 54*287e80b3SSadaf Ebrahimiprefix ?= /usr/local 55*287e80b3SSadaf Ebrahimiman_dir ?= $(prefix)/share/man 56*287e80b3SSadaf Ebrahimiman_dir_SQ = '$(subst ','\'',$(man_dir))' 57*287e80b3SSadaf Ebrahimilibdir ?= $(prefix)/$(libdir_relative) 58*287e80b3SSadaf Ebrahimilibdir_SQ = '$(subst ','\'',$(libdir))' 59*287e80b3SSadaf Ebrahimiincludedir_relative ?= include/tracefs 60*287e80b3SSadaf Ebrahimiincludedir ?= $(prefix)/$(includedir_relative) 61*287e80b3SSadaf Ebrahimiincludedir_SQ = '$(subst ','\'',$(includedir))' 62*287e80b3SSadaf Ebrahimipkgconfig_dir ?= $(word 1,$(shell $(PKG_CONFIG) \ 63*287e80b3SSadaf Ebrahimi --variable pc_path pkg-config | tr ":" " ")) 64*287e80b3SSadaf Ebrahimi 65*287e80b3SSadaf EbrahimiTEST_LIBTRACEEVENT = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEEVENT_MIN_VERSION) libtraceevent > /dev/null 2>&1 && echo y") 66*287e80b3SSadaf Ebrahimi 67*287e80b3SSadaf Ebrahimiifeq ("$(TEST_LIBTRACEEVENT)", "y") 68*287e80b3SSadaf EbrahimiLIBTRACEEVENT_INCLUDES = $(shell sh -c "$(PKG_CONFIG) --cflags libtraceevent") 69*287e80b3SSadaf EbrahimiLIBTRACEEVENT_LIBS = $(shell sh -c "$(PKG_CONFIG) --libs libtraceevent") 70*287e80b3SSadaf Ebrahimielse 71*287e80b3SSadaf Ebrahimi ifneq ($(MAKECMDGOALS),clean) 72*287e80b3SSadaf Ebrahimi $(error libtraceevent.so minimum version of $(LIBTRACEEVENT_MIN_VERSION) not installed) 73*287e80b3SSadaf Ebrahimi endif 74*287e80b3SSadaf Ebrahimiendif 75*287e80b3SSadaf Ebrahimi 76*287e80b3SSadaf Ebrahimietcdir ?= /etc 77*287e80b3SSadaf Ebrahimietcdir_SQ = '$(subst ','\'',$(etcdir))' 78*287e80b3SSadaf Ebrahimi 79*287e80b3SSadaf Ebrahimiexport man_dir man_dir_SQ html_install html_install_SQ INSTALL 80*287e80b3SSadaf Ebrahimiexport img_install img_install_SQ 81*287e80b3SSadaf Ebrahimiexport DESTDIR DESTDIR_SQ 82*287e80b3SSadaf Ebrahimi 83*287e80b3SSadaf Ebrahimipound := \# 84*287e80b3SSadaf Ebrahimi 85*287e80b3SSadaf EbrahimiHELP_DIR = -DHELP_DIR=$(html_install) 86*287e80b3SSadaf EbrahimiHELP_DIR_SQ = '$(subst ','\'',$(HELP_DIR))' 87*287e80b3SSadaf Ebrahimi#' emacs highlighting gets confused by the above escaped quote. 88*287e80b3SSadaf Ebrahimi 89*287e80b3SSadaf EbrahimiBASH_COMPLETE_DIR ?= $(etcdir)/bash_completion.d 90*287e80b3SSadaf Ebrahimi 91*287e80b3SSadaf Ebrahimi# copy a bit from Linux kbuild 92*287e80b3SSadaf Ebrahimi 93*287e80b3SSadaf Ebrahimiifeq ("$(origin V)", "command line") 94*287e80b3SSadaf Ebrahimi VERBOSE = $(V) 95*287e80b3SSadaf Ebrahimiendif 96*287e80b3SSadaf Ebrahimiifndef VERBOSE 97*287e80b3SSadaf Ebrahimi VERBOSE = 0 98*287e80b3SSadaf Ebrahimiendif 99*287e80b3SSadaf Ebrahimi 100*287e80b3SSadaf EbrahimiSILENT := $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),1) 101*287e80b3SSadaf Ebrahimi 102*287e80b3SSadaf Ebrahimi# $(call test-build, snippet, ret) -> ret if snippet compiles 103*287e80b3SSadaf Ebrahimi# -> empty otherwise 104*287e80b3SSadaf Ebrahimitest-build = $(if $(shell sh -c 'echo "$(1)" | \ 105*287e80b3SSadaf Ebrahimi $(CC) -o /dev/null -c -x c - > /dev/null 2>&1 && echo y'), $2) 106*287e80b3SSadaf Ebrahimi 107*287e80b3SSadaf Ebrahimiifeq ("$(origin O)", "command line") 108*287e80b3SSadaf Ebrahimi 109*287e80b3SSadaf Ebrahimi saved-output := $(O) 110*287e80b3SSadaf Ebrahimi BUILD_OUTPUT := $(shell cd $(O) && /bin/pwd) 111*287e80b3SSadaf Ebrahimi $(if $(BUILD_OUTPUT),, \ 112*287e80b3SSadaf Ebrahimi $(error output directory "$(saved-output)" does not exist)) 113*287e80b3SSadaf Ebrahimi 114*287e80b3SSadaf Ebrahimielse 115*287e80b3SSadaf Ebrahimi BUILD_OUTPUT = $(CURDIR) 116*287e80b3SSadaf Ebrahimiendif 117*287e80b3SSadaf Ebrahimi 118*287e80b3SSadaf Ebrahimisrctree := $(if $(BUILD_SRC),$(BUILD_SRC),$(CURDIR)) 119*287e80b3SSadaf Ebrahimiobjtree := $(BUILD_OUTPUT) 120*287e80b3SSadaf Ebrahimisrc := $(srctree) 121*287e80b3SSadaf Ebrahimiobj := $(objtree) 122*287e80b3SSadaf Ebrahimibdir := $(obj)/lib 123*287e80b3SSadaf Ebrahimi 124*287e80b3SSadaf Ebrahimiexport prefix src obj bdir 125*287e80b3SSadaf Ebrahimi 126*287e80b3SSadaf EbrahimiLIBTRACEFS_STATIC = $(bdir)/libtracefs.a 127*287e80b3SSadaf EbrahimiLIBTRACEFS_SHARED = $(bdir)/libtracefs.so.$(TRACEFS_VERSION) 128*287e80b3SSadaf Ebrahimi 129*287e80b3SSadaf EbrahimiLIBTRACEFS_SHARED_SO = $(bdir)/libtracefs.so 130*287e80b3SSadaf EbrahimiLIBTRACEFS_SHARED_VERSION = $(bdir)/libtracefs.so.$(TFS_VERSION) 131*287e80b3SSadaf Ebrahimi 132*287e80b3SSadaf EbrahimiPKG_CONFIG_SOURCE_FILE = libtracefs.pc 133*287e80b3SSadaf EbrahimiPKG_CONFIG_FILE := $(addprefix $(obj)/,$(PKG_CONFIG_SOURCE_FILE)) 134*287e80b3SSadaf Ebrahimi 135*287e80b3SSadaf EbrahimiLPTHREAD ?= -lpthread 136*287e80b3SSadaf EbrahimiLIBS = $(LIBTRACEEVENT_LIBS) $(LPTHREAD) 137*287e80b3SSadaf Ebrahimi 138*287e80b3SSadaf Ebrahimiexport LIBS 139*287e80b3SSadaf Ebrahimiexport LIBTRACEFS_STATIC LIBTRACEFS_SHARED 140*287e80b3SSadaf Ebrahimiexport LIBTRACEEVENT_LIBS LIBTRACEEVENT_INCLUDES 141*287e80b3SSadaf Ebrahimiexport LIBTRACEFS_SHARED_SO LIBTRACEFS_SHARED_VERSION 142*287e80b3SSadaf Ebrahimi 143*287e80b3SSadaf Ebrahimiexport Q SILENT VERBOSE EXT 144*287e80b3SSadaf Ebrahimi 145*287e80b3SSadaf Ebrahimi# Include the utils 146*287e80b3SSadaf Ebrahimiinclude scripts/utils.mk 147*287e80b3SSadaf Ebrahimi 148*287e80b3SSadaf EbrahimiINCLUDES = -I$(src)/include 149*287e80b3SSadaf EbrahimiINCLUDES += -I$(src)/include/tracefs 150*287e80b3SSadaf Ebrahimi 151*287e80b3SSadaf Ebrahimiinclude $(src)/scripts/features.mk 152*287e80b3SSadaf Ebrahimi 153*287e80b3SSadaf Ebrahimi# Set compile option CFLAGS if not set elsewhere 154*287e80b3SSadaf EbrahimiCFLAGS ?= -g -Wall 155*287e80b3SSadaf EbrahimiCPPFLAGS ?= 156*287e80b3SSadaf EbrahimiLDFLAGS ?= 157*287e80b3SSadaf Ebrahimi 158*287e80b3SSadaf EbrahimiCUNIT_INSTALLED := $(shell if (printf "$(pound)include <CUnit/Basic.h>\n void main(){CU_initialize_registry();}" | $(CC) -x c - -lcunit -o /dev/null >/dev/null 2>&1) ; then echo 1; else echo 0 ; fi) 159*287e80b3SSadaf Ebrahimiexport CUNIT_INSTALLED 160*287e80b3SSadaf Ebrahimi 161*287e80b3SSadaf Ebrahimiexport CFLAGS 162*287e80b3SSadaf Ebrahimiexport INCLUDES 163*287e80b3SSadaf Ebrahimi 164*287e80b3SSadaf Ebrahimi# Append required CFLAGS 165*287e80b3SSadaf Ebrahimioverride CFLAGS += -D_GNU_SOURCE $(LIBTRACEEVENT_INCLUDES) $(INCLUDES) 166*287e80b3SSadaf Ebrahimi 167*287e80b3SSadaf Ebrahimi# Make sure 32 bit stat() works on large file systems 168*287e80b3SSadaf Ebrahimioverride CFLAGS += -D_FILE_OFFSET_BITS=64 169*287e80b3SSadaf Ebrahimi 170*287e80b3SSadaf Ebrahimiall: all_cmd 171*287e80b3SSadaf Ebrahimi 172*287e80b3SSadaf EbrahimiLIB_TARGET = libtracefs.a libtracefs.so.$(TRACEFS_VERSION) 173*287e80b3SSadaf EbrahimiLIB_INSTALL = libtracefs.a libtracefs.so* 174*287e80b3SSadaf EbrahimiLIB_INSTALL := $(addprefix $(bdir)/,$(LIB_INSTALL)) 175*287e80b3SSadaf Ebrahimi 176*287e80b3SSadaf EbrahimiTARGETS = libtracefs.so libtracefs.a 177*287e80b3SSadaf Ebrahimi 178*287e80b3SSadaf Ebrahimiall_cmd: $(TARGETS) $(PKG_CONFIG_FILE) 179*287e80b3SSadaf Ebrahimi 180*287e80b3SSadaf Ebrahimilibtracefs.a: $(bdir) $(LIBTRACEFS_STATIC) 181*287e80b3SSadaf Ebrahimilibtracefs.so: $(bdir) $(LIBTRACEFS_SHARED) 182*287e80b3SSadaf Ebrahimi 183*287e80b3SSadaf Ebrahimilibs: libtracefs.a libtracefs.so 184*287e80b3SSadaf Ebrahimi 185*287e80b3SSadaf EbrahimiVALGRIND = $(shell which valgrind) 186*287e80b3SSadaf EbrahimiUTEST_DIR = utest 187*287e80b3SSadaf EbrahimiUTEST_BINARY = trace-utest 188*287e80b3SSadaf Ebrahimi 189*287e80b3SSadaf Ebrahimitest: force $(LIBTRACEFS_STATIC) 190*287e80b3SSadaf Ebrahimiifneq ($(CUNIT_INSTALLED),1) 191*287e80b3SSadaf Ebrahimi $(error CUnit framework not installed, cannot build unit tests)) 192*287e80b3SSadaf Ebrahimiendif 193*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/$(UTEST_DIR),$@) 194*287e80b3SSadaf Ebrahimi 195*287e80b3SSadaf Ebrahimitest_mem: test 196*287e80b3SSadaf Ebrahimiifeq (, $(VALGRIND)) 197*287e80b3SSadaf Ebrahimi $(error "No valgrind in $(PATH), cannot run memory test") 198*287e80b3SSadaf Ebrahimiendif 199*287e80b3SSadaf Ebrahimiifneq ($(shell id -u), 0) 200*287e80b3SSadaf Ebrahimi $(error "The unit test should be run as root, as it reuqires full access to tracefs") 201*287e80b3SSadaf Ebrahimiendif 202*287e80b3SSadaf Ebrahimi CK_FORK=no LD_LIBRARY_PATH=$(bdir) $(VALGRIND) \ 203*287e80b3SSadaf Ebrahimi --show-leak-kinds=all --leak-resolution=high \ 204*287e80b3SSadaf Ebrahimi --leak-check=full --show-possibly-lost=yes \ 205*287e80b3SSadaf Ebrahimi --track-origins=yes -s \ 206*287e80b3SSadaf Ebrahimi $(src)/$(UTEST_DIR)/$(UTEST_BINARY) 207*287e80b3SSadaf Ebrahimi 208*287e80b3SSadaf Ebrahimidefine find_tag_files 209*287e80b3SSadaf Ebrahimi find $(src) -name '\.pc' -prune -o -name '*\.[ch]' -print -o -name '*\.[ch]pp' \ 210*287e80b3SSadaf Ebrahimi ! -name '\.#' -print 211*287e80b3SSadaf Ebrahimiendef 212*287e80b3SSadaf Ebrahimi 213*287e80b3SSadaf Ebrahimidefine do_make_pkgconfig_file 214*287e80b3SSadaf Ebrahimi cp -f ${PKG_CONFIG_SOURCE_FILE}.template ${PKG_CONFIG_FILE}; \ 215*287e80b3SSadaf Ebrahimi sed -i "s|INSTALL_PREFIX|${1}|g" ${PKG_CONFIG_FILE}; \ 216*287e80b3SSadaf Ebrahimi sed -i "s|LIB_VERSION|${TRACEFS_VERSION}|g" ${PKG_CONFIG_FILE}; \ 217*287e80b3SSadaf Ebrahimi sed -i "s|LIB_DIR|${libdir_relative}|g" ${PKG_CONFIG_FILE}; \ 218*287e80b3SSadaf Ebrahimi sed -i "s|HEADER_DIR|$(includedir_relative)|g" ${PKG_CONFIG_FILE}; \ 219*287e80b3SSadaf Ebrahimi sed -i "s|LIBTRACEEVENT_MIN|$(LIBTRACEEVENT_MIN_VERSION)|g" ${PKG_CONFIG_FILE}; 220*287e80b3SSadaf Ebrahimiendef 221*287e80b3SSadaf Ebrahimi 222*287e80b3SSadaf EbrahimiBUILD_PREFIX := $(BUILD_OUTPUT)/build_prefix 223*287e80b3SSadaf Ebrahimi 224*287e80b3SSadaf EbrahimiVERSION_FILE = tfs_version.h 225*287e80b3SSadaf Ebrahimi 226*287e80b3SSadaf Ebrahimi$(BUILD_PREFIX): force 227*287e80b3SSadaf Ebrahimi $(Q)$(call build_prefix,$(prefix)) 228*287e80b3SSadaf Ebrahimi 229*287e80b3SSadaf Ebrahimi$(PKG_CONFIG_FILE) : ${PKG_CONFIG_SOURCE_FILE}.template $(BUILD_PREFIX) $(VERSION_FILE) 230*287e80b3SSadaf Ebrahimi $(Q) $(call do_make_pkgconfig_file,$(prefix)) 231*287e80b3SSadaf Ebrahimi 232*287e80b3SSadaf EbrahimiVIM_TAGS = $(obj)/tags 233*287e80b3SSadaf EbrahimiEMACS_TAGS = $(obj)/TAGS 234*287e80b3SSadaf EbrahimiCSCOPE_TAGS = $(obj)/cscope 235*287e80b3SSadaf Ebrahimi 236*287e80b3SSadaf Ebrahimi$(VIM_TAGS): force 237*287e80b3SSadaf Ebrahimi $(RM) $@ 238*287e80b3SSadaf Ebrahimi $(call find_tag_files) | (cd $(obj) && xargs ctags --extra=+f --c-kinds=+px) 239*287e80b3SSadaf Ebrahimi 240*287e80b3SSadaf Ebrahimi$(EMACS_TAGS): force 241*287e80b3SSadaf Ebrahimi $(RM) $@ 242*287e80b3SSadaf Ebrahimi $(call find_tag_files) | (cd $(obj) && xargs etags) 243*287e80b3SSadaf Ebrahimi 244*287e80b3SSadaf Ebrahimi$(CSCOPE_TAGS): force 245*287e80b3SSadaf Ebrahimi $(RM) $(obj)/cscope* 246*287e80b3SSadaf Ebrahimi $(call find_tag_files) | cscope -b -q 247*287e80b3SSadaf Ebrahimi 248*287e80b3SSadaf Ebrahimitags: $(VIM_TAGS) 249*287e80b3SSadaf EbrahimiTAGS: $(EMACS_TAGS) 250*287e80b3SSadaf Ebrahimicscope: $(CSCOPE_TAGS) 251*287e80b3SSadaf Ebrahimi 252*287e80b3SSadaf Ebrahimiifeq ("$(DESTDIR)", "") 253*287e80b3SSadaf Ebrahimi# If DESTDIR is not defined, then test if after installing the library 254*287e80b3SSadaf Ebrahimi# and running ldconfig, if the library is visible by ld.so. 255*287e80b3SSadaf Ebrahimi# If not, add the path to /etc/ld.so.conf.d/trace.conf and run ldconfig again. 256*287e80b3SSadaf Ebrahimidefine install_ld_config 257*287e80b3SSadaf Ebrahimi if $(LDCONFIG); then \ 258*287e80b3SSadaf Ebrahimi if ! grep -q "^$(libdir)$$" $(LD_SO_CONF_PATH)/* ; then \ 259*287e80b3SSadaf Ebrahimi $(CC) -o $(objtree)/test $(srctree)/test.c -I $(includedir_SQ) \ 260*287e80b3SSadaf Ebrahimi -L $(libdir_SQ) -ltracefs &> /dev/null; \ 261*287e80b3SSadaf Ebrahimi if ! $(objtree)/test &> /dev/null; then \ 262*287e80b3SSadaf Ebrahimi $(call print_install, trace.conf, $(LD_SO_CONF_PATH)) \ 263*287e80b3SSadaf Ebrahimi echo $(libdir_SQ) >> $(LD_SO_CONF_PATH)/trace.conf; \ 264*287e80b3SSadaf Ebrahimi $(LDCONFIG); \ 265*287e80b3SSadaf Ebrahimi fi; \ 266*287e80b3SSadaf Ebrahimi $(RM) $(objtree)/test; \ 267*287e80b3SSadaf Ebrahimi fi; \ 268*287e80b3SSadaf Ebrahimi fi 269*287e80b3SSadaf Ebrahimiendef 270*287e80b3SSadaf Ebrahimielse 271*287e80b3SSadaf Ebrahimi# If installing to a location for another machine or package, do not bother 272*287e80b3SSadaf Ebrahimi# with running ldconfig. 273*287e80b3SSadaf Ebrahimidefine install_ld_config 274*287e80b3SSadaf Ebrahimiendef 275*287e80b3SSadaf Ebrahimiendif # DESTDIR = "" 276*287e80b3SSadaf Ebrahimi 277*287e80b3SSadaf Ebrahimiinstall_libs: libs install_pkgconfig 278*287e80b3SSadaf Ebrahimi $(Q)$(call do_install,$(LIBTRACEFS_SHARED),$(libdir_SQ)); \ 279*287e80b3SSadaf Ebrahimi cp -fpR $(LIB_INSTALL) $(DESTDIR)$(libdir_SQ) 280*287e80b3SSadaf Ebrahimi $(Q)$(call do_install,$(src)/include/tracefs.h,$(includedir_SQ),644) 281*287e80b3SSadaf Ebrahimi $(Q)$(call install_ld_config) 282*287e80b3SSadaf Ebrahimi 283*287e80b3SSadaf Ebrahimiinstall: install_libs 284*287e80b3SSadaf Ebrahimi 285*287e80b3SSadaf Ebrahimiinstall_pkgconfig: $(PKG_CONFIG_FILE) 286*287e80b3SSadaf Ebrahimi $(Q)$(call , $(PKG_CONFIG_FILE)) \ 287*287e80b3SSadaf Ebrahimi $(call do_install_pkgconfig_file,$(prefix)) 288*287e80b3SSadaf Ebrahimi 289*287e80b3SSadaf Ebrahimidoc: check_doc 290*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/Documentation,all) 291*287e80b3SSadaf Ebrahimi 292*287e80b3SSadaf Ebrahimidoc_clean: 293*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/Documentation,clean) 294*287e80b3SSadaf Ebrahimi 295*287e80b3SSadaf Ebrahimiinstall_doc: 296*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/Documentation,install) 297*287e80b3SSadaf Ebrahimi 298*287e80b3SSadaf Ebrahimicheck_doc: force 299*287e80b3SSadaf Ebrahimi $(Q)$(src)/check-manpages.sh $(src)/Documentation 300*287e80b3SSadaf Ebrahimi 301*287e80b3SSadaf Ebrahimidefine build_uninstall_script 302*287e80b3SSadaf Ebrahimi $(Q)mkdir $(BUILD_OUTPUT)/tmp_build 303*287e80b3SSadaf Ebrahimi $(Q)$(MAKE) -C $(src) DESTDIR=$(BUILD_OUTPUT)/tmp_build/ O=$(BUILD_OUTPUT) $1 > /dev/null 304*287e80b3SSadaf Ebrahimi $(Q)find $(BUILD_OUTPUT)/tmp_build ! -type d -printf "%P\n" > $(BUILD_OUTPUT)/build_$2 305*287e80b3SSadaf Ebrahimi $(Q)$(RM) -rf $(BUILD_OUTPUT)/tmp_build 306*287e80b3SSadaf Ebrahimiendef 307*287e80b3SSadaf Ebrahimi 308*287e80b3SSadaf Ebrahimibuild_uninstall: $(BUILD_PREFIX) 309*287e80b3SSadaf Ebrahimi $(call build_uninstall_script,install,uninstall) 310*287e80b3SSadaf Ebrahimi 311*287e80b3SSadaf Ebrahimi$(BUILD_OUTPUT)/build_uninstall: build_uninstall 312*287e80b3SSadaf Ebrahimi 313*287e80b3SSadaf Ebrahimidefine uninstall_file 314*287e80b3SSadaf Ebrahimi if [ -f $(DESTDIR)/$1 -o -h $(DESTDIR)/$1 ]; then \ 315*287e80b3SSadaf Ebrahimi $(call print_uninstall,$(DESTDIR)/$1)$(RM) $(DESTDIR)/$1; \ 316*287e80b3SSadaf Ebrahimi fi; 317*287e80b3SSadaf Ebrahimiendef 318*287e80b3SSadaf Ebrahimi 319*287e80b3SSadaf Ebrahimiuninstall: $(BUILD_OUTPUT)/build_uninstall 320*287e80b3SSadaf Ebrahimi @$(foreach file,$(shell cat $(BUILD_OUTPUT)/build_uninstall),$(call uninstall_file,$(file))) 321*287e80b3SSadaf Ebrahimi 322*287e80b3SSadaf EbrahimiPHONY += force 323*287e80b3SSadaf Ebrahimiforce: 324*287e80b3SSadaf Ebrahimi 325*287e80b3SSadaf Ebrahimi# Declare the contents of the .PHONY variable as phony. We keep that 326*287e80b3SSadaf Ebrahimi# information in a variable so we can use it in if_changed and friends. 327*287e80b3SSadaf Ebrahimi.PHONY: $(PHONY) 328*287e80b3SSadaf Ebrahimi 329*287e80b3SSadaf EbrahimiDEFAULT_TARGET = $(LIBTRACEFS_STATIC) 330*287e80b3SSadaf Ebrahimi 331*287e80b3SSadaf EbrahimiOBJS = 332*287e80b3SSadaf EbrahimiOBJS += tracefs-utils.o 333*287e80b3SSadaf EbrahimiOBJS += tracefs-instance.o 334*287e80b3SSadaf EbrahimiOBJS += tracefs-events.o 335*287e80b3SSadaf Ebrahimi 336*287e80b3SSadaf EbrahimiOBJS := $(OBJS:%.o=$(bdir)/%.o) 337*287e80b3SSadaf Ebrahimi 338*287e80b3SSadaf Ebrahimiall: $(DEFAULT_TARGET) 339*287e80b3SSadaf Ebrahimi 340*287e80b3SSadaf Ebrahimi$(bdir): 341*287e80b3SSadaf Ebrahimi @mkdir -p $(bdir) 342*287e80b3SSadaf Ebrahimi 343*287e80b3SSadaf EbrahimiVERSION = $(TFS_VERSION) 344*287e80b3SSadaf EbrahimiPATCHLEVEL = $(TFS_PATCHLEVEL) 345*287e80b3SSadaf EbrahimiEXTRAVERSION = $(TFS_EXTRAVERSION) 346*287e80b3SSadaf Ebrahimi 347*287e80b3SSadaf Ebrahimidefine make_version.h 348*287e80b3SSadaf Ebrahimi (echo '/* This file is automatically generated. Do not modify. */'; \ 349*287e80b3SSadaf Ebrahimi echo \#define VERSION_CODE $(shell \ 350*287e80b3SSadaf Ebrahimi expr $(VERSION) \* 256 + $(PATCHLEVEL)); \ 351*287e80b3SSadaf Ebrahimi echo '#define EXTRAVERSION ' $(EXTRAVERSION); \ 352*287e80b3SSadaf Ebrahimi echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"'; \ 353*287e80b3SSadaf Ebrahimi ) > $1 354*287e80b3SSadaf Ebrahimiendef 355*287e80b3SSadaf Ebrahimi 356*287e80b3SSadaf Ebrahimidefine update_version.h 357*287e80b3SSadaf Ebrahimi ($(call make_version.h, $@.tmp); \ 358*287e80b3SSadaf Ebrahimi if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 359*287e80b3SSadaf Ebrahimi rm -f $@.tmp; \ 360*287e80b3SSadaf Ebrahimi else \ 361*287e80b3SSadaf Ebrahimi echo ' UPDATE $@'; \ 362*287e80b3SSadaf Ebrahimi mv -f $@.tmp $@; \ 363*287e80b3SSadaf Ebrahimi fi); 364*287e80b3SSadaf Ebrahimiendef 365*287e80b3SSadaf Ebrahimi 366*287e80b3SSadaf Ebrahimi$(VERSION_FILE): force 367*287e80b3SSadaf Ebrahimi $(Q)$(call update_version.h) 368*287e80b3SSadaf Ebrahimi 369*287e80b3SSadaf Ebrahimi$(LIBTRACEFS_STATIC): force 370*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/src,$@) 371*287e80b3SSadaf Ebrahimi 372*287e80b3SSadaf Ebrahimi$(bdir)/libtracefs.so.$(TRACEFS_VERSION): force 373*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/src,libtracefs.so) 374*287e80b3SSadaf Ebrahimi 375*287e80b3SSadaf Ebrahimisamples/sqlhist: libtracefs.a 376*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/samples,sqlhist) 377*287e80b3SSadaf Ebrahimi 378*287e80b3SSadaf Ebrahimisqlhist: samples/sqlhist 379*287e80b3SSadaf Ebrahimi 380*287e80b3SSadaf Ebrahimisamples: libtracefs.a force 381*287e80b3SSadaf Ebrahimi $(Q)$(call descend,$(src)/samples,all) 382*287e80b3SSadaf Ebrahimi 383*287e80b3SSadaf Ebrahimiclean: 384*287e80b3SSadaf Ebrahimi $(Q)$(call descend_clean,utest) 385*287e80b3SSadaf Ebrahimi $(Q)$(call descend_clean,src) 386*287e80b3SSadaf Ebrahimi $(Q)$(call descend_clean,samples) 387*287e80b3SSadaf Ebrahimi $(Q)$(call do_clean, \ 388*287e80b3SSadaf Ebrahimi $(TARGETS) $(bdir)/*.a $(bdir)/*.so $(bdir)/*.so.* $(bdir)/*.o $(bdir)/.*.d \ 389*287e80b3SSadaf Ebrahimi $(PKG_CONFIG_FILE) \ 390*287e80b3SSadaf Ebrahimi $(VERSION_FILE) \ 391*287e80b3SSadaf Ebrahimi $(BUILD_PREFIX)) 392*287e80b3SSadaf Ebrahimi 393*287e80b3SSadaf Ebrahimi.PHONY: clean 394*287e80b3SSadaf Ebrahimi 395*287e80b3SSadaf Ebrahimi# libtracefs.a and libtracefs.so would concurrently enter the same directory - 396*287e80b3SSadaf Ebrahimi# a recipe for collisions. 397*287e80b3SSadaf Ebrahimi.NOTPARALLEL: 398