1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# trace-cmd version 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEP_VERSION = 1 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEP_PATCHLEVEL = 1 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEP_EXTRAVERSION = 0 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# file format version 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFILE_VERSION = 6 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengMAKEFLAGS += --no-print-directory 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Makefiles suck: This macro sets a default value of $(2) for the 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# variable named by $(1), unless the variable has been set by 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# environment or command line. This is necessary for CC and AR 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# because make sets default values, so the simpler ?= approach 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# won't work as expected. 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine allow-override 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(if $(or $(findstring environment,$(origin $(1))),\ 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(findstring command line,$(origin $(1)))),,\ 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(eval $(1) = $(2))) 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix. 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(call allow-override,CC,$(CROSS_COMPILE)gcc) 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(call allow-override,AR,$(CROSS_COMPILE)ar) 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEXT = -std=gnu99 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengINSTALL = install 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Use DESTDIR for installing into a different root directory. 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# This is useful for building a package. The program will be 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# installed in this directory as if it was the root directory. 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Then the build tool can move it later. 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengDESTDIR ?= 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengDESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengprefix ?= /usr/local 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_relative = bin 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir = $(prefix)/$(bindir_relative) 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengman_dir = $(prefix)/share/man 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengman_dir_SQ = '$(subst ','\'',$(man_dir))' 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport man_dir man_dir_SQ INSTALL 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport DESTDIR DESTDIR_SQ 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# copy a bit from Linux kbuild 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ("$(origin V)", "command line") 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng VERBOSE = $(V) 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifndef VERBOSE 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng VERBOSE = 0 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ("$(origin O)", "command line") 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng BUILD_OUTPUT := $(O) 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(BUILD_SRC),) 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(BUILD_OUTPUT),) 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine build_output 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(if $(VERBOSE:1=),@)+$(MAKE) -C $(BUILD_OUTPUT) \ 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng BUILD_SRC=$(CURDIR) -f $(CURDIR)/Makefile $1 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsaved-output := $(BUILD_OUTPUT) 68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengBUILD_OUTPUT := $(shell cd $(BUILD_OUTPUT) && /bin/pwd) 69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(if $(BUILD_OUTPUT),, \ 70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(error output directory "$(saved-output)" does not exist)) 71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall: sub-make 73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(MAKECMDGOALS): sub-make 75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsub-make: force 77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(call build_output, $(MAKECMDGOALS)) 78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Leave processing to above invocation of make 81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengskip-makefile := 1 82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # BUILD_OUTPUT 84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # BUILD_SRC 85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# We process the rest of the Makefile if this is the final invocation of make 87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(skip-makefile),) 88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsrctree := $(if $(BUILD_SRC),$(BUILD_SRC),$(CURDIR)) 90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengobjtree := $(CURDIR) 91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsrc := $(srctree) 92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengobj := $(objtree) 93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport prefix bindir src obj 95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Shell quotes 97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_SQ = $(subst ','\'',$(bindir)) 98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengbindir_relative_SQ = $(subst ','\'',$(bindir_relative)) 99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengLIB_FILE = libtraceevent.a libtraceevent.so 101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCONFIG_INCLUDES = 103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCONFIG_LIBS = 104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCONFIG_FLAGS = 105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengVERSION = $(EP_VERSION) 107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPATCHLEVEL = $(EP_PATCHLEVEL) 108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEXTRAVERSION = $(EP_EXTRAVERSION) 109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengOBJ = $@ 111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengN = 112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengexport Q VERBOSE 114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEVENT_PARSE_VERSION = $(EP_VERSION).$(EP_PATCHLEVEL).$(EP_EXTRAVERSION) 116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengINCLUDES = -I. $(CONFIG_INCLUDES) 118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Set compile option CFLAGS if not set elsewhere 120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCFLAGS ?= -g -Wall 121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Append required CFLAGS 123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengoverride CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ) 124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengoverride CFLAGS += $(udis86-flags) -D_GNU_SOURCE 125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifeq ($(VERBOSE),1) 127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng Q = 128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_compile = 129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_app_build = 130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_fpic_compile = 131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_shared_lib_compile = 132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_plugin_obj_compile = 133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_plugin_build = 134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_install = 135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengelse 136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng Q = @ 137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_compile = echo ' CC '$(OBJ); 138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_app_build = echo ' BUILD '$(OBJ); 139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_fpic_compile = echo ' CC FPIC '$(OBJ); 140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_shared_lib_compile = echo ' BUILD SHARED LIB '$(OBJ); 141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_plugin_obj_compile = echo ' CC PLUGIN OBJ '$(OBJ); 142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_plugin_build = echo ' CC PLUGI '$(OBJ); 143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_static_lib_build = echo ' BUILD STATIC LIB '$(OBJ); 144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng print_install = echo ' INSTALL '$1' to $(DESTDIR_SQ)$2'; 145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif 146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_fpic_compile = \ 148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(print_fpic_compile) \ 149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) -c $(CFLAGS) $(EXT) -fPIC $< -o $@) 150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_app_build = \ 152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(print_app_build) \ 153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS)) 154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_compile_shared_library = \ 156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(print_shared_lib_compile) \ 157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) --shared $^ -o $@) 158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_compile_plugin_obj = \ 160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(print_plugin_obj_compile) \ 161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) -c $(CFLAGS) -fPIC -o $@ $<) 162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_plugin_build = \ 164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(print_plugin_build) \ 165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) $(CFLAGS) -shared -nostartfiles -o $@ $<) 166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdo_build_static_lib = \ 168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(print_static_lib_build) \ 169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(RM) $@; $(AR) rcs $@ $^) 170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine do_compile 173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(print_compile) \ 174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) -c $(CFLAGS) $(EXT) $< -o $(obj)/$@; 175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(obj)/%.o: $(src)/%.c 178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(call do_compile) 179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng%.o: $(src)/%.c 181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(call do_compile) 182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPEVENT_LIB_OBJS = event-parse.o trace-seq.o parse-filter.o parse-utils.o 184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPEVENT_LIB_OBJS += kbuffer-parse.o 185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengALL_OBJS = $(PEVENT_LIB_OBJS) 187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengCMD_TARGETS = $(LIB_FILE) 189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTARGETS = $(CMD_TARGETS) 191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall: all_cmd 194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall_cmd: $(CMD_TARGETS) 196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenglibtraceevent.so: $(PEVENT_LIB_OBJS) 198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(do_compile_shared_library) 199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenglibtraceevent.a: $(PEVENT_LIB_OBJS) 201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(do_build_static_lib) 202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(PEVENT_LIB_OBJS): %.o: $(src)/%.c TRACEEVENT-CFLAGS 204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(do_fpic_compile) 205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine make_version.h 207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng (echo '/* This file is automatically generated. Do not modify. */'; \ 208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo \#define VERSION_CODE $(shell \ 209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng expr $(VERSION) \* 256 + $(PATCHLEVEL)); \ 210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo '#define EXTRAVERSION ' $(EXTRAVERSION); \ 211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"'; \ 212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo '#define FILE_VERSION '$(FILE_VERSION); \ 213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ) > $1 214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine update_version.h 217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ($(call make_version.h, $@.tmp); \ 218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng rm -f $@.tmp; \ 220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng else \ 221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo ' UPDATE $@'; \ 222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mv -f $@.tmp $@; \ 223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng fi); 224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengep_version.h: force 227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(N)$(call update_version.h) 228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengVERSION_FILES = ep_version.h 230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine update_dir 232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng (echo $1 > $@.tmp; \ 233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng rm -f $@.tmp; \ 235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng else \ 236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo ' UPDATE $@'; \ 237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mv -f $@.tmp $@; \ 238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng fi); 239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng## make deps 242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall_objs := $(sort $(ALL_OBJS)) 244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengall_deps := $(all_objs:%.o=.%.d) 245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# let .d file also depends on the source and header files 247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine check_deps 248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng @set -e; $(RM) $@; \ 249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ 250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ 251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(RM) $@.$$$$ 252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(all_deps): .%.d: $(src)/%.c 255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(call check_deps) 256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng$(all_objs) : %.o : .%.d 258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdep_includes := $(wildcard $(all_deps)) 260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengifneq ($(dep_includes),) 262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng include $(dep_includes) 263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif 264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng### Detect environment changes 266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTRACK_CFLAGS = $(subst ','\'',$(CFLAGS)):$(ARCH):$(CROSS_COMPILE) 267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTRACEEVENT-CFLAGS: force 269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng @FLAGS='$(TRACK_CFLAGS)'; \ 270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if test x"$$FLAGS" != x"`cat TRACEEVENT-CFLAGS 2>/dev/null`" ; then \ 271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo 1>&2 " * new build flags or cross compiler"; \ 272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng echo "$$FLAGS" >TRACEEVENT-CFLAGS; \ 273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng fi 274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengtags: force 276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(RM) tags 277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \ 278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng --regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' 279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengTAGS: force 281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(RM) TAGS 282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng find . -name '*.[ch]' | xargs etags \ 283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng --regex='/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/' 284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengdefine do_install 286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(print_install) \ 287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ 288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ 289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng fi; \ 290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(INSTALL) $1 '$(DESTDIR_SQ)$2' 291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendef 292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginstall_lib: all_cmd 294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(Q)$(call do_install,$(LIB_FILE),$(bindir_SQ)) 295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chenginstall: install_lib 297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengclean: 299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(RM) *.o *~ $(TARGETS) *.a *.so $(VERSION_FILES) .*.d 300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng $(RM) TRACEEVENT-CFLAGS tags TAGS 301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengendif # skip-makefile 303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengPHONY += force 305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengforce: 306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# Declare the contents of the .PHONY variable as phony. We keep that 308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng# information in a variable so we can use it in if_changed and friends. 309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.PHONY: $(PHONY) 310