| 1 |
|
| 2 |
|
| 3 |
|
| 4 | LIBPERF_VERSION = 0
|
| 5 | LIBPERF_PATCHLEVEL = 0
|
| 6 | LIBPERF_EXTRAVERSION = 1
|
| 7 |
|
| 8 | MAKEFLAGS += --no-print-directory
|
| 9 |
|
| 10 | ifeq ($(srctree),)
|
| 11 | srctree := $(patsubst %/,%,$(dir $(CURDIR)))
|
| 12 | srctree := $(patsubst %/,%,$(dir $(srctree)))
|
| 13 | srctree := $(patsubst %/,%,$(dir $(srctree)))
|
| 14 |
|
| 15 | endif
|
| 16 |
|
| 17 | INSTALL = install
|
| 18 |
|
| 19 |
|
| 20 |
|
| 21 |
|
| 22 |
|
| 23 | DESTDIR ?=
|
| 24 | DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
|
| 25 |
|
| 26 | include $(srctree)/tools/scripts/Makefile.include
|
| 27 | include $(srctree)/tools/scripts/Makefile.arch
|
| 28 |
|
| 29 | ifeq ($(LP64), 1)
|
| 30 | libdir_relative = lib64
|
| 31 | else
|
| 32 | libdir_relative = lib
|
| 33 | endif
|
| 34 |
|
| 35 | prefix ?=
|
| 36 | libdir = $(prefix)/$(libdir_relative)
|
| 37 |
|
| 38 |
|
| 39 | libdir_SQ = $(subst ','\'',$(libdir))
|
| 40 | libdir_relative_SQ = $(subst ','\'',$(libdir_relative))
|
| 41 |
|
| 42 | TEST_ARGS := $(if $(V),-v)
|
| 43 |
|
| 44 | INCLUDES = \
|
| 45 | -I$(srctree)/tools/lib/perf/include \
|
| 46 | -I$(srctree)/tools/lib/ \
|
| 47 | -I$(srctree)/tools/include \
|
| 48 | -I$(srctree)/tools/arch/$(SRCARCH)/include/ \
|
| 49 | -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi \
|
| 50 | -I$(srctree)/tools/include/uapi
|
| 51 |
|
| 52 |
|
| 53 | override CFLAGS := $(INCLUDES) $(CFLAGS)
|
| 54 | override CFLAGS += -g -Werror -Wall
|
| 55 | override CFLAGS += -fPIC
|
| 56 | override CFLAGS += -fvisibility=hidden
|
| 57 | override CFLAGS += $(EXTRA_WARNINGS)
|
| 58 | override CFLAGS += $(EXTRA_CFLAGS)
|
| 59 |
|
| 60 | all:
|
| 61 |
|
| 62 | export srctree OUTPUT CC LD CFLAGS V
|
| 63 | export DESTDIR DESTDIR_SQ
|
| 64 |
|
| 65 | include $(srctree)/tools/build/Makefile.include
|
| 66 |
|
| 67 | VERSION_SCRIPT := libperf.map
|
| 68 |
|
| 69 | PATCHLEVEL = $(LIBPERF_PATCHLEVEL)
|
| 70 | EXTRAVERSION = $(LIBPERF_EXTRAVERSION)
|
| 71 | VERSION = $(LIBPERF_VERSION).$(LIBPERF_PATCHLEVEL).$(LIBPERF_EXTRAVERSION)
|
| 72 |
|
| 73 | LIBPERF_SO := $(OUTPUT)libperf.so.$(VERSION)
|
| 74 | LIBPERF_A := $(OUTPUT)libperf.a
|
| 75 | LIBPERF_IN := $(OUTPUT)libperf-in.o
|
| 76 | LIBPERF_PC := $(OUTPUT)libperf.pc
|
| 77 |
|
| 78 | LIBPERF_ALL := $(LIBPERF_A) $(OUTPUT)libperf.so*
|
| 79 |
|
| 80 | LIB_DIR := $(srctree)/tools/lib/api/
|
| 81 |
|
| 82 | ifneq ($(OUTPUT),)
|
| 83 | ifneq ($(subdir),)
|
| 84 | API_PATH=$(OUTPUT)/../lib/api/
|
| 85 | else
|
| 86 | API_PATH=$(OUTPUT)
|
| 87 | endif
|
| 88 | else
|
| 89 | API_PATH=$(LIB_DIR)
|
| 90 | endif
|
| 91 |
|
| 92 | LIBAPI = $(API_PATH)libapi.a
|
| 93 | export LIBAPI
|
| 94 |
|
| 95 | $(LIBAPI): FORCE
|
| 96 | $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a
|
| 97 |
|
| 98 | $(LIBAPI)-clean:
|
| 99 | $(call QUIET_CLEAN, libapi)
|
| 100 | $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
|
| 101 |
|
| 102 | $(LIBPERF_IN): FORCE
|
| 103 | $(Q)$(MAKE) $(build)=libperf
|
| 104 |
|
| 105 | $(LIBPERF_A): $(LIBPERF_IN)
|
| 106 | $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIBPERF_IN)
|
| 107 |
|
| 108 | $(LIBPERF_SO): $(LIBPERF_IN) $(LIBAPI)
|
| 109 | $(QUIET_LINK)$(CC) --shared -Wl,-soname,libperf.so \
|
| 110 | -Wl,--version-script=$(VERSION_SCRIPT) $^ -o $@
|
| 111 | @ln -sf $(@F) $(OUTPUT)libperf.so
|
| 112 | @ln -sf $(@F) $(OUTPUT)libperf.so.$(LIBPERF_VERSION)
|
| 113 |
|
| 114 |
|
| 115 | libs: $(LIBPERF_A) $(LIBPERF_SO) $(LIBPERF_PC)
|
| 116 |
|
| 117 | all: fixdep
|
| 118 | $(Q)$(MAKE) libs
|
| 119 |
|
| 120 | clean: $(LIBAPI)-clean
|
| 121 | $(call QUIET_CLEAN, libperf) $(RM) $(LIBPERF_A) \
|
| 122 | *.o *~ *.a *.so *.so.$(VERSION) *.so.$(LIBPERF_VERSION) .*.d .*.cmd tests/*.o LIBPERF-CFLAGS $(LIBPERF_PC) \
|
| 123 | $(TESTS_STATIC) $(TESTS_SHARED)
|
| 124 |
|
| 125 | TESTS_IN = tests-in.o
|
| 126 |
|
| 127 | TESTS_STATIC = $(OUTPUT)tests-static
|
| 128 | TESTS_SHARED = $(OUTPUT)tests-shared
|
| 129 |
|
| 130 | $(TESTS_IN): FORCE
|
| 131 | $(Q)$(MAKE) $(build)=tests
|
| 132 |
|
| 133 | $(TESTS_STATIC): $(TESTS_IN) $(LIBPERF_A) $(LIBAPI)
|
| 134 | $(QUIET_LINK)$(CC) -o $@ $^
|
| 135 |
|
| 136 | $(TESTS_SHARED): $(TESTS_IN) $(LIBAPI)
|
| 137 | $(QUIET_LINK)$(CC) -o $@ -L$(or $(OUTPUT),.) $^ -lperf
|
| 138 |
|
| 139 | make-tests: libs $(TESTS_SHARED) $(TESTS_STATIC)
|
| 140 |
|
| 141 | tests: make-tests
|
| 142 | @echo "running static:"
|
| 143 | @./$(TESTS_STATIC) $(TEST_ARGS)
|
| 144 | @echo "running dynamic:"
|
| 145 | @LD_LIBRARY_PATH=. ./$(TESTS_SHARED) $(TEST_ARGS)
|
| 146 |
|
| 147 | $(LIBPERF_PC):
|
| 148 | $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \
|
| 149 | -e "s|@LIBDIR@|$(libdir_SQ)|" \
|
| 150 | -e "s|@VERSION@|$(VERSION)|" \
|
| 151 | < libperf.pc.template > $@
|
| 152 |
|
| 153 | define do_install_mkdir
|
| 154 | if [ ! -d '$(DESTDIR_SQ)$1' ]; then \
|
| 155 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \
|
| 156 | fi
|
| 157 | endef
|
| 158 |
|
| 159 | define do_install
|
| 160 | if [ ! -d '$2' ]; then \
|
| 161 | $(INSTALL) -d -m 755 '$2'; \
|
| 162 | fi; \
|
| 163 | $(INSTALL) $1 $(if $3,-m $3,) '$2'
|
| 164 | endef
|
| 165 |
|
| 166 | install_lib: libs
|
| 167 | $(call QUIET_INSTALL, $(LIBPERF_ALL)) \
|
| 168 | $(call do_install_mkdir,$(libdir_SQ)); \
|
| 169 | cp -fpR $(LIBPERF_ALL) $(DESTDIR)$(libdir_SQ)
|
| 170 |
|
| 171 | HDRS := bpf_perf.h core.h cpumap.h threadmap.h evlist.h evsel.h event.h mmap.h
|
| 172 | HDRS += schedstat-v15.h schedstat-v16.h schedstat-v17.h
|
| 173 | INTERNAL_HDRS := cpumap.h evlist.h evsel.h lib.h mmap.h rc_check.h threadmap.h xyarray.h
|
| 174 |
|
| 175 | INSTALL_HDRS_PFX := $(DESTDIR)$(prefix)/include/perf
|
| 176 | INSTALL_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(HDRS))
|
| 177 | INSTALL_INTERNAL_HDRS_PFX := $(DESTDIR)$(prefix)/include/internal
|
| 178 | INSTALL_INTERNAL_HDRS := $(addprefix $(INSTALL_INTERNAL_HDRS_PFX)/, $(INTERNAL_HDRS))
|
| 179 |
|
| 180 | $(INSTALL_HDRS): $(INSTALL_HDRS_PFX)/%.h: include/perf/%.h
|
| 181 | $(call QUIET_INSTALL, $@) \
|
| 182 | $(call do_install,$<,$(INSTALL_HDRS_PFX)/,644)
|
| 183 |
|
| 184 | $(INSTALL_INTERNAL_HDRS): $(INSTALL_INTERNAL_HDRS_PFX)/%.h: include/internal/%.h
|
| 185 | $(call QUIET_INSTALL, $@) \
|
| 186 | $(call do_install,$<,$(INSTALL_INTERNAL_HDRS_PFX)/,644)
|
| 187 |
|
| 188 | install_headers: $(INSTALL_HDRS) $(INSTALL_INTERNAL_HDRS)
|
| 189 | $(call QUIET_INSTALL, libperf_headers)
|
| 190 |
|
| 191 | install_pkgconfig: $(LIBPERF_PC)
|
| 192 | $(call QUIET_INSTALL, $(LIBPERF_PC)) \
|
| 193 | $(call do_install,$(LIBPERF_PC),$(DESTDIR_SQ)$(libdir_SQ)/pkgconfig,644)
|
| 194 |
|
| 195 | install_doc:
|
| 196 | $(Q)$(MAKE) -C Documentation install-man install-html install-examples
|
| 197 |
|
| 198 | install: install_lib install_headers install_pkgconfig install_doc
|
| 199 |
|
| 200 | FORCE:
|
| 201 |
|
| 202 | .PHONY: all install clean tests FORCE
|