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 = \ 45*8988c4b9SJames Clark-I$(OUTPUT)arch/$(SRCARCH)/include/generated/uapi \ 463ce311afSJiri Olsa-I$(srctree)/tools/lib/perf/include \ 473ce311afSJiri Olsa-I$(srctree)/tools/lib/ \ 483ce311afSJiri Olsa-I$(srctree)/tools/include \ 493ce311afSJiri Olsa-I$(srctree)/tools/arch/$(SRCARCH)/include/ \ 503ce311afSJiri Olsa-I$(srctree)/tools/arch/$(SRCARCH)/include/uapi \ 513ce311afSJiri Olsa-I$(srctree)/tools/include/uapi 523ce311afSJiri Olsa 533ce311afSJiri Olsa# Append required CFLAGS 54f5b07010SJames Clarkoverride CFLAGS += -g -Werror -Wall 553ce311afSJiri Olsaoverride CFLAGS += -fPIC 563ce311afSJiri Olsaoverride CFLAGS += $(INCLUDES) 573ce311afSJiri Olsaoverride CFLAGS += -fvisibility=hidden 58f5b07010SJames Clarkoverride CFLAGS += $(EXTRA_WARNINGS) 59f5b07010SJames Clarkoverride CFLAGS += $(EXTRA_CFLAGS) 603ce311afSJiri Olsa 613ce311afSJiri Olsaall: 623ce311afSJiri Olsa 633ce311afSJiri Olsaexport srctree OUTPUT CC LD CFLAGS V 643ce311afSJiri Olsaexport DESTDIR DESTDIR_SQ 653ce311afSJiri Olsa 663ce311afSJiri Olsainclude $(srctree)/tools/build/Makefile.include 673ce311afSJiri Olsa 683ce311afSJiri OlsaVERSION_SCRIPT := libperf.map 693ce311afSJiri Olsa 703ce311afSJiri OlsaPATCHLEVEL = $(LIBPERF_PATCHLEVEL) 713ce311afSJiri OlsaEXTRAVERSION = $(LIBPERF_EXTRAVERSION) 723ce311afSJiri OlsaVERSION = $(LIBPERF_VERSION).$(LIBPERF_PATCHLEVEL).$(LIBPERF_EXTRAVERSION) 733ce311afSJiri Olsa 743ce311afSJiri OlsaLIBPERF_SO := $(OUTPUT)libperf.so.$(VERSION) 753ce311afSJiri OlsaLIBPERF_A := $(OUTPUT)libperf.a 763ce311afSJiri OlsaLIBPERF_IN := $(OUTPUT)libperf-in.o 773ce311afSJiri OlsaLIBPERF_PC := $(OUTPUT)libperf.pc 783ce311afSJiri Olsa 793ce311afSJiri OlsaLIBPERF_ALL := $(LIBPERF_A) $(OUTPUT)libperf.so* 803ce311afSJiri Olsa 813ce311afSJiri OlsaLIB_DIR := $(srctree)/tools/lib/api/ 823ce311afSJiri Olsa 833ce311afSJiri Olsaifneq ($(OUTPUT),) 843ce311afSJiri Olsaifneq ($(subdir),) 853ce311afSJiri Olsa API_PATH=$(OUTPUT)/../lib/api/ 863ce311afSJiri Olsaelse 873ce311afSJiri Olsa API_PATH=$(OUTPUT) 883ce311afSJiri Olsaendif 893ce311afSJiri Olsaelse 903ce311afSJiri Olsa API_PATH=$(LIB_DIR) 913ce311afSJiri Olsaendif 923ce311afSJiri Olsa 933ce311afSJiri OlsaLIBAPI = $(API_PATH)libapi.a 943ce311afSJiri Olsaexport LIBAPI 953ce311afSJiri Olsa 963ce311afSJiri Olsa$(LIBAPI): FORCE 973ce311afSJiri Olsa $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a 983ce311afSJiri Olsa 993ce311afSJiri Olsa$(LIBAPI)-clean: 1003ce311afSJiri Olsa $(call QUIET_CLEAN, libapi) 1013ce311afSJiri Olsa $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null 1023ce311afSJiri Olsa 103*8988c4b9SJames Clarkuapi-asm := $(OUTPUT)arch/$(SRCARCH)/include/generated/uapi/asm 104bfb713eaSJames Clarkifeq ($(SRCARCH),arm64) 105bfb713eaSJames Clark syscall-y := $(uapi-asm)/unistd_64.h 106bfb713eaSJames Clarkendif 107bfb713eaSJames Clarkuapi-asm-generic: 108bfb713eaSJames Clark $(if $(syscall-y),\ 109bfb713eaSJames Clark $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-headers obj=$(uapi-asm) \ 110bfb713eaSJames Clark generic=include/uapi/asm-generic $(syscall-y),) 111bfb713eaSJames Clark 112bfb713eaSJames Clark$(LIBPERF_IN): uapi-asm-generic FORCE 1133ce311afSJiri Olsa $(Q)$(MAKE) $(build)=libperf 1143ce311afSJiri Olsa 1153ce311afSJiri Olsa$(LIBPERF_A): $(LIBPERF_IN) 1163ce311afSJiri Olsa $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIBPERF_IN) 1173ce311afSJiri Olsa 1183ce311afSJiri Olsa$(LIBPERF_SO): $(LIBPERF_IN) $(LIBAPI) 1193ce311afSJiri Olsa $(QUIET_LINK)$(CC) --shared -Wl,-soname,libperf.so \ 1203ce311afSJiri Olsa -Wl,--version-script=$(VERSION_SCRIPT) $^ -o $@ 1213ce311afSJiri Olsa @ln -sf $(@F) $(OUTPUT)libperf.so 1223ce311afSJiri Olsa @ln -sf $(@F) $(OUTPUT)libperf.so.$(LIBPERF_VERSION) 1233ce311afSJiri Olsa 1243ce311afSJiri Olsa 1253ce311afSJiri Olsalibs: $(LIBPERF_A) $(LIBPERF_SO) $(LIBPERF_PC) 1263ce311afSJiri Olsa 1273ce311afSJiri Olsaall: fixdep 1283ce311afSJiri Olsa $(Q)$(MAKE) libs 1293ce311afSJiri Olsa 1303ce311afSJiri Olsaclean: $(LIBAPI)-clean 1313ce311afSJiri Olsa $(call QUIET_CLEAN, libperf) $(RM) $(LIBPERF_A) \ 1323d970601SJiri Olsa *.o *~ *.a *.so *.so.$(VERSION) *.so.$(LIBPERF_VERSION) .*.d .*.cmd tests/*.o LIBPERF-CFLAGS $(LIBPERF_PC) \ 133*8988c4b9SJames Clark $(TESTS_STATIC) $(TESTS_SHARED) $(syscall-y) 1343ce311afSJiri Olsa 1353d970601SJiri OlsaTESTS_IN = tests-in.o 1363d970601SJiri Olsa 1373d970601SJiri OlsaTESTS_STATIC = $(OUTPUT)tests-static 1383d970601SJiri OlsaTESTS_SHARED = $(OUTPUT)tests-shared 1393d970601SJiri Olsa 1403d970601SJiri Olsa$(TESTS_IN): FORCE 1413d970601SJiri Olsa $(Q)$(MAKE) $(build)=tests 1423d970601SJiri Olsa 1433d970601SJiri Olsa$(TESTS_STATIC): $(TESTS_IN) $(LIBPERF_A) $(LIBAPI) 1443d970601SJiri Olsa $(QUIET_LINK)$(CC) -o $@ $^ 1453d970601SJiri Olsa 1463d970601SJiri Olsa$(TESTS_SHARED): $(TESTS_IN) $(LIBAPI) 1475c816641SMasahiro Yamada $(QUIET_LINK)$(CC) -o $@ -L$(or $(OUTPUT),.) $^ -lperf 1483d970601SJiri Olsa 1493d970601SJiri Olsamake-tests: libs $(TESTS_SHARED) $(TESTS_STATIC) 1503d970601SJiri Olsa 1513d970601SJiri Olsatests: make-tests 1523d970601SJiri Olsa @echo "running static:" 1533d970601SJiri Olsa @./$(TESTS_STATIC) $(TEST_ARGS) 1543d970601SJiri Olsa @echo "running dynamic:" 1553d970601SJiri Olsa @LD_LIBRARY_PATH=. ./$(TESTS_SHARED) $(TEST_ARGS) 1563ce311afSJiri Olsa 1573ce311afSJiri Olsa$(LIBPERF_PC): 1583ce311afSJiri Olsa $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ 1593ce311afSJiri Olsa -e "s|@LIBDIR@|$(libdir_SQ)|" \ 1603ce311afSJiri Olsa -e "s|@VERSION@|$(VERSION)|" \ 1613ce311afSJiri Olsa < libperf.pc.template > $@ 1623ce311afSJiri Olsa 1633ce311afSJiri Olsadefine do_install_mkdir 1643ce311afSJiri Olsa if [ ! -d '$(DESTDIR_SQ)$1' ]; then \ 1653ce311afSJiri Olsa $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \ 1663ce311afSJiri Olsa fi 1673ce311afSJiri Olsaendef 1683ce311afSJiri Olsa 1693ce311afSJiri Olsadefine do_install 17047e02b94SIan Rogers if [ ! -d '$2' ]; then \ 17147e02b94SIan Rogers $(INSTALL) -d -m 755 '$2'; \ 1723ce311afSJiri Olsa fi; \ 17347e02b94SIan Rogers $(INSTALL) $1 $(if $3,-m $3,) '$2' 1743ce311afSJiri Olsaendef 1753ce311afSJiri Olsa 1763ce311afSJiri Olsainstall_lib: libs 1773ce311afSJiri Olsa $(call QUIET_INSTALL, $(LIBPERF_ALL)) \ 1783ce311afSJiri Olsa $(call do_install_mkdir,$(libdir_SQ)); \ 1793ce311afSJiri Olsa cp -fpR $(LIBPERF_ALL) $(DESTDIR)$(libdir_SQ) 1803ce311afSJiri Olsa 18147e02b94SIan RogersHDRS := bpf_perf.h core.h cpumap.h threadmap.h evlist.h evsel.h event.h mmap.h 182da885a0eSIan RogersINTERNAL_HDRS := cpumap.h evlist.h evsel.h lib.h mmap.h rc_check.h threadmap.h xyarray.h 18347e02b94SIan Rogers 18447e02b94SIan RogersINSTALL_HDRS_PFX := $(DESTDIR)$(prefix)/include/perf 18547e02b94SIan RogersINSTALL_HDRS := $(addprefix $(INSTALL_HDRS_PFX)/, $(HDRS)) 18647e02b94SIan RogersINSTALL_INTERNAL_HDRS_PFX := $(DESTDIR)$(prefix)/include/internal 18747e02b94SIan RogersINSTALL_INTERNAL_HDRS := $(addprefix $(INSTALL_INTERNAL_HDRS_PFX)/, $(INTERNAL_HDRS)) 18847e02b94SIan Rogers 18947e02b94SIan Rogers$(INSTALL_HDRS): $(INSTALL_HDRS_PFX)/%.h: include/perf/%.h 19047e02b94SIan Rogers $(call QUIET_INSTALL, $@) \ 19147e02b94SIan Rogers $(call do_install,$<,$(INSTALL_HDRS_PFX)/,644) 19247e02b94SIan Rogers 19347e02b94SIan Rogers$(INSTALL_INTERNAL_HDRS): $(INSTALL_INTERNAL_HDRS_PFX)/%.h: include/internal/%.h 19447e02b94SIan Rogers $(call QUIET_INSTALL, $@) \ 19547e02b94SIan Rogers $(call do_install,$<,$(INSTALL_INTERNAL_HDRS_PFX)/,644) 19647e02b94SIan Rogers 19747e02b94SIan Rogersinstall_headers: $(INSTALL_HDRS) $(INSTALL_INTERNAL_HDRS) 19847e02b94SIan Rogers $(call QUIET_INSTALL, libperf_headers) 1993ce311afSJiri Olsa 2003ce311afSJiri Olsainstall_pkgconfig: $(LIBPERF_PC) 2013ce311afSJiri Olsa $(call QUIET_INSTALL, $(LIBPERF_PC)) \ 2024ff17c44SAlexander Gordeev $(call do_install,$(LIBPERF_PC),$(DESTDIR_SQ)$(libdir_SQ)/pkgconfig,644) 2033ce311afSJiri Olsa 20481de3bf3SJiri Olsainstall_doc: 20581de3bf3SJiri Olsa $(Q)$(MAKE) -C Documentation install-man install-html install-examples 20681de3bf3SJiri Olsa 20781de3bf3SJiri Olsainstall: install_lib install_headers install_pkgconfig install_doc 2083ce311afSJiri Olsa 2093ce311afSJiri OlsaFORCE: 2103ce311afSJiri Olsa 2113ce311afSJiri Olsa.PHONY: all install clean tests FORCE 212