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