xref: /aosp_15_r20/external/trace-cmd/scripts/utils.mk (revision 58e6ee5f017f6a8912852c892d18457e4bafb554)
1*58e6ee5fSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0
2*58e6ee5fSAndroid Build Coastguard Worker
3*58e6ee5fSAndroid Build Coastguard Worker# Utils
4*58e6ee5fSAndroid Build Coastguard Worker
5*58e6ee5fSAndroid Build Coastguard Workerifeq ($(BUILDGUI), 1)
6*58e6ee5fSAndroid Build Coastguard Worker  GUI		= 'GUI '
7*58e6ee5fSAndroid Build Coastguard Worker  GSPACE	=
8*58e6ee5fSAndroid Build Coastguard Workerelse
9*58e6ee5fSAndroid Build Coastguard Worker  GUI		=
10*58e6ee5fSAndroid Build Coastguard Worker  GSPACE	= "    "
11*58e6ee5fSAndroid Build Coastguard Workerendif
12*58e6ee5fSAndroid Build Coastguard Worker
13*58e6ee5fSAndroid Build Coastguard Worker GOBJ		= $(GSPACE)$(notdir $(strip $@))
14*58e6ee5fSAndroid Build Coastguard Worker
15*58e6ee5fSAndroid Build Coastguard Worker
16*58e6ee5fSAndroid Build Coastguard Workerifeq ($(VERBOSE),1)
17*58e6ee5fSAndroid Build Coastguard Worker  Q =
18*58e6ee5fSAndroid Build Coastguard Worker  S =
19*58e6ee5fSAndroid Build Coastguard Workerelse
20*58e6ee5fSAndroid Build Coastguard Worker  Q = @
21*58e6ee5fSAndroid Build Coastguard Worker  S = -s
22*58e6ee5fSAndroid Build Coastguard Workerendif
23*58e6ee5fSAndroid Build Coastguard Worker
24*58e6ee5fSAndroid Build Coastguard Worker# Use empty print_* macros if either SILENT or VERBOSE.
25*58e6ee5fSAndroid Build Coastguard Workerifeq ($(findstring 1,$(SILENT)$(VERBOSE)),1)
26*58e6ee5fSAndroid Build Coastguard Worker  print_compile =
27*58e6ee5fSAndroid Build Coastguard Worker  print_app_build =
28*58e6ee5fSAndroid Build Coastguard Worker  print_fpic_compile =
29*58e6ee5fSAndroid Build Coastguard Worker  print_shared_lib_compile =
30*58e6ee5fSAndroid Build Coastguard Worker  print_plugin_obj_compile =
31*58e6ee5fSAndroid Build Coastguard Worker  print_plugin_build =
32*58e6ee5fSAndroid Build Coastguard Worker  print_install =
33*58e6ee5fSAndroid Build Coastguard Worker  print_uninstall =
34*58e6ee5fSAndroid Build Coastguard Worker  print_update =
35*58e6ee5fSAndroid Build Coastguard Worker  print_asciidoc =
36*58e6ee5fSAndroid Build Coastguard Worker  print_xsltproc =
37*58e6ee5fSAndroid Build Coastguard Worker  print_install =
38*58e6ee5fSAndroid Build Coastguard Worker  hide_xsltproc_output =
39*58e6ee5fSAndroid Build Coastguard Workerelse
40*58e6ee5fSAndroid Build Coastguard Worker  print_compile =		echo '  $(GUI)COMPILE            '$(GOBJ);
41*58e6ee5fSAndroid Build Coastguard Worker  print_app_build =		echo '  $(GUI)BUILD              '$(GOBJ);
42*58e6ee5fSAndroid Build Coastguard Worker  print_fpic_compile =		echo '  $(GUI)COMPILE FPIC       '$(GOBJ);
43*58e6ee5fSAndroid Build Coastguard Worker  print_shared_lib_compile =	echo '  $(GUI)COMPILE SHARED LIB '$(GOBJ);
44*58e6ee5fSAndroid Build Coastguard Worker  print_plugin_obj_compile =	echo '  $(GUI)COMPILE PLUGIN OBJ '$(GOBJ);
45*58e6ee5fSAndroid Build Coastguard Worker  print_plugin_build =		echo '  $(GUI)BUILD PLUGIN       '$(GOBJ);
46*58e6ee5fSAndroid Build Coastguard Worker  print_static_lib_build =	echo '  $(GUI)BUILD STATIC LIB   '$(GOBJ);
47*58e6ee5fSAndroid Build Coastguard Worker  print_install =		echo '  $(GUI)INSTALL     '$(GSPACE)$1'	to	$(DESTDIR_SQ)$2';
48*58e6ee5fSAndroid Build Coastguard Worker  print_update =		echo '  $(GUI)UPDATE             '$(GOBJ);
49*58e6ee5fSAndroid Build Coastguard Worker  print_uninstall =		echo '  $(GUI)UNINSTALLING $(DESTDIR_SQ)$1';
50*58e6ee5fSAndroid Build Coastguard Worker  print_asciidoc =		echo '  ASCIIDOC            '`basename $@`;
51*58e6ee5fSAndroid Build Coastguard Worker  print_xsltproc =		echo '  XSLTPROC            '`basename $@`;
52*58e6ee5fSAndroid Build Coastguard Worker  print_install =		echo '  INSTALL             '`basename $1`'	to	$(DESTDIR_SQ)'$2;
53*58e6ee5fSAndroid Build Coastguard Worker  hide_xsltproc_output = 2> /dev/null
54*58e6ee5fSAndroid Build Coastguard Workerendif
55*58e6ee5fSAndroid Build Coastguard Worker
56*58e6ee5fSAndroid Build Coastguard Workerdo_fpic_compile =					\
57*58e6ee5fSAndroid Build Coastguard Worker	($(print_fpic_compile)				\
58*58e6ee5fSAndroid Build Coastguard Worker	$(CC) -c $(CPPFLAGS) $(CFLAGS) $(EXT) -fPIC $< -o $@)
59*58e6ee5fSAndroid Build Coastguard Worker
60*58e6ee5fSAndroid Build Coastguard Workerdo_compile =							\
61*58e6ee5fSAndroid Build Coastguard Worker	($(if $(GENERATE_PIC), $(do_fpic_compile),		\
62*58e6ee5fSAndroid Build Coastguard Worker	 $(print_compile)					\
63*58e6ee5fSAndroid Build Coastguard Worker	 $(CC) -c $(CPPFLAGS) $(CFLAGS) $(EXT) $< -o $@))
64*58e6ee5fSAndroid Build Coastguard Worker
65*58e6ee5fSAndroid Build Coastguard Workerdo_app_build =						\
66*58e6ee5fSAndroid Build Coastguard Worker	($(print_app_build)				\
67*58e6ee5fSAndroid Build Coastguard Worker	$(CC) $^ -rdynamic -Wl,-rpath=$(libdir) -o $@ $(LDFLAGS) $(CONFIG_LIBS) $(LIBS))
68*58e6ee5fSAndroid Build Coastguard Worker
69*58e6ee5fSAndroid Build Coastguard Workerdo_build_static_lib =				\
70*58e6ee5fSAndroid Build Coastguard Worker	($(print_static_lib_build)		\
71*58e6ee5fSAndroid Build Coastguard Worker	$(RM) $@;  $(AR) rcs $@ $^)
72*58e6ee5fSAndroid Build Coastguard Worker
73*58e6ee5fSAndroid Build Coastguard Workerdo_compile_shared_library =			\
74*58e6ee5fSAndroid Build Coastguard Worker	($(print_shared_lib_compile)		\
75*58e6ee5fSAndroid Build Coastguard Worker	$(CC) --shared $^ '-Wl,-soname,$(1),-rpath=$$ORIGIN' -o $@ $(LDFLAGS) $(LIBS))
76*58e6ee5fSAndroid Build Coastguard Worker
77*58e6ee5fSAndroid Build Coastguard Workerdo_compile_plugin_obj =				\
78*58e6ee5fSAndroid Build Coastguard Worker	($(print_plugin_obj_compile)		\
79*58e6ee5fSAndroid Build Coastguard Worker	$(CC) -c $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ $<)
80*58e6ee5fSAndroid Build Coastguard Worker
81*58e6ee5fSAndroid Build Coastguard Workerdo_plugin_build =				\
82*58e6ee5fSAndroid Build Coastguard Worker	($(print_plugin_build)			\
83*58e6ee5fSAndroid Build Coastguard Worker	$(CC) $(CFLAGS) $(LDFLAGS) -shared -nostartfiles -o $@ $<)
84*58e6ee5fSAndroid Build Coastguard Worker
85*58e6ee5fSAndroid Build Coastguard Workerdo_compile_python_plugin_obj =			\
86*58e6ee5fSAndroid Build Coastguard Worker	($(print_plugin_obj_compile)		\
87*58e6ee5fSAndroid Build Coastguard Worker	$(CC) -c $(CPPFLAGS) $(CFLAGS) $(PYTHON_DIR_SQ) $(PYTHON_INCLUDES) -fPIC -o $@ $<)
88*58e6ee5fSAndroid Build Coastguard Worker
89*58e6ee5fSAndroid Build Coastguard Workerdo_python_plugin_build =			\
90*58e6ee5fSAndroid Build Coastguard Worker	($(print_plugin_build)			\
91*58e6ee5fSAndroid Build Coastguard Worker	$(CC) $< -shared $(LDFLAGS) $(PYTHON_LDFLAGS) -o $@)
92*58e6ee5fSAndroid Build Coastguard Worker
93*58e6ee5fSAndroid Build Coastguard Workerdefine make_version.h
94*58e6ee5fSAndroid Build Coastguard Worker	(echo '/* This file is automatically generated. Do not modify. */';		\
95*58e6ee5fSAndroid Build Coastguard Worker	echo \#define VERSION_CODE $(shell						\
96*58e6ee5fSAndroid Build Coastguard Worker	expr $(VERSION) \* 256 + $(PATCHLEVEL));					\
97*58e6ee5fSAndroid Build Coastguard Worker	echo '#define EXTRAVERSION ' $(EXTRAVERSION);					\
98*58e6ee5fSAndroid Build Coastguard Worker	echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"';	\
99*58e6ee5fSAndroid Build Coastguard Worker	echo '#define FILE_VERSION '$(FILE_VERSION);					\
100*58e6ee5fSAndroid Build Coastguard Worker	if [ -d $(src)/.git ]; then							\
101*58e6ee5fSAndroid Build Coastguard Worker	  d=`git diff`;									\
102*58e6ee5fSAndroid Build Coastguard Worker	  x="";										\
103*58e6ee5fSAndroid Build Coastguard Worker	  if [ ! -z "$$d" ]; then x="+"; fi;						\
104*58e6ee5fSAndroid Build Coastguard Worker	  echo '#define VERSION_GIT "'$(shell 						\
105*58e6ee5fSAndroid Build Coastguard Worker		git log -1 --pretty=format:"%H" 2>/dev/null)$$x'"';			\
106*58e6ee5fSAndroid Build Coastguard Worker	else										\
107*58e6ee5fSAndroid Build Coastguard Worker	  echo '#define VERSION_GIT "not-a-git-repo"';					\
108*58e6ee5fSAndroid Build Coastguard Worker	fi										\
109*58e6ee5fSAndroid Build Coastguard Worker	) > $1
110*58e6ee5fSAndroid Build Coastguard Workerendef
111*58e6ee5fSAndroid Build Coastguard Worker
112*58e6ee5fSAndroid Build Coastguard Workerdefine update_version.h
113*58e6ee5fSAndroid Build Coastguard Worker	($(call make_version.h, $@.tmp);				\
114*58e6ee5fSAndroid Build Coastguard Worker	if [ -r $@ ] && cmp -s $@ $@.tmp; then				\
115*58e6ee5fSAndroid Build Coastguard Worker		rm -f $@.tmp;						\
116*58e6ee5fSAndroid Build Coastguard Worker	else								\
117*58e6ee5fSAndroid Build Coastguard Worker		$(print_update)						\
118*58e6ee5fSAndroid Build Coastguard Worker		mv -f $@.tmp $@;					\
119*58e6ee5fSAndroid Build Coastguard Worker	fi);
120*58e6ee5fSAndroid Build Coastguard Workerendef
121*58e6ee5fSAndroid Build Coastguard Worker
122*58e6ee5fSAndroid Build Coastguard Workerdefine update_dir
123*58e6ee5fSAndroid Build Coastguard Worker	(echo $1 > $@.tmp;	\
124*58e6ee5fSAndroid Build Coastguard Worker	if [ -r $@ ] && cmp -s $@ $@.tmp; then				\
125*58e6ee5fSAndroid Build Coastguard Worker		rm -f $@.tmp;						\
126*58e6ee5fSAndroid Build Coastguard Worker	else								\
127*58e6ee5fSAndroid Build Coastguard Worker		$(print_update)						\
128*58e6ee5fSAndroid Build Coastguard Worker		mv -f $@.tmp $@;					\
129*58e6ee5fSAndroid Build Coastguard Worker	fi);
130*58e6ee5fSAndroid Build Coastguard Workerendef
131*58e6ee5fSAndroid Build Coastguard Worker
132*58e6ee5fSAndroid Build Coastguard Workerdefine build_prefix
133*58e6ee5fSAndroid Build Coastguard Worker	(echo $1 > $@.tmp;	\
134*58e6ee5fSAndroid Build Coastguard Worker	if [ -r $@ ] && cmp -s $@ $@.tmp; then				\
135*58e6ee5fSAndroid Build Coastguard Worker		rm -f $@.tmp;						\
136*58e6ee5fSAndroid Build Coastguard Worker	else								\
137*58e6ee5fSAndroid Build Coastguard Worker		$(print_update)						\
138*58e6ee5fSAndroid Build Coastguard Worker		mv -f $@.tmp $@;					\
139*58e6ee5fSAndroid Build Coastguard Worker	fi);
140*58e6ee5fSAndroid Build Coastguard Workerendef
141*58e6ee5fSAndroid Build Coastguard Worker
142*58e6ee5fSAndroid Build Coastguard Workerdefine do_install
143*58e6ee5fSAndroid Build Coastguard Worker	$(print_install)				\
144*58e6ee5fSAndroid Build Coastguard Worker	if [ ! -d '$(DESTDIR_SQ)$2' ]; then		\
145*58e6ee5fSAndroid Build Coastguard Worker		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2';	\
146*58e6ee5fSAndroid Build Coastguard Worker	fi;						\
147*58e6ee5fSAndroid Build Coastguard Worker	$(INSTALL) $(if $3,-m $3,) $1 '$(DESTDIR_SQ)$2'
148*58e6ee5fSAndroid Build Coastguard Workerendef
149*58e6ee5fSAndroid Build Coastguard Worker
150*58e6ee5fSAndroid Build Coastguard Workerdefine do_install_data
151*58e6ee5fSAndroid Build Coastguard Worker	$(print_install)				\
152*58e6ee5fSAndroid Build Coastguard Worker	if [ ! -d '$(DESTDIR_SQ)$2' ]; then		\
153*58e6ee5fSAndroid Build Coastguard Worker		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2';	\
154*58e6ee5fSAndroid Build Coastguard Worker	fi;						\
155*58e6ee5fSAndroid Build Coastguard Worker	$(INSTALL) -m 644 $1 '$(DESTDIR_SQ)$2'
156*58e6ee5fSAndroid Build Coastguard Workerendef
157*58e6ee5fSAndroid Build Coastguard Worker
158*58e6ee5fSAndroid Build Coastguard Workerdefine do_install_pkgconfig_file
159*58e6ee5fSAndroid Build Coastguard Worker	if [ -n "${pkgconfig_dir}" ]; then 					\
160*58e6ee5fSAndroid Build Coastguard Worker		$(call do_install,$(PKG_CONFIG_FILE),$(pkgconfig_dir),644); 	\
161*58e6ee5fSAndroid Build Coastguard Worker	else 									\
162*58e6ee5fSAndroid Build Coastguard Worker		(echo Failed to locate pkg-config directory) 1>&2;		\
163*58e6ee5fSAndroid Build Coastguard Worker	fi
164*58e6ee5fSAndroid Build Coastguard Workerendef
165*58e6ee5fSAndroid Build Coastguard Worker
166*58e6ee5fSAndroid Build Coastguard Workerdefine do_make_pkgconfig_file
167*58e6ee5fSAndroid Build Coastguard Worker	$(print_app_build)
168*58e6ee5fSAndroid Build Coastguard Worker	$(Q)cp -f $(srctree)/${PKG_CONFIG_SOURCE_FILE}.template ${PKG_CONFIG_FILE};	\
169*58e6ee5fSAndroid Build Coastguard Worker	sed -i "s|INSTALL_PREFIX|${1}|g" ${PKG_CONFIG_FILE}; 		\
170*58e6ee5fSAndroid Build Coastguard Worker	sed -i "s|LIB_VERSION|${LIBTRACECMD_VERSION}|g" ${PKG_CONFIG_FILE}; \
171*58e6ee5fSAndroid Build Coastguard Worker	sed -i "s|LIB_DIR|$(libdir)|g" ${PKG_CONFIG_FILE}; \
172*58e6ee5fSAndroid Build Coastguard Worker	sed -i "s|LIBTRACEFS_MIN_VERSION|$(LIBTRACEFS_MIN_VERSION)|g" ${PKG_CONFIG_FILE}; \
173*58e6ee5fSAndroid Build Coastguard Worker	sed -i "s|HEADER_DIR|$(includedir)/trace-cmd|g" ${PKG_CONFIG_FILE};
174*58e6ee5fSAndroid Build Coastguard Workerendef
175*58e6ee5fSAndroid Build Coastguard Worker
176*58e6ee5fSAndroid Build Coastguard Workerdo_asciidoc_build =				\
177*58e6ee5fSAndroid Build Coastguard Worker	($(print_asciidoc)			\
178*58e6ee5fSAndroid Build Coastguard Worker	 asciidoc -d manpage -b docbook -o $@ $<)
179*58e6ee5fSAndroid Build Coastguard Worker
180*58e6ee5fSAndroid Build Coastguard Workerdo_xsltproc_build =				\
181*58e6ee5fSAndroid Build Coastguard Worker	($(print_xsltproc)			\
182*58e6ee5fSAndroid Build Coastguard Worker	 xsltproc --nonet -o $@ ${MANPAGE_DOCBOOK_XSL} $< $(hide_xsltproc_output))
183*58e6ee5fSAndroid Build Coastguard Worker
184*58e6ee5fSAndroid Build Coastguard Worker#
185*58e6ee5fSAndroid Build Coastguard Worker# asciidoc requires a synopsis, but file format man pages (5) do
186*58e6ee5fSAndroid Build Coastguard Worker# not require them. This removes it from the file in the final step.
187*58e6ee5fSAndroid Build Coastguard Workerdefine remove_synopsis
188*58e6ee5fSAndroid Build Coastguard Worker	(sed -e '/^\.SH "SYNOPSIS"/,/ignore/d' $1 > $1.tmp;\
189*58e6ee5fSAndroid Build Coastguard Worker	 mv $1.tmp $1)
190*58e6ee5fSAndroid Build Coastguard Workerendef
191*58e6ee5fSAndroid Build Coastguard Worker
192*58e6ee5fSAndroid Build Coastguard Workerdefine do_install_docs
193*58e6ee5fSAndroid Build Coastguard Worker	$(print_install)				\
194*58e6ee5fSAndroid Build Coastguard Worker	if [ ! -d '$(DESTDIR_SQ)$2' ]; then		\
195*58e6ee5fSAndroid Build Coastguard Worker		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2';	\
196*58e6ee5fSAndroid Build Coastguard Worker	fi;						\
197*58e6ee5fSAndroid Build Coastguard Worker	$(INSTALL) -m 644 $1 '$(DESTDIR_SQ)$2'
198*58e6ee5fSAndroid Build Coastguard Workerendef
199*58e6ee5fSAndroid Build Coastguard Worker
200*58e6ee5fSAndroid Build Coastguard Workerifneq ($(findstring $(MAKEFLAGS),s),s)
201*58e6ee5fSAndroid Build Coastguard Workerifneq ($(V),1)
202*58e6ee5fSAndroid Build Coastguard Worker	QUIET_ASCIIDOC	= @echo '  ASCIIDOC  '$@;
203*58e6ee5fSAndroid Build Coastguard Worker	QUIET_XMLTO	= @echo '  XMLTO    '$@;
204*58e6ee5fSAndroid Build Coastguard Worker	QUIET_SUBDIR0	= +@subdir=
205*58e6ee5fSAndroid Build Coastguard Worker	QUIET_SUBDIR1	= ;$(NO_SUBDIR) \
206*58e6ee5fSAndroid Build Coastguard Worker			   echo '  SUBDIR   ' $$subdir; \
207*58e6ee5fSAndroid Build Coastguard Worker			  $(MAKE) $(PRINT_DIR) -C $$subdir
208*58e6ee5fSAndroid Build Coastguard Worker	export V
209*58e6ee5fSAndroid Build Coastguard Workerendif
210*58e6ee5fSAndroid Build Coastguard Workerendif
211