^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) # Most of this file is copied from tools/lib/bpf/Makefile
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) LIBPERF_VERSION = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) LIBPERF_PATCHLEVEL = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) LIBPERF_EXTRAVERSION = 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) MAKEFLAGS += --no-print-directory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) ifeq ($(srctree),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) srctree := $(patsubst %/,%,$(dir $(CURDIR)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) srctree := $(patsubst %/,%,$(dir $(srctree)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) srctree := $(patsubst %/,%,$(dir $(srctree)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #$(info Determined 'srctree' to be $(srctree))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) INSTALL = install
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) # Use DESTDIR for installing into a different root directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) # This is useful for building a package. The program will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) # installed in this directory as if it was the root directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) # Then the build tool can move it later.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) DESTDIR ?=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) include $(srctree)/tools/scripts/Makefile.include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) include $(srctree)/tools/scripts/Makefile.arch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) ifeq ($(LP64), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) libdir_relative = lib64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) libdir_relative = lib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) prefix ?=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) libdir = $(prefix)/$(libdir_relative)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) # Shell quotes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) libdir_SQ = $(subst ','\'',$(libdir))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) libdir_relative_SQ = $(subst ','\'',$(libdir_relative))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ifeq ("$(origin V)", "command line")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) VERBOSE = $(V)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ifndef VERBOSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) VERBOSE = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ifeq ($(VERBOSE),1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) Q =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) Q = @
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) # Set compile option CFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ifdef EXTRA_CFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) CFLAGS := $(EXTRA_CFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) CFLAGS := -g -Wall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) INCLUDES = \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) -I$(srctree)/tools/lib/perf/include \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) -I$(srctree)/tools/lib/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) -I$(srctree)/tools/include \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) -I$(srctree)/tools/arch/$(SRCARCH)/include/ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) -I$(srctree)/tools/include/uapi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) # Append required CFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) override CFLAGS += $(EXTRA_WARNINGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) override CFLAGS += -Werror -Wall
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) override CFLAGS += -fPIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) override CFLAGS += $(INCLUDES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) override CFLAGS += -fvisibility=hidden
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) all:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) export srctree OUTPUT CC LD CFLAGS V
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) export DESTDIR DESTDIR_SQ
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) include $(srctree)/tools/build/Makefile.include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) VERSION_SCRIPT := libperf.map
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) PATCHLEVEL = $(LIBPERF_PATCHLEVEL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) EXTRAVERSION = $(LIBPERF_EXTRAVERSION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) VERSION = $(LIBPERF_VERSION).$(LIBPERF_PATCHLEVEL).$(LIBPERF_EXTRAVERSION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) LIBPERF_SO := $(OUTPUT)libperf.so.$(VERSION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) LIBPERF_A := $(OUTPUT)libperf.a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) LIBPERF_IN := $(OUTPUT)libperf-in.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) LIBPERF_PC := $(OUTPUT)libperf.pc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) LIBPERF_ALL := $(LIBPERF_A) $(OUTPUT)libperf.so*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) LIB_DIR := $(srctree)/tools/lib/api/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) ifneq ($(OUTPUT),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) ifneq ($(subdir),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) API_PATH=$(OUTPUT)/../lib/api/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) API_PATH=$(OUTPUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) API_PATH=$(LIB_DIR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) LIBAPI = $(API_PATH)libapi.a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) export LIBAPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) $(LIBAPI): FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) $(LIBAPI)-clean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) $(call QUIET_CLEAN, libapi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) $(LIBPERF_IN): FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) $(Q)$(MAKE) $(build)=libperf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) $(LIBPERF_A): $(LIBPERF_IN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIBPERF_IN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) $(LIBPERF_SO): $(LIBPERF_IN) $(LIBAPI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) $(QUIET_LINK)$(CC) --shared -Wl,-soname,libperf.so \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) -Wl,--version-script=$(VERSION_SCRIPT) $^ -o $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) @ln -sf $(@F) $(OUTPUT)libperf.so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) @ln -sf $(@F) $(OUTPUT)libperf.so.$(LIBPERF_VERSION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) libs: $(LIBPERF_A) $(LIBPERF_SO) $(LIBPERF_PC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) all: fixdep
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) $(Q)$(MAKE) libs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) clean: $(LIBAPI)-clean
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) $(call QUIET_CLEAN, libperf) $(RM) $(LIBPERF_A) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) *.o *~ *.a *.so *.so.$(VERSION) *.so.$(LIBPERF_VERSION) .*.d .*.cmd LIBPERF-CFLAGS $(LIBPERF_PC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) $(Q)$(MAKE) -C tests clean
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) tests: libs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) $(Q)$(MAKE) -C tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) $(Q)$(MAKE) -C tests run
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) $(LIBPERF_PC):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) -e "s|@LIBDIR@|$(libdir_SQ)|" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) -e "s|@VERSION@|$(VERSION)|" \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) < libperf.pc.template > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) define do_install_mkdir
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) if [ ! -d '$(DESTDIR_SQ)$1' ]; then \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) endef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) define do_install
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) if [ ! -d '$(DESTDIR_SQ)$2' ]; then \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) fi; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) $(INSTALL) $1 $(if $3,-m $3,) '$(DESTDIR_SQ)$2'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) endef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) install_lib: libs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) $(call QUIET_INSTALL, $(LIBPERF_ALL)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) $(call do_install_mkdir,$(libdir_SQ)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) cp -fpR $(LIBPERF_ALL) $(DESTDIR)$(libdir_SQ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) install_headers:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) $(call QUIET_INSTALL, headers) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) $(call do_install,include/perf/core.h,$(prefix)/include/perf,644); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) $(call do_install,include/perf/cpumap.h,$(prefix)/include/perf,644); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) $(call do_install,include/perf/threadmap.h,$(prefix)/include/perf,644); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) $(call do_install,include/perf/evlist.h,$(prefix)/include/perf,644); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) $(call do_install,include/perf/evsel.h,$(prefix)/include/perf,644); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) $(call do_install,include/perf/event.h,$(prefix)/include/perf,644); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) $(call do_install,include/perf/mmap.h,$(prefix)/include/perf,644);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) install_pkgconfig: $(LIBPERF_PC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) $(call QUIET_INSTALL, $(LIBPERF_PC)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) $(call do_install,$(LIBPERF_PC),$(libdir_SQ)/pkgconfig,644)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) install_doc:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) $(Q)$(MAKE) -C Documentation install-man install-html install-examples
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) install: install_lib install_headers install_pkgconfig install_doc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) FORCE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) .PHONY: all install clean tests FORCE