13ce311afSJiri Olsa# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 23ce311afSJiri Olsa# Most of this file is copied from tools/lib/bpf/Makefile 33ce311afSJiri Olsa 43ce311afSJiri OlsaLIBPERF_VERSION = 0 53ce311afSJiri OlsaLIBPERF_PATCHLEVEL = 0 63ce311afSJiri OlsaLIBPERF_EXTRAVERSION = 1 73ce311afSJiri Olsa 83ce311afSJiri OlsaMAKEFLAGS += --no-print-directory 93ce311afSJiri Olsa 103ce311afSJiri Olsaifeq ($(srctree),) 113ce311afSJiri Olsasrctree := $(patsubst %/,%,$(dir $(CURDIR))) 123ce311afSJiri Olsasrctree := $(patsubst %/,%,$(dir $(srctree))) 133ce311afSJiri Olsasrctree := $(patsubst %/,%,$(dir $(srctree))) 143ce311afSJiri Olsa#$(info Determined 'srctree' to be $(srctree)) 153ce311afSJiri Olsaendif 163ce311afSJiri Olsa 173ce311afSJiri OlsaINSTALL = install 183ce311afSJiri Olsa 193ce311afSJiri Olsa# Use DESTDIR for installing into a different root directory. 203ce311afSJiri Olsa# This is useful for building a package. The program will be 213ce311afSJiri Olsa# installed in this directory as if it was the root directory. 223ce311afSJiri Olsa# Then the build tool can move it later. 233ce311afSJiri OlsaDESTDIR ?= 243ce311afSJiri OlsaDESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' 253ce311afSJiri Olsa 263ce311afSJiri Olsainclude $(srctree)/tools/scripts/Makefile.include 273ce311afSJiri Olsainclude $(srctree)/tools/scripts/Makefile.arch 283ce311afSJiri Olsa 293ce311afSJiri Olsaifeq ($(LP64), 1) 303ce311afSJiri Olsa libdir_relative = lib64 313ce311afSJiri Olsaelse 323ce311afSJiri Olsa libdir_relative = lib 333ce311afSJiri Olsaendif 343ce311afSJiri Olsa 353ce311afSJiri Olsaprefix ?= 363ce311afSJiri Olsalibdir = $(prefix)/$(libdir_relative) 373ce311afSJiri Olsa 383ce311afSJiri Olsa# Shell quotes 393ce311afSJiri Olsalibdir_SQ = $(subst ','\'',$(libdir)) 403ce311afSJiri Olsalibdir_relative_SQ = $(subst ','\'',$(libdir_relative)) 413ce311afSJiri Olsa 423d970601SJiri OlsaTEST_ARGS := $(if $(V),-v) 433d970601SJiri Olsa 443ce311afSJiri OlsaINCLUDES = \ 453ce311afSJiri Olsa-I$(srctree)/tools/lib/perf/include \ 463ce311afSJiri Olsa-I$(srctree)/tools/lib/ \ 473ce311afSJiri Olsa-I$(srctree)/tools/include \ 483ce311afSJiri Olsa-I$(srctree)/tools/arch/$(SRCARCH)/include/ \ 493ce311afSJiri Olsa-I$(srctree)/tools/arch/$(SRCARCH)/include/uapi \ 503ce311afSJiri Olsa-I$(srctree)/tools/include/uapi 513ce311afSJiri Olsa 523ce311afSJiri Olsa# Append required CFLAGS 53*8c5b4067SIan Rogersoverride CFLAGS := $(INCLUDES) $(CFLAGS) 54f5b07010SJames Clarkoverride CFLAGS += -g -Werror -Wall 553ce311afSJiri Olsaoverride CFLAGS += -fPIC 563ce311afSJiri Olsaoverride CFLAGS += -fvisibility=hidden 57f5b07010SJames Clarkoverride CFLAGS += $(EXTRA_WARNINGS) 58f5b07010SJames Clarkoverride CFLAGS += $(EXTRA_CFLAGS) 593ce311afSJiri Olsa 603ce311afSJiri Olsaall: 613ce311afSJiri Olsa 623ce311afSJiri Olsaexport srctree OUTPUT CC LD CFLAGS V 633ce311afSJiri Olsaexport DESTDIR DESTDIR_SQ 643ce311afSJiri Olsa 653ce311afSJiri Olsainclude $(srctree)/tools/build/Makefile.include 663ce311afSJiri Olsa 673ce311afSJiri OlsaVERSION_SCRIPT := libperf.map 683ce311afSJiri Olsa 693ce311afSJiri OlsaPATCHLEVEL = $(LIBPERF_PATCHLEVEL) 703ce311afSJiri OlsaEXTRAVERSION = $(LIBPERF_EXTRAVERSION) 713ce311afSJiri OlsaVERSION = $(LIBPERF_VERSION).$(LIBPERF_PATCHLEVEL).$(LIBPERF_EXTRAVERSION) 723ce311afSJiri Olsa 733ce311afSJiri OlsaLIBPERF_SO := $(OUTPUT)libperf.so.$(VERSION) 743ce311afSJiri OlsaLIBPERF_A := $(OUTPUT)libperf.a 753ce311afSJiri OlsaLIBPERF_IN := $(OUTPUT)libperf-in.o 763ce311afSJiri OlsaLIBPERF_PC := $(OUTPUT)libperf.pc 773ce311afSJiri Olsa 783ce311afSJiri OlsaLIBPERF_ALL := $(LIBPERF_A) $(OUTPUT)libperf.so* 793ce311afSJiri Olsa 803ce311afSJiri OlsaLIB_DIR := $(srctree)/tools/lib/api/ 813ce311afSJiri Olsa 823ce311afSJiri Olsaifneq ($(OUTPUT),) 833ce311afSJiri Olsaifneq ($(subdir),) 843ce311afSJiri Olsa API_PATH=$(OUTPUT)/../lib/api/ 853ce311afSJiri Olsaelse 863ce311afSJiri Olsa API_PATH=$(OUTPUT) 873ce311afSJiri Olsaendif 883ce311afSJiri Olsaelse 893ce311afSJiri Olsa API_PATH=$(LIB_DIR) 903ce311afSJiri Olsaendif 913ce311afSJiri Olsa 923ce311afSJiri OlsaLIBAPI = $(API_PATH)libapi.a 933ce311afSJiri Olsaexport LIBAPI 943ce311afSJiri Olsa 953ce311afSJiri Olsa$(LIBAPI): FORCE 963ce311afSJiri Olsa $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a 973ce311afSJiri Olsa 983ce311afSJiri Olsa$(LIBAPI)-clean: 993ce311afSJiri Olsa $(call QUIET_CLEAN, libapi) 1003ce311afSJiri Olsa $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null 1013ce311afSJiri Olsa 102129bb23aSLeo Yan$(LIBPERF_IN): FORCE 1033ce311afSJiri Olsa $(Q)$(MAKE) $(build)=libperf 1043ce311afSJiri Olsa 1053ce311afSJiri Olsa$(LIBPERF_A): $(LIBPERF_IN) 1063ce311afSJiri Olsa $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIBPERF_IN) 1073ce311afSJiri Olsa 1083ce311afSJiri Olsa$(LIBPERF_SO): $(LIBPERF_IN) $(LIBAPI) 1093ce311afSJiri Olsa $(QUIET_LINK)$(CC) --shared -Wl,-soname,libperf.so \ 1103ce311afSJiri Olsa -Wl,--version-script=$(VERSION_SCRIPT) $^ -o $@ 1113ce311afSJiri Olsa @ln -sf $(@F) $(OUTPUT)libperf.so 1123ce311afSJiri Olsa @ln -sf $(@F) $(OUTPUT)libperf.so.$(LIBPERF_VERSION) 1133ce311afSJiri Olsa 1143ce311afSJiri Olsa 1153ce311afSJiri Olsalibs: $(LIBPERF_A) $(LIBPERF_SO) $(LIBPERF_PC) 1163ce311afSJiri Olsa 1173ce311afSJiri Olsaall: fixdep 1183ce311afSJiri Olsa $(Q)$(MAKE) libs 1193ce311afSJiri Olsa 1203ce311afSJiri Olsaclean: $(LIBAPI)-clean 1213ce311afSJiri Olsa $(call QUIET_CLEAN, libperf) $(RM) $(LIBPERF_A) \ 1223d970601SJiri Olsa *.o *~ *.a *.so *.so.$(VERSION) *.so.$(LIBPERF_VERSION) .*.d .*.cmd tests/*.o LIBPERF-CFLAGS $(LIBPERF_PC) \ 123129bb23aSLeo Yan $(TESTS_STATIC) $(TESTS_SHARED) 1243ce311afSJiri Olsa 1253d970601SJiri OlsaTESTS_IN = tests-in.o 1263d970601SJiri Olsa 1273d970601SJiri OlsaTESTS_STATIC = $(OUTPUT)tests-static 1283d970601SJiri OlsaTESTS_SHARED = $(OUTPUT)tests-shared 1293d970601SJiri Olsa 1303d970601SJiri Olsa$(TESTS_IN): FORCE 1313d970601SJiri Olsa $(Q)$(MAKE) $(build)=tests 1323d970601SJiri Olsa 1333d970601SJiri Olsa$(TESTS_STATIC): $(TESTS_IN) $(LIBPERF_A) $(LIBAPI) 1343d970601SJiri Olsa $(QUIET_LINK)$(CC) -o $@ $^ 1353d970601SJiri Olsa 1363d970601SJiri Olsa$(TESTS_SHARED): $(TESTS_IN) $(LIBAPI) 1375c816641SMasahiro Yamada $(QUIET_LINK)$(CC) -o $@ -L$(or $(OUTPUT),.) $^ -lperf 1383d970601SJiri Olsa 1393d970601SJiri Olsamake-tests: libs $(TESTS_SHARED) $(TESTS_STATIC) 1403d970601SJiri Olsa 1413d970601SJiri Olsatests: make-tests 1423d970601SJiri Olsa @echo "running static:" 1433d970601SJiri Olsa @./$(TESTS_STATIC) $(TEST_ARGS) 1443d970601SJiri Olsa @echo "running dynamic:" 1453d970601SJiri Olsa @LD_LIBRARY_PATH=. ./$(TESTS_SHARED) $(TEST_ARGS) 1463ce311afSJiri Olsa 1473ce311afSJiri Olsa$(LIBPERF_PC): 1483ce311afSJiri Olsa $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ 1493ce311afSJiri Olsa -e "s|@LIBDIR@|$(libdir_SQ)|" \ 1503ce311afSJiri Olsa -e "s|@VERSION@|$(VERSION)|" \ 1513ce311afSJiri Olsa < libperf.pc.template > $@ 1523ce311afSJiri Olsa 1533ce311afSJiri Olsadefine do_install_mkdir 1543ce311afSJiri Olsa if [ ! -d '$(DESTDIR_SQ)$1' ]; then \ 1553ce311afSJiri Olsa $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \ 1563ce311afSJiri Olsa fi 1573ce311afSJiri Olsaendef 1583ce311afSJiri Olsa 1593ce311afSJiri Olsadefine do_install 16047e02b94SIan Rogers if [ ! -d '$2' ]; then \ 16147e02b94SIan Rogers $(INSTALL) -d -m 755 '$2'; \ 1623ce311afSJiri Olsa fi; \ 16347e02b94SIan Rogers $(INSTALL) $1 $(if $3,-m $3,) '$2' 1643ce311afSJiri Olsaendef 1653ce311afSJiri Olsa 1663ce311afSJiri Olsainstall_lib: libs 1673ce311afSJiri Olsa $(call QUIET_INSTALL, $(LIBPERF_ALL)) \ 1683ce311afSJiri Olsa $(call do_install_mkdir,$(libdir_SQ)); \ 1693ce311afSJiri Olsa cp -fpR $(LIBPERF_ALL) $(DESTDIR)$(libdir_SQ) 1703ce311afSJiri Olsa 17147e02b94SIan RogersHDRS := bpf_perf.h core.h cpumap.h threadmap.h evlist.h evsel.h event.h mmap.h 172805da272SSwapnil SapkalHDRS += schedstat-v15.h schedstat-v16.h schedstat-v17.h 173da885a0eSIan RogersINTERNAL_HDRS := cpumap.h evlist.h evsel.h lib.h mmap.h rc_check.h threadmap.h xyarray.h 17447e02b94SIan Rogers 17547e02b94SIan RogersINSTALL_HDRS_PFX := $(DESTDIR)$(prefix)/include/perf 17647e02b94SIan RogersINSTALL_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(HDRS)) 17747e02b94SIan RogersINSTALL_INTERNAL_HDRS_PFX := $(DESTDIR)$(prefix)/include/internal 17847e02b94SIan RogersINSTALL_INTERNAL_HDRS := $(addprefix $(INSTALL_INTERNAL_HDRS_PFX)/, $(INTERNAL_HDRS)) 17947e02b94SIan Rogers 18047e02b94SIan Rogers$(INSTALL_HDRS): $(INSTALL_HDRS_PFX)/%.h: include/perf/%.h 18147e02b94SIan Rogers $(call QUIET_INSTALL, $@) \ 18247e02b94SIan Rogers $(call do_install,$<,$(INSTALL_HDRS_PFX)/,644) 18347e02b94SIan Rogers 18447e02b94SIan Rogers$(INSTALL_INTERNAL_HDRS): $(INSTALL_INTERNAL_HDRS_PFX)/%.h: include/internal/%.h 18547e02b94SIan Rogers $(call QUIET_INSTALL, $@) \ 18647e02b94SIan Rogers $(call do_install,$<,$(INSTALL_INTERNAL_HDRS_PFX)/,644) 18747e02b94SIan Rogers 18847e02b94SIan Rogersinstall_headers: $(INSTALL_HDRS) $(INSTALL_INTERNAL_HDRS) 18947e02b94SIan Rogers $(call QUIET_INSTALL, libperf_headers) 1903ce311afSJiri Olsa 1913ce311afSJiri Olsainstall_pkgconfig: $(LIBPERF_PC) 1923ce311afSJiri Olsa $(call QUIET_INSTALL, $(LIBPERF_PC)) \ 1934ff17c44SAlexander Gordeev $(call do_install,$(LIBPERF_PC),$(DESTDIR_SQ)$(libdir_SQ)/pkgconfig,644) 1943ce311afSJiri Olsa 19581de3bf3SJiri Olsainstall_doc: 19681de3bf3SJiri Olsa $(Q)$(MAKE) -C Documentation install-man install-html install-examples 19781de3bf3SJiri Olsa 19881de3bf3SJiri Olsainstall: install_lib install_headers install_pkgconfig install_doc 1993ce311afSJiri Olsa 2003ce311afSJiri OlsaFORCE: 2013ce311afSJiri Olsa 2023ce311afSJiri Olsa.PHONY: all install clean tests FORCE 203